diff --git a/.gitattributes b/.gitattributes index d1da132..6864c5d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,2 @@ v2/examples/**/* linguist-documentation -setup.sh linguist-vendored -setup.ps1 linguist-vendored +v2/webui/**/* linguist-vendored diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 062c9da..909ceed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,6 @@ jobs: steps: - uses: actions/checkout@v4 with: - submodules: true path: go-webui - uses: maxim-lobanov/setup-xcode@v1 if: runner.os == 'macOS' @@ -37,11 +36,10 @@ jobs: mkdir $TEST_PROJECT && cd $TEST_PROJECT go mod init $TEST_PROJECT && ls -lh cp ../go-webui/examples/call_go_from_js.go ./main.go - - name: Setup WebUI library - run: | - cd $TEST_PROJECT - sh ../go-webui/setup.sh - sh ../go-webui/setup.sh # TODO: investigate why a second execution is required here. + # The WebUI C library ships inside the go-webui module (v2/webui subtree), + # so consuming the checkout is all the setup that is needed. + go mod edit -replace=github.com/webui-dev/go-webui/v2=../go-webui/v2 + go mod tidy - name: Build run: | cd $TEST_PROJECT @@ -57,8 +55,6 @@ jobs: TEST_PROJECT: 'go-webui-project' steps: - uses: actions/checkout@v4 - with: - submodules: true - uses: maxim-lobanov/setup-xcode@v1 if: runner.os == 'macOS' with: diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index fdabc07..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "v2/webui"] - path = v2/webui - url = https://github.com/webui-dev/webui.git diff --git a/README.md b/README.md index 92207f9..666bf9d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![Logo](https://raw.githubusercontent.com/webui-dev/webui-logo/main/webui_go.png) -# Go-WebUI v2.5.1 +# Go-WebUI v2.5.2 #### [Features](#features) · [Installation](#installation) · [Usage](#usage) · [Documentation](#documentation) · [WebUI](https://github.com/webui-dev/webui) @@ -48,32 +48,15 @@ > [!NOTE] > Until the next stable release it is recommended to use go-webui's latest development version. -- ### As Go module - -> [!NOTE] -> Always verify what will be run before using either of these methods. - - Run this command to get the latest `go-webui` module version, and to sync the WebUI C library that it is using. - - ```sh - go run github.com/webui-dev/go-webui/v2/sync-webui@main - ``` - - Alternatively, use the `setup.sh` or `setup.bat` script to do the same thing. - - - Windows +The WebUI C library is vendored into this repository at [`v2/webui/`](https://github.com/webui-dev/go-webui/tree/main/v2/webui) as a git subtree, so it ships with the Go module. There is no extra setup step and no submodule to initialize — a plain `go get` is enough. - ```sh - sh -c "$(curl -fsSL https://raw.githubusercontent.com/webui-dev/go-webui/main/setup.bat)" - ``` - - - Linux / macOS +- ### As Go module ```sh - sh -c "$(curl -fsSL https://raw.githubusercontent.com/webui-dev/go-webui/main/setup.sh)" + go get github.com/webui-dev/go-webui/v2@main ``` -- ### As submodule +- ### As git submodule of your project The instructions below set up go-webui in a `modules` subdirectory of a go project. @@ -92,15 +75,15 @@ ``` ```sh - git submodule update --init --filter=blob:none --recursive + git submodule update --init --filter=blob:none ``` - `replace` the path accordingly in the `g.mod` file. + `replace` the path accordingly in the `go.mod` file. ``` - require github.com/webui-dev/go-webui/v2 v2.5.1 + require github.com/webui-dev/go-webui/v2 v2.5.2 - replace github.com/webui-dev/go-webui/v2 v2.5.1 => ./modules/go-webui + replace github.com/webui-dev/go-webui/v2 v2.5.2 => ./modules/go-webui/v2 ``` - ### As git clone - for development and contribution purposes @@ -108,8 +91,15 @@ The command below retrieves go-webui as a lightweight, filtered clone. ```sh - git clone --recursive --shallow-submodules --filter=blob:none --also-filter-submodules \ - https://github.com/webui-dev/go-webui.git + git clone --filter=blob:none https://github.com/webui-dev/go-webui.git + ``` + +- ### Updating the vendored WebUI C library + + Maintainers pull the latest WebUI nightly into the subtree with: + + ```sh + git subtree pull --prefix=v2/webui https://github.com/webui-dev/webui.git nightly --squash -m "Update WebUI to nightly" ``` ## Usage diff --git a/setup.bat b/setup.bat deleted file mode 100644 index a981c0a..0000000 --- a/setup.bat +++ /dev/null @@ -1,77 +0,0 @@ -@echo off - -rem 1) Ensure the current directory has go.mod -if not exist "go.mod" ( - echo Error: failed to find go.mod file in current directory. - echo To set up the go-webui module, use this script in a module directory. - exit /b 1 -) - -rem 2) Run go commands -go mod tidy -go get github.com/webui-dev/go-webui/v2@main -go get github.com/webui-dev/webui@main >NUL 2>&1 - -rem 3) Retrieve GOPATH (use environment variable if defined, otherwise go env) -if defined GOPATH ( - set "go_path=%GOPATH%" -) else ( - for /f "delims=" %%I in ('go env GOPATH') do ( - set "go_path=%%I" - ) -) - -rem 4) Parse the first matching version lines from go.sum -rem For go-webui/v2: -set "go_webui_full_version=" -for /f "tokens=2" %%I in ('type go.sum ^| findstr /i "github.com/webui-dev/go-webui/v2"') do ( - if not defined go_webui_full_version ( - set "go_webui_full_version=%%I" - ) -) - -rem For webui: -set "webui_full_version=" -for /f "tokens=2" %%I in ('type go.sum ^| findstr /i "github.com/webui-dev/webui"') do ( - if not defined webui_full_version ( - set "webui_full_version=%%I" - ) -) - -rem 5) Construct paths based on the parsed versions -set "go_webui_path=%go_path%\pkg\mod\github.com\webui-dev\go-webui\v2@%go_webui_full_version%" -set "webui_path=%go_path%\pkg\mod\github.com\webui-dev\webui@%webui_full_version%" - -rem 6) Validate that these paths actually exist -set "has_error=false" -if not exist "%go_webui_path%\" ( - echo Failed to find go-webui in "%go_webui_path%" - set "has_error=true" -) -if not exist "%webui_path%\" ( - echo Failed to find webui in "%webui_path%" - set "has_error=true" -) - -if "%has_error%"=="true" ( - exit /b 1 -) - -rem 7) If a "webui" directory or link already exists in the go_webui_path, do nothing -if exist "%go_webui_path%\webui\" ( - exit /b 0 -) - -rem 8) Create a directory symlink for the webui folder -rem (Requires Administrator privileges or Developer Mode) -echo Creating symlink: %go_webui_path%\webui -> %webui_path% -mklink /D "%go_webui_path%\webui" "%webui_path%" -if errorlevel 1 ( - echo mklink failed. Run as Administrator if needed. - exit /b 1 -) - -rem 9) Final tidy -go mod tidy - -exit /b 0 diff --git a/setup.sh b/setup.sh deleted file mode 100644 index aa98209..0000000 --- a/setup.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -# Ensure the current directory is part of a go module. -if [ ! -f "go.mod" ]; then - echo "error: failed to find go.mod file in current directory." - echo " To set up the go-webui module, use it in a module directory." - exit 1 -fi - -go mod tidy -go get github.com/webui-dev/go-webui/v2@main -go get github.com/webui-dev/webui@main > /dev/null 2>&1 - -go_path="${GOPATH:-$(go env GOPATH)}" - -go_webui_full_version=$(grep "github.com/webui-dev/go-webui/v2" go.sum | awk '{print $2}' | head -n 1) -webui_full_version=$(grep "github.com/webui-dev/webui" go.sum | awk '{print $2}' | head -n 1) - -go_webui_path="$go_path/pkg/mod/github.com/webui-dev/go-webui/v2@$go_webui_full_version" -webui_path="$go_path/pkg/mod/github.com/webui-dev/webui@$webui_full_version" - -# Validate paths. -if [ ! -d "$go_webui_path" ]; then - echo "Failed to find go-webui in '$go_webui_path'" - has_error=true -fi -if [ ! -d "$webui_path" ]; then - echo "Failed to find webui in '$webui_path'" - has_error=true -fi -if [ "$has_error" = true ]; then - exit 1 -fi - -# Exit if link already exists in the directory of the used go-webui version. -if [ -d "$go_webui_path/webui" ]; then - exit 0 -fi - -# Store original permissions. -# Not strictly necessary, yet we ensure end without changes to the original permissions. -og_perms=$(stat -c "%a" "$go_webui_path") -chmod +w "$go_webui_path" - -# Linking allows using WebUI C even in cases of multiple go-webui versions without creating bloat. -ln -s "$webui_path" "$go_webui_path/webui" - -# Restore original permissions. -chmod "$og_perms" "$go_webui_path" -go mod tidy diff --git a/v2/sync-webui/gotools.go b/v2/sync-webui/gotools.go deleted file mode 100644 index 1971f42..0000000 --- a/v2/sync-webui/gotools.go +++ /dev/null @@ -1,51 +0,0 @@ -package main - -import ( - "fmt" - "io" - "os" - "os/exec" - "strings" -) - -type Gotools struct { - exe string -} - -func GetGo() *Gotools { - exe, err := exec.LookPath("go") - if err != nil { - panic(fmt.Errorf("failed to find go executable on PATH: %w", err)) - } - return &Gotools{ - exe: exe, - } -} - -func (gt *Gotools) Cmd(args ...string) *exec.Cmd { - cmd := exec.Command(gt.exe, args...) - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - return cmd -} - -func (gt *Gotools) CmdSilent(args ...string) *exec.Cmd { - cmd := gt.Cmd(args...) - cmd.Stdout = io.Discard - cmd.Stderr = io.Discard - return cmd -} - -func (gt *Gotools) Gopath() (string, error) { - gopath, ok := os.LookupEnv("GOPATH") - if ok { - return gopath, nil - } - output, err := gt.Cmd("env", "GOPATH").Output() - if err != nil { - return "", fmt.Errorf("failed to check GOPATH from go tools: %w", err) - } - gopath = strings.TrimSpace(string(output)) - return gopath, nil -} diff --git a/v2/sync-webui/main.go b/v2/sync-webui/main.go deleted file mode 100644 index 9c75945..0000000 --- a/v2/sync-webui/main.go +++ /dev/null @@ -1,112 +0,0 @@ -package main - -import ( - "errors" - "fmt" - "os" - "path/filepath" - "runtime" -) - -const ( - goWebuiRepo = "github.com/webui-dev/go-webui/v2" - webuiRepo = "github.com/webui-dev/webui" -) - -func goWebuiVersion(version string) string { - return fmt.Sprintf("%s@%s", goWebuiRepo, version) -} - -func webuiVersion(version string) string { - return fmt.Sprintf("%s@%s", webuiRepo, version) -} - -func main() { - // Ensure the current directory is part of a go module. - if !fileExists("go.mod") { - errExit(`error: failed to find go.mod file in current directory. - To set up the go-webui module, use this script in a module directory.`) - } - goTools := GetGo() - // Run go commands - iferrExit(goTools.Cmd("mod", "tidy").Run()) - iferrExit(goTools.Cmd("get", goWebuiVersion("main")).Run()) - iferrExit(goTools.CmdSilent("get", webuiVersion("main")).Run()) - - // Retrieve GOPATH (use environment variable if defined, otherwise go env) - goPath, err := goTools.Gopath() - iferrExit(err) - - // Parse the first matching version lines from go.sum - // For go-webui/v2: - goWebuiFullVersion := field(headN1(grep(goWebuiRepo, "go.sum")), 2) - // For webui: - webuiFullVersion := field(headN1(grep(webuiRepo, "go.sum")), 2) - - // Construct paths based on the parsed versions - goWebuiPath := filepath.Join(goPath, "pkg", "mod", goWebuiVersion(goWebuiFullVersion)) - webuiPath := filepath.Join(goPath, "pkg", "mod", webuiVersion(webuiFullVersion)) - - // Validate that these paths actually exist - iferrExit(validatePaths(goWebuiPath, webuiPath)) - linkName := filepath.Join(goWebuiPath, "webui") - // Remove the link if it already exists in the directory of the used go-webui version. - if dirExists(linkName) { - iferrExit(tempPerms(goWebuiPath, 0733, func() error { - return os.Remove(linkName) - })) - } - - // Store original permissions. - // Not strictly necessary, yet we ensure end without changes to the original permissions. - iferrExit(tempPerms(goWebuiPath, 0733, func() error { - // Linking allows using WebUI C even in cases of multiple go-webui versions without creating bloat. - if err := os.Symlink(webuiPath, linkName); err != nil { - if runtime.GOOS == "windows" { - // (Requires Administrator privileges or Developer Mode) - return fmt.Errorf("%w: mklink failed, Run as Administrator if needed", err) - } - return err - } - return nil - })) - iferrExit(goTools.Cmd("mod", "tidy").Run()) -} - -func tempPerms(path string, newPerms os.FileMode, fn func() error) error { - fi, err := os.Stat(path) - if err != nil { - return fmt.Errorf("failed to stat file '%s': %w", path, err) - } - curPerms := fi.Mode() - if err := os.Chmod(path, newPerms); err != nil { - return fmt.Errorf("failed to set temp perms for file '%s': %w", path, err) - } - defer func() { - _ = os.Chmod(path, curPerms) - }() - return fn() -} - -func validatePaths(goWebuiPath, webuiPath string) error { - var errs []error - if !dirExists(goWebuiPath) { - errs = append(errs, fmt.Errorf("failed to find go-webui in '%s'", goWebuiPath)) - } - if !dirExists(webuiPath) { - errs = append(errs, fmt.Errorf("failed to find webui in '%s'", webuiPath)) - } - return errors.Join(errs...) -} - -func iferrExit(err error) { - if err != nil { - fmt.Println(err.Error()) - os.Exit(1) - } -} - -func errExit(msg string) { - fmt.Println(msg) - os.Exit(1) -} diff --git a/v2/sync-webui/shellfuncs.go b/v2/sync-webui/shellfuncs.go deleted file mode 100644 index b4b0dd5..0000000 --- a/v2/sync-webui/shellfuncs.go +++ /dev/null @@ -1,66 +0,0 @@ -package main - -import ( - "bufio" - "os" - "strings" -) - -func fileExists(path string) bool { - fi, err := os.Stat(path) - if err != nil { - return false - } - return !fi.IsDir() -} - -func dirExists(path string) bool { - fi, err := os.Stat(path) - if err != nil { - return false - } - return fi.IsDir() -} - -func grep(text, path string) []string { - var lines []string - f, err := os.Open(path) - if err != nil { - return nil - } - defer func() { - _ = f.Close() - }() - scanner := bufio.NewScanner(f) - for scanner.Scan() { - line := scanner.Text() - if strings.Contains(line, text) { - lines = append(lines, line) - } - } - return lines -} - -func headN1(lines []string) string { - if len(lines) == 0 { - return "" - } - return lines[0] -} - -func field(line string, field int) string { - line = strings.TrimSpace(line) - fields := strings.Split(line, " ") - if len(fields) < field { - return "" - } - return fields[field-1] -} - -func getPerms(path string) (os.FileMode, error) { - fi, err := os.Stat(path) - if err != nil { - return 0, err - } - return fi.Mode(), nil -} diff --git a/v2/webui b/v2/webui deleted file mode 160000 index 94a8cfb..0000000 --- a/v2/webui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 94a8cfbad041f44c576c62d9723cc0efa846330a diff --git a/v2/webui/.github/workflows/ci.yml b/v2/webui/.github/workflows/ci.yml new file mode 100644 index 0000000..1bf92ea --- /dev/null +++ b/v2/webui/.github/workflows/ci.yml @@ -0,0 +1,54 @@ +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# Special Thanks to Turiiya (https://github.com/ttytm) + +name: CI +on: + push: + paths-ignore: ['**/*.md'] + pull_request: + branches: [main] + paths-ignore: ['**/*.md'] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name == 'main' && github.sha || github.ref }} + cancel-in-progress: true + +jobs: + windows: + uses: ./.github/workflows/windows.yml + permissions: + contents: write + + macos: + uses: ./.github/workflows/macos.yml + permissions: + contents: write + + linux: + uses: ./.github/workflows/linux.yml + permissions: + contents: write + + linux_arm: + uses: ./.github/workflows/linux_arm.yml + permissions: + contents: write + + linux_redhat: + uses: ./.github/workflows/linux_redhat.yml + permissions: + contents: write + + linux_arch: + uses: ./.github/workflows/linux_arch.yml + permissions: + contents: write + + zig: + uses: ./.github/workflows/zig.yml diff --git a/v2/webui/.github/workflows/linux.yml b/v2/webui/.github/workflows/linux.yml new file mode 100644 index 0000000..2726861 --- /dev/null +++ b/v2/webui/.github/workflows/linux.yml @@ -0,0 +1,193 @@ +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# Special Thanks to Turiiya (https://github.com/ttytm) + +name: Linux +on: + workflow_call: + +jobs: + setup: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Bundle WebUI Bridge + run: | + npm i -g esbuild + chmod +x bridge/build.sh + bridge/build.sh + - uses: actions/cache@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + + build: + needs: setup + runs-on: ubuntu-22.04 + permissions: + contents: write + strategy: + matrix: + include: + - cc: gcc + arch: x64 + - cc: clang + arch: x64 + fail-fast: false + env: + ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }} + CC: ${{ matrix.cc }} + steps: + - uses: actions/checkout@v4 + - uses: actions/cache/restore@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + fail-on-cache-miss: true + - name: Setup + run: | + if [ "$CC" == "clang" ]; then + sudo ln -s llvm-ar-14 /usr/bin/llvm-ar + sudo ln -s llvm-ranlib-14 /usr/bin/llvm-ranlib + sudo ln -s llvm-strip-14 /usr/bin/llvm-strip + fi + - name: Build Debug Target + run: make debug + - name: Build Release Target + if: ${{ !cancelled() }} + run: make + - name: Build TLS Debug Target + run: make WEBUI_USE_TLS=1 debug + - name: Build TLS Release Target + run: make WEBUI_USE_TLS=1 + - name: Build Examples + run: | + examples_base_dir=$(pwd)/examples/C + for example in $(find $examples_base_dir/* -maxdepth 0 -type d); do + echo "> $example" + cd $example || (exit_code=1 && continue) + if ! make; then + echo "Failed to build '$example'" + exit_code=1 + continue + fi + if [[ ! -e "main" || ! -e "main-dyn" ]] ; then + echo "Failed to find executable for '$example'" && find . + exit_code=1 + continue + fi + done + exit $exit_code + - name: Setup Browser + uses: browser-actions/setup-chrome@v1 + - name: Prepare Artifact + run: | + cp -r include dist + mv dist/ "$ARTIFACT" + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT }} + path: ${{ env.ARTIFACT }} + - name: Prepare Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + run: | + zip -r "$ARTIFACT.zip" "$ARTIFACT" + if [ $GITHUB_REF_TYPE == tag ]; then + echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV + else + { + echo "IS_PRERELEASE=true"; + echo "TAG=nightly"; + echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')" + echo "BODY=Generated from commit $GITHUB_SHA." + } >> $GITHUB_ENV + fi + - name: Update Nightly Tag + if: env.IS_PRERELEASE + uses: richardsimko/update-tag@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly + - name: Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + uses: ncipollo/release-action@v1 + with: + artifacts: ${{ env.ARTIFACT }}.zip + tag: ${{ env.TAG }} + body: ${{ env.BODY }} + name: ${{ env.TITLE }} + prerelease: ${{ env.IS_PRERELEASE }} + allowUpdates: true + + build-ubuntu-22: + needs: setup + runs-on: ubuntu-22.04 + permissions: + contents: write + strategy: + matrix: + include: + - cc: gcc + arch: x64 + - cc: clang + arch: x64 + fail-fast: false + env: + ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }} + steps: + - uses: actions/checkout@v4 + - uses: actions/cache/restore@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + fail-on-cache-miss: true + - name: Setup + run: | + CC="${{ matrix.cc }}" + if [ "$CC" == "clang" ]; then + sudo ln -s llvm-ar-14 /usr/bin/llvm-ar + sudo ln -s llvm-ranlib-14 /usr/bin/llvm-ranlib + sudo ln -s llvm-strip-14 /usr/bin/llvm-strip + else + sudo apt -qq install gcc-11 + CC+="-11" + fi + echo "CC=$CC" >> $GITHUB_ENV + - name: Build Debug Target + run: make debug + - name: Build Release Target + if: ${{ !cancelled() }} + run: make + - name: Build TLS Debug Target + run: make WEBUI_USE_TLS=1 debug + - name: Build TLS Release Target + run: make WEBUI_USE_TLS=1 + - name: Build Examples + run: | + examples_base_dir=$(pwd)/examples/C + for example in $(find $examples_base_dir/* -maxdepth 0 -type d); do + echo "> $example" + cd $example || (exit_code=1 && continue) + if ! make; then + echo "Failed to build '$example'" + exit_code=1 + continue + fi + if [[ ! -e "main" || ! -e "main-dyn" ]] ; then + echo "Failed to find executable for '$example'" && find . + exit_code=1 + continue + fi + done + exit $exit_code diff --git a/v2/webui/.github/workflows/linux_arch.yml b/v2/webui/.github/workflows/linux_arch.yml new file mode 100644 index 0000000..98fec8a --- /dev/null +++ b/v2/webui/.github/workflows/linux_arch.yml @@ -0,0 +1,111 @@ +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. + +name: Linux-Arch +on: + workflow_call: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - cc: gcc + arch: x64 + - cc: clang + arch: x64 + fail-fast: false + env: + ARTIFACT: webui-linux-arch-${{ matrix.cc }}-${{ matrix.arch }} + CC: ${{ matrix.cc }} + steps: + - name: Check out the repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Build Arch Linux Docker Image + run: | + docker build -t archlinux:latest - < + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + run: | + zip -r "$ARTIFACT.zip" "$ARTIFACT" + if [ $GITHUB_REF_TYPE == tag ]; then + echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV + else + { + echo "IS_PRERELEASE=true"; + echo "TAG=nightly"; + echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')" + echo "BODY=Generated from commit $GITHUB_SHA." + } >> $GITHUB_ENV + fi + + - name: Update Nightly Tag + if: env.IS_PRERELEASE + uses: richardsimko/update-tag@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly + + - name: Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + uses: ncipollo/release-action@v1 + with: + artifacts: ${{ env.ARTIFACT }}.zip + tag: ${{ env.TAG }} + body: ${{ env.BODY }} + name: ${{ env.TITLE }} + prerelease: ${{ env.IS_PRERELEASE }} + allowUpdates: true diff --git a/v2/webui/.github/workflows/linux_arm.yml b/v2/webui/.github/workflows/linux_arm.yml new file mode 100644 index 0000000..8e0a34e --- /dev/null +++ b/v2/webui/.github/workflows/linux_arm.yml @@ -0,0 +1,180 @@ +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# Special Thanks to Turiiya (https://github.com/ttytm) + +name: Linux ARM +on: + workflow_call: + +jobs: + setup: + runs-on: ubuntu-22.04-arm + steps: + - uses: actions/checkout@v4 + - name: Check CPU Architecture + run: | + ARCH=$(uname -m) + if [[ "$ARCH" != "arm"* && "$ARCH" != "aarch64" ]]; then + echo "Expected ARM-based CPU architecture. Detected: $ARCH" + exit 1 + else + echo "ARM CPU Detected: $ARCH" + fi + - name: Bundle WebUI Bridge + run: | + npm i -g esbuild + chmod +x bridge/build.sh + bridge/build.sh + - uses: actions/cache@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + + build: + needs: setup + # Same as `buildjet-32vcpu-ubuntu-2204-arm` + runs-on: ubuntu-22.04 + permissions: + contents: write + strategy: + matrix: + include: + - cc: gcc + arch: arm + - cc: gcc + arch: arm64 + - cc: clang + arch: arm + - cc: clang + arch: arm64 + fail-fast: false + env: + ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }} + steps: + - uses: actions/checkout@v4 + - uses: actions/cache/restore@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + fail-on-cache-miss: true + - name: Setup + run: | + sudo apt update + if [ "${{ matrix.cc }}" == "clang" ]; then + sudo apt install -y clang lld + fi + + CC=${{ matrix.cc }} + if [ "${{ matrix.arch }}" == "arm64" ]; then + sudo apt install -y gcc-aarch64-linux-gnu + if [ "$CC" = "clang" ]; then + CC="clang --target=aarch64-linux-gnu" + else + CC=aarch64-linux-gnu-gcc + fi + wget https://github.com/openssl/openssl/releases/download/openssl-3.3.1/openssl-3.3.1.tar.gz + tar -xzf openssl-3.3.1.tar.gz + cd openssl-3.3.1 + ./Configure linux-generic64 --prefix=/usr/aarch64-linux-gnu --cross-compile-prefix=aarch64-linux-gnu- --release -latomic + make + sudo make install + elif [ "${{ matrix.arch }}" == "arm" ]; then + sudo apt install -y gcc-arm-linux-gnueabi + if [ "$CC" = "clang" ]; then + CC="clang --target=arm-linux-gnueabi" + else + CC=arm-linux-gnueabi-gcc + fi + wget https://github.com/openssl/openssl/releases/download/openssl-3.3.1/openssl-3.3.1.tar.gz + tar -xzf openssl-3.3.1.tar.gz + cd openssl-3.3.1 + ./Configure linux-generic32 --prefix=/usr/arm-linux-gnueabi --cross-compile-prefix=arm-linux-gnueabi- --release -latomic + make + sudo make install + fi + echo "CC=$CC" >> $GITHUB_ENV + - name: Build Debug Target + run: make debug + - name: Build Release Target + if: ${{ !cancelled() }} + run: make + - name: Build TLS Debug ARM64 Target + if: matrix.arch == 'arm64' + run: make WEBUI_USE_TLS=1 debug WEBUI_TLS_INCLUDE="/usr/aarch64-linux-gnu/include" WEBUI_TLS_LIB="/usr/aarch64-linux-gnu/lib" + - name: Build TLS Debug ARM Target + if: matrix.arch == 'arm' + run: make WEBUI_USE_TLS=1 debug WEBUI_TLS_INCLUDE="/usr/arm-linux-gnueabi/include" WEBUI_TLS_LIB="/usr/arm-linux-gnueabi/lib" + - name: Build TLS Release ARM64 Target + if: matrix.arch == 'arm64' + run: make WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="/usr/aarch64-linux-gnu/include" WEBUI_TLS_LIB="/usr/aarch64-linux-gnu/lib" + - name: Build TLS Release ARM Target + if: matrix.arch == 'arm' + run: make WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="/usr/arm-linux-gnueabi/include" WEBUI_TLS_LIB="/usr/arm-linux-gnueabi/lib" + # - name: Build Examples + # if: matrix.arch == 'arm64' + # run: | + # examples_base_dir=$(pwd)/examples/C + # for example in $(find $examples_base_dir/* -maxdepth 0 -type d); do + # echo "> $example" + # cd $example || (exit_code=1 && continue) + # if ! make CC=aarch64-linux-gnu-gcc; then + # echo "Failed to build '$example'" + # exit_code=1 + # continue + # fi + # if [[ ! -e "main" || ! -e "main-dyn" ]] ; then + # echo "Failed to find executable for '$example'" && find . + # exit_code=1 + # continue + # fi + # done + # exit $exit_code + - name: Prepare Artifact + run: | + cp -r include dist + mv dist/ "$ARTIFACT" + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT }} + path: ${{ env.ARTIFACT }} + - name: Prepare Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + run: | + zip -r "$ARTIFACT.zip" "$ARTIFACT" + if [ $GITHUB_REF_TYPE == tag ]; then + echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV + else + { + echo "IS_PRERELEASE=true"; + echo "TAG=nightly"; + echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')" + echo "BODY=Generated from commit $GITHUB_SHA." + } >> $GITHUB_ENV + fi + - name: Update Nightly Tag + if: env.IS_PRERELEASE + uses: richardsimko/update-tag@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly + - name: Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + uses: ncipollo/release-action@v1 + with: + artifacts: ${{ env.ARTIFACT }}.zip + tag: ${{ env.TAG }} + body: ${{ env.BODY }} + name: ${{ env.TITLE }} + prerelease: ${{ env.IS_PRERELEASE }} + allowUpdates: true diff --git a/v2/webui/.github/workflows/linux_redhat.yml b/v2/webui/.github/workflows/linux_redhat.yml new file mode 100644 index 0000000..7cc0424 --- /dev/null +++ b/v2/webui/.github/workflows/linux_redhat.yml @@ -0,0 +1,113 @@ +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. + +name: Linux-RedHat +on: + workflow_call: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - cc: gcc + arch: x64 + - cc: clang + arch: x64 + fail-fast: false + env: + ARTIFACT: webui-linux-redhat-${{ matrix.cc }}-${{ matrix.arch }} + CC: ${{ matrix.cc }} + steps: + - name: Check out the repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Build RedHat Docker Image + run: | + docker build -t redhat:latest - < + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + run: | + zip -r "$ARTIFACT.zip" "$ARTIFACT" + if [ $GITHUB_REF_TYPE == tag ]; then + echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV + else + { + echo "IS_PRERELEASE=true"; + echo "TAG=nightly"; + echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')" + echo "BODY=Generated from commit $GITHUB_SHA." + } >> $GITHUB_ENV + fi + + - name: Update Nightly Tag + if: env.IS_PRERELEASE + uses: richardsimko/update-tag@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly + + - name: Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + uses: ncipollo/release-action@v1 + with: + artifacts: ${{ env.ARTIFACT }}.zip + tag: ${{ env.TAG }} + body: ${{ env.BODY }} + name: ${{ env.TITLE }} + prerelease: ${{ env.IS_PRERELEASE }} + allowUpdates: true diff --git a/v2/webui/.github/workflows/macos.yml b/v2/webui/.github/workflows/macos.yml new file mode 100644 index 0000000..3365a7f --- /dev/null +++ b/v2/webui/.github/workflows/macos.yml @@ -0,0 +1,126 @@ +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# Special Thanks to Turiiya (https://github.com/ttytm) + +name: macOS +on: + workflow_call: + +jobs: + setup: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Bundle WebUI Bridge + run: | + npm i -g esbuild + chmod +x bridge/build.sh + bridge/build.sh + - uses: actions/cache@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + + build: + needs: setup + runs-on: macos-latest + permissions: + contents: write + strategy: + matrix: + cc: [clang] + arch: [x64, arm64] + fail-fast: false + env: + ARTIFACT: webui-macos-${{ matrix.cc }}-${{ matrix.arch }} + steps: + - uses: actions/checkout@v4 + - uses: actions/cache/restore@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + fail-on-cache-miss: true + - name: Setup OpenSSL + run: | + brew list openssl@3 &>/dev/null || brew install openssl@3 + echo "WEBUI_TLS_INCLUDE=$(brew --prefix openssl@3)/include/" >> $GITHUB_ENV + echo "WEBUI_TLS_LIB=$(brew --prefix openssl@3)/lib/" >> $GITHUB_ENV + - name: Build Debug Target + run: make ARCH_TARGET=${{ matrix.arch }} debug + - name: Build Release Target + if: ${{ !cancelled() }} + run: make ARCH_TARGET=${{ matrix.arch }} + - name: Build TLS Debug Target + if: ${{ matrix.arch != 'x64' }} + run: make ARCH_TARGET=${{ matrix.arch }} WEBUI_USE_TLS=1 debug + - name: Build TLS Release Target + if: ${{ matrix.arch != 'x64' }} + run: make ARCH_TARGET=${{ matrix.arch }} WEBUI_USE_TLS=1 + - name: Build examples + if: ${{ matrix.arch != 'x64' }} + run: | + examples_base_dir=$(pwd)/examples/C + for example in $(find $examples_base_dir/* -maxdepth 0 -type d); do + echo "> $example" + cd $example || (exit_code=1 && continue) + if ! make ARCH_TARGET=${{ matrix.arch }}; then + echo "Failed to build '$example'" + exit_code=1 + continue + fi + if [[ ! -e "main" || ! -e "main-dyn" ]] ; then + echo "Failed to find executable for '$example'" && find . + exit_code=1 + continue + fi + done + exit $exit_code + - name: Prepare Artifacts + run: | + cp -r include dist + mv dist/ "$ARTIFACT" + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT }} + path: ${{ env.ARTIFACT }} + - name: Prepare Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + run: | + zip -r "$ARTIFACT.zip" "$ARTIFACT" + if [ $GITHUB_REF_TYPE == tag ]; then + echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV + else + { + echo "IS_PRERELEASE=true"; + echo "TAG=nightly"; + echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')" + echo "BODY=Generated from commit $GITHUB_SHA." + } >> $GITHUB_ENV + fi + - name: Update Nightly Tag + if: env.IS_PRERELEASE + uses: richardsimko/update-tag@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly + - name: Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + uses: ncipollo/release-action@v1 + with: + artifacts: ${{ env.ARTIFACT }}.zip + tag: ${{ env.TAG }} + body: ${{ env.BODY }} + name: ${{ env.TITLE }} + prerelease: ${{ env.IS_PRERELEASE }} + allowUpdates: true diff --git a/v2/webui/.github/workflows/windows.yml b/v2/webui/.github/workflows/windows.yml new file mode 100644 index 0000000..d2b3ae4 --- /dev/null +++ b/v2/webui/.github/workflows/windows.yml @@ -0,0 +1,144 @@ +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# Special Thanks to Turiiya (https://github.com/ttytm) + +name: Windows +on: + workflow_call: + +jobs: + setup: + runs-on: windows-2022 + steps: + - uses: actions/checkout@v4 + - name: Bundle WebUI Bridge + run: bridge/build.bat + - uses: actions/cache@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + + build: + needs: setup + runs-on: windows-2022 + permissions: + contents: write + strategy: + matrix: + cc: ['gcc', 'msvc'] + include: + - cc: gcc + make: mingw32-make + wv2_static: '' + - cc: msvc + make: nmake + wv2_static: WEBUI_WEBVIEW_STATIC=1 + fail-fast: false + env: + ARTIFACT: webui-windows-${{ matrix.cc }}-x64 + WEBUI_TLS_INCLUDE: "C:\\Program Files\\OpenSSL\\include" + WEBUI_TLS_LIB: "C:\\Program Files\\OpenSSL\\lib\\VC\\x64\\MD" + steps: + - uses: actions/checkout@v4 + - uses: actions/cache/restore@v4 + with: + path: bridge/webui_bridge.h + key: ${{ runner.os }}-${{ github.sha }}-bridge + fail-on-cache-miss: true + - uses: microsoft/setup-msbuild@v2 + - uses: ilammy/msvc-dev-cmd@v1 + if: matrix.cc == 'msvc' + - name: Download WebView2 Static Loader + if: matrix.cc == 'msvc' + shell: pwsh + run: | + Invoke-WebRequest -Uri "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/" -OutFile "webview2.zip" + Expand-Archive -Path "webview2.zip" -DestinationPath "webview2" + if (Test-Path "webview2/build/native/x64/WebView2LoaderStatic.lib") { + Copy-Item "webview2/build/native/x64/WebView2LoaderStatic.lib" -Destination "WebView2LoaderStatic.lib" + } + - name: Build Debug Target + run: ${{ matrix.make }} ${{ matrix.wv2_static }} debug + - name: Build Release Target + if: ${{ !cancelled() }} + run: ${{ matrix.make }} ${{ matrix.wv2_static }} + - name: Build TLS Debug Target + run: ${{ matrix.make }} ${{ matrix.wv2_static }} WEBUI_USE_TLS=1 debug + - name: Build TLS Release Target + run: ${{ matrix.make }} ${{ matrix.wv2_static }} WEBUI_USE_TLS=1 + - name: Build examples + run: | + $examples_base_dir = "$(Get-Location)/examples/C/" + foreach ($example in Get-ChildItem -Path $examples_base_dir -Directory) { + Write-Host "> $example" + Set-Location -Path $example.FullName + if (!$?) { + $exit_code = 1 + continue + } + $make_output = Invoke-Expression ${{ matrix.make }} + if (!$?) { + Write-Host "Failed to build '$example': $make_output" + $exit_code = 1 + continue + } + Write-Output $make_output + if (!(Test-Path "main.exe") -or !(Test-Path "main-dyn.exe")) { + Write-Host "Failed to find executable for '$example'" + Get-ChildItem + $exit_code = 1 + continue + } + } + exit $exit_code + - name: Prepare Artifact + shell: bash + run: | + cp -r include dist + mv dist/ "$ARTIFACT" + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT }} + path: ${{ env.ARTIFACT }} + - name: Prepare Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + shell: bash + run: | + 7z a -tzip "$ARTIFACT.zip" "$ARTIFACT/*" + if [ $GITHUB_REF_TYPE == tag ]; then + echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV + else + { + echo "IS_PRERELEASE=true"; + echo "TAG=nightly"; + echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')" + echo "BODY=Generated from commit $GITHUB_SHA." + } >> $GITHUB_ENV + fi + - name: Update Nightly Tag + if: env.IS_PRERELEASE + uses: richardsimko/update-tag@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly + - name: Release + if: > + github.repository_owner == 'webui-dev' + && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) + uses: ncipollo/release-action@v1 + with: + artifacts: ${{ env.ARTIFACT }}.zip + tag: ${{ env.TAG }} + body: ${{ env.BODY }} + name: ${{ env.TITLE }} + prerelease: ${{ env.IS_PRERELEASE }} + allowUpdates: true diff --git a/v2/webui/.github/workflows/zig.yml b/v2/webui/.github/workflows/zig.yml new file mode 100644 index 0000000..c63b5a4 --- /dev/null +++ b/v2/webui/.github/workflows/zig.yml @@ -0,0 +1,36 @@ +name: Zig Build + +on: + workflow_call: + +jobs: + build: + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + version: [0.16.0] + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - uses: maxim-lobanov/setup-xcode@v1 + if: runner.os == 'macOS' + with: + xcode-version: latest-stable + - uses: actions/checkout@v4 + - name: Setup Zig + uses: mlugg/setup-zig@v2 + with: + version: ${{ matrix.version }} + - name: Build static library + run: zig build -Dverbose=debug + - name: Build dynamic library + if: ${{ !cancelled() }} + run: zig build -Ddynamic -Dverbose=debug + - name: Build static library with TLS support + if: runner.os == 'Linux' + run: zig build -Denable-tls -Dverbose=debug + - name: Build dynamic library with TLS support + if: runner.os == 'Linux' + run: zig build -Ddynamic -Denable-tls -Dverbose=debug + - name: Build examples + run: zig build examples diff --git a/v2/webui/.gitignore b/v2/webui/.gitignore new file mode 100644 index 0000000..b2b7c6c --- /dev/null +++ b/v2/webui/.gitignore @@ -0,0 +1,141 @@ +# Build +build/ +*.exe +*.ilk +*.pdb +*.exp +*.res +*.out +*.def + +# All sub-level build binaries +*/**/* +!*/**/*/ +!*/**/*.* +!*makefile +!Makefile +*/**/*.exe + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Logs +*.log +*.logs +*.tlog + +# IDE +.vscode/ +.vs/ + +# Visual Studio +.idea/ +*.recipe +*.idb +*.iobj +*.pdb + +# Visual Studio for Mac +.idea/ + +# Visual Studio cache files +ipch/ +*.dbmdl +*.dbproj.schemaview + +# Others +.builds +*~* +*.cache +*.swp +*.bak +*.tmp +*.swp +*.userosscache +*.err +*.vspscc +*.vssscc +*.pidb +*.svclog +*.scc + +# NuGet +packages/ +!packages/repositories.config +*.nupkg + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# User-specific files +*.suo +*.user +*.userprefs +*.sln.docstates + +# Python +__pycache__/ +dist/ +webui2.egg-info/ + +# Rust +target/ +*.lock + +# Broken NTFS +nul + +# Zig +zig-cache/ +zig-out/ + +# macOS +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# User-specific private settings +*.DotSettings.user + +# Compressed +*.zip +*.gz + +# CMake +**/cmake_install.cmake +**/CMakeCache.txt +**/CMakeFiles/ +CMakeUserPresets.json +.zig-cache + +# Conan +**/compressor +**/conan-* +**/cmake-build-* +**/deactivate_conanbuildenv* + +# vcpkg +vcpkg-manifest-install.log +vcpkg_installed/ +/.claude +CLAUDE.md diff --git a/v2/webui/CMakeLists.txt b/v2/webui/CMakeLists.txt new file mode 100644 index 0000000..f4378ee --- /dev/null +++ b/v2/webui/CMakeLists.txt @@ -0,0 +1,192 @@ +cmake_minimum_required(VERSION 3.18) + +# Project name +project(WebUILibrary + VERSION 2.5.0 + DESCRIPTION "Use any web browser or WebView as GUI, with your preferred language in the backend and modern web technologies in the frontend, all in a lightweight portable library." + HOMEPAGE_URL "https://webui.me/") + +# Set C & C++ standard +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) + + +# In order to be able to link with other shared libraries on Linux we may need `-fPIC`. +if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # using Clang + add_compile_options(-fPIC) +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # using GCC + add_compile_options(-fPIC) +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + # using Intel C++ +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # using Visual Studio C++ +endif() + +# Variables for library names, source files, etc. +set(WEBUI_DEFAULT_OUT_LIB_NAME "webui-2") + +# Conditional compilation for TLS +option(WEBUI_USE_TLS "Enable TLS support" OFF) +if (WEBUI_USE_TLS) + find_package(OpenSSL REQUIRED) + set(WEBUI_DEFAULT_OUT_LIB_NAME "webui-2-secure") +endif() + +# Option to build example projects +option(WEBUI_BUILD_EXAMPLES "Build WebUI examples" ON) + +if (NOT BUILD_SHARED_LIBS) + set(WEBUI_DEFAULT_OUT_LIB_NAME "${WEBUI_DEFAULT_OUT_LIB_NAME}-static") +endif() + +# Output library name +set(WEBUI_OUT_LIB_NAME "${WEBUI_DEFAULT_OUT_LIB_NAME}" CACHE STRING "Name of the output library") + +# Source files (already filled) +set(SOURCE_FILES + src/civetweb/civetweb.c + src/webui.c +) + +if (WIN32) + list(APPEND SOURCE_FILES src/webview/win32_wv2.cpp) +endif() + +if (APPLE) + # enable macos webview + enable_language(OBJC) + set(CMAKE_OBJC_STANDARD 11) + list(APPEND SOURCE_FILES src/webview/wkwebview.m) +endif() + +# Library targets +add_library(webui ${SOURCE_FILES}) +target_include_directories(webui PUBLIC $ $) +target_compile_definitions(webui PUBLIC NO_CACHING NO_CGI USE_WEBSOCKET + "$<$:WEBUI_LOG>" "$<$>:NDEBUG>") + +if (BUILD_SHARED_LIBS AND WIN32) + target_compile_definitions(webui PRIVATE CIVETWEB_DLL_EXPORTS PUBLIC CIVETWEB_DLL_IMPORTS) +endif() + +if (WEBUI_USE_TLS) + target_compile_definitions(webui PUBLIC WEBUI_TLS NO_SSL_DL OPENSSL_API_1_1) + target_link_libraries(webui PRIVATE OpenSSL::SSL OpenSSL::Crypto) +else() + target_compile_definitions(webui PUBLIC NO_SSL) +endif() + +if (WIN32) + target_link_libraries(webui PRIVATE ws2_32 user32 shell32 ole32) +elseif (APPLE) + # link required frameworks + find_library(COCOA_FRAMEWORK Cocoa REQUIRED) + find_library(WEBKIT_FRAMEWORK WebKit REQUIRED) + + target_link_libraries(webui PRIVATE ${COCOA_FRAMEWORK} ${WEBKIT_FRAMEWORK}) +endif() + +set_target_properties(webui PROPERTIES + OUTPUT_NAME ${WEBUI_OUT_LIB_NAME}) + +# Install headers +install(FILES include/webui.h include/webui.hpp DESTINATION include) + +# Install targets +install(TARGETS webui + EXPORT webui + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) + +install(EXPORT webui + FILE webui-config.cmake + NAMESPACE webui:: + DESTINATION share/webui +) + + +#////////////////////////// +# Build examples +#////////////////////////// + +if (WEBUI_BUILD_EXAMPLES) + message(STATUS "WebUI Source directory is " ${CMAKE_CURRENT_SOURCE_DIR}) + message(STATUS "WebUI Build directory is " ${CMAKE_BINARY_DIR}) + + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + + # C++ examples + add_executable(minimal_cpp ${CMAKE_CURRENT_SOURCE_DIR}/examples/C++/minimal/main.cpp) + add_executable(call_js_from_cpp ${CMAKE_CURRENT_SOURCE_DIR}/examples/C++/call_js_from_cpp/main.cpp) + add_executable(call_cpp_from_js ${CMAKE_CURRENT_SOURCE_DIR}/examples/C++/call_cpp_from_js/main.cpp) + add_executable(serve_a_folder_cpp ${CMAKE_CURRENT_SOURCE_DIR}/examples/C++/serve_a_folder/main.cpp) + add_executable(virtual_file_system_cpp ${CMAKE_CURRENT_SOURCE_DIR}/examples/C++/virtual_file_system/main.cpp) + add_executable(test_index_redirect_cpp ${CMAKE_CURRENT_SOURCE_DIR}/examples/C++/test_index_redirect/main.cpp) + + # C examples + add_executable(minimal_c ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/minimal/main.c) + add_executable(call_js_from_c ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/call_js_from_c/main.c) + add_executable(call_c_from_js ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/call_c_from_js/main.c) + add_executable(serve_a_folder_c ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/serve_a_folder/main.c) + add_executable(virtual_file_system_c ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/virtual_file_system/main.c) + add_executable(test_index_redirect_c ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/test_index_redirect/main.c) + add_executable(public_network_access ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/public_network_access/main.c) + add_executable(web_app_multi_client ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/web_app_multi_client/main.c) + add_executable(chatgpt_api ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/chatgpt_api/main.c) + add_executable(custom_web_server ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/custom_web_server/main.c) + add_executable(react ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/react/main.c) + add_executable(frameless ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/frameless/main.c) + add_executable(text_editor ${CMAKE_CURRENT_SOURCE_DIR}/examples/C/text-editor/main.c) + + target_link_libraries(minimal_cpp webui) + target_link_libraries(call_js_from_cpp webui) + target_link_libraries(call_cpp_from_js webui) + target_link_libraries(serve_a_folder_cpp webui) + target_link_libraries(virtual_file_system_cpp webui) + target_link_libraries(test_index_redirect_cpp webui) + + target_link_libraries(minimal_c webui) + target_link_libraries(call_js_from_c webui) + target_link_libraries(call_c_from_js webui) + target_link_libraries(serve_a_folder_c webui) + target_link_libraries(virtual_file_system_c webui) + target_link_libraries(test_index_redirect_c webui) + target_link_libraries(public_network_access webui) + target_link_libraries(web_app_multi_client webui) + target_link_libraries(chatgpt_api webui) + target_link_libraries(custom_web_server webui) + target_link_libraries(react webui) + target_link_libraries(frameless webui) + target_link_libraries(text_editor webui) + + if (MSVC) + set_target_properties(minimal_cpp PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(call_js_from_cpp PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(call_cpp_from_js PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(serve_a_folder_cpp PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(virtual_file_system_cpp PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(test_index_redirect_cpp PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(minimal_c PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(call_js_from_c PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(call_c_from_js PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(serve_a_folder_c PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(virtual_file_system_c PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(test_index_redirect_c PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(public_network_access PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(web_app_multi_client PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(chatgpt_api PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(custom_web_server PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(react PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(frameless PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + set_target_properties(text_editor PROPERTIES LINK_FLAGS "/SubSystem:\"Windows\"" VS_DPI_AWARE "ON") + endif() + + if (MSVC) + set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT call_js_from_cpp) + endif() +endif() diff --git a/v2/webui/GNUmakefile b/v2/webui/GNUmakefile new file mode 100644 index 0000000..be527a0 --- /dev/null +++ b/v2/webui/GNUmakefile @@ -0,0 +1,223 @@ +# WebUI Library + +# == 1. VARIABLES ============================================================= + +WEBUI_OUT_LIB_NAME = webui-2 + +# Detect the OS once +ifeq ($(OS),Windows_NT) +DETECTED_OS := Windows +else +DETECTED_OS := $(shell uname -s) +endif + +# TLS +WEBUI_USE_TLS = +WEBUI_TLS_INCLUDE ?= . +WEBUI_TLS_LIB ?= . +TLS_CFLAG = -DNO_SSL +TLS_LDFLAG_DYNAMIC = +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_OUT_LIB_NAME = webui-2-secure +TLS_CFLAG = -DWEBUI_TLS -DNO_SSL_DL -DOPENSSL_API_1_1 +ifeq ($(DETECTED_OS),Windows) +TLS_LDFLAG_DYNAMIC = -lssl -lcrypto -lbcrypt +else +TLS_LDFLAG_DYNAMIC = -lssl -lcrypto +endif +endif + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +MAKEFILE_DIR := $(dir $(MAKEFILE_PATH)) +BUILD_DIR := $(MAKEFILE_DIR)/dist + +# ARGS +CC ?= gcc +ifeq ($(CC), cc) + ifeq ($(DETECTED_OS),Darwin) + CC = clang + else + CC = gcc + endif +endif + +# Allow to add arch-target for macOS CI cross compilation +ARCH_TARGET ?= + +# BUILD FLAGS +CIVETWEB_BUILD_FLAGS := -o civetweb.o -I"$(MAKEFILE_DIR)/include/" -c "$(MAKEFILE_DIR)/src/civetweb/civetweb.c" -I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG) -w +CIVETWEB_DEFINE_FLAGS = -DNDEBUG -DNO_CACHING -DNO_CGI -DUSE_WEBSOCKET $(TLS_CFLAG) +WEBUI_BUILD_FLAGS := -o webui.o -I"$(MAKEFILE_DIR)/include/" -c "$(MAKEFILE_DIR)/src/webui.c" -I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG) +WIN32_WV2_BUILD_FLAGS := -o win32_wv2.o -I"$(MAKEFILE_DIR)/include/" -c "$(MAKEFILE_DIR)/src/webview/win32_wv2.cpp" -I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG) +WV2_STATIC_LIB := +ifeq ($(WEBUI_WEBVIEW_STATIC),1) +WIN32_WV2_BUILD_FLAGS += -DWEBUI_WEBVIEW_STATIC +WV2_STATIC_LIB := "$(MAKEFILE_DIR)/WebView2LoaderStatic.lib" +endif +WARNING_RELEASE := -w +WARNING_LOG := -Wall -Wno-unused -Wno-format-truncation + +# OUTPUT FILES +# The static output is the same for all platforms +# The dynamic output is platform dependent +LIB_STATIC_OUT := lib$(WEBUI_OUT_LIB_NAME)-static.a + +# Platform defaults and dynamic library outputs +ifeq ($(DETECTED_OS),Windows) + # Windows + SHELL := CMD + PLATFORM := windows + LIB_DYN_OUT := $(WEBUI_OUT_LIB_NAME).dll + LWS2_OPT := -lws2_32 -lole32 + WIN32_WV2_OBJ := win32_wv2.o + CPP_FLAGS := -lstdc++ -luuid + CIVETWEB_DEFINE_FLAGS += -DMUST_IMPLEMENT_CLOCK_GETTIME + CXX ?= g++ +else ifeq ($(DETECTED_OS),Darwin) + # MacOS + PLATFORM := macos + CC = clang + LIB_DYN_OUT := lib$(WEBUI_OUT_LIB_NAME).dylib + WEBKIT_OBJ := wkwebview.o + CPP_FLAGS := + WKWEBKIT_BUILD_FLAGS := -o wkwebview.o -c "$(MAKEFILE_DIR)/src/webview/wkwebview.m" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit +else + # Linux + PLATFORM := linux + LIB_DYN_OUT := lib$(WEBUI_OUT_LIB_NAME).so + CPP_FLAGS := + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif +endif + +# macOS can set `ARCH_TARGET=arm64` for cross-compilation. +ifneq ($(ARCH_TARGET),) + ifneq ($(PLATFORM),macos) + $(error ARCH_TARGET is only available on macOS) + endif + ifeq ($(ARCH_TARGET),arm64) + TARGET := -target arm64-apple-darwin -arch arm64 + else ifeq ($(ARCH_TARGET),x64) + TARGET := -target x86_64-apple-darwin -arch x86_64 + else + $(error Unsupported ARCH_TARGET: $(ARCH_TARGET). Use 'arm64' or 'x64'.) + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --debug + +release: --release + +clean: --clean-$(PLATFORM) + +# == 2.1 INTERNAL TARGETS ===================================================== + +--debug: +# Create build directory +ifeq ($(PLATFORM),windows) + @mkdir "$(BUILD_DIR)/debug" >nul 2>&1 ||: +else + @mkdir -p "$(BUILD_DIR)/debug" +endif +# Build macOS WKWebView +ifeq ($(DETECTED_OS),Darwin) + @cd "$(BUILD_DIR)/debug" \ + && echo "Build WebUI Objective-C WKWebKit ($(CC) $(TARGET) debug)..." \ + && $(CC) $(TARGET) $(WKWEBKIT_BUILD_FLAGS) -g -DWEBUI_LOG +endif +# Build Win32 WebView2 C++ +ifeq ($(DETECTED_OS),Windows) + @cd "$(BUILD_DIR)/debug" \ + && echo "Build WebUI Win32 WebView2 ($(CXX) $(TARGET) debug)..." \ + && $(CXX) $(TARGET) $(WIN32_WV2_BUILD_FLAGS) $(WARNING_LOG) -g -DWEBUI_LOG +endif +# Static with Debug info + @cd "$(BUILD_DIR)/debug" \ + && echo "Build WebUI library ($(CC) $(TARGET) debug static)..." \ + && $(CC) $(TARGET) $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) -g \ + && $(CC) $(TARGET) $(WEBUI_BUILD_FLAGS) $(WARNING_LOG) -g -DWEBUI_LOG \ + && $(LLVM_OPT)ar rc $(LIB_STATIC_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) \ + && $(LLVM_OPT)ranlib $(LIB_STATIC_OUT) +# Dynamic with Debug info + @cd "$(BUILD_DIR)/debug" \ + && echo "Build WebUI library ($(CC) $(TARGET) debug dynamic)..." \ + && $(CC) $(TARGET) $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) -g -fPIC \ + && $(CC) $(TARGET) $(WEBUI_BUILD_FLAGS) $(WARNING_LOG) -g -fPIC -DWEBUI_LOG -DWEBUI_DYNAMIC \ + && $(CC) $(TARGET) -shared -o $(LIB_DYN_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) -g -L"$(WEBUI_TLS_LIB)" $(TLS_LDFLAG_DYNAMIC) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) $(CPP_FLAGS) $(WV2_STATIC_LIB) +ifeq ($(PLATFORM),windows) + @cd "$(BUILD_DIR)/debug" && del *.o >nul 2>&1 +else + @rm -f $(BUILD_DIR)/debug/*.o +endif + @echo "Done." + +--release: +# Create build directory +ifeq ($(PLATFORM),windows) + @mkdir "$(BUILD_DIR)" >nul 2>&1 ||: +else + @mkdir -p "$(BUILD_DIR)" +endif +# Build macOS WKWebView +ifeq ($(DETECTED_OS),Darwin) + @cd "$(BUILD_DIR)" \ + && echo "Build WebUI Objective-C WKWebKit ($(CC) $(TARGET) release)..." \ + && $(CC) $(TARGET) $(WKWEBKIT_BUILD_FLAGS) -Os +endif +# Build Win32 WebView2 C++ +ifeq ($(DETECTED_OS),Windows) + @cd "$(BUILD_DIR)" \ + && echo "Build WebUI Win32 WebView2 ($(CXX) $(TARGET) release)..." \ + && $(CXX) $(TARGET) $(WIN32_WV2_BUILD_FLAGS) $(WARNING_RELEASE) -Os +endif +# Static Release + @cd "$(BUILD_DIR)" \ + && echo "Build WebUI library ($(CC) $(TARGET) release static)..." \ + && $(CC) $(TARGET) $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) -Os \ + && $(CC) $(TARGET) $(WEBUI_BUILD_FLAGS) $(WARNING_RELEASE) -Os \ + && $(LLVM_OPT)ar rc $(LIB_STATIC_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) \ + && $(LLVM_OPT)ranlib $(LIB_STATIC_OUT) +# Dynamic Release + @cd "$(BUILD_DIR)" \ + && echo "Build WebUI library ($(CC) $(TARGET) release dynamic)..." \ + && $(CC) $(TARGET) $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) -Os -fPIC \ + && $(CC) $(TARGET) $(WEBUI_BUILD_FLAGS) $(WARNING_RELEASE) -O3 -fPIC -DWEBUI_DYNAMIC \ + && $(CC) $(TARGET) -shared -o $(LIB_DYN_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) -L"$(WEBUI_TLS_LIB)" $(TLS_LDFLAG_DYNAMIC) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) $(CPP_FLAGS) $(WV2_STATIC_LIB) +# Clean +ifeq ($(PLATFORM),windows) + @strip --strip-unneeded $(BUILD_DIR)/$(LIB_DYN_OUT) + @cd "$(BUILD_DIR)" && del *.o >nul 2>&1 +else + @rm -f $(BUILD_DIR)/*.o +endif + @echo "Done." + +# PLATFROM CLEAN TARGETS + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + @- cd "$(BUILD_DIR)" \ + && rm -f *.o \ + && rm -f *.so \ + && rm -f *.dylib \ + && rm -f *.a + +--clean-windows: + @- cd "$(BUILD_DIR)" \ + && del *.a >nul 2>&1 \ + && del *.o >nul 2>&1 \ + && del *.dll >nul 2>&1 \ + && del *.obj >nul 2>&1 \ + && del *.ilk >nul 2>&1 \ + && del *.pdb >nul 2>&1 \ + && del *.lib >nul 2>&1 \ + && del *.exp >nul 2>&1 diff --git a/v2/webui/LICENSE b/v2/webui/LICENSE new file mode 100644 index 0000000..7b9eb01 --- /dev/null +++ b/v2/webui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Hassan Draga + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/v2/webui/Makefile b/v2/webui/Makefile new file mode 100644 index 0000000..7a59990 --- /dev/null +++ b/v2/webui/Makefile @@ -0,0 +1,102 @@ +# WebUI Library +# Windows - Microsoft Visual C + +# == 1. VARIABLES ============================================================= + +WEBUI_OUT_LIB_NAME = webui-2 +TLS_CFLAG = /DNO_SSL + +# TLS Enabled +!IF "$(WEBUI_USE_TLS)" == "1" + +WEBUI_OUT_LIB_NAME = webui-2-secure +TLS_CFLAG = /DWEBUI_TLS /DNO_SSL_DL /DOPENSSL_API_1_1 +TLS_LDFLAG_DYNAMIC = libssl.lib libcrypto.lib + +!IF "$(WEBUI_TLS_INCLUDE)" != "" +TLS_CFLAG = $(TLS_CFLAG) /I"$(WEBUI_TLS_INCLUDE)" +!ELSE +TLS_CFLAG = $(TLS_CFLAG) /I"." +!ENDIF + +!IF "$(WEBUI_TLS_LIB)" != "" +TLS_LDFLAG_DYNAMIC = $(TLS_LDFLAG_DYNAMIC) /LIBPATH:"$(WEBUI_TLS_LIB)" +!ELSE +TLS_LDFLAG_DYNAMIC += $(TLS_LDFLAG_DYNAMIC) /LIBPATH:"." +!ENDIF + +!ENDIF + +# Build Flags +CIVETWEB_BUILD_FLAGS = /Fo"civetweb.obj" /c /EHsc "$(MAKEDIR)/src/civetweb/civetweb.c" /I"$(MAKEDIR)/src/civetweb/" $(TLS_CFLAG) +CIVETWEB_DEFINE_FLAGS = /D NDEBUG /D NO_CACHING /D NO_CGI /D USE_WEBSOCKET +WEBUI_BUILD_FLAGS = /Fo"webui.obj" /c /EHsc "$(MAKEDIR)/src/webui.c" /I"$(MAKEDIR)/include" /I"$(MAKEDIR)/src/webview" /I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG) +WIN32_WV2_BUILD_FLAGS = /Fo"win32_wv2.obj" /c /EHsc "$(MAKEDIR)/src/webview/win32_wv2.cpp" /I"$(MAKEDIR)/include" /I"$(MAKEDIR)/src/webview" /I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG) +WV2_STATIC_LIB = +!IF "$(WEBUI_WEBVIEW_STATIC)" == "1" +WIN32_WV2_BUILD_FLAGS = $(WIN32_WV2_BUILD_FLAGS) /DWEBUI_WEBVIEW_STATIC +WV2_STATIC_LIB = "$(MAKEDIR)\WebView2LoaderStatic.lib" +!ENDIF +WARNING_RELEASE = /w +WARNING_LOG = /W4 + +# Output Commands +LIB_STATIC_OUT = /OUT:"$(WEBUI_OUT_LIB_NAME)-static.lib" "webui.obj" "civetweb.obj" "win32_wv2.obj" $(WV2_STATIC_LIB) +LIB_DYN_OUT = /DLL /OUT:"$(WEBUI_OUT_LIB_NAME).dll" "webui.obj" "civetweb.obj" "win32_wv2.obj" user32.lib Advapi32.lib Shell32.lib Ole32.lib $(TLS_LDFLAG_DYNAMIC) $(WV2_STATIC_LIB) + +# == 2.TARGETS ================================================================ + +all: release + +debug: + @- mkdir dist\debug >nul 2>&1 +# Static with Debug info + @- cd $(MAKEDIR)/dist/debug + @echo Build WebUI Library (MSVC Debug Static)... + @cl /Zl /Zi $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) + @cl /Zl /Zi $(WEBUI_BUILD_FLAGS) $(WARNING_LOG) /D WEBUI_LOG + @cl /Zl /Zi $(WIN32_WV2_BUILD_FLAGS) $(WARNING_LOG) /D WEBUI_LOG + @lib $(LIB_STATIC_OUT) +# Dynamic with Debug info + @echo Build WebUI Library (MSVC Debug Dynamic)... + @cl /Zi $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) + @cl /Zi $(WEBUI_BUILD_FLAGS) $(WARNING_LOG) /D WEBUI_LOG /D WEBUI_DYNAMIC + @cl /Zi $(WIN32_WV2_BUILD_FLAGS) $(WARNING_LOG) /D WEBUI_LOG /D WEBUI_DYNAMIC + @link $(LIB_DYN_OUT) +# Clean + @- del *.obj >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.exp >nul 2>&1 + @echo Done. + +release: + @- mkdir dist >nul 2>&1 + @- cd $(MAKEDIR)/dist +# Static Release + @echo Build WebUI Library (MSVC Release Static)... + @cl /Zl $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) + @cl /Zl $(WEBUI_BUILD_FLAGS) $(WARNING_RELEASE) + @cl /Zl $(WIN32_WV2_BUILD_FLAGS) $(WARNING_RELEASE) + @lib $(LIB_STATIC_OUT) +# Dynamic Release + @echo Build WebUI Library (MSVC Release Dynamic)... + @cl $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) + @cl $(WEBUI_BUILD_FLAGS) $(WARNING_RELEASE) /D WEBUI_DYNAMIC + @cl $(WIN32_WV2_BUILD_FLAGS) $(WARNING_RELEASE) /D WEBUI_DYNAMIC + @link $(LIB_DYN_OUT) +# Clean + @- del *.pdb >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.exp >nul 2>&1 + @- echo Done. + +clean: + @- cd $(BUILD_DIR) + @- del *.pdb >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.exp >nul 2>&1 + @- del *.dll >nul 2>&1 + @- del *.lib >nul 2>&1 + @- echo Done. diff --git a/v2/webui/README.md b/v2/webui/README.md new file mode 100644 index 0000000..7cdf131 --- /dev/null +++ b/v2/webui/README.md @@ -0,0 +1,313 @@ +
+ +![Logo](https://raw.githubusercontent.com/webui-dev/webui-logo/14fd595844f57ce751dfc751297b1468b10de77a/webui_120.svg) + +# WebUI v2.5.0-beta.4 + +[build-status]: https://img.shields.io/github/actions/workflow/status/webui-dev/webui/ci.yml?branch=main&style=for-the-badge&logo=githubactions&labelColor=414868&logoColor=C0CAF5 +[last-commit]: https://img.shields.io/github/last-commit/webui-dev/webui?style=for-the-badge&logo=github&logoColor=C0CAF5&labelColor=414868 +[release-version]: https://img.shields.io/github/v/tag/webui-dev/webui?style=for-the-badge&logo=webtrees&logoColor=C0CAF5&labelColor=414868&color=7664C6 +[license]: https://img.shields.io/github/license/webui-dev/webui?style=for-the-badge&logo=opensourcehardware&label=License&logoColor=C0CAF5&labelColor=414868&color=8c73cc + +[![][build-status]](https://github.com/webui-dev/webui/actions?query=branch%3Amain) +[![][last-commit]](https://github.com/webui-dev/webui/pulse) +[![][release-version]](https://github.com/webui-dev/webui/releases/latest) +[![][license]](https://github.com/webui-dev/webui/blob/main/LICENSE) + +> Use any web browser or WebView as GUI, with your preferred language in the backend and modern web technologies in the frontend, all in a lightweight portable library. + +![Screenshot](https://raw.githubusercontent.com/webui-dev/webui-logo/main/screenshot.png) + +![Screenshot](/examples/C/frameless/webui_frameless.png) + +![Screenshot](/examples/C/frameless/webui_frameless_linux.png) + +
+ +
+ +![GPT](https://github.com/user-attachments/assets/70455739-94c9-410e-9519-2b0318129b4a) + +### _Ask AI Any Question About the WebUI_ + +### [WebUI GPT - C/C++](https://chatgpt.com/g/g-685b01d42208819185a5a7c8ed74fa23-webui-c-c) + +
+ +## Download + +- [Latest Stable Release](https://github.com/webui-dev/webui/releases) +- [Nightly Build](https://github.com/webui-dev/webui/releases/tag/nightly) + +## Contents + +- [Features](#features) +- [Showcase](#showcase) +- [UI & The Web Technologies](#ui--the-web-technologies) +- [Documentation](#documentation) +- [Build](#build) +- [Examples](#examples) +- [Wrappers](#wrappers) +- [Supported Web Browsers](#supported-web-browsers) +- [License](#license) + +## Documentation + +- [Online Documentation](https://webui.me/docs.html#/) + +## Features + +- Portable (*Only needs a web browser at runtime, WebView is optional*) +- Single header file +- Lightweight (*Few Kb library*) & Small memory footprint +- Fast binary WebSocket communication protocol +- Multi-platform & Multi-Browser +- Uses private profile for safety +- Cross-platform WebView (*Optional*) + +## UI & The Web Technologies + +[Borislav Stanimirov](https://ibob.bg/) discusses using HTML5 in the web browser as GUI at the [C++ Conference 2019 (_YouTube_)](https://www.youtube.com/watch?v=bbbcZd4cuxg). + +
+ +![CPPCon](https://github.com/webui-dev/webui/assets/34311583/4e830caa-4ca0-44ff-825f-7cd6d94083c8) + +
+ +Web application UI design is not just about how a product looks but how it works. Using web technologies in your UI makes your product modern and professional, And a well-designed web application will help you make a solid first impression on potential customers. Great web application design also assists you in nurturing leads and increasing conversions. In addition, it makes navigating and using your web app easier for your users. + +### Why Use Web Browsers? + +Today's web browsers have everything a modern UI needs. Web browsers are very sophisticated and optimized. Therefore, using it as a GUI will be an excellent choice. While old legacy GUI lib is complex and outdated, a WebView-based app is still an option. However, a WebView needs a huge SDK to build and many dependencies to run, and it can only provide some features like a real web browser. That is why WebUI uses real web browsers to give you full features of comprehensive web technologies while keeping your software lightweight and portable. + +### How Does it Work? + +
+ +![Diagram](https://github.com/ttytm/webui/assets/34311583/dbde3573-3161-421e-925c-392a39f45ab3) + +
+ +Think of WebUI like a WebView controller, but instead of embedding the WebView controller in your program, which makes the final program big in size, and non-portable as it needs the WebView runtimes. Instead, by using WebUI, you use a tiny static/dynamic library to run any installed web browser and use it as GUI, which makes your program small, fast, and portable. **All it needs is a web browser**. + +### Runtime Dependencies Comparison + +| GUI | Windows Dependencies | Linux Dependencies | macOS Dependencies | +|-----------|---------|-------|-------| +| **Tauri** | WebView2 | GTK/WebKitGTK | WKWebView, WebKit | +| **Qt** | Qt bundles | Qt bundles, libxcb, libxkbcommon... | Qt bundles | +| **Electron** | Embedded Chromium + Node.js | Embedded Chromium + Node.js | Embedded Chromium + Node.js | +| **NW.js** | Embedded Chromium + Node.js | Embedded Chromium + Node.js | Embedded Chromium + Node.js | +| **WebUI** | **Only A Web Browser** | **Only A Web Browser** | **Only A Web Browser** | + +## Build WebUI Library + +### Windows + +| Compiler | Command | +|----------|---------| +| GCC | `mingw32-make` | +| MSVC | `nmake` | + +
+ Windows SSL/TLS (Optional) + + Download and install the OpenSSL pre-compiled binaries for Windows: + + - **MSVC**: [x64 OpenSSL v3.3.1](https://slproweb.com/download/Win64OpenSSL-3_3_1.msi) or [_32Bit_](https://slproweb.com/download/Win32OpenSSL-3_3_1.msi). See the [Wiki list](https://wiki.openssl.org/index.php/Binaries) for more info. + - **MinGW**: [Curl for Windows with OpenSSL](https://curl.se/windows/) + + ```powershell + # GCC + mingw32-make WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="C:\curl-xxx-xxx-mingw\curl-xxx-xxx-mingw\include" WEBUI_TLS_LIB="C:\curl-xxx-xxx-mingw\curl-xxx-xxx-mingw\lib" + + # MSVC + nmake WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="C:\Program Files\OpenSSL-xxx\include" WEBUI_TLS_LIB="C:\Program Files\OpenSSL-xxx\lib" + ``` +
+ +### Linux + +| Compiler | Command | +|----------|---------| +| GCC | `make` | +| Clang | `make CC=clang` | + +
+ Linux SSL/TLS (Optional) + + ```sh + sudo apt update + sudo apt install libssl-dev + + # GCC + make WEBUI_USE_TLS=1 + + # Clang + make WEBUI_USE_TLS=1 CC=clang + ``` +
+ +### macOS + +| Compiler | Command | +|----------|---------| +| Default | `make` | + +
+ macOS SSL/TLS (Optional) + + ```sh + brew install openssl + make WEBUI_USE_TLS=1 + ``` +
+ +## Minimal WebUI Application + +- **C** + + ```c + #include "webui.h" + + int main() { + size_t my_window = webui_new_window(); + webui_show(my_window, " Hello World ! "); + webui_wait(); + return 0; + } + ``` + +- **C++** + + ```cpp + #include "webui.hpp" + #include + + int main() { + webui::window my_window; + my_window.show(" C++ Hello World ! "); + webui::wait(); + return 0; + } + ``` + +- **More C/C++ Examples** + + - [C](https://github.com/webui-dev/webui/tree/main/examples/C) + - [C++](https://github.com/webui-dev/webui/tree/main/examples/C++) + +- **Other Languages** + + - [Wrappers List](#Wrappers) + +## Build WebUI Application + +### Windows + +| Compiler | Type | Command | +|----------|--------|---------| +| GCC | Static | `gcc -Os -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lws2_32 -Wall -luser32 -static -lole32 -lstdc++ -luuid -o my_application.exe` | +| GCC | Dynamic | `gcc -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" "webui-2.dll" -lws2_32 -Wall -luser32 -lole32 -o -lstdc++ -luuid my_application.exe` | +| MSVC | Static | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` | +| MSVC | Dynamic | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` | + +
+ Windows With SSL/TLS (Optional) + + | Compiler | Type | Command | + |----------|--------|---------| + | GCC | Static | `gcc -Os -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lws2_32 -Wall -luser32 -static -lole32 -lstdc++ -luuid -o my_application.exe` | + | GCC | Dynamic | `gcc -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" "webui-2-secure.dll" -lws2_32 -Wall -luser32 -lole32 -lstdc++ -luuid -o my_application.exe` | + | MSVC | Static | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2-secure-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` | + | MSVC | Dynamic | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2-secure.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` | +
+ +### Linux + +| Compiler | Type | Command | +|----------|--------|---------| +| GCC | Static | `gcc -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lpthread -lm -ldl -o my_application` | +| GCC | Dynamic | `gcc my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2 -lpthread -lm -ldl -o my_application` | +| Clang | Static | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lpthread -lm -ldl -o my_application` | +| Clang | Dynamic | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2 -lpthread -lm -ldl -o my_application` | + +
+ Linux With SSL/TLS (Optional) + + | Compiler | Type | Command | + |----------|--------|---------| + | GCC | Static | `gcc -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lpthread -lm -ldl -o my_application` | + | GCC | Dynamic | `gcc my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure -lpthread -lm -ldl -o my_application` | + | Clang | Static | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lpthread -lm -ldl -o my_application` | + | Clang | Dynamic | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure -lpthread -lm -ldl -o my_application` | +
+ +### macOS + +| Compiler | Type | Command | +|----------|--------|---------| +| Clang | Static | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lpthread -lm -framework Cocoa -framework WebKit -o my_application` | +| Clang | Dynamic | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2 -lpthread -lm -framework Cocoa -framework WebKit -o my_application` | + +
+ macOS With SSL/TLS (Optional) + + | Compiler | Type | Command | + |----------|--------|---------| + | Clang | Static | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lpthread -lm -framework Cocoa -framework WebKit -o my_application` | + | Clang | Dynamic | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure -lpthread -lm -framework Cocoa -framework WebKit -o my_application` | +
+ +## Wrappers + +| Language | v2.5.0 API | Link | +| --------------- | ---------- | ---------------------------------------------------- | +| Python | ✔️ | [Python-WebUI](https://github.com/webui-dev/python-webui) | +| Go | ✔️ | [Go-WebUI](https://github.com/webui-dev/go-webui) | +| Zig | ✔️ | [Zig-WebUI](https://github.com/webui-dev/zig-webui) | +| Nim | ✔️ | [Nim-WebUI](https://github.com/webui-dev/nim-webui) | +| V | ✔️ | [V-WebUI](https://github.com/webui-dev/v-webui) | +| Rust | ✔️ | [Rust-WebUI](https://github.com/webui-dev/rust-webui) | +| TS / JS (Deno) | ✔️ | [Deno-WebUI](https://github.com/webui-dev/deno-webui) | +| TS / JS (Bun) | ✔️ | [Bun-WebUI](https://github.com/webui-dev/bun-webui) | +| Swift | ✔️ | [Swift-WebUI](https://github.com/webui-dev/swift-webui) | +| Odin | ✔️ | [Odin-WebUI](https://github.com/webui-dev/odin-webui) | +| Pascal | ✔️ | [Pascal-WebUI](https://github.com/webui-dev/pascal-webui) | +| Purebasic | ✔️ | [Purebasic-WebUI](https://github.com/webui-dev/purebasic-webui) | +| - | - | - | +| FSharp-WebUI | ✔️ | [FSharp-WebUI](https://github.com/no-waves/FSharp-WebUI) | +| Common Lisp | _not complete_ | [cl-webui](https://github.com/garlic0x1/cl-webui) | +| Delphi | _not complete_ | [WebUI4Delphi](https://github.com/salvadordf/WebUI4Delphi) | +| C# | _not complete_ | [WebUI4CSharp](https://github.com/salvadordf/WebUI4CSharp) | +| WebUI.NET | _not complete_ | [WebUI.NET](https://github.com/Juff-Ma/WebUI.NET) | +| QuickJS | _not complete_ | [QuickUI](https://github.com/xland/QuickUI) | +| PHP | _not complete_ | [PHPWebUiComposer](https://github.com/KingBes/php-webui-composer) | + +## Supported Web Browsers + +| Browser | Windows | macOS | Linux | +| --------------- | --------------- | ------------- | --------------- | +| Mozilla Firefox | ✔️ | ✔️ | ✔️ | +| Google Chrome | ✔️ | ✔️ | ✔️ | +| Microsoft Edge | ✔️ | ✔️ | ✔️ | +| Chromium | ✔️ | ✔️ | ✔️ | +| Yandex | ✔️ | ✔️ | ✔️ | +| Brave | ✔️ | ✔️ | ✔️ | +| Vivaldi | ✔️ | ✔️ | ✔️ | +| Epic | ✔️ | ✔️ | _not available_ | +| Apple Safari | _not available_ | _coming soon_ | _not available_ | +| Opera | _coming soon_ | _coming soon_ | _coming soon_ | + +## Supported WebView (*Optional*) + +| WebView | Status | +| --------------- | --------------- | +| Windows WebView2 | ✔️ | +| Linux GTK WebView | ✔️ | +| macOS WKWebView | ✔️ | + +### License + +> Licensed under MIT License. diff --git a/v2/webui/bridge/.gitignore b/v2/webui/bridge/.gitignore new file mode 100644 index 0000000..7f8774d --- /dev/null +++ b/v2/webui/bridge/.gitignore @@ -0,0 +1,6 @@ +# Do not track Nodejs output files +node_modules/ +*.json + +# Do not track js2c.py output files +webui.js diff --git a/v2/webui/bridge/README.md b/v2/webui/bridge/README.md new file mode 100644 index 0000000..03f2512 --- /dev/null +++ b/v2/webui/bridge/README.md @@ -0,0 +1,47 @@ +# WebUI Bridge + +The WebUI Bridge connects the UI (_Web Browser_) with the backend application through WebSocket. This bridge is written in TypeScript, and it needs to be transpiled to JavaScript using [ESBuild](https://esbuild.github.io/) to produce `webui.js`, then converted to C header using the Node script `js2c.js` to generate `webui_bridge.h`. + +### Windows + +- Install [Python](https://www.python.org/downloads/) +- Install [Node.js](https://nodejs.org/en/download) +- cd `webui\bridge` +- `npm install esbuild` +- `.\node_modules\.bin\esbuild --bundle --target="chrome90,firefox90,safari15" --format=esm --tree-shaking=false --outdir=.\ .\webui.ts` +- `node js2c.js` + +### Windows PowerShell + +- cd `webui\bridge` +- `build.bat` +- If you get _running scripts is disabled on this + system_ error. Then run `Set-ExecutionPolicy RemoteSigned` to enable script execution. After done, you can roll back by running `Set-ExecutionPolicy Restricted` + +### Linux + +- Install [Python](https://www.python.org/downloads/) +- Install [Node.js](https://nodejs.org/en/download) +- cd `webui/bridge` +- `npm install esbuild` +- `./node_modules/.bin/esbuild --bundle --target="chrome90,firefox90,safari15" --format=esm --tree-shaking=false --outdir=./ ./webui.ts` +- `node js2c.js` + +### Linux Bash + +- cd `webui\bridge` +- sh `./build.sh` + +### macOS + +- Install [Python](https://www.python.org/downloads/) +- Install [Node.js](https://nodejs.org/en/download) +- cd `webui/bridge` +- `npm install esbuild` +- `./node_modules/.bin/esbuild --bundle --target="chrome90,firefox90,safari15" --format=esm --tree-shaking=false --outdir=./ ./webui.ts` +- `node js2c.js` + +### macOS Bash + +- cd `webui\bridge` +- sh `./build.sh` diff --git a/v2/webui/bridge/build.bat b/v2/webui/bridge/build.bat new file mode 100644 index 0000000..dfd08e2 --- /dev/null +++ b/v2/webui/bridge/build.bat @@ -0,0 +1,29 @@ +@echo off +SETLOCAL EnableDelayedExpansion + +REM Get current location and project root +cd %~dp0 +FOR /F "tokens=*" %%i IN ('git rev-parse --show-toplevel') DO SET project_root=%%i +cd %project_root%/bridge + +REM Check if node_modules\esbuild exists, if not, install using npm +IF NOT EXIST "%project_root%\bridge\node_modules\esbuild\" ( + where npm > NUL 2>&1 + IF %errorlevel%==0 ( + echo Installing esbuild... + npm install --prefix ./ esbuild + ) ELSE ( + echo Error: Please install NPM. + cd %cd% + exit /b + ) +) + +REM Transpile WebUI-Bridge (TS to JS) & Convert WebUI-Bridge (JS to C) +echo Transpile and bundle WebUI-Bridge from TypeScript to JavaScript... +.\node_modules\.bin\esbuild --bundle --target="chrome90,firefox90,safari15" --format=esm --tree-shaking=false --minify-syntax --minify-whitespace --outdir=. ./webui.ts & node js2c.js + +echo Done. +cd %cd% + +ENDLOCAL diff --git a/v2/webui/bridge/build.sh b/v2/webui/bridge/build.sh new file mode 100755 index 0000000..1e266d0 --- /dev/null +++ b/v2/webui/bridge/build.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# Special Thanks to Turiiya (https://github.com/ttytm) + +project_root=$(git rev-parse --show-toplevel) +cd $project_root/bridge + +echo "Transpile and bundle TS sources to webui.js" +esbuild --bundle --target="chrome90,firefox90,safari15" --format=esm --tree-shaking=false --minify-syntax --minify-whitespace --outdir=. ./webui.ts + +echo "Convert JS source to C header" +node js2c.js + +echo "Done." diff --git a/v2/webui/bridge/js2c.js b/v2/webui/bridge/js2c.js new file mode 100644 index 0000000..c21ad21 --- /dev/null +++ b/v2/webui/bridge/js2c.js @@ -0,0 +1,43 @@ +// WebUI v2.5.0-beta.4 +// https://webui.me +// https://github.com/webui-dev/webui +// Copyright (c) 2020-2026 Hassan Draga. +// Licensed under MIT License. +// All rights reserved. +// Canada. + +async function jsToCHeader(inputFilename, outputFilename) { + try { + console.log(`Converting '${inputFilename}' to '${outputFilename}'...`); + // Comment block + const comment = `// WebUI v2.5.0-beta.4\n// https://webui.me\n// https://github.com/webui-dev/webui\n// Copyright (c) 2020-2026 Hassan Draga.\n// Licensed under MIT License.\n// All rights reserved.\n// Canada.\n\n`; + // Read JS file content + const fs = require('fs').promises; + let content = await fs.readFile(inputFilename, 'utf-8'); + // Add comment to js + let newContent = comment + content; + await fs.writeFile(inputFilename, newContent); + // Convert each character in JS content to its hexadecimal value + const hexValues = [...newContent].map(char => `0x${char.charCodeAt(0).toString(16).padStart(2, '0')}`); + // Prepare the content for the C header file + let headerContent = `${comment}// --- PLEASE DO NOT EDIT THIS FILE -------\n// --- THIS FILE IS GENERATED BY JS2C.JS --\n\n`; + headerContent += `#ifndef WEBUI_BRIDGE_H\n#define WEBUI_BRIDGE_H\n`; + headerContent += `unsigned char webui_javascript_bridge[] = { `; + // Split the hexadecimal values to make the output more readable, adding a new line every 10 values + for (let i = 0; i < hexValues.length; i += 10) { + headerContent += "\n " + hexValues.slice(i, i + 10).join(', ') + ','; + } + headerContent += `\n 0x00\n};\n\n#endif // WEBUI_BRIDGE_H`; + // Write the header content to the output file + await fs.writeFile(outputFilename, headerContent); + } catch (error) { + if (error.code === 'ENOENT') { + console.error(`Error: File '${inputFilename}' not found.`); + } else { + console.error('An error occurred:', error); + } + } +} + +// Main +jsToCHeader('webui.js', 'webui_bridge.h'); diff --git a/v2/webui/bridge/utils.ts b/v2/webui/bridge/utils.ts new file mode 100644 index 0000000..f60b013 --- /dev/null +++ b/v2/webui/bridge/utils.ts @@ -0,0 +1,56 @@ +/* + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. + + File: WebUI Bridge Utils + Copyright (c) 2024 Oculi Julien. +*/ + +/** + * Allows you to automatically bind an event listener to newly added + * elements that match a specific selector within a given root element. + * Track dom update to rebind event listeners automatically. + * + * @param {HTMLElement} root - The root element to observe for changes. + * @param {string} targetSelector - Query selector matching elements that you want to bind the event listener to. + * @param {K} type - Type of event listener to bind (same as for addEventListener). + * @param listener - Event listener to bind (same as for addEventListener). + * @param {boolean | AddEventListenerOptions} [options] - Event listener options (same as for addEventListener). + * @returns the used observer to allow disconnect. + */ +export function addRefreshableEventListener( + root: HTMLElement, + targetSelector: string, + type: K, + listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => unknown, + options?: boolean | AddEventListenerOptions, +) { + function rebindListener(mutations: MutationRecord[]) { + for (const mutation of mutations) { + for (const node of mutation.addedNodes) { + if (!(node instanceof HTMLElement)) return; // Target only html elements + if (node.matches(targetSelector)) { + // Bind event on added nodes + node.addEventListener(type, listener, options); + } + for (const child of node.querySelectorAll(targetSelector)) { + if (!(child instanceof HTMLElement)) continue; //Target only html elements + child.addEventListener(type, listener, options); + } + } + } + } + + const observer = new MutationObserver(rebindListener); //Set mutation observer callback + observer.observe(root, { subtree: true, childList: true }); // Observe root element and all his children + return observer; // Allow user to stop observer for performance issues +} + +/** + * Async function constructor + */ +export const AsyncFunction = async function () {}.constructor; diff --git a/v2/webui/bridge/webui.ts b/v2/webui/bridge/webui.ts new file mode 100644 index 0000000..cffd45c --- /dev/null +++ b/v2/webui/bridge/webui.ts @@ -0,0 +1,1006 @@ +'use-strict'; // Force strict mode for transpiled + +/* + WebUI Bridge + + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. + + Converted from JavaScript to TypeScript + By Oculi Julien. Copyright (c) 2023. +*/ + +//@ts-ignore use *.ts import real extension +import { AsyncFunction, addRefreshableEventListener } from './utils.ts'; + +type DataTypes = string | number | boolean | Uint8Array; + +class WebuiBridge { + // WebUI Settings + #secure: boolean; + #token: number; + #port: number; + #log: boolean; + #winX: number; + #winY: number; + #winW: number; + #winH: number; + #customWindowDrag: boolean; + // Frameless Dragging + #enableCustomDragging: boolean = false; + #isDragging: boolean = false; + #dragArmed: boolean = false; + #currentWindowX: number = window.screenX || window.screenLeft; + #currentWindowY: number = window.screenY || window.screenTop; + // Internals + #ws: WebSocket; + #wsStayAlive: boolean = true; + #wsStayAliveTimeout: number = 500; + #wsWasConnected: boolean = false; + #TokenAccepted: boolean = false; + #closeReason: number = 0; + #closeValue: string; + #AllEvents: boolean = false; + #callPromiseID: Uint16Array = new Uint16Array(1); + #callPromiseResolve: (((data: string) => unknown) | undefined)[] = []; + #allowNavigation: boolean = true; + #sendQueue: Uint8Array[] = []; + #isSending: boolean = false; + #bindsList: string[]; + // WebUI Const + #WEBUI_SIGNATURE: number = 221; + #CMD_JS: number = 254; + #CMD_JS_QUICK: number = 253; + #CMD_CLICK: number = 252; + #CMD_NAVIGATION: number = 251; + #CMD_CLOSE: number = 250; + #CMD_CALL_FUNC: number = 249; + #CMD_SEND_RAW: number = 248; + #CMD_NEW_ID: number = 247; + #CMD_MULTI: number = 246; + #CMD_CHECK_TK: number = 245; + #CMD_WINDOW_DRAG: number = 244; + #CMD_WINDOW_RESIZED: number = 243; + #MULTI_CHUNK_SIZE: number = 65500; + #PROTOCOL_SIZE: number = 8; // Protocol header size in bytes + #PROTOCOL_SIGN: number = 0; // Protocol byte position: Signature (1 Byte) + #PROTOCOL_TOKEN: number = 1; // Protocol byte position: Token (4 Bytes) + #PROTOCOL_ID: number = 5; // Protocol byte position: ID (2 Bytes) + #PROTOCOL_CMD: number = 7; // Protocol byte position: Command (1 Byte) + #PROTOCOL_DATA: number = 8; // Protocol byte position: Data (n Byte) + #Token: Uint32Array = new Uint32Array(1); + #Ping: Boolean = true; + // Events + #eventsCallback: ((event: number) => void) | null = null; + #lastEvent: number = -1; + event = { + // TODO: Make `event` static and solve the ESBUILD `_WebuiBridge` issue. + CONNECTED: 0, + DISCONNECTED: 1, + }; + // Constructor + constructor({ + secure = false, + token = 0, + port = 0, + log = false, + winX = 0, + winY = 0, + winW = 0, + winH = 0, + customWindowDrag = false + }: { + secure: boolean; + token: number; + port: number; + log?: boolean; + winX: number; + winY: number; + winW: number; + winH: number; + customWindowDrag: boolean; + }) { + // Constructor arguments are injected by webui.c + this.#secure = secure; + this.#token = token; + this.#port = port; + this.#log = log; + this.#winX = winX; + this.#winY = winY; + this.#winW = winW; + this.#winH = winH; + this.#enableCustomDragging = customWindowDrag; + // Token + this.#Token[0] = this.#token; + // Instance + if ('webui' in globalThis) { + throw new Error('Sorry. WebUI is already defined, only one instance is allowed.'); + } + // Positioning the current window + if (this.#winX !== undefined && this.#winY !== undefined) { + // window.moveTo(this.#winX, this.#winY); + } + // Resize the current window + if (this.#winW !== undefined && this.#winH !== undefined) { + // window.resizeTo(this.#winW, this.#winH); + } + // WebSocket + if (!('WebSocket' in window)) { + this.#showWarning('WebSocket is not supported by your web browser'); + if (!this.#log) globalThis.close(); + } + // Connect to the backend application + this.#start(); + // Navigation event listener + if ('navigation' in globalThis) { + globalThis.navigation.addEventListener('navigate', (event) => { + if (!this.#allowNavigation) { + if (this.#AllEvents && (this.#wsIsConnected())) { + event.preventDefault(); + const url = new URL(event.destination.url); + if (this.#log) console.log(`WebUI -> DOM -> Navigation Event [${url.href}]`); + this.#sendEventNavigation(url.href); + } + } + }); + } else { + // Click navigation event listener + addRefreshableEventListener(document.body, 'a', 'click', (event) => { + if (!this.#allowNavigation) { + if (this.#AllEvents && (this.#wsIsConnected())) { + event.preventDefault(); + const { href } = event.target as HTMLAnchorElement; + if (this.#log) console.log(`WebUI -> DOM -> Navigation Click Event [${href}]`); + this.#sendEventNavigation(href); + } + } + }); + } + // Prevent F5 refresh + document.addEventListener('keydown', (event) => { + if (this.#log) return; // Allowed in debug mode + if (event.key === 'F5') event.preventDefault(); + }); + // Frameless Dragging + if (this.#enableCustomDragging) { + // WebUI drag app-region custom implementation for Linux (X11/Wayland) + const resolveRegion = (el: Element | null): string => { + while (el) { + const region = window.getComputedStyle(el).getPropertyValue("--webui-app-region").trim(); + if (region === "drag" || region === "no-drag") return region; + el = el.parentElement; + } + return ""; + }; + document.addEventListener("mousedown", (e) => { + this.#isDragging = false; + this.#dragArmed = (e.button === 0) && (resolveRegion(e.target as Element | null) === "drag"); + }); + document.addEventListener("mousemove", (e) => { + if (e.buttons !== 1) { + this.#dragArmed = false; + this.#isDragging = false; + return; + } + if (this.#dragArmed && !this.#isDragging) { + this.#isDragging = true; + this.#sendDrag(); + } + }); + document.addEventListener("mouseup", () => { + this.#dragArmed = false; + this.#isDragging = false; + }); + } + onbeforeunload = () => { + this.#close(); + }; + setTimeout(() => { + if (!this.#wsWasConnected) { + this.#showWarning('Failed to connect to the backend application'); + } + }, 5000); + } + // Methods + #close(reason = 0, value = '') { + this.#closeReason = reason; + this.#closeValue = value; + if (this.#wsIsConnected()) { + this.#ws.close(); + } + } + #showWarning(msg: string) { + setTimeout(() => { + if (!this.#wsIsConnected()) { + if (document.getElementById('webui-error-connection-lost')) return; + const div = document.createElement('div'); + div.id = 'webui-error-connection-lost'; + Object.assign(div.style, { + position: 'fixed', + top: '0', + left: '0', + width: '100%', + backgroundColor: 'rgb(191 125 30 / 84%)', + color: '#fff', + textAlign: 'center', + padding: '4px 0', + fontFamily: 'Arial, sans-serif', + fontSize: '16px', + zIndex: '9000', + lineHeight: '1' + }); + div.innerHTML = 'Error: ' + msg + ' - WebUI 2.5.0-beta.4'; + document.body.insertBefore(div, document.body.firstChild); + } + }, 1000); + } + #freezeUi() { + if (this.#eventsCallback == null) { + // Show default WebUI warning as we + // don't have a user event callback. + this.#showWarning('Connection with the backend is lost'); + } + } + #unfreezeUI() { + const div = document.getElementById('webui-error-connection-lost'); + if (div) { + div.remove(); + } + } + #isTextBasedCommand(cmd: number): Boolean { + if (cmd !== this.#CMD_SEND_RAW) return true; + return false; + } + #parseDimensions(input: string): {x: number; y: number; width: number; height: number} { + try { + const parts = input.split(','); + if (parts.length !== 4) return {x: 0, y: 0, width: 0, height: 0}; + const x = parseFloat(parts[0]), + y = parseFloat(parts[1]), + width = parseFloat(parts[2]), + height = parseFloat(parts[3]); + return [x, y, width, height].some(isNaN) ? {x: 0, y: 0, width: 0, height: 0} : {x, y, width, height}; + } catch { + return {x: 0, y: 0, width: 0, height: 0}; + } + } + #getDataStrFromPacket(buffer: Uint8Array, startIndex: number): string { + let stringBytes: number[] = []; + for (let i = startIndex; i < buffer.length; i++) { + if (buffer[i] === 0) { + // Check for null byte + break; + } + stringBytes.push(buffer[i]); + } + // Convert the array of bytes to a string + const stringText = new TextDecoder().decode(new Uint8Array(stringBytes)); + return stringText; + } + #getID(buffer: Uint8Array, index: number): number { + if (index < 0 || index >= buffer.length - 1) { + throw new Error('Index out of bounds or insufficient data.'); + } + const firstByte = buffer[index]; + const secondByte = buffer[index + 1]; + const combined = (secondByte << 8) | firstByte; // Works only for little-endian + return combined; + } + #addToken(buffer: Uint8Array, value: number, index: number): void { + if (value < 0 || value > 0xffffffff) { + throw new Error('Number is out of the range for 4 bytes representation.'); + } + if (index < 0 || index > buffer.length - 4) { + throw new Error('Index out of bounds or insufficient space in buffer.'); + } + // WebUI expect Little-endian (Work for Little/Big endian platforms) + buffer[index] = value & 0xff; // Least significant byte + buffer[index + 1] = (value >>> 8) & 0xff; + buffer[index + 2] = (value >>> 16) & 0xff; + buffer[index + 3] = (value >>> 24) & 0xff; // Most significant byte + } + #addID(buffer: Uint8Array, value: number, index: number): void { + if (value < 0 || value > 0xffff) { + throw new Error('Number is out of the range for 2 bytes representation.'); + } + if (index < 0 || index > buffer.length - 2) { + throw new Error('Index out of bounds or insufficient space in buffer.'); + } + // WebUI expect Little-endian (Work for Little/Big endian platforms) + buffer[index] = value & 0xff; // Least significant byte + buffer[index + 1] = (value >>> 8) & 0xff; // Most significant byte + } + #start() { + this.#keepAlive(); + this.#callPromiseID[0] = 0; + // Connect to the backend application + this.#wsConnect(); + } + #keepAlive = async () => { + while (true) { + if (this.#Ping) { + // Some web browsers may close the connection + // let's send a void message to keep WS open + this.#sendData(new TextEncoder().encode('ping')); + } else { + // There is an active communication + this.#Ping = true; + } + await new Promise((resolve) => setTimeout(resolve, 20000)); + } + }; + #clicksListener() { + document.querySelectorAll("[id]").forEach(e => { + if (this.#AllEvents || ((e.id !== '') && (this.#bindsList.includes(e.id)))) { + if (e.id && !e.dataset.webui_click_is_set) { + e.dataset.webui_click_is_set = "true"; + e.addEventListener("click", () => this.#sendClick(e.id)); + } + } + }); + } + async #sendData(packet: Uint8Array) { + this.#Ping = false; + if ((!this.#wsIsConnected()) || packet === undefined) return; + // Enqueue the packet + this.#sendQueue.push(packet); + if (this.#isSending) return; + this.#isSending = true; + while (this.#sendQueue.length > 0) { + const currentPacket = this.#sendQueue.shift()!; + if (currentPacket.length < this.#MULTI_CHUNK_SIZE) { + this.#ws.send(currentPacket.buffer); + } else { + // Pre-packet to let WebUI be ready for multi packet + const pre_packet = Uint8Array.of( + this.#WEBUI_SIGNATURE, + 0, + 0, + 0, + 0, // Token (4 Bytes) + 0, + 0, // ID (2 Bytes) + this.#CMD_MULTI, + ...new TextEncoder().encode(currentPacket.length.toString()), + 0, + ); + this.#ws.send(pre_packet.buffer); + // Send chunks + let offset = 0; + const sendChunk = async () => { + if (offset < currentPacket.length) { + const chunkSize = Math.min(this.#MULTI_CHUNK_SIZE, currentPacket.length - offset); + const chunk = currentPacket.subarray(offset, offset + chunkSize); + this.#ws.send(chunk); + offset += chunkSize; + await sendChunk(); + } + }; + await sendChunk(); + } + } + this.#isSending = false; + } + #sendClick(elem: string) { + if (this.#wsIsConnected()) { + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Element] + const packet = + elem !== '' + ? Uint8Array.of( + this.#WEBUI_SIGNATURE, + 0, + 0, + 0, + 0, // Token (4 Bytes) + 0, + 0, // ID (2 Bytes) + this.#CMD_CLICK, + ...new TextEncoder().encode(elem), + 0, + ) + : Uint8Array.of( + this.#WEBUI_SIGNATURE, + 0, + 0, + 0, + 0, // Token (4 Bytes) + 0, + 0, // ID (2 Bytes) + this.#CMD_CLICK, + 0, + ); + this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); + // this.#addID(packet, 0, this.#PROTOCOL_ID) + this.#sendData(packet); + if (this.#log) console.log(`WebUI -> Send Click [${elem}]`); + } + } + #checkToken() { + if (this.#wsIsConnected()) { + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + const packet = + Uint8Array.of( + this.#WEBUI_SIGNATURE, + 0, + 0, + 0, + 0, // Token (4 Bytes) + 0, + 0, // ID (2 Bytes) + this.#CMD_CHECK_TK, + 0, + ); + this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); + // this.#addID(packet, 0, this.#PROTOCOL_ID) + this.#sendData(packet); + if (this.#log) console.log(`WebUI -> Send Token [0x${this.#token.toString(16).padStart(8, '0')}]`); + } + } + #sendEventNavigation(url: string) { + if (url !== '') { + if (this.#wsIsConnected()) { + if (this.#log) console.log(`WebUI -> Send Navigation Event [${url}]`); + const packet = Uint8Array.of( + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [URL] + this.#WEBUI_SIGNATURE, + 0, + 0, + 0, + 0, // Token (4 Bytes) + 0, + 0, // ID (2 Bytes) + this.#CMD_NAVIGATION, + ...new TextEncoder().encode(url), + ); + this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); + // this.#addID(packet, 0, this.#PROTOCOL_ID) + this.#sendData(packet); + } + } + } + #sendDrag() { + if (this.#wsIsConnected()) { + if (this.#log) console.log(`WebUI -> Send window drag event`); + // Sent once, the backend GTK starts a native window-manager move. + const packet = Uint8Array.of( + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + this.#WEBUI_SIGNATURE, + 0, + 0, + 0, + 0, // Token (4 Bytes) + 0, + 0, // ID (2 Bytes) + this.#CMD_WINDOW_DRAG, + ); + this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); + // this.#addID(packet, 0, this.#PROTOCOL_ID) + this.#sendData(packet); + } + } + #closeWindowTimer() { + setTimeout(function () { + globalThis.close(); + }, 1000); + } + #updateBindsList() { + if (this.#bindsList.includes('')) { + this.#AllEvents = true; + this.#allowNavigation = false; + } + this.#generateCallObjects(); + this.#clicksListener(); + } + #toUint16(value: number): number { + return value & 0xffff; + } + #generateCallObjects() { + for (const bind of this.#bindsList) { + if (bind.trim()) { + const fn = bind; + if (fn.trim()) { + if (fn !== '__webui_core_api__') { + if (typeof (window as any)[fn] === 'undefined') { + this[fn] = (...args: DataTypes[]) => this.call(fn, ...args); + (window as any)[fn] = (...args: string[]) => this.call(fn, ...args); + if (this.#log) console.log(`WebUI -> Binding backend function [${fn}]`); + } + } + } + } + } + } + #getScriptUrl() { + const scripts = Array.from(document.scripts) + .filter(s => s.src !== null && s.src.startsWith('http') && s.src.endsWith('webui.js')) + .map(s => s.src); + return scripts.length === 0 ? null : new URL(scripts[0]); + } + #callPromise(fn: string, ...args: DataTypes[]) { + --this.#callPromiseID[0]; + const callId = this.#toUint16(this.#callPromiseID[0]); + // Combine lengths + let argsLengths = args + .map((arg) => { + if (typeof arg === 'object') { + // Uint8Array + return arg.length; + } else { + // string, number, boolean + return new TextEncoder().encode(arg.toString()).length; + } + }) + .join(';'); + // Combine values + let argsValues: Uint8Array = new Uint8Array(); + for (const arg of args) { + let buffer: Uint8Array; + if (typeof arg === 'object') { + buffer = arg; // Uint8Array + } else { + // string, number, boolean + buffer = new TextEncoder().encode(arg.toString()); + } + const temp = new Uint8Array(argsValues.length + buffer.length + 1); + temp.set(argsValues, 0); + temp.set(buffer, argsValues.length); + temp[argsValues.length + buffer.length] = 0x00; + argsValues = temp; + } + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Fn, Null, {LenLen...}, Null, {Data,Null,Data,Null...}] + let packet = new Uint8Array(0); + const packetPush = (data: Uint8Array) => { + const newPacket = new Uint8Array(packet.length + data.length); + newPacket.set(packet); + newPacket.set(data, packet.length); + packet = newPacket; + }; + packetPush(new Uint8Array([this.#WEBUI_SIGNATURE])); + packetPush(new Uint8Array([0, 0, 0, 0])); // Token (4 Bytes) + packetPush(new Uint8Array([0, 0])); // ID (2 Bytes) + packetPush(new Uint8Array([this.#CMD_CALL_FUNC])); + packetPush(new TextEncoder().encode(fn)); + packetPush(new Uint8Array([0])); + packetPush(new TextEncoder().encode(argsLengths)); + packetPush(new Uint8Array([0])); + packetPush(new Uint8Array(argsValues)); + this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); + this.#addID(packet, callId, this.#PROTOCOL_ID); + return new Promise((resolve) => { + this.#callPromiseResolve[callId] = resolve; + this.#sendData(packet); + }); + } + async callCore(fn: string, ...args: DataTypes[]): Promise { + return this.call('__webui_core_api__', fn, ...args); + } + // -- WebSocket ---------------------------- + #wsIsConnected(): boolean { + return ((this.#ws) && (this.#ws.readyState === WebSocket.OPEN)); + } + #wsConnect(): void { + if (this.#wsIsConnected()) { + this.#ws.close(); + } + this.#TokenAccepted = false; + const scriptUrl = this.#getScriptUrl(); + const host = scriptUrl !== null ? scriptUrl.hostname : window.location.hostname; + const url = this.#secure ? ('wss://' + host) : ('ws://' + host); + this.#ws = new WebSocket(`${url}:${this.#port}/_webui_ws_connect`); + this.#ws.binaryType = 'arraybuffer'; + this.#ws.onopen = this.#wsOnOpen.bind(this); + this.#ws.onmessage = this.#wsOnMessage.bind(this); + this.#ws.onclose = this.#wsOnClose.bind(this); + this.#ws.onerror = this.#wsOnError.bind(this); + } + #wsOnOpen = (event: Event) => { + this.#wsWasConnected = true; + this.#unfreezeUI(); + if (this.#log) console.log('WebUI -> Connected'); + this.#checkToken(); + }; + #wsOnError = (event: Event) => { + if (this.#log) console.log(`WebUI -> Connection failed.`); + }; + #wsOnClose = (event: CloseEvent) => { + if (this.#closeReason === this.#CMD_NAVIGATION) { + this.#closeReason = 0; + if (this.#log) console.log(`WebUI -> Connection lost. Navigation to [${this.#closeValue}]`); + this.#allowNavigation = true; + globalThis.location.replace(this.#closeValue); + } else { + if (this.#wsStayAlive) { + // Re-connect + if (this.#log) console.log(`WebUI -> Connection lost (${event.code}). Reconnecting...`); + this.#freezeUi(); + setTimeout(() => this.#wsConnect(), this.#wsStayAliveTimeout); + } + else if (this.#log) { + // Debug close + console.log(`WebUI -> Connection lost (${event.code})`); + this.#freezeUi(); + } else { + // Release close + this.#closeWindowTimer(); + } + } + // Event Callback + this.#userEventCallback(this.event.DISCONNECTED); + }; + #userEventCallback = (e: number) => { + if (this.#eventsCallback) { + if (e != this.#lastEvent) { + this.#lastEvent = e; + this.#eventsCallback(e); + } + } + } + #wsOnMessage = async (event: MessageEvent) => { + const buffer8 = new Uint8Array(event.data); + if (buffer8.length < this.#PROTOCOL_SIZE) return; + if (buffer8[this.#PROTOCOL_SIGN] !== this.#WEBUI_SIGNATURE) return; + if (this.#isTextBasedCommand(buffer8[this.#PROTOCOL_CMD])) { + // UTF8 Text based commands + const callId = this.#getID(buffer8, this.#PROTOCOL_ID); + // Process Command + switch (buffer8[this.#PROTOCOL_CMD]) { + case this.#CMD_JS_QUICK: + case this.#CMD_JS: + { + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Script] + const script: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + const scriptSanitize = script.replace(/(?:\r\n|\r|\n)/g, '\n'); + if (this.#log) console.log(`WebUI -> CMD -> JS [${scriptSanitize}]`); + // Get callback result + let FunReturn: string | Uint8Array = 'undefined'; + let FunError = false; + let isBinaryReturn = false; + try { + const result = await AsyncFunction(scriptSanitize)(); + if (result instanceof Uint8Array) { + FunReturn = result; + isBinaryReturn = true; + } else { + FunReturn = String(result); + } + } catch (e) { + FunError = true; + FunReturn = e.message; + } + // Stop if this is a quick call + if (buffer8[this.#PROTOCOL_CMD] === this.#CMD_JS_QUICK) return; + // Get the call return + if (FunReturn === undefined) { + FunReturn = 'undefined'; + } + // Logging + if (this.#log && !FunError) { + if (isBinaryReturn) { + const binaryData = FunReturn as Uint8Array; + const hexPreview = Array.from(binaryData.slice(0, 64)).map(b => `0x${b.toString(16).padStart(2, '0')}`).join(', '); + console.log(`WebUI -> CMD -> JS -> Return Success (${binaryData.length} Bytes) [${hexPreview}${binaryData.length > 64 ? '...' : ''}]`); + } else { + const stringData = String(FunReturn); + console.log(`WebUI -> CMD -> JS -> Return Success (${new TextEncoder().encode(stringData).length} Bytes) [${stringData.substring(0, 64)}${stringData.length > 64 ? '...' : ''}]`); + } + } + else if (this.#log && FunError) { + const errorString = String(FunReturn); + console.log(`WebUI -> CMD -> JS -> Return Error [${errorString.substring(0, 64)}${errorString.length > 64 ? '...' : ''}]`); + } + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Error, Script Response] + let packet = new Uint8Array(0); + const packetPush = (data: Uint8Array) => { + const newPacket = new Uint8Array(packet.length + data.length); + newPacket.set(packet); + newPacket.set(data, packet.length); + packet = newPacket; + }; + const packetPushStr = (data: string) => { + const chunkSize = 1024 * 8; + if (data.length > chunkSize) { + const encoder = new TextEncoder(); + for (let i = 0; i < data.length; i += chunkSize) { + const chunk = data.substring(i, Math.min(i + chunkSize, data.length)); + const encodedChunk = encoder.encode(chunk); + packetPush(encodedChunk); + } + } else { + packetPush(new TextEncoder().encode(data)); + } + }; + packetPush(new Uint8Array([this.#WEBUI_SIGNATURE])); + packetPush(new Uint8Array([0, 0, 0, 0])); // Token (4 Bytes) + packetPush(new Uint8Array([0, 0])); // ID (2 Bytes) + packetPush(new Uint8Array([this.#CMD_JS])); + packetPush(new Uint8Array(FunError ? [1] : [0])); + if (isBinaryReturn) { + packetPush(FunReturn as Uint8Array); + } else { + packetPushStr(FunReturn as string); + } + packetPush(new Uint8Array([0])); + this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); + this.#addID(packet, callId, this.#PROTOCOL_ID); + this.#sendData(packet); + } + break; + case this.#CMD_CALL_FUNC: + { + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Call Response] + const callResponse: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + if (this.#log) { + console.log(`WebUI -> CMD -> Call Response [${callResponse}]`); + } + if (this.#callPromiseResolve[callId]) { + if (this.#log) { + console.log(`WebUI -> CMD -> Resolving Response #${callId}...`); + } + this.#callPromiseResolve[callId]?.(callResponse); + this.#callPromiseResolve[callId] = undefined; + } + } + break; + case this.#CMD_NAVIGATION: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [URL] + const url: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + if (this.#log) console.log(`WebUI -> CMD -> Navigation [${url}]`); + this.#close(this.#CMD_NAVIGATION, url); + break; + case this.#CMD_WINDOW_RESIZED: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [x,y,width,height] + const widthAndHeight: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + const { x, y, width, height } = this.#parseDimensions(widthAndHeight); + // Update drag positions + this.#currentWindowX = x; + this.#currentWindowY = y; + if (this.#log) console.log(`WebUI -> CMD -> Window Resized [x: ${x}, y: ${y}, width: ${width}, height: ${height}]`); + break; + case this.#CMD_NEW_ID: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [New Element] + const newElement: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + if (this.#log) console.log(`WebUI -> CMD -> New Bind ID [${newElement}]`); + if (!this.#bindsList.includes(newElement)) this.#bindsList.push(newElement); + // Generate objects + this.#updateBindsList(); + break; + case this.#CMD_CLOSE: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + if (this.#log) { + // Debug Close + console.log(`WebUI -> CMD -> Close`); + if (this.#wsIsConnected()) { + this.#wsStayAlive = false; + this.#ws.close(); + } + } + else { + // Release Close + globalThis.close(); + } + break; + case this.#CMD_CHECK_TK: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Status] + // 5: [BindsList] + const status = (buffer8[this.#PROTOCOL_DATA] == 0 ? false : true); + const tokenHex = `0x${this.#token.toString(16).padStart(8, '0')}`; + if (status) { + if (this.#log) console.log(`WebUI -> CMD -> Token [${tokenHex}] Accepted`); + this.#TokenAccepted = true; + // Get binds list (CSV) + let csv: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA + 1); + csv = csv.endsWith(',') ? csv.slice(0, -1) : csv; + this.#bindsList = csv.split(','); + // Generate objects + this.#updateBindsList(); + // User event callback + this.#userEventCallback(this.event.CONNECTED); + } + else { + if (this.#log) console.log(`WebUI -> CMD -> Token [${tokenHex}] Not Accepted. Reload page...`); + // Refresh the page to get a new token + this.#allowNavigation = true; + this.#wsStayAlive = false; + globalThis.location.reload(); + } + break; + } + } else { + // Raw-binary based commands + switch (buffer8[this.#PROTOCOL_CMD]) { + case this.#CMD_SEND_RAW: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Function,Null,Raw Data] + // Get function name + const functionName: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + // Get the raw data + const rawDataIndex: number = this.#PROTOCOL_DATA + functionName.length + 1; + const rawDataSize: number = (buffer8.length - rawDataIndex) - 1; + const userRawData = buffer8.subarray(rawDataIndex, (rawDataIndex + rawDataSize)); + if (this.#log) console.log(`WebUI -> CMD -> Received Raw ${rawDataSize} bytes for [${functionName}()]`); + // Call the user function, and pass the raw data + if (typeof window[functionName] === 'function') window[functionName](userRawData); + else await AsyncFunction(functionName + '(userRawData)')(); + break; + } + } + }; + // -- Public APIs -------------------------- + /** + * Call a backend function + * + * @param fn - binding name + * @param data - data to be send to the backend function + * @return - Response of the backend callback string + * @example - const res = await webui.call("myID", 123, true, "Hi", new Uint8Array([0x42, 0x43, 0x44])) + */ + async call(fn: string, ...args: DataTypes[]): Promise { + if (!fn) return Promise.reject(new SyntaxError('No binding name is provided')); + + if (!this.#wsIsConnected()) return Promise.reject(new Error('WebSocket is not connected')); + + // Check binding list + if (fn !== '__webui_core_api__') { + if (!this.#AllEvents && !this.#bindsList.includes(`${fn}`)) + return Promise.reject(new ReferenceError(`No binding was found for "${fn}"`)); + } + + // Call backend and wait for response + if (this.#log) console.log(`WebUI -> Calling [${fn}(...)]`); + const response = (await this.#callPromise(fn, ...args)) as string; + + // WebUI lib accept `DataTypes` but return only string + if (typeof response !== 'string') return ''; + + return response; + } + /** + * Active or deactivate webui debug logging + * + * @param status - log status to set + */ + setLogging(status: boolean) { + if (status) { + console.log('WebUI -> Log Enabled.'); + this.#log = true; + } else { + console.log('WebUI -> Log Disabled.'); + this.#log = false; + } + } + /** + * Encode text into base64 string + * + * @param data - text string + */ + encode(data: string): string { + return btoa(data); + } + /** + * Decode base64 string into text + * + * @param data - base64 string + */ + decode(data: string): string { + return atob(data); + } + /** + * Set a callback to receive events like connect/disconnect + * + * @param callback - callback function `myCallback(e)` + * @example - webui.setEventCallback((e) => {if(e == webui.event.CONNECTED){ ... }}); + */ + setEventCallback(callback: (e: number) => void): void { + this.#eventsCallback = callback; + } + /** + * Check if UI is connected to the back-end. The connection + * is done by including `webui.js` virtual file in the HTML. + * + * @return - Boolean `true` if connected + */ + isConnected(): boolean { + return ((this.#wsIsConnected()) && (this.#TokenAccepted)); + } + /** + * Get OS high contrast preference. + * + * @return - Boolean `True` if OS is using high contrast theme + */ + async isHighContrast(): Promise { + // Call a core function and wait for response + const response = await this.callCore("high_contrast") as boolean; + if (this.#log) console.log(`Core Response: [${response}]`); + return response; + } + /** + * When binding all events on the backend, WebUI blocks all navigation events + * and sends them to the backend. This API allows you to control that behavior. + * + * @param status - Boolean `True` means WebUI will allow navigations + * @example - webui.allowNavigation(true); // Allow navigation + * window.location.replace('www.test.com'); // This will now proceed as usual + */ + allowNavigation(status: boolean): void { + this.#allowNavigation = status; + } +} +// Export +type webui = WebuiBridge; +export default webui; +export type { WebuiBridge }; +// Wait for the html to be parsed +addEventListener('load', () => { + document.body.addEventListener('contextmenu', (event) => event.preventDefault()); + addRefreshableEventListener(document.body, 'input', 'contextmenu', (event) => event.stopPropagation()); +}); diff --git a/v2/webui/bridge/webui_bridge.h b/v2/webui/bridge/webui_bridge.h new file mode 100644 index 0000000..55c08c7 --- /dev/null +++ b/v2/webui/bridge/webui_bridge.h @@ -0,0 +1,1854 @@ +// WebUI v2.5.0-beta.4 +// https://webui.me +// https://github.com/webui-dev/webui +// Copyright (c) 2020-2026 Hassan Draga. +// Licensed under MIT License. +// All rights reserved. +// Canada. + +// --- PLEASE DO NOT EDIT THIS FILE ------- +// --- THIS FILE IS GENERATED BY JS2C.JS -- + +#ifndef WEBUI_BRIDGE_H +#define WEBUI_BRIDGE_H +unsigned char webui_javascript_bridge[] = { + 0x2f, 0x2f, 0x20, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x76, + 0x32, 0x2e, 0x35, 0x2e, 0x30, 0x2d, 0x62, 0x65, 0x74, 0x61, + 0x2e, 0x34, 0x0a, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x65, 0x62, 0x75, 0x69, 0x2e, + 0x6d, 0x65, 0x0a, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x65, 0x62, 0x75, 0x69, + 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x77, 0x65, 0x62, 0x75, 0x69, + 0x0a, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, + 0x32, 0x30, 0x2d, 0x32, 0x30, 0x32, 0x36, 0x20, 0x48, 0x61, + 0x73, 0x73, 0x61, 0x6e, 0x20, 0x44, 0x72, 0x61, 0x67, 0x61, + 0x2e, 0x0a, 0x2f, 0x2f, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, + 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, + 0x4d, 0x49, 0x54, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, + 0x65, 0x2e, 0x0a, 0x2f, 0x2f, 0x20, 0x41, 0x6c, 0x6c, 0x20, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x2f, 0x2f, 0x20, + 0x43, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x2e, 0x0a, 0x0a, 0x22, + 0x75, 0x73, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x22, 0x3b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x61, 0x64, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, + 0x68, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x72, + 0x6f, 0x6f, 0x74, 0x2c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2c, 0x74, + 0x79, 0x70, 0x65, 0x2c, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x2c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x29, 0x7b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x72, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x6d, 0x75, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x7b, 0x66, 0x6f, 0x72, + 0x28, 0x6c, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x75, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x66, 0x6f, 0x72, + 0x28, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x61, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x64, + 0x65, 0x73, 0x29, 0x7b, 0x69, 0x66, 0x28, 0x21, 0x28, 0x6e, + 0x6f, 0x64, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x6f, 0x66, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x29, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x29, 0x26, 0x26, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x74, 0x79, 0x70, + 0x65, 0x2c, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x2c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x3b, + 0x66, 0x6f, 0x72, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x68, + 0x69, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x6f, 0x64, + 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x28, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x29, 0x29, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6f, + 0x66, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x45, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x26, 0x26, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x74, 0x79, + 0x70, 0x65, 0x2c, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, + 0x72, 0x2c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, + 0x7d, 0x7d, 0x6c, 0x65, 0x74, 0x20, 0x6f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x4d, + 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x28, 0x72, 0x65, 0x62, 0x69, + 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x28, 0x72, 0x6f, 0x6f, 0x74, + 0x2c, 0x7b, 0x73, 0x75, 0x62, 0x74, 0x72, 0x65, 0x65, 0x3a, + 0x21, 0x30, 0x2c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x3a, 0x21, 0x30, 0x7d, 0x29, 0x2c, 0x6f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x7d, 0x76, 0x61, 0x72, + 0x20, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x28, 0x61, 0x73, 0x79, 0x6e, + 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x29, 0x7b, 0x7d, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x3b, 0x76, 0x61, + 0x72, 0x20, 0x57, 0x65, 0x62, 0x75, 0x69, 0x42, 0x72, 0x69, + 0x64, 0x67, 0x65, 0x3d, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x7b, + 0x23, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x3b, 0x23, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x3b, 0x23, 0x70, 0x6f, 0x72, 0x74, + 0x3b, 0x23, 0x6c, 0x6f, 0x67, 0x3b, 0x23, 0x77, 0x69, 0x6e, + 0x58, 0x3b, 0x23, 0x77, 0x69, 0x6e, 0x59, 0x3b, 0x23, 0x77, + 0x69, 0x6e, 0x57, 0x3b, 0x23, 0x77, 0x69, 0x6e, 0x48, 0x3b, + 0x23, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x44, 0x72, 0x61, 0x67, 0x3b, 0x23, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x44, 0x72, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x3d, + 0x21, 0x31, 0x3b, 0x23, 0x69, 0x73, 0x44, 0x72, 0x61, 0x67, + 0x67, 0x69, 0x6e, 0x67, 0x3d, 0x21, 0x31, 0x3b, 0x23, 0x64, + 0x72, 0x61, 0x67, 0x41, 0x72, 0x6d, 0x65, 0x64, 0x3d, 0x21, + 0x31, 0x3b, 0x23, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x58, 0x3d, 0x77, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x58, 0x7c, 0x7c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x2e, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x4c, 0x65, 0x66, + 0x74, 0x3b, 0x23, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x59, 0x3d, 0x77, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x59, 0x7c, 0x7c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x2e, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x54, 0x6f, 0x70, + 0x3b, 0x23, 0x77, 0x73, 0x3b, 0x23, 0x77, 0x73, 0x53, 0x74, + 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x3d, 0x21, 0x30, + 0x3b, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x79, 0x41, 0x6c, + 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x3d, 0x35, 0x30, 0x30, 0x3b, 0x23, 0x77, 0x73, 0x57, 0x61, + 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x3d, 0x21, 0x31, 0x3b, 0x23, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x3d, 0x21, + 0x31, 0x3b, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x3d, 0x30, 0x3b, 0x23, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x23, + 0x41, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x3d, + 0x21, 0x31, 0x3b, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, + 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x49, 0x44, 0x3d, 0x6e, 0x65, + 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x41, 0x72, + 0x72, 0x61, 0x79, 0x28, 0x31, 0x29, 0x3b, 0x23, 0x63, 0x61, + 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x3d, 0x5b, 0x5d, 0x3b, + 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x76, 0x69, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x21, 0x30, 0x3b, + 0x23, 0x73, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x3d, 0x5b, 0x5d, 0x3b, 0x23, 0x69, 0x73, 0x53, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x21, 0x31, 0x3b, 0x23, 0x62, + 0x69, 0x6e, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x3b, 0x23, + 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, + 0x41, 0x54, 0x55, 0x52, 0x45, 0x3d, 0x32, 0x32, 0x31, 0x3b, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x3d, 0x32, 0x35, + 0x34, 0x3b, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x5f, + 0x51, 0x55, 0x49, 0x43, 0x4b, 0x3d, 0x32, 0x35, 0x33, 0x3b, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x4c, 0x49, 0x43, 0x4b, + 0x3d, 0x32, 0x35, 0x32, 0x3b, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x4e, 0x41, 0x56, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x3d, 0x32, 0x35, 0x31, 0x3b, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x3d, 0x32, 0x35, 0x30, 0x3b, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x5f, + 0x46, 0x55, 0x4e, 0x43, 0x3d, 0x32, 0x34, 0x39, 0x3b, 0x23, + 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, + 0x41, 0x57, 0x3d, 0x32, 0x34, 0x38, 0x3b, 0x23, 0x43, 0x4d, + 0x44, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x49, 0x44, 0x3d, 0x32, + 0x34, 0x37, 0x3b, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4d, 0x55, + 0x4c, 0x54, 0x49, 0x3d, 0x32, 0x34, 0x36, 0x3b, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x54, + 0x4b, 0x3d, 0x32, 0x34, 0x35, 0x3b, 0x23, 0x43, 0x4d, 0x44, + 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x44, 0x52, + 0x41, 0x47, 0x3d, 0x32, 0x34, 0x34, 0x3b, 0x23, 0x43, 0x4d, + 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x52, + 0x45, 0x53, 0x49, 0x5a, 0x45, 0x44, 0x3d, 0x32, 0x34, 0x33, + 0x3b, 0x23, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x48, + 0x55, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x3d, 0x36, + 0x35, 0x35, 0x30, 0x30, 0x3b, 0x23, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x3d, + 0x38, 0x3b, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x3d, 0x30, 0x3b, 0x23, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x54, + 0x4f, 0x4b, 0x45, 0x4e, 0x3d, 0x31, 0x3b, 0x23, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x44, 0x3d, + 0x35, 0x3b, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x43, 0x4d, 0x44, 0x3d, 0x37, 0x3b, 0x23, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x3d, 0x38, 0x3b, 0x23, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x29, + 0x3b, 0x23, 0x50, 0x69, 0x6e, 0x67, 0x3d, 0x21, 0x30, 0x3b, + 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3d, 0x6e, 0x75, 0x6c, 0x6c, + 0x3b, 0x23, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x3d, 0x2d, 0x31, 0x3b, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x3d, 0x7b, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, + 0x44, 0x3a, 0x30, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, + 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x3a, 0x31, 0x7d, 0x3b, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, + 0x72, 0x28, 0x7b, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x3d, + 0x21, 0x31, 0x2c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3d, 0x30, + 0x2c, 0x70, 0x6f, 0x72, 0x74, 0x3d, 0x30, 0x2c, 0x6c, 0x6f, + 0x67, 0x3d, 0x21, 0x31, 0x2c, 0x77, 0x69, 0x6e, 0x58, 0x3d, + 0x30, 0x2c, 0x77, 0x69, 0x6e, 0x59, 0x3d, 0x30, 0x2c, 0x77, + 0x69, 0x6e, 0x57, 0x3d, 0x30, 0x2c, 0x77, 0x69, 0x6e, 0x48, + 0x3d, 0x30, 0x2c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x72, 0x61, 0x67, 0x3d, + 0x21, 0x31, 0x7d, 0x29, 0x7b, 0x69, 0x66, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, + 0x3d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x2c, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3d, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x70, 0x6f, 0x72, 0x74, 0x3d, 0x70, 0x6f, 0x72, + 0x74, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, + 0x67, 0x3d, 0x6c, 0x6f, 0x67, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x58, 0x3d, 0x77, 0x69, 0x6e, + 0x58, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, + 0x6e, 0x59, 0x3d, 0x77, 0x69, 0x6e, 0x59, 0x2c, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x57, 0x3d, 0x77, + 0x69, 0x6e, 0x57, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x77, 0x69, 0x6e, 0x48, 0x3d, 0x77, 0x69, 0x6e, 0x48, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x72, + 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x3d, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, + 0x72, 0x61, 0x67, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x5b, 0x30, 0x5d, 0x3d, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x2c, 0x22, 0x77, 0x65, 0x62, 0x75, 0x69, 0x22, 0x69, 0x6e, + 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, + 0x73, 0x29, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x53, + 0x6f, 0x72, 0x72, 0x79, 0x2e, 0x20, 0x57, 0x65, 0x62, 0x55, + 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, + 0x64, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, + 0x2c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, + 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, + 0x69, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, + 0x2e, 0x22, 0x29, 0x3b, 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x58, 0x21, 0x3d, 0x3d, + 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x26, 0x26, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x59, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x57, 0x21, + 0x3d, 0x3d, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x26, 0x26, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x48, + 0x2c, 0x22, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x22, 0x69, 0x6e, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x7c, 0x7c, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x73, 0x68, 0x6f, 0x77, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, + 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, + 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, + 0x62, 0x79, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x77, 0x65, + 0x62, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x22, + 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, + 0x67, 0x7c, 0x7c, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, + 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, + 0x29, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x28, 0x29, 0x2c, 0x22, 0x6e, 0x61, + 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x69, + 0x6e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, + 0x69, 0x73, 0x3f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, + 0x68, 0x69, 0x73, 0x2e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, + 0x72, 0x28, 0x22, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, + 0x65, 0x22, 0x2c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x3d, 0x3e, + 0x7b, 0x69, 0x66, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x76, 0x69, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x26, 0x26, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x41, 0x6c, 0x6c, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x26, 0x26, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x7b, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x28, 0x29, + 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x75, 0x72, 0x6c, 0x3d, 0x6e, + 0x65, 0x77, 0x20, 0x55, 0x52, 0x4c, 0x28, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x75, 0x72, 0x6c, 0x29, 0x3b, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, + 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, + 0x2d, 0x3e, 0x20, 0x44, 0x4f, 0x4d, 0x20, 0x2d, 0x3e, 0x20, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x5b, 0x24, 0x7b, + 0x75, 0x72, 0x6c, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x7d, 0x5d, + 0x60, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, + 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, + 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x75, + 0x72, 0x6c, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x29, 0x7d, 0x7d, + 0x29, 0x3a, 0x61, 0x64, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, + 0x6f, 0x64, 0x79, 0x2c, 0x22, 0x61, 0x22, 0x2c, 0x22, 0x63, + 0x6c, 0x69, 0x63, 0x6b, 0x22, 0x2c, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x3d, 0x3e, 0x7b, 0x69, 0x66, 0x28, 0x21, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, + 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x26, + 0x26, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x41, 0x6c, 0x6c, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x26, 0x26, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, + 0x7b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x28, 0x29, 0x3b, 0x6c, 0x65, 0x74, 0x7b, 0x68, 0x72, + 0x65, 0x66, 0x7d, 0x3d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x44, 0x4f, 0x4d, 0x20, 0x2d, 0x3e, 0x20, 0x4e, 0x61, 0x76, + 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x5b, 0x24, 0x7b, 0x68, 0x72, 0x65, 0x66, 0x7d, 0x5d, 0x60, + 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, + 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x76, + 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x68, 0x72, + 0x65, 0x66, 0x29, 0x7d, 0x7d, 0x29, 0x2c, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x64, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x28, 0x22, 0x6b, 0x65, 0x79, 0x64, 0x6f, 0x77, + 0x6e, 0x22, 0x2c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x3d, 0x3e, + 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, + 0x7c, 0x7c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, + 0x79, 0x3d, 0x3d, 0x3d, 0x22, 0x46, 0x35, 0x22, 0x26, 0x26, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x28, 0x29, 0x7d, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x44, 0x72, 0x61, 0x67, 0x67, 0x69, 0x6e, + 0x67, 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x3d, 0x65, 0x6c, 0x3d, 0x3e, 0x7b, 0x66, 0x6f, 0x72, 0x28, + 0x3b, 0x65, 0x6c, 0x3b, 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, + 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x3d, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x2e, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x75, 0x74, 0x65, 0x64, 0x53, 0x74, 0x79, 0x6c, 0x65, + 0x28, 0x65, 0x6c, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x28, 0x22, 0x2d, 0x2d, 0x77, 0x65, 0x62, 0x75, 0x69, + 0x2d, 0x61, 0x70, 0x70, 0x2d, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x22, 0x29, 0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28, 0x29, + 0x3b, 0x69, 0x66, 0x28, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x3d, 0x3d, 0x3d, 0x22, 0x64, 0x72, 0x61, 0x67, 0x22, 0x7c, + 0x7c, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x3d, 0x3d, 0x3d, + 0x22, 0x6e, 0x6f, 0x2d, 0x64, 0x72, 0x61, 0x67, 0x22, 0x29, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x3b, 0x65, 0x6c, 0x3d, 0x65, 0x6c, 0x2e, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x45, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x7d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x22, 0x22, 0x7d, 0x3b, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, + 0x22, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x64, 0x6f, 0x77, 0x6e, + 0x22, 0x2c, 0x65, 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x69, 0x73, 0x44, 0x72, 0x61, 0x67, 0x67, 0x69, + 0x6e, 0x67, 0x3d, 0x21, 0x31, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x64, 0x72, 0x61, 0x67, 0x41, 0x72, 0x6d, 0x65, + 0x64, 0x3d, 0x65, 0x2e, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, + 0x3d, 0x3d, 0x3d, 0x30, 0x26, 0x26, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x28, + 0x65, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x3d, + 0x3d, 0x3d, 0x22, 0x64, 0x72, 0x61, 0x67, 0x22, 0x7d, 0x29, + 0x2c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x22, 0x6d, 0x6f, + 0x75, 0x73, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x22, 0x2c, 0x65, + 0x3d, 0x3e, 0x7b, 0x69, 0x66, 0x28, 0x65, 0x2e, 0x62, 0x75, + 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x21, 0x3d, 0x3d, 0x31, 0x29, + 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x64, 0x72, 0x61, + 0x67, 0x41, 0x72, 0x6d, 0x65, 0x64, 0x3d, 0x21, 0x31, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x73, 0x44, 0x72, + 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x3d, 0x21, 0x31, 0x3b, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x7d, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x64, 0x72, 0x61, 0x67, 0x41, 0x72, 0x6d, + 0x65, 0x64, 0x26, 0x26, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x69, 0x73, 0x44, 0x72, 0x61, 0x67, 0x67, 0x69, 0x6e, + 0x67, 0x26, 0x26, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x69, 0x73, 0x44, 0x72, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, + 0x3d, 0x21, 0x30, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x73, 0x65, 0x6e, 0x64, 0x44, 0x72, 0x61, 0x67, 0x28, 0x29, + 0x29, 0x7d, 0x29, 0x2c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, + 0x22, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x75, 0x70, 0x22, 0x2c, + 0x28, 0x29, 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x64, 0x72, 0x61, 0x67, 0x41, 0x72, 0x6d, 0x65, 0x64, + 0x3d, 0x21, 0x31, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x69, 0x73, 0x44, 0x72, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, + 0x3d, 0x21, 0x31, 0x7d, 0x29, 0x7d, 0x6f, 0x6e, 0x62, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x3d, 0x28, 0x29, 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x7d, + 0x2c, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x28, 0x28, 0x29, 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x77, 0x73, 0x57, 0x61, 0x73, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x7c, 0x7c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x68, 0x6f, 0x77, 0x57, + 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x28, 0x22, 0x46, 0x61, + 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x29, 0x7d, 0x2c, 0x35, 0x65, 0x33, 0x29, + 0x7d, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x3d, 0x30, 0x2c, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3d, 0x22, 0x22, 0x29, 0x7b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x3d, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x26, 0x26, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x28, 0x29, 0x7d, 0x23, 0x73, 0x68, 0x6f, 0x77, + 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x28, 0x6d, 0x73, + 0x67, 0x29, 0x7b, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x28, 0x28, 0x29, 0x3d, 0x3e, 0x7b, 0x69, + 0x66, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x28, 0x29, 0x29, 0x7b, 0x69, 0x66, 0x28, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, + 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x22, 0x77, 0x65, 0x62, 0x75, 0x69, 0x2d, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x73, + 0x74, 0x22, 0x29, 0x29, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x64, 0x69, 0x76, 0x3d, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x28, 0x22, 0x64, 0x69, 0x76, 0x22, 0x29, 0x3b, 0x64, + 0x69, 0x76, 0x2e, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x65, 0x62, + 0x75, 0x69, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, + 0x6c, 0x6f, 0x73, 0x74, 0x22, 0x2c, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x28, + 0x64, 0x69, 0x76, 0x2e, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2c, + 0x7b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, + 0x22, 0x66, 0x69, 0x78, 0x65, 0x64, 0x22, 0x2c, 0x74, 0x6f, + 0x70, 0x3a, 0x22, 0x30, 0x22, 0x2c, 0x6c, 0x65, 0x66, 0x74, + 0x3a, 0x22, 0x30, 0x22, 0x2c, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3a, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x2c, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, + 0x6c, 0x6f, 0x72, 0x3a, 0x22, 0x72, 0x67, 0x62, 0x28, 0x31, + 0x39, 0x31, 0x20, 0x31, 0x32, 0x35, 0x20, 0x33, 0x30, 0x20, + 0x2f, 0x20, 0x38, 0x34, 0x25, 0x29, 0x22, 0x2c, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3a, 0x22, 0x23, 0x66, 0x66, 0x66, 0x22, + 0x2c, 0x74, 0x65, 0x78, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, + 0x3a, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x2c, + 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x22, 0x34, + 0x70, 0x78, 0x20, 0x30, 0x22, 0x2c, 0x66, 0x6f, 0x6e, 0x74, + 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x22, 0x41, 0x72, + 0x69, 0x61, 0x6c, 0x2c, 0x20, 0x73, 0x61, 0x6e, 0x73, 0x2d, + 0x73, 0x65, 0x72, 0x69, 0x66, 0x22, 0x2c, 0x66, 0x6f, 0x6e, + 0x74, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x22, 0x31, 0x36, 0x70, + 0x78, 0x22, 0x2c, 0x7a, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, + 0x22, 0x39, 0x30, 0x30, 0x30, 0x22, 0x2c, 0x6c, 0x69, 0x6e, + 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x22, 0x31, + 0x22, 0x7d, 0x29, 0x2c, 0x64, 0x69, 0x76, 0x2e, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x3d, 0x22, 0x3c, + 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x3a, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, + 0x67, 0x3e, 0x20, 0x22, 0x2b, 0x6d, 0x73, 0x67, 0x2b, 0x22, + 0x20, 0x2d, 0x20, 0x3c, 0x65, 0x6d, 0x3e, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x32, 0x2e, 0x35, 0x2e, 0x30, 0x2d, 0x62, + 0x65, 0x74, 0x61, 0x2e, 0x34, 0x3c, 0x2f, 0x65, 0x6d, 0x3e, + 0x22, 0x2c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x69, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x28, 0x64, + 0x69, 0x76, 0x2c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x29, 0x7d, 0x7d, + 0x2c, 0x31, 0x65, 0x33, 0x29, 0x7d, 0x23, 0x66, 0x72, 0x65, + 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, 0x29, 0x7b, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3d, 0x3d, + 0x6e, 0x75, 0x6c, 0x6c, 0x26, 0x26, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x73, 0x68, 0x6f, 0x77, 0x57, 0x61, 0x72, 0x6e, + 0x69, 0x6e, 0x67, 0x28, 0x22, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x73, 0x74, + 0x22, 0x29, 0x7d, 0x23, 0x75, 0x6e, 0x66, 0x72, 0x65, 0x65, + 0x7a, 0x65, 0x55, 0x49, 0x28, 0x29, 0x7b, 0x6c, 0x65, 0x74, + 0x20, 0x64, 0x69, 0x76, 0x3d, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, + 0x77, 0x65, 0x62, 0x75, 0x69, 0x2d, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x73, 0x74, 0x22, 0x29, 0x3b, + 0x64, 0x69, 0x76, 0x26, 0x26, 0x64, 0x69, 0x76, 0x2e, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x29, 0x7d, 0x23, 0x69, + 0x73, 0x54, 0x65, 0x78, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x63, 0x6d, + 0x64, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x63, 0x6d, 0x64, 0x21, 0x3d, 0x3d, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x45, 0x4e, 0x44, + 0x5f, 0x52, 0x41, 0x57, 0x7d, 0x23, 0x70, 0x61, 0x72, 0x73, + 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x29, 0x7b, 0x74, + 0x72, 0x79, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, + 0x74, 0x73, 0x3d, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x73, + 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x2c, 0x22, 0x29, 0x3b, + 0x69, 0x66, 0x28, 0x70, 0x61, 0x72, 0x74, 0x73, 0x2e, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x21, 0x3d, 0x3d, 0x34, 0x29, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x7b, 0x78, 0x3a, 0x30, + 0x2c, 0x79, 0x3a, 0x30, 0x2c, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3a, 0x30, 0x2c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, + 0x30, 0x7d, 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x78, 0x3d, 0x70, + 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, + 0x70, 0x61, 0x72, 0x74, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2c, + 0x79, 0x3d, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, + 0x61, 0x74, 0x28, 0x70, 0x61, 0x72, 0x74, 0x73, 0x5b, 0x31, + 0x5d, 0x29, 0x2c, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x70, + 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, + 0x70, 0x61, 0x72, 0x74, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2c, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x70, 0x61, 0x72, + 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x70, 0x61, + 0x72, 0x74, 0x73, 0x5b, 0x33, 0x5d, 0x29, 0x3b, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x5b, 0x78, 0x2c, 0x79, 0x2c, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x2c, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x5d, 0x2e, 0x73, 0x6f, 0x6d, 0x65, 0x28, 0x69, 0x73, + 0x4e, 0x61, 0x4e, 0x29, 0x3f, 0x7b, 0x78, 0x3a, 0x30, 0x2c, + 0x79, 0x3a, 0x30, 0x2c, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, + 0x30, 0x2c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x30, + 0x7d, 0x3a, 0x7b, 0x78, 0x2c, 0x79, 0x2c, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x2c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, + 0x7d, 0x63, 0x61, 0x74, 0x63, 0x68, 0x7b, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x7b, 0x78, 0x3a, 0x30, 0x2c, 0x79, 0x3a, + 0x30, 0x2c, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x30, 0x2c, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x30, 0x7d, 0x7d, + 0x7d, 0x23, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x74, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3d, 0x5b, 0x5d, + 0x3b, 0x66, 0x6f, 0x72, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, + 0x3d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x3b, 0x69, 0x3c, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x26, 0x26, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x5d, 0x21, 0x3d, + 0x3d, 0x30, 0x3b, 0x69, 0x2b, 0x2b, 0x29, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x70, + 0x75, 0x73, 0x68, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, + 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, + 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x6e, 0x65, 0x77, + 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, + 0x79, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x29, 0x29, 0x7d, 0x23, 0x67, 0x65, 0x74, + 0x49, 0x44, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x7b, 0x69, 0x66, 0x28, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3c, 0x30, 0x7c, 0x7c, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x3e, 0x3d, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2d, + 0x31, 0x29, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, + 0x66, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x20, 0x6f, + 0x72, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, + 0x69, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x22, 0x29, 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, 0x3d, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, + 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x2b, 0x31, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, 0x7d, 0x23, 0x61, 0x64, + 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x2c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x7b, 0x69, 0x66, 0x28, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x30, 0x7c, 0x7c, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x34, 0x32, 0x39, 0x34, 0x39, + 0x36, 0x37, 0x32, 0x39, 0x35, 0x29, 0x74, 0x68, 0x72, 0x6f, + 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x28, 0x22, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, + 0x69, 0x73, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x34, 0x20, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x29, 0x3b, + 0x69, 0x66, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3c, 0x30, + 0x7c, 0x7c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3e, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x2d, 0x34, 0x29, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, + 0x22, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x6f, 0x75, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, + 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, + 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x2e, 0x22, 0x29, 0x3b, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x3d, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x26, 0x32, 0x35, 0x35, 0x2c, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x2b, 0x31, 0x5d, 0x3d, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3e, 0x3e, 0x3e, 0x38, 0x26, 0x32, 0x35, 0x35, 0x2c, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x2b, 0x32, 0x5d, 0x3d, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3e, 0x3e, 0x3e, 0x31, 0x36, 0x26, 0x32, 0x35, 0x35, + 0x2c, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x2b, 0x33, 0x5d, 0x3d, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3e, 0x3e, 0x3e, 0x32, 0x34, 0x26, 0x32, 0x35, + 0x35, 0x7d, 0x23, 0x61, 0x64, 0x64, 0x49, 0x44, 0x28, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x2c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x7b, 0x69, + 0x66, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x30, 0x7c, + 0x7c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x36, 0x35, 0x35, + 0x33, 0x35, 0x29, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, + 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x72, + 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x29, 0x3b, 0x69, 0x66, 0x28, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3c, 0x30, 0x7c, 0x7c, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x3e, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2d, 0x32, + 0x29, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, + 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x72, + 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, + 0x65, 0x6e, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, + 0x69, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, + 0x22, 0x29, 0x3b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x3d, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x26, 0x32, 0x35, 0x35, 0x2c, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2b, + 0x31, 0x5d, 0x3d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x3e, + 0x3e, 0x38, 0x26, 0x32, 0x35, 0x35, 0x7d, 0x23, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x28, 0x29, 0x7b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, + 0x65, 0x28, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, + 0x65, 0x49, 0x44, 0x5b, 0x30, 0x5d, 0x3d, 0x30, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x28, 0x29, 0x7d, 0x23, 0x6b, 0x65, + 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x3d, 0x61, 0x73, + 0x79, 0x6e, 0x63, 0x28, 0x29, 0x3d, 0x3e, 0x7b, 0x66, 0x6f, + 0x72, 0x28, 0x3b, 0x3b, 0x29, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x69, 0x6e, 0x67, 0x3f, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x28, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x70, 0x69, 0x6e, + 0x67, 0x22, 0x29, 0x29, 0x3a, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x69, 0x6e, 0x67, 0x3d, 0x21, 0x30, 0x2c, 0x61, + 0x77, 0x61, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x50, + 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x3d, 0x3e, 0x73, 0x65, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x2c, 0x32, 0x65, 0x34, 0x29, 0x29, + 0x7d, 0x3b, 0x23, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x29, 0x7b, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x28, 0x22, 0x5b, 0x69, 0x64, + 0x5d, 0x22, 0x29, 0x2e, 0x66, 0x6f, 0x72, 0x45, 0x61, 0x63, + 0x68, 0x28, 0x65, 0x3d, 0x3e, 0x7b, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x41, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x7c, 0x7c, 0x65, 0x2e, 0x69, 0x64, 0x21, 0x3d, + 0x3d, 0x22, 0x22, 0x26, 0x26, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x62, 0x69, 0x6e, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, + 0x65, 0x2e, 0x69, 0x64, 0x29, 0x29, 0x26, 0x26, 0x65, 0x2e, + 0x69, 0x64, 0x26, 0x26, 0x21, 0x65, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x74, 0x2e, 0x77, 0x65, 0x62, 0x75, 0x69, + 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x5f, + 0x73, 0x65, 0x74, 0x26, 0x26, 0x28, 0x65, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x74, 0x2e, 0x77, 0x65, 0x62, 0x75, + 0x69, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x69, 0x73, + 0x5f, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65, + 0x22, 0x2c, 0x65, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x28, 0x22, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x22, 0x2c, 0x28, + 0x29, 0x3d, 0x3e, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, + 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x65, + 0x2e, 0x69, 0x64, 0x29, 0x29, 0x29, 0x7d, 0x29, 0x7d, 0x61, + 0x73, 0x79, 0x6e, 0x63, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x29, 0x7b, 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x69, 0x6e, 0x67, 0x3d, 0x21, 0x31, 0x2c, 0x21, + 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x28, 0x29, 0x7c, 0x7c, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x3d, 0x3d, 0x3d, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, + 0x29, 0x26, 0x26, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x73, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x2e, + 0x70, 0x75, 0x73, 0x68, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x29, 0x2c, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x29, + 0x29, 0x7b, 0x66, 0x6f, 0x72, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x3d, 0x21, 0x30, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x73, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3e, 0x30, 0x3b, + 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x3d, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x2e, 0x73, 0x68, 0x69, 0x66, + 0x74, 0x28, 0x29, 0x3b, 0x69, 0x66, 0x28, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3c, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, + 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x5a, 0x45, + 0x29, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, + 0x73, 0x65, 0x6e, 0x64, 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x3b, 0x65, 0x6c, 0x73, + 0x65, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x72, 0x65, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x55, 0x69, 0x6e, + 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6f, 0x66, + 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, + 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, + 0x52, 0x45, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, + 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, + 0x2c, 0x2e, 0x2e, 0x2e, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, + 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, + 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2e, + 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, + 0x29, 0x2c, 0x30, 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x70, + 0x72, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x3b, 0x6c, 0x65, + 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x30, + 0x2c, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x3d, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x28, 0x29, 0x3d, 0x3e, + 0x7b, 0x69, 0x66, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x3c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x68, 0x75, + 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x3d, 0x4d, 0x61, 0x74, + 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x48, + 0x55, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x2c, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2d, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x2c, 0x63, 0x68, + 0x75, 0x6e, 0x6b, 0x3d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x75, + 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x2c, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x2b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, + 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x29, 0x2c, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2b, + 0x3d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, + 0x2c, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x73, 0x65, 0x6e, + 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x28, 0x29, 0x7d, 0x7d, + 0x3b, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x73, 0x65, 0x6e, + 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x28, 0x29, 0x7d, 0x7d, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x73, 0x53, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x21, 0x31, 0x7d, 0x7d, + 0x23, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x28, 0x65, 0x6c, 0x65, 0x6d, 0x29, 0x7b, 0x69, 0x66, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, + 0x29, 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x3d, 0x65, 0x6c, 0x65, 0x6d, 0x21, 0x3d, + 0x3d, 0x22, 0x22, 0x3f, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6f, 0x66, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, + 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x2c, + 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, + 0x30, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, + 0x44, 0x5f, 0x43, 0x4c, 0x49, 0x43, 0x4b, 0x2c, 0x2e, 0x2e, + 0x2e, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x65, 0x6c, 0x65, 0x6d, + 0x29, 0x2c, 0x30, 0x29, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x38, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6f, 0x66, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, + 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, + 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, + 0x2c, 0x30, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x43, 0x4c, 0x49, 0x43, 0x4b, 0x2c, 0x30, + 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, + 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x29, 0x2c, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, + 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, + 0x20, 0x2d, 0x3e, 0x20, 0x53, 0x65, 0x6e, 0x64, 0x20, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x5b, 0x24, 0x7b, 0x65, 0x6c, + 0x65, 0x6d, 0x7d, 0x5d, 0x60, 0x29, 0x7d, 0x7d, 0x23, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, + 0x29, 0x7b, 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x7b, 0x6c, 0x65, + 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x55, + 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, + 0x6f, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, + 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, + 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x48, 0x45, + 0x43, 0x4b, 0x5f, 0x54, 0x4b, 0x2c, 0x30, 0x29, 0x3b, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x4f, + 0x4b, 0x45, 0x4e, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x2c, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, + 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, + 0x20, 0x53, 0x65, 0x6e, 0x64, 0x20, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x20, 0x5b, 0x30, 0x78, 0x24, 0x7b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x74, + 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, 0x36, + 0x29, 0x2e, 0x70, 0x61, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x28, 0x38, 0x2c, 0x22, 0x30, 0x22, 0x29, 0x7d, 0x5d, 0x60, + 0x29, 0x7d, 0x7d, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x75, 0x72, 0x6c, 0x29, 0x7b, 0x69, + 0x66, 0x28, 0x75, 0x72, 0x6c, 0x21, 0x3d, 0x3d, 0x22, 0x22, + 0x26, 0x26, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x28, 0x29, 0x29, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, + 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x53, 0x65, + 0x6e, 0x64, 0x20, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x5b, 0x24, 0x7b, 0x75, 0x72, 0x6c, 0x7d, 0x5d, 0x60, 0x29, + 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x3d, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x2e, 0x6f, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, + 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x2c, 0x30, 0x2c, + 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x4e, 0x41, 0x56, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x2c, 0x2e, 0x2e, 0x2e, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, + 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, + 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x75, + 0x72, 0x6c, 0x29, 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x61, 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x29, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x29, 0x7d, 0x7d, 0x23, 0x73, 0x65, 0x6e, 0x64, + 0x44, 0x72, 0x61, 0x67, 0x28, 0x29, 0x7b, 0x69, 0x66, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, + 0x29, 0x29, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x53, 0x65, 0x6e, 0x64, + 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x20, 0x64, 0x72, + 0x61, 0x67, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x29, + 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x3d, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x2e, 0x6f, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, + 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x2c, 0x30, 0x2c, + 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x44, 0x52, 0x41, + 0x47, 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, + 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x29, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x29, 0x7d, 0x7d, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x72, + 0x28, 0x29, 0x7b, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x67, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, + 0x65, 0x28, 0x29, 0x7d, 0x2c, 0x31, 0x65, 0x33, 0x29, 0x7d, + 0x23, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x28, 0x29, 0x7b, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x73, 0x28, 0x22, 0x22, 0x29, 0x26, 0x26, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x41, 0x6c, 0x6c, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x3d, 0x21, 0x30, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3d, 0x21, 0x31, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, + 0x61, 0x6c, 0x6c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x28, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, + 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x28, 0x29, 0x7d, 0x23, 0x74, 0x6f, 0x55, + 0x69, 0x6e, 0x74, 0x31, 0x36, 0x28, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x26, 0x36, 0x35, 0x35, 0x33, + 0x35, 0x7d, 0x23, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x28, 0x29, 0x7b, 0x66, 0x6f, 0x72, 0x28, 0x6c, + 0x65, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, + 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x29, 0x69, 0x66, 0x28, + 0x62, 0x69, 0x6e, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28, + 0x29, 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x6e, 0x3d, + 0x62, 0x69, 0x6e, 0x64, 0x3b, 0x66, 0x6e, 0x2e, 0x74, 0x72, + 0x69, 0x6d, 0x28, 0x29, 0x26, 0x26, 0x66, 0x6e, 0x21, 0x3d, + 0x3d, 0x22, 0x5f, 0x5f, 0x77, 0x65, 0x62, 0x75, 0x69, 0x5f, + 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x5f, + 0x22, 0x26, 0x26, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5b, 0x66, 0x6e, 0x5d, + 0x3e, 0x22, 0x75, 0x22, 0x26, 0x26, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x5b, 0x66, 0x6e, 0x5d, 0x3d, 0x28, 0x2e, 0x2e, 0x2e, + 0x61, 0x72, 0x67, 0x73, 0x29, 0x3d, 0x3e, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x66, 0x6e, 0x2c, + 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x2c, 0x77, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5b, 0x66, 0x6e, 0x5d, 0x3d, + 0x28, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3d, + 0x3e, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x61, 0x6c, 0x6c, + 0x28, 0x66, 0x6e, 0x2c, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, + 0x73, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x5b, 0x24, 0x7b, 0x66, 0x6e, 0x7d, 0x5d, 0x60, 0x29, + 0x29, 0x7d, 0x7d, 0x23, 0x67, 0x65, 0x74, 0x53, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x55, 0x72, 0x6c, 0x28, 0x29, 0x7b, 0x6c, + 0x65, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, + 0x3d, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x66, 0x72, 0x6f, + 0x6d, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x29, 0x2e, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x73, 0x3d, 0x3e, + 0x73, 0x2e, 0x73, 0x72, 0x63, 0x21, 0x3d, 0x3d, 0x6e, 0x75, + 0x6c, 0x6c, 0x26, 0x26, 0x73, 0x2e, 0x73, 0x72, 0x63, 0x2e, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x57, 0x69, 0x74, 0x68, + 0x28, 0x22, 0x68, 0x74, 0x74, 0x70, 0x22, 0x29, 0x26, 0x26, + 0x73, 0x2e, 0x73, 0x72, 0x63, 0x2e, 0x65, 0x6e, 0x64, 0x73, + 0x57, 0x69, 0x74, 0x68, 0x28, 0x22, 0x77, 0x65, 0x62, 0x75, + 0x69, 0x2e, 0x6a, 0x73, 0x22, 0x29, 0x29, 0x2e, 0x6d, 0x61, + 0x70, 0x28, 0x73, 0x3d, 0x3e, 0x73, 0x2e, 0x73, 0x72, 0x63, + 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x2e, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x3d, 0x3d, 0x3d, 0x30, 0x3f, 0x6e, 0x75, + 0x6c, 0x6c, 0x3a, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x52, 0x4c, + 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x5b, 0x30, + 0x5d, 0x29, 0x7d, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, + 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x66, 0x6e, 0x2c, 0x2e, + 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x7b, 0x2d, 0x2d, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, + 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x49, 0x44, 0x5b, + 0x30, 0x5d, 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x61, 0x6c, + 0x6c, 0x49, 0x64, 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, + 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x49, 0x44, 0x5b, 0x30, + 0x5d, 0x29, 0x2c, 0x61, 0x72, 0x67, 0x73, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x73, 0x3d, 0x61, 0x72, 0x67, 0x73, 0x2e, + 0x6d, 0x61, 0x70, 0x28, 0x61, 0x72, 0x67, 0x3d, 0x3e, 0x74, + 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x67, 0x3d, + 0x3d, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3f, + 0x61, 0x72, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x3a, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x61, 0x72, 0x67, 0x2e, + 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, + 0x29, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x2e, + 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x22, 0x3b, 0x22, 0x29, 0x2c, + 0x61, 0x72, 0x67, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0x66, 0x6f, 0x72, 0x28, + 0x6c, 0x65, 0x74, 0x20, 0x61, 0x72, 0x67, 0x20, 0x6f, 0x66, + 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x7b, 0x6c, 0x65, 0x74, + 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0x74, 0x79, + 0x70, 0x65, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x67, 0x3d, 0x3d, + 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3f, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x3d, 0x61, 0x72, 0x67, 0x3a, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3d, 0x6e, 0x65, 0x77, + 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, + 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, + 0x65, 0x28, 0x61, 0x72, 0x67, 0x2e, 0x74, 0x6f, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, 0x3b, 0x6c, 0x65, + 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x3d, 0x6e, 0x65, 0x77, + 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, + 0x79, 0x28, 0x61, 0x72, 0x67, 0x73, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2b, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x2b, 0x31, 0x29, 0x3b, 0x74, 0x65, 0x6d, + 0x70, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x30, 0x29, 0x2c, + 0x74, 0x65, 0x6d, 0x70, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x61, 0x72, 0x67, 0x73, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x29, 0x2c, 0x74, 0x65, 0x6d, 0x70, 0x5b, + 0x61, 0x72, 0x67, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2b, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x5d, 0x3d, 0x30, 0x2c, 0x61, 0x72, 0x67, 0x73, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3d, 0x74, 0x65, 0x6d, 0x70, + 0x7d, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, + 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x2c, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, + 0x3d, 0x64, 0x61, 0x74, 0x61, 0x3d, 0x3e, 0x7b, 0x6c, 0x65, + 0x74, 0x20, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, + 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x2b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x29, 0x3b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x29, 0x2c, 0x6e, 0x65, 0x77, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, 0x28, + 0x64, 0x61, 0x74, 0x61, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x2c, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x6e, 0x65, 0x77, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x3b, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, + 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, + 0x28, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, + 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, + 0x55, 0x52, 0x45, 0x5d, 0x29, 0x29, 0x2c, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, + 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x28, 0x5b, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x2c, + 0x30, 0x5d, 0x29, 0x29, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, + 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, + 0x28, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x29, 0x29, 0x2c, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, + 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x41, 0x4c, 0x4c, + 0x5f, 0x46, 0x55, 0x4e, 0x43, 0x5d, 0x29, 0x29, 0x2c, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, + 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x28, 0x66, 0x6e, 0x29, 0x29, 0x2c, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, + 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, 0x5d, 0x29, + 0x29, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, + 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, + 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, + 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x61, 0x72, + 0x67, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x29, + 0x29, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, + 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, + 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, + 0x5d, 0x29, 0x29, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, + 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, + 0x61, 0x72, 0x67, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x29, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, + 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x29, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x49, 0x44, + 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x63, 0x61, + 0x6c, 0x6c, 0x49, 0x64, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x49, 0x44, 0x29, 0x2c, 0x6e, 0x65, 0x77, 0x20, 0x50, 0x72, + 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, + 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x5b, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x5d, 0x3d, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, + 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x7d, + 0x29, 0x7d, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x63, 0x61, + 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x65, 0x28, 0x66, 0x6e, 0x2c, + 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x7b, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x22, 0x5f, 0x5f, 0x77, + 0x65, 0x62, 0x75, 0x69, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x5f, + 0x61, 0x70, 0x69, 0x5f, 0x5f, 0x22, 0x2c, 0x66, 0x6e, 0x2c, + 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x7d, 0x23, + 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x28, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x26, 0x26, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x3d, 0x3d, 0x3d, 0x57, 0x65, 0x62, 0x53, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4f, 0x50, 0x45, 0x4e, 0x7d, + 0x23, 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x28, 0x29, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x28, 0x29, 0x26, 0x26, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, + 0x28, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x65, 0x64, 0x3d, 0x21, 0x31, 0x3b, 0x6c, 0x65, 0x74, 0x20, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x55, 0x72, 0x6c, 0x3d, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x53, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x55, 0x72, 0x6c, 0x28, 0x29, + 0x2c, 0x68, 0x6f, 0x73, 0x74, 0x3d, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x55, 0x72, 0x6c, 0x21, 0x3d, 0x3d, 0x6e, 0x75, + 0x6c, 0x6c, 0x3f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x55, + 0x72, 0x6c, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x3a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x6f, + 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x75, 0x72, 0x6c, + 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x65, 0x3f, 0x22, 0x77, 0x73, 0x73, 0x3a, 0x2f, + 0x2f, 0x22, 0x2b, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x22, 0x77, + 0x73, 0x3a, 0x2f, 0x2f, 0x22, 0x2b, 0x68, 0x6f, 0x73, 0x74, + 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x3d, + 0x6e, 0x65, 0x77, 0x20, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, + 0x6b, 0x65, 0x74, 0x28, 0x60, 0x24, 0x7b, 0x75, 0x72, 0x6c, + 0x7d, 0x3a, 0x24, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x70, 0x6f, 0x72, 0x74, 0x7d, 0x2f, 0x5f, 0x77, 0x65, 0x62, + 0x75, 0x69, 0x5f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x60, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x72, + 0x61, 0x79, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x6f, + 0x6e, 0x6f, 0x70, 0x65, 0x6e, 0x3d, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x2e, 0x6f, 0x6e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x4f, + 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x6f, + 0x6e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3d, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x77, 0x73, 0x2e, 0x6f, 0x6e, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x4f, + 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x7d, 0x23, 0x77, + 0x73, 0x4f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x3d, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x73, 0x57, 0x61, 0x73, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x3d, 0x21, 0x30, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x75, 0x6e, 0x66, 0x72, + 0x65, 0x65, 0x7a, 0x65, 0x55, 0x49, 0x28, 0x29, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, + 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x22, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x28, 0x29, 0x7d, 0x3b, 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x3d, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x2e, 0x22, 0x29, 0x7d, 0x3b, 0x23, 0x77, + 0x73, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x3d, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x3d, 0x3e, 0x7b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x3d, 0x3d, 0x3d, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, + 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3f, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3d, 0x30, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, + 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x4e, + 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x74, 0x6f, 0x20, 0x5b, 0x24, 0x7b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x61, + 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x21, + 0x30, 0x2c, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, + 0x69, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x29, 0x3a, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, + 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x3f, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, + 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, + 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x20, 0x28, 0x24, 0x7b, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x7d, 0x29, 0x2e, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x2e, 0x2e, 0x60, + 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x66, 0x72, + 0x65, 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, 0x29, 0x2c, 0x73, + 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, + 0x28, 0x29, 0x3d, 0x3e, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, + 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x53, 0x74, 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x29, 0x29, 0x3a, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x3f, 0x28, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, + 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x20, 0x28, 0x24, + 0x7b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x7d, 0x29, 0x60, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x55, 0x69, + 0x28, 0x29, 0x29, 0x3a, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x28, 0x29, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x75, 0x73, 0x65, 0x72, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, + 0x63, 0x6b, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, + 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x29, 0x7d, 0x3b, 0x23, + 0x75, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3d, 0x65, 0x3d, + 0x3e, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, + 0x63, 0x6b, 0x26, 0x26, 0x65, 0x21, 0x3d, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x26, 0x26, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x3d, 0x65, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, + 0x61, 0x63, 0x6b, 0x28, 0x65, 0x29, 0x29, 0x7d, 0x3b, 0x23, + 0x77, 0x73, 0x4f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x3d, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x3d, 0x3e, 0x7b, 0x76, 0x61, 0x72, 0x20, + 0x5f, 0x61, 0x2c, 0x5f, 0x62, 0x3b, 0x6c, 0x65, 0x74, 0x20, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x3d, 0x6e, 0x65, + 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x29, 0x3b, 0x69, 0x66, 0x28, 0x21, 0x28, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2e, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x3c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x53, 0x49, 0x5a, 0x45, 0x29, 0x26, 0x26, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x53, 0x49, 0x47, 0x4e, 0x5d, 0x3d, 0x3d, 0x3d, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, + 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x29, + 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, + 0x73, 0x54, 0x65, 0x78, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x43, 0x4d, 0x44, 0x5d, 0x29, 0x29, 0x7b, 0x6c, 0x65, + 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x3d, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x49, 0x44, + 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x44, 0x29, 0x3b, 0x73, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, + 0x44, 0x5d, 0x29, 0x7b, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, + 0x53, 0x5f, 0x51, 0x55, 0x49, 0x43, 0x4b, 0x3a, 0x63, 0x61, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x3a, 0x7b, 0x6c, 0x65, 0x74, + 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, 0x6e, + 0x69, 0x74, 0x69, 0x7a, 0x65, 0x3d, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x74, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x29, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, + 0x2f, 0x28, 0x3f, 0x3a, 0x5c, 0x72, 0x5c, 0x6e, 0x7c, 0x5c, + 0x72, 0x7c, 0x5c, 0x6e, 0x29, 0x2f, 0x67, 0x2c, 0x60, 0x0a, + 0x60, 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, + 0x2d, 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x5b, 0x24, 0x7b, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, 0x6e, 0x69, 0x74, + 0x69, 0x7a, 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x6c, 0x65, + 0x74, 0x20, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x3d, 0x22, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x22, 0x2c, 0x46, 0x75, 0x6e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x3d, 0x21, 0x31, 0x2c, 0x69, 0x73, 0x42, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x3d, 0x21, 0x31, 0x3b, 0x74, 0x72, 0x79, 0x7b, 0x6c, 0x65, + 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3d, 0x61, + 0x77, 0x61, 0x69, 0x74, 0x20, 0x41, 0x73, 0x79, 0x6e, 0x63, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, 0x6e, 0x69, 0x74, + 0x69, 0x7a, 0x65, 0x29, 0x28, 0x29, 0x3b, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x6f, 0x66, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x3f, 0x28, 0x46, 0x75, 0x6e, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3d, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x2c, 0x69, 0x73, 0x42, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3d, 0x21, + 0x30, 0x29, 0x3a, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x3d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x63, 0x61, + 0x74, 0x63, 0x68, 0x28, 0x65, 0x29, 0x7b, 0x46, 0x75, 0x6e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3d, 0x21, 0x30, 0x2c, 0x46, + 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3d, 0x65, + 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x7d, 0x69, + 0x66, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x5b, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, 0x5d, 0x3d, + 0x3d, 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, + 0x44, 0x5f, 0x4a, 0x53, 0x5f, 0x51, 0x55, 0x49, 0x43, 0x4b, + 0x29, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x69, 0x66, + 0x28, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x3d, 0x3d, 0x3d, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x26, + 0x26, 0x28, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x3d, 0x22, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x22, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x21, 0x46, 0x75, 0x6e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x69, 0x66, 0x28, 0x69, + 0x73, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x3d, + 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x2c, + 0x68, 0x65, 0x78, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x3d, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x66, 0x72, 0x6f, + 0x6d, 0x28, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x30, + 0x2c, 0x36, 0x34, 0x29, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, + 0x62, 0x3d, 0x3e, 0x60, 0x30, 0x78, 0x24, 0x7b, 0x62, 0x2e, + 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, + 0x36, 0x29, 0x2e, 0x70, 0x61, 0x64, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x28, 0x32, 0x2c, 0x22, 0x30, 0x22, 0x29, 0x7d, 0x60, + 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x22, 0x2c, 0x20, + 0x22, 0x29, 0x3b, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, + 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, + 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, + 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x20, 0x28, 0x24, 0x7b, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x7d, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x29, 0x20, 0x5b, 0x24, 0x7b, 0x68, 0x65, 0x78, 0x50, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x7d, 0x24, 0x7b, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3e, 0x36, 0x34, 0x3f, 0x22, + 0x2e, 0x2e, 0x2e, 0x22, 0x3a, 0x22, 0x22, 0x7d, 0x5d, 0x60, + 0x29, 0x7d, 0x65, 0x6c, 0x73, 0x65, 0x7b, 0x6c, 0x65, 0x74, + 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, + 0x61, 0x3d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x46, + 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x29, 0x3b, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, + 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x4a, + 0x53, 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, + 0x28, 0x24, 0x7b, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, + 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, + 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x29, 0x2e, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x7d, 0x20, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x29, 0x20, 0x5b, 0x24, 0x7b, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x73, + 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x30, + 0x2c, 0x36, 0x34, 0x29, 0x7d, 0x24, 0x7b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x3e, 0x36, 0x34, 0x3f, 0x22, 0x2e, + 0x2e, 0x2e, 0x22, 0x3a, 0x22, 0x22, 0x7d, 0x5d, 0x60, 0x29, + 0x7d, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, + 0x46, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x7b, + 0x6c, 0x65, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3d, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x28, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x29, 0x3b, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, + 0x2d, 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x2d, 0x3e, 0x20, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x20, 0x5b, 0x24, 0x7b, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x30, 0x2c, 0x36, + 0x34, 0x29, 0x7d, 0x24, 0x7b, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x3e, 0x36, 0x34, 0x3f, 0x22, 0x2e, 0x2e, + 0x2e, 0x22, 0x3a, 0x22, 0x22, 0x7d, 0x5d, 0x60, 0x29, 0x7d, + 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x2c, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x3d, + 0x64, 0x61, 0x74, 0x61, 0x3d, 0x3e, 0x7b, 0x6c, 0x65, 0x74, + 0x20, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2b, + 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x29, 0x3b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x29, 0x2c, 0x6e, 0x65, 0x77, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x64, + 0x61, 0x74, 0x61, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x2c, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x6e, 0x65, 0x77, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2c, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, + 0x3d, 0x64, 0x61, 0x74, 0x61, 0x3d, 0x3e, 0x7b, 0x69, 0x66, + 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x3e, 0x38, 0x31, 0x39, 0x32, 0x29, 0x7b, 0x6c, + 0x65, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, + 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x3b, 0x66, 0x6f, 0x72, + 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x3d, 0x30, 0x3b, 0x69, + 0x3c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x3b, 0x69, 0x2b, 0x3d, 0x38, 0x31, 0x39, 0x32, + 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x3d, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x69, 0x2c, 0x4d, + 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x69, 0x2b, + 0x38, 0x31, 0x39, 0x32, 0x2c, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x29, 0x2c, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x43, 0x68, 0x75, 0x6e, + 0x6b, 0x3d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x68, 0x75, + 0x6e, 0x6b, 0x29, 0x3b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x50, 0x75, 0x73, 0x68, 0x28, 0x65, 0x6e, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x7d, 0x7d, + 0x65, 0x6c, 0x73, 0x65, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, + 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x72, 0x28, 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x29, 0x7d, 0x3b, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, + 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, + 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5d, 0x29, 0x29, + 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, + 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, + 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, 0x2c, + 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x5d, 0x29, 0x29, 0x2c, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, + 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, 0x2c, 0x30, 0x5d, + 0x29, 0x29, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, + 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, + 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x4a, 0x53, 0x5d, 0x29, 0x29, 0x2c, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, + 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, + 0x79, 0x28, 0x46, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x3f, 0x5b, 0x31, 0x5d, 0x3a, 0x5b, 0x30, 0x5d, 0x29, 0x29, + 0x2c, 0x69, 0x73, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3f, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x46, 0x75, 0x6e, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x29, 0x3a, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, + 0x72, 0x28, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x29, 0x2c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, + 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, + 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, + 0x30, 0x5d, 0x29, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x61, 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x29, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, + 0x49, 0x44, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, + 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x49, 0x44, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x7d, 0x62, + 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x43, 0x41, 0x4c, 0x4c, 0x5f, 0x46, 0x55, 0x4e, 0x43, 0x3a, + 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3d, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, + 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x38, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, + 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, + 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x20, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x5b, 0x24, + 0x7b, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x2c, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, + 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x5b, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x5d, + 0x26, 0x26, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, + 0x2d, 0x3e, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x69, + 0x6e, 0x67, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x23, 0x24, 0x7b, 0x63, 0x61, 0x6c, 0x6c, 0x49, + 0x64, 0x7d, 0x2e, 0x2e, 0x2e, 0x60, 0x29, 0x2c, 0x28, 0x5f, + 0x62, 0x3d, 0x28, 0x5f, 0x61, 0x3d, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, + 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x29, 0x5b, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x5d, 0x29, + 0x3d, 0x3d, 0x6e, 0x75, 0x6c, 0x6c, 0x7c, 0x7c, 0x5f, 0x62, + 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x5f, 0x61, 0x2c, 0x63, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, + 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5b, 0x63, 0x61, + 0x6c, 0x6c, 0x49, 0x64, 0x5d, 0x3d, 0x76, 0x6f, 0x69, 0x64, + 0x20, 0x30, 0x29, 0x7d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, + 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, 0x49, 0x47, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3a, 0x6c, 0x65, 0x74, 0x20, + 0x75, 0x72, 0x6c, 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, + 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, + 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, + 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x5b, 0x24, 0x7b, 0x75, 0x72, 0x6c, 0x7d, 0x5d, 0x60, + 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, 0x49, 0x47, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x75, 0x72, 0x6c, 0x29, 0x3b, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x63, 0x61, 0x73, 0x65, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, + 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x52, 0x45, + 0x53, 0x49, 0x5a, 0x45, 0x44, 0x3a, 0x6c, 0x65, 0x74, 0x20, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x41, 0x6e, 0x64, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, + 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, + 0x2c, 0x7b, 0x78, 0x2c, 0x79, 0x2c, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x2c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x3d, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x70, 0x61, 0x72, 0x73, + 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x28, 0x77, 0x69, 0x64, 0x74, 0x68, 0x41, 0x6e, 0x64, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, 0x3b, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x58, 0x3d, 0x78, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x59, 0x3d, 0x79, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, + 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, + 0x20, 0x2d, 0x3e, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x20, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x5b, + 0x78, 0x3a, 0x20, 0x24, 0x7b, 0x78, 0x7d, 0x2c, 0x20, 0x79, + 0x3a, 0x20, 0x24, 0x7b, 0x79, 0x7d, 0x2c, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3a, 0x20, 0x24, 0x7b, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x7d, 0x2c, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x3a, 0x20, 0x24, 0x7b, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x62, 0x72, 0x65, 0x61, + 0x6b, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x45, 0x57, + 0x5f, 0x49, 0x44, 0x3a, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x65, + 0x77, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3d, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x38, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, + 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, + 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x42, + 0x69, 0x6e, 0x64, 0x20, 0x49, 0x44, 0x20, 0x5b, 0x24, 0x7b, + 0x6e, 0x65, 0x77, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x7d, 0x5d, 0x60, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x62, 0x69, 0x6e, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, + 0x6e, 0x65, 0x77, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x29, 0x7c, 0x7c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, + 0x69, 0x6e, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x70, + 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x28, 0x29, 0x3b, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x63, 0x61, 0x73, 0x65, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, + 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x3a, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x3f, 0x28, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x22, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x22, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x26, 0x26, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, + 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x3d, 0x21, 0x31, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x63, + 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x29, 0x29, 0x3a, 0x67, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, + 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0x62, 0x72, + 0x65, 0x61, 0x6b, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, + 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x54, 0x4b, 0x3a, 0x6c, 0x65, + 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3d, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5d, 0x21, 0x3d, 0x30, + 0x2c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x48, 0x65, 0x78, 0x3d, + 0x60, 0x30, 0x78, 0x24, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x74, 0x6f, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, 0x36, 0x29, 0x2e, + 0x70, 0x61, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x28, 0x38, + 0x2c, 0x22, 0x30, 0x22, 0x29, 0x7d, 0x60, 0x3b, 0x69, 0x66, + 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x7b, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, + 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x5b, 0x24, 0x7b, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x48, 0x65, 0x78, 0x7d, 0x5d, 0x20, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x60, 0x29, 0x2c, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x3d, + 0x21, 0x30, 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x73, 0x76, + 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, + 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x2b, 0x31, 0x29, 0x3b, 0x63, + 0x73, 0x76, 0x3d, 0x63, 0x73, 0x76, 0x2e, 0x65, 0x6e, 0x64, + 0x73, 0x57, 0x69, 0x74, 0x68, 0x28, 0x22, 0x2c, 0x22, 0x29, + 0x3f, 0x63, 0x73, 0x76, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, + 0x28, 0x30, 0x2c, 0x2d, 0x31, 0x29, 0x3a, 0x63, 0x73, 0x76, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, + 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x3d, 0x63, 0x73, 0x76, + 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x2c, 0x22, + 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x28, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x75, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, + 0x29, 0x7d, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x20, 0x5b, 0x24, 0x7b, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x48, 0x65, 0x78, 0x7d, 0x5d, 0x20, 0x4e, 0x6f, 0x74, + 0x20, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x2e, + 0x20, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x70, 0x61, + 0x67, 0x65, 0x2e, 0x2e, 0x2e, 0x60, 0x29, 0x2c, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, + 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, + 0x21, 0x30, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x53, 0x74, 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, + 0x3d, 0x21, 0x31, 0x2c, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x54, 0x68, 0x69, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, + 0x28, 0x29, 0x3b, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x7d, 0x7d, + 0x65, 0x6c, 0x73, 0x65, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x5b, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, 0x5d, 0x29, + 0x7b, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x45, 0x4e, 0x44, + 0x5f, 0x52, 0x41, 0x57, 0x3a, 0x6c, 0x65, 0x74, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, + 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x2c, 0x72, 0x61, + 0x77, 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x3d, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x2b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x2b, 0x31, 0x2c, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, + 0x53, 0x69, 0x7a, 0x65, 0x3d, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x38, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2d, + 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x2d, 0x31, 0x2c, 0x75, 0x73, 0x65, 0x72, 0x52, + 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x3d, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x38, 0x2e, 0x73, 0x75, 0x62, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x28, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, + 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x72, 0x61, 0x77, + 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x2b, + 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, + 0x65, 0x29, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, + 0x2d, 0x3e, 0x20, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x20, 0x52, 0x61, 0x77, 0x20, 0x24, 0x7b, 0x72, 0x61, + 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x7d, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x5b, 0x24, 0x7b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x29, 0x5d, + 0x60, 0x29, 0x2c, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5b, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x5d, + 0x3d, 0x3d, 0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x3f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5b, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x5d, 0x28, 0x75, 0x73, 0x65, 0x72, 0x52, 0x61, + 0x77, 0x44, 0x61, 0x74, 0x61, 0x29, 0x3a, 0x61, 0x77, 0x61, + 0x69, 0x74, 0x20, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x2b, + 0x22, 0x28, 0x75, 0x73, 0x65, 0x72, 0x52, 0x61, 0x77, 0x44, + 0x61, 0x74, 0x61, 0x29, 0x22, 0x29, 0x28, 0x29, 0x3b, 0x62, + 0x72, 0x65, 0x61, 0x6b, 0x7d, 0x7d, 0x3b, 0x61, 0x73, 0x79, + 0x6e, 0x63, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x66, 0x6e, + 0x2c, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x7b, + 0x69, 0x66, 0x28, 0x21, 0x66, 0x6e, 0x29, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, + 0x65, 0x2e, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6e, + 0x65, 0x77, 0x20, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x4e, 0x6f, 0x20, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x64, 0x22, 0x29, 0x29, 0x3b, 0x69, 0x66, 0x28, + 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, + 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x28, 0x29, 0x29, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, 0x72, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x57, 0x65, 0x62, 0x53, + 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x22, 0x29, 0x29, 0x3b, 0x69, 0x66, 0x28, 0x66, + 0x6e, 0x21, 0x3d, 0x3d, 0x22, 0x5f, 0x5f, 0x77, 0x65, 0x62, + 0x75, 0x69, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x70, + 0x69, 0x5f, 0x5f, 0x22, 0x26, 0x26, 0x21, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x41, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x26, 0x26, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x62, 0x69, 0x6e, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, + 0x60, 0x24, 0x7b, 0x66, 0x6e, 0x7d, 0x60, 0x29, 0x29, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x6d, + 0x69, 0x73, 0x65, 0x2e, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x28, 0x6e, 0x65, 0x77, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, + 0x60, 0x4e, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x22, 0x24, 0x7b, 0x66, + 0x6e, 0x7d, 0x22, 0x60, 0x29, 0x29, 0x3b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x26, 0x26, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x43, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x5b, 0x24, + 0x7b, 0x66, 0x6e, 0x7d, 0x28, 0x2e, 0x2e, 0x2e, 0x29, 0x5d, + 0x60, 0x29, 0x3b, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3d, 0x61, 0x77, 0x61, 0x69, + 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, + 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, + 0x66, 0x6e, 0x2c, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, + 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x21, 0x3d, 0x22, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x22, 0x3f, 0x22, 0x22, 0x3a, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x7d, 0x73, 0x65, 0x74, + 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x28, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x29, 0x7b, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x3f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x4c, 0x6f, 0x67, 0x20, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x22, 0x29, + 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, + 0x3d, 0x21, 0x30, 0x29, 0x3a, 0x28, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, + 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x4c, 0x6f, + 0x67, 0x20, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x2e, 0x22, 0x29, 0x2c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x3d, 0x21, 0x31, 0x29, 0x7d, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, + 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x74, + 0x6f, 0x61, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7d, 0x64, + 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, 0x61, 0x74, 0x61, + 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, + 0x74, 0x6f, 0x62, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7d, + 0x73, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x7b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3d, 0x63, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x7d, 0x69, 0x73, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, + 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x26, + 0x26, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, + 0x7d, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x69, 0x73, 0x48, + 0x69, 0x67, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, + 0x74, 0x28, 0x29, 0x7b, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3d, 0x61, 0x77, 0x61, + 0x69, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x61, + 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x65, 0x28, 0x22, 0x68, 0x69, + 0x67, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, + 0x74, 0x22, 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, + 0x26, 0x26, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x43, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20, + 0x5b, 0x24, 0x7b, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x2c, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x7d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x7b, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x7d, 0x7d, 0x3b, + 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x22, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x2c, 0x28, 0x29, 0x3d, 0x3e, 0x7b, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, + 0x64, 0x79, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, + 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x6d, 0x65, + 0x6e, 0x75, 0x22, 0x2c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x3d, + 0x3e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x28, 0x29, 0x29, 0x2c, 0x61, 0x64, 0x64, 0x52, 0x65, + 0x66, 0x72, 0x65, 0x73, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2c, 0x22, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x6d, 0x65, 0x6e, 0x75, 0x22, 0x2c, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x3d, 0x3e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, + 0x7d, 0x29, 0x3b, 0x0a, + 0x00 +}; + +#endif // WEBUI_BRIDGE_H \ No newline at end of file diff --git a/v2/webui/build.cmake.sh b/v2/webui/build.cmake.sh new file mode 100644 index 0000000..66b440b --- /dev/null +++ b/v2/webui/build.cmake.sh @@ -0,0 +1,9 @@ +#!/bin/bash +mkdir -p build + +# webui-2.5.0, examples +pushd build +cmake .. --fresh +cmake --build . --config Debug +popd + diff --git a/v2/webui/build.zig b/v2/webui/build.zig new file mode 100644 index 0000000..57b66a2 --- /dev/null +++ b/v2/webui/build.zig @@ -0,0 +1,289 @@ +const std = @import("std"); +const Build = std.Build; +const OptimizeMode = std.builtin.OptimizeMode; +const Compile = Build.Step.Compile; +const Module = Build.Module; +const builtin = @import("builtin"); + +const lib_name = "webui"; +var global_log_level: std.log.Level = .warn; + +/// Vendored dependencies of webui. +pub const Dependency = enum { + civetweb, + // TODO: Check and add all vendored dependencies, e.g. "webview" +}; + +const DebugDependencies = std.EnumSet(Dependency); + +pub fn build(b: *Build) !void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const is_dynamic = b.option(bool, "dynamic", "build the dynamic library") orelse false; + const enable_tls = b.option(bool, "enable-tls", "enable TLS support") orelse false; + const enable_webui_log = b.option(bool, "enable-webui-log", "Enable WebUI log output") orelse false; + const verbose = b.option(std.log.Level, "verbose", "set verbose output") orelse .warn; + global_log_level = verbose; + // TODO: Support list of dependencies once support is limited to >0.13.0 + const debug = b.option(Dependency, "debug", "enable dependency debug output"); + const debug_dependencies = DebugDependencies.initMany(if (debug) |d| &.{d} else &.{}); + + if (enable_tls and !target.query.isNative()) { + log(.err, .WebUI, "cross compilation is not supported with TLS enabled", .{}); + return error.InvalidBuildConfiguration; + } + + log(.info, .WebUI, "Building {s} WebUI library{s}...", .{ + if (is_dynamic) "dynamic" else "static", + if (enable_tls) " with TLS support" else "", + }); + defer { + log(.info, .WebUI, "Done.", .{}); + } + + const webui = if (builtin.zig_version.minor == 14) (if (is_dynamic) b.addSharedLibrary(.{ + .name = lib_name, + .target = target, + .optimize = optimize, + .pic = true, + }) else b.addStaticLibrary(.{ + .name = lib_name, + .target = target, + .optimize = optimize, + })) else b.addLibrary(.{ + .name = lib_name, + .linkage = if (is_dynamic) .dynamic else .static, + .root_module = b.createModule(.{ + // not, pic enabled, zig will not allow to build a static library + // .pic = is_dynamic, + .pic = if (is_dynamic) is_dynamic else true, + .target = target, + .optimize = optimize, + }), + }); + + try addLinkerFlags(b, webui, enable_tls, debug_dependencies, enable_webui_log); + + b.installArtifact(webui); + + try build_examples(b, webui); +} + +fn addLinkerFlags( + b: *Build, + webui: *Compile, + enable_tls: bool, + debug_dependencies: DebugDependencies, + enable_webui_log: bool, +) !void { + const webui_target = webui.rootModuleTarget(); + const is_windows = webui_target.os.tag == .windows; + const is_darwin = webui_target.os.tag == .macos; + const debug = webui.root_module.optimize.? == .Debug; + // In Zig 0.16, methods like addCSourceFile/linkLibC/addIncludePath/linkSystemLibrary/ + // linkFramework/addCMacro were removed from *Compile and live only on *Module. + // Routing every call through `mod` keeps the build script compatible with 0.14/0.15/0.16. + const mod = webui.root_module; + + // Prepare compiler flags. + const no_tls_flags: []const []const u8 = &.{"-DNO_SSL"}; + const tls_flags: []const []const u8 = &.{ "-DWEBUI_TLS", "-DNO_SSL_DL", "-DOPENSSL_API_1_1" }; + const civetweb_flags: []const []const u8 = &.{ + "-DNO_CACHING", + "-DNO_CGI", + "-DUSE_WEBSOCKET", + "-Wno-error=date-time", + }; + + if (debug and enable_webui_log) { + mod.addCMacro("WEBUI_LOG", ""); + } + mod.addCSourceFile(.{ + .file = b.path("src/webui.c"), + .flags = if (enable_tls) tls_flags else no_tls_flags, + }); + + // Add Win32 WebView2 C++ support on Windows + if (is_windows) { + mod.addCSourceFile(.{ + .file = b.path("src/webview/win32_wv2.cpp"), + .flags = if (enable_tls) tls_flags else no_tls_flags, + }); + mod.link_libcpp = true; + } + + const civetweb_debug = debug and debug_dependencies.contains(.civetweb); + mod.addCSourceFile(.{ + .file = b.path("src/civetweb/civetweb.c"), + .flags = if (enable_tls and !civetweb_debug) + civetweb_flags ++ tls_flags ++ .{"-DNDEBUG"} + else if (enable_tls and civetweb_debug) + civetweb_flags ++ tls_flags + else if (!enable_tls and !civetweb_debug) + civetweb_flags ++ .{"-DUSE_WEBSOCKET"} ++ no_tls_flags ++ .{"-DNDEBUG"} + else + civetweb_flags ++ .{"-DUSE_WEBSOCKET"} ++ no_tls_flags, + }); + mod.link_libc = true; + mod.addIncludePath(b.path("include")); + webui.installHeader(b.path("include/webui.h"), "webui.h"); + if (is_darwin) { + mod.addCSourceFile(.{ + .file = b.path("src/webview/wkwebview.m"), + .flags = &.{}, + }); + mod.linkFramework("Cocoa", .{}); + mod.linkFramework("WebKit", .{}); + } else if (is_windows) { + mod.linkSystemLibrary("ws2_32", .{}); + mod.linkSystemLibrary("ole32", .{}); + if (webui_target.abi == .msvc) { + mod.linkSystemLibrary("Advapi32", .{}); + mod.linkSystemLibrary("Shell32", .{}); + mod.linkSystemLibrary("user32", .{}); + } + if (enable_tls) { + mod.linkSystemLibrary("bcrypt", .{}); + } + } + if (enable_tls) { + mod.linkSystemLibrary("ssl", .{}); + mod.linkSystemLibrary("crypto", .{}); + } + + for (mod.link_objects.items) |lo| { + switch (lo) { + .c_source_file => |csf| { + log(.debug, .WebUI, "{s} linker flags:\n", .{ + csf.file.src_path.sub_path, + }); + for (csf.flags) |flag| { + log(.debug, .WebUI, " {s}", .{flag}); + } + }, + else => {}, + } + } +} + +fn build_examples(b: *Build, webui: *Compile) !void { + const build_examples_step = b.step("examples", "builds the library and its examples"); + + // Iterate examples/C. Zig 0.16 removed std.fs.cwd() and reworked Dir/Iterator + // to require an Io instance, so split the open+iterate path by version while + // sharing the per-example wiring below. + if (comptime builtin.zig_version.minor >= 17) { + const io = b.graph.io; + var examples_dir = b.root.root_dir.handle.openDir( + io, + "examples/C", + .{ .iterate = true }, + ) catch |e| switch (e) { + error.FileNotFound => return, + else => return e, + }; + defer examples_dir.close(io); + + var paths = examples_dir.iterate(); + while (try paths.next(io)) |val| { + if (val.kind != .directory) continue; + try add_example(b, webui, build_examples_step, val.name); + } + } else if (comptime builtin.zig_version.minor >= 16) { + const io = b.graph.io; + var examples_dir = b.build_root.handle.openDir( + io, + "examples/C", + .{ .iterate = true }, + ) catch |e| switch (e) { + error.FileNotFound => return, + else => return e, + }; + defer examples_dir.close(io); + + var paths = examples_dir.iterate(); + while (try paths.next(io)) |val| { + if (val.kind != .directory) continue; + try add_example(b, webui, build_examples_step, val.name); + } + } else { + const examples_path = b.path("examples/C").getPath(b); + var examples_dir = std.fs.cwd().openDir( + examples_path, + .{ .iterate = true }, + ) catch |e| switch (e) { + error.FileNotFound => return, + else => return e, + }; + defer examples_dir.close(); + + var paths = examples_dir.iterate(); + while (try paths.next()) |val| { + if (val.kind != .directory) continue; + try add_example(b, webui, build_examples_step, val.name); + } + } +} + +fn add_example( + b: *Build, + webui: *Compile, + build_examples_step: *Build.Step, + example_name: []const u8, +) !void { + const target = webui.root_module.resolved_target.?; + const optimize = webui.root_module.optimize.?; + + const exe = b.addExecutable(if (builtin.zig_version.minor == 14) .{ + .name = example_name, + .target = target, + .optimize = optimize, + } else .{ + .name = example_name, + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .pic = true, + }), + }); + const path = try std.fmt.allocPrint(b.allocator, "examples/C/{s}/main.c", .{example_name}); + defer b.allocator.free(path); + + // Route through root_module so Zig 0.16 (which removed these methods from *Compile) keeps working. + exe.root_module.addCSourceFile(.{ .file = b.path(path), .flags = &.{} }); + exe.root_module.linkLibrary(webui); + + const exe_install = b.addInstallArtifact(exe, .{}); + const exe_run = b.addRunArtifact(exe); + const step_name = try std.fmt.allocPrint(b.allocator, "run_{s}", .{example_name}); + defer b.allocator.free(step_name); + const step_desc = try std.fmt.allocPrint(b.allocator, "run example {s}", .{example_name}); + defer b.allocator.free(step_desc); + + const cwd = try std.fmt.allocPrint(b.allocator, "src/examples/{s}", .{example_name}); + defer b.allocator.free(cwd); + exe_run.setCwd(b.path(cwd)); + + exe_run.step.dependOn(&exe_install.step); + build_examples_step.dependOn(&exe_install.step); + b.step(step_name, step_desc).dependOn(&exe_run.step); +} + +/// Function to runtime-scope log levels based on build flag, for all scopes. +fn log( + comptime level: std.log.Level, + comptime scope: @TypeOf(.EnumLiteral), + comptime format: []const u8, + args: anytype, +) void { + const should_print: bool = @intFromEnum(global_log_level) >= @intFromEnum(level); + if (should_print) { + switch (comptime level) { + .err => std.log.scoped(scope).err(format, args), + .warn => std.log.scoped(scope).warn(format, args), + .info => std.log.scoped(scope).info(format, args), + .debug => std.log.scoped(scope).debug(format, args), + } + } +} diff --git a/v2/webui/build.zig.zon b/v2/webui/build.zig.zon new file mode 100644 index 0000000..0b80789 --- /dev/null +++ b/v2/webui/build.zig.zon @@ -0,0 +1,14 @@ +.{ + .name = .webui, + .version = "2.5.0-beta.4", + .fingerprint = 0xac5d87f2e5831aa7, + .paths = .{ + "src", + "include", + "bridge", + "build.zig", + "build.zig.zon", + "LICENSE", + "README.md", + }, +} diff --git a/v2/webui/conanfile.py b/v2/webui/conanfile.py new file mode 100644 index 0000000..f7e88b3 --- /dev/null +++ b/v2/webui/conanfile.py @@ -0,0 +1,33 @@ +from conan import ConanFile +from conan.tools.cmake import CMake, CMakeToolchain + +class WebuiConan(ConanFile): + name = "webui" + version = "2.5.0-beta.4" + license = "MIT" + url = "https://github.com/webui-dev/webui" + homepage = "https://webui.me" + description = "Use any web browser or WebView as GUI, with your preferred language in the backend and modern web technologies in the frontend, all in a lightweight portable library." + + settings = "os", "compiler", "build_type", "arch" + options = {"tls": [True, False], "shared": [True, False]} + default_options = {"tls": False, "shared": False} + + generators = "CMakeDeps" + + def generate(self): + tc = CMakeToolchain(self) + tc.variables["WEBUI_USE_TLS"] = self.options.tls + tc.variables["BUILD_SHARED_LIBS"] = self.options.shared + tc.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def requirements(self): + self.tool_requires("cmake/[>=3.18.0]") + + if self.options.tls: + self.requires("openssl/[>3.0.0]") \ No newline at end of file diff --git a/v2/webui/examples/C++/README.md b/v2/webui/examples/C++/README.md new file mode 100644 index 0000000..cd7aab0 --- /dev/null +++ b/v2/webui/examples/C++/README.md @@ -0,0 +1,39 @@ +# WebUI C++ Examples + +Examples of how to create a WebUI application in C++. + +The only requirement to build the examples is a a C++11 compiler. + +- `minimal`: Creates a minimal WebUI application. +- `call_cpp_from_js`: Calls C++ from JavaScript. +- `call_js_from_cpp`: Calls JavaScript from C++ using class methods and member-function bind. +- `serve_a_folder`: Uses WebUI to serve a folder with multiple files (class-based example using member-function bind). +- `virtual_file_system`: Embeds files using a virtual file system. +- `test_index_redirect`: Tests index fallback and custom entry behavior for `/`, `/sub`, and `/sub/foo`. + +To build an example, cd into its directory and run the make command. + +- **Windows** + + ```sh + # G++ + mingw32-make + + # MSVC + nmake + ``` + +- **Linux** + + ```sh + # G++ + make + + # Clang + make CXX=clang + ``` + +- **macOS** + ```sh + make + ``` diff --git a/v2/webui/examples/C++/call_cpp_from_js/GNUmakefile b/v2/webui/examples/C++/call_cpp_from_js/GNUmakefile new file mode 100644 index 0000000..1744c98 --- /dev/null +++ b/v2/webui/examples/C++/call_cpp_from_js/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C++ Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=g++` / `make CC=clang` +CC = g++ +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C++ Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C++ Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),g++ clang aarch64-linux-gnu-g++ arm-linux-gnueabihf-g++ musl-g++),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C++/call_cpp_from_js/Makefile b/v2/webui/examples/C++/call_cpp_from_js/Makefile new file mode 100644 index 0000000..67c1c11 --- /dev/null +++ b/v2/webui/examples/C++/call_cpp_from_js/Makefile @@ -0,0 +1,72 @@ +# WebUI C++ Example +# Windows - Microsoft Visual C++ + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Debug Static)... + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C++ Example (Debug Dynamic)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Release Static)... + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C++ Example (Release Dynamic)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C++/call_cpp_from_js/favicon.ico b/v2/webui/examples/C++/call_cpp_from_js/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C++/call_cpp_from_js/favicon.ico differ diff --git a/v2/webui/examples/C++/call_cpp_from_js/icon.rc b/v2/webui/examples/C++/call_cpp_from_js/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C++/call_cpp_from_js/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C++/call_cpp_from_js/main.cpp b/v2/webui/examples/C++/call_cpp_from_js/main.cpp new file mode 100644 index 0000000..90463ba --- /dev/null +++ b/v2/webui/examples/C++/call_cpp_from_js/main.cpp @@ -0,0 +1,279 @@ +// Call C++ from JavaScript Example + +#include "webui.hpp" +#include + +class CallCppFromJsApp { +public: + CallCppFromJsApp() { + // Bind HTML element IDs with class methods + win.bind("my_function_string", this, &CallCppFromJsApp::my_function_string); + win.bind("my_function_integer", this, &CallCppFromJsApp::my_function_integer); + win.bind("my_function_boolean", this, &CallCppFromJsApp::my_function_boolean); + win.bind("my_function_with_response", this, &CallCppFromJsApp::my_function_with_response); + } + + void run() { + const std::string html = R"V0G0N( + + + + + + + Call C++ from JavaScript Example + + + +
+

WebUI - Call C++ from JavaScript

+

Call C++ functions with arguments (See logs in terminal)

+
+ +
+
+
Standard Execution
+
+ + + +
+
+ +
+
Response Handling
+
+ +
+ + +
+
+
+
+ + + + + )V0G0N"; + + // Show the HTML page in the WebView/Browser window + win.show(html); + // win.show_browser(html, webui_browser::Chrome); + // win.show_wv(html); + + // Wait until the window gets closed + webui::wait(); + } + +private: + webui::window win; + + void my_function_string(webui::window::event* e) { + // JavaScript: my_function_string('Hello', 'World'); + std::string str_1 = e->get_string(); // Or e->get_string(0); + std::string str_2 = e->get_string(1); + std::cout << "my_function_string 1: " << str_1 << std::endl; // Hello + std::cout << "my_function_string 2: " << str_2 << std::endl; // World + } + + void my_function_integer(webui::window::event* e) { + // JavaScript: my_function_integer(123, 456, 789); + long long number_1 = e->get_int(); // Or e->get_int(0); + long long number_2 = e->get_int(1); + long long number_3 = e->get_int(2); + std::cout << "my_function_integer 1: " << number_1 << std::endl; // 123 + std::cout << "my_function_integer 2: " << number_2 << std::endl; // 456 + std::cout << "my_function_integer 3: " << number_3 << std::endl; // 789 + } + + void my_function_boolean(webui::window::event* e) { + // JavaScript: my_function_boolean(true, false); + bool status_1 = e->get_bool(); // Or e->get_bool(0); + bool status_2 = e->get_bool(1); + std::cout << "my_function_boolean 1: " << (status_1 ? "True" : "False") << std::endl; + std::cout << "my_function_boolean 2: " << (status_2 ? "True" : "False") << std::endl; + } + + void my_function_with_response(webui::window::event* e) { + // JavaScript: my_function_with_response(number, 2).then(...) + long long number = e->get_int(0); + long long times = e->get_int(1); + long long res = number * times; + std::cout << "my_function_with_response: " << number << " * " << times << " = " << res << std::endl; + // Send the response back to JavaScript + e->return_int(res); + } +}; + +int main() { + CallCppFromJsApp app; + app.run(); + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C++/call_js_from_cpp/GNUmakefile b/v2/webui/examples/C++/call_js_from_cpp/GNUmakefile new file mode 100644 index 0000000..1744c98 --- /dev/null +++ b/v2/webui/examples/C++/call_js_from_cpp/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C++ Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=g++` / `make CC=clang` +CC = g++ +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C++ Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C++ Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),g++ clang aarch64-linux-gnu-g++ arm-linux-gnueabihf-g++ musl-g++),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C++/call_js_from_cpp/Makefile b/v2/webui/examples/C++/call_js_from_cpp/Makefile new file mode 100644 index 0000000..67c1c11 --- /dev/null +++ b/v2/webui/examples/C++/call_js_from_cpp/Makefile @@ -0,0 +1,72 @@ +# WebUI C++ Example +# Windows - Microsoft Visual C++ + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Debug Static)... + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C++ Example (Debug Dynamic)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Release Static)... + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C++ Example (Release Dynamic)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C++/call_js_from_cpp/favicon.ico b/v2/webui/examples/C++/call_js_from_cpp/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C++/call_js_from_cpp/favicon.ico differ diff --git a/v2/webui/examples/C++/call_js_from_cpp/icon.rc b/v2/webui/examples/C++/call_js_from_cpp/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C++/call_js_from_cpp/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C++/call_js_from_cpp/main.cpp b/v2/webui/examples/C++/call_js_from_cpp/main.cpp new file mode 100644 index 0000000..30ff039 --- /dev/null +++ b/v2/webui/examples/C++/call_js_from_cpp/main.cpp @@ -0,0 +1,269 @@ +// Call JavaScript from C++ Example + +#include "webui.hpp" +#include +#include +#include + +class CounterApp { +public: + CounterApp() { + // Bind HTML element IDs with class methods + win.bind("my_function_count", this, &CounterApp::my_function_count); + win.bind("Exit", this, &CounterApp::exit_app); + } + + void run() { + const std::string html = R"V0G0N( + + + + + + + Call JavaScript from C++ Example + + + +
+

WebUI - Call JavaScript from C++

+
+ +
+
+
Current Count
+
0
+
+ +
+
Controls
+
+ + + +
+
+
+ + + + + )V0G0N"; + + // Set WebUI configuration to process UI events one at a time. + // This example calls C++ from JavaScript every 10ms, so it's + // recommended to set this to `true` to avoid race conditions. + webui::set_config(ui_event_blocking, true); + + // Show the HTML page in the WebView/Browser window + win.show(html); + // win.show_browser(html, webui_browser::Chrome); + // win.show_wv(html); + + // Wait until the window gets closed + webui::wait(); + } + +private: + webui::window win; + + void my_function_count(webui::window::event* e) { + // Create a buffer to hold the response + char response[64]; + + // Run JavaScript to get the current count value from the HTML page + if (!e->get_window().script("return GetCount();", 0, response, 64)) { + if (!e->get_window().is_shown()) + std::cout << "Window closed." << std::endl; + else + std::cout << "JavaScript Error: " << response << std::endl; + return; + } + + // Get the count, increment, and send it back + int count = std::stoi(response) + 1; + std::stringstream js; + js << "SetCount(" << count << ");"; + // Run JavaScript (no response) to update the count in the HTML page + e->get_window().run(js.str()); + } + + void exit_app(webui::window::event* e) { + // Exit the application, and close all windows. `webui::wait()` will return (Break). + webui::exit(); + } +}; + +int main() { + CounterApp app; + app.run(); + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C++/minimal/GNUmakefile b/v2/webui/examples/C++/minimal/GNUmakefile new file mode 100644 index 0000000..1744c98 --- /dev/null +++ b/v2/webui/examples/C++/minimal/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C++ Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=g++` / `make CC=clang` +CC = g++ +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C++ Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C++ Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),g++ clang aarch64-linux-gnu-g++ arm-linux-gnueabihf-g++ musl-g++),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C++/minimal/Makefile b/v2/webui/examples/C++/minimal/Makefile new file mode 100644 index 0000000..67c1c11 --- /dev/null +++ b/v2/webui/examples/C++/minimal/Makefile @@ -0,0 +1,72 @@ +# WebUI C++ Example +# Windows - Microsoft Visual C++ + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Debug Static)... + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C++ Example (Debug Dynamic)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Release Static)... + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C++ Example (Release Dynamic)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C++/minimal/favicon.ico b/v2/webui/examples/C++/minimal/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C++/minimal/favicon.ico differ diff --git a/v2/webui/examples/C++/minimal/icon.rc b/v2/webui/examples/C++/minimal/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C++/minimal/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C++/minimal/main.cpp b/v2/webui/examples/C++/minimal/main.cpp new file mode 100644 index 0000000..34f159d --- /dev/null +++ b/v2/webui/examples/C++/minimal/main.cpp @@ -0,0 +1,13 @@ +#include "webui.hpp" +#include + +int main() { + webui::window my_window; + my_window.show(" C++ Hello World ! "); + webui::wait(); + return 0; +} + +#ifdef _WIN32 +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C++/serve_a_folder/GNUmakefile b/v2/webui/examples/C++/serve_a_folder/GNUmakefile new file mode 100644 index 0000000..1744c98 --- /dev/null +++ b/v2/webui/examples/C++/serve_a_folder/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C++ Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=g++` / `make CC=clang` +CC = g++ +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C++ Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C++ Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),g++ clang aarch64-linux-gnu-g++ arm-linux-gnueabihf-g++ musl-g++),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C++/serve_a_folder/Makefile b/v2/webui/examples/C++/serve_a_folder/Makefile new file mode 100644 index 0000000..67c1c11 --- /dev/null +++ b/v2/webui/examples/C++/serve_a_folder/Makefile @@ -0,0 +1,72 @@ +# WebUI C++ Example +# Windows - Microsoft Visual C++ + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Debug Static)... + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C++ Example (Debug Dynamic)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Release Static)... + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C++ Example (Release Dynamic)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C++/serve_a_folder/favicon.ico b/v2/webui/examples/C++/serve_a_folder/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C++/serve_a_folder/favicon.ico differ diff --git a/v2/webui/examples/C++/serve_a_folder/icon.rc b/v2/webui/examples/C++/serve_a_folder/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C++/serve_a_folder/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C++/serve_a_folder/index.html b/v2/webui/examples/C++/serve_a_folder/index.html new file mode 100644 index 0000000..8b1da8c --- /dev/null +++ b/v2/webui/examples/C++/serve_a_folder/index.html @@ -0,0 +1,39 @@ + + + + + WebUI - Serve a Folder Example (C++) + + + +

Serve a Folder Example (C++)

+
+

+ You can edit this HTML file as you need.
+ Also, you can config WebUI to use Deno or Nodejs runtime for your JS/TS files.
+
+ Please click on the link to switch to the second page
+ Or click on the button to switch to the second page programmatically. +

+
+

Second Page As A Simple Link

+
+ +
+
+ + + + + + diff --git a/v2/webui/examples/C++/serve_a_folder/main.cpp b/v2/webui/examples/C++/serve_a_folder/main.cpp new file mode 100644 index 0000000..a8e274e --- /dev/null +++ b/v2/webui/examples/C++/serve_a_folder/main.cpp @@ -0,0 +1,100 @@ +// Serve A Folder C++ Example + +#include "webui.hpp" +#include + +class ServeAFolderApp { +public: + ServeAFolderApp() { + // Bind HTML element IDs with class methods + win.bind("SwitchToSecondPage", this, &ServeAFolderApp::switch_to_second_page); + win.bind("OpenNewWindow", this, &ServeAFolderApp::show_second_window); + win.bind("Exit", this, &ServeAFolderApp::exit_app); + my_second_window.bind("Exit", this, &ServeAFolderApp::exit_app); + + // Bind all events + win.bind("", this, &ServeAFolderApp::events); + my_second_window.bind("", this, &ServeAFolderApp::events); + } + + void run() { + // Print logs (debug build only) + std::cout << "Starting..." << std::endl; + + // Show the HTML page in the WebView/Browser window + win.show("index.html"); + // win.show_browser("index.html", webui_browser::Chrome); + // win.show_wv("index.html"); + + // Wait until all windows get closed + webui::wait(); + + // Print logs (debug build only) + std::cout << "Thank you." << std::endl; + } + +private: + webui::window win; + webui::window my_second_window; + + const char* event_type_to_string(size_t type) const { + switch (type) { + case webui::DISCONNECTED: return "DISCONNECTED"; + case webui::CONNECTED: return "CONNECTED"; + case webui::MOUSE_CLICK: return "MOUSE_CLICK"; + case webui::NAVIGATION: return "NAVIGATION"; + case webui::CALLBACKS: return "CALLBACKS"; + default: return "UNKNOWN"; + } + } + + // This method gets called every time the user clicks on "OpenNewWindow" + void show_second_window(webui::window::event* e) { + // Show a new window, and navigate to `/second.html` + // if the window is already opened, then switch in the same window + my_second_window.show("second.html"); + } + + // This method gets called every time the user clicks on "SwitchToSecondPage" + void switch_to_second_page(webui::window::event* e) { + // Switch to `/second.html` in the same opened window. + e->get_window().show("second.html"); + } + + // This method receives all events because it's bind with an empty HTML ID. + void events(webui::window::event* e) { + std::cout << "[events] window=" << e->window + << " type=" << e->get_type() + << " (" << event_type_to_string(e->get_type()) << ")" + << " element='" << e->get_element() + << "' event=" << e->get_number() + << std::endl; + + if (e->event_type == webui::CONNECTED) + std::cout << "Window Connected." << std::endl; + else if (e->event_type == webui::DISCONNECTED) + std::cout << "Window Disconnected." << std::endl; + else if (e->event_type == webui::MOUSE_CLICK) + std::cout << "Click on element: " << e->element << std::endl; + else if (e->event_type == webui::NAVIGATION) { + std::string url = e->get_string(); + std::cout << "Starting navigation to: " << url << std::endl; + e->get_window().navigate(url); + } + } + + void exit_app(webui::window::event* e) { + // Close all opened windows + webui::exit(); + } +}; + +int main() { + ServeAFolderApp app; + app.run(); + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C++/serve_a_folder/second.html b/v2/webui/examples/C++/serve_a_folder/second.html new file mode 100644 index 0000000..3d18970 --- /dev/null +++ b/v2/webui/examples/C++/serve_a_folder/second.html @@ -0,0 +1,26 @@ + + + + + WebUI - Second Page (C++) + + + +

This is the second page !

+
+ + + + + + diff --git a/v2/webui/examples/C++/test_index_redirect/GNUmakefile b/v2/webui/examples/C++/test_index_redirect/GNUmakefile new file mode 100644 index 0000000..1744c98 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C++ Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=g++` / `make CC=clang` +CC = g++ +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C++ Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C++ Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),g++ clang aarch64-linux-gnu-g++ arm-linux-gnueabihf-g++ musl-g++),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C++/test_index_redirect/Makefile b/v2/webui/examples/C++/test_index_redirect/Makefile new file mode 100644 index 0000000..67c1c11 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/Makefile @@ -0,0 +1,72 @@ +# WebUI C++ Example +# Windows - Microsoft Visual C++ + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Debug Static)... + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C++ Example (Debug Dynamic)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Release Static)... + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C++ Example (Release Dynamic)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C++/test_index_redirect/favicon.ico b/v2/webui/examples/C++/test_index_redirect/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C++/test_index_redirect/favicon.ico differ diff --git a/v2/webui/examples/C++/test_index_redirect/icon.rc b/v2/webui/examples/C++/test_index_redirect/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C++/test_index_redirect/main.cpp b/v2/webui/examples/C++/test_index_redirect/main.cpp new file mode 100644 index 0000000..b305ba7 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/main.cpp @@ -0,0 +1,87 @@ +#include "webui.hpp" +#include "vfs.h" + +// This example is used to verify redirect and fallback behavior for: +// /, /sub, /sub/foo +// in both storage modes: +// 1) set_root_folder(...) +// 2) set_file_handler(vfs) +// +// Server mode is the primary redirect test path because it exposes the raw +// HTTP behavior (302 Location targets) without mixing in window lifecycle. +// +// The expected server behavior is: +// - start_server("custom.html") prefers custom.html in every directory +// - an explicit filename is strict; if it does not exist, the request fails +// - start_server() or start_server("") means "fallback mode", which probes +// index.html, index.htm, index.ts, then index.js +// +// Note: index.ts and index.js can still be valid fallback targets for +// runtime/script-first scenarios, but they are not equivalent to an HTML GUI +// entry page. For normal GUI testing, HTML/HTM are the page-like entries. +int main(int argc, char *argv[]) +{ + bool serverMode = false; + bool vfsEnabled = false; + for (int i = 1; i < argc; ++i) + { + if (std::string(argv[i]) == "--server") + { + serverMode = true; + } + else if (std::string(argv[i]) == "--vfs") + { + vfsEnabled = true; + } + } + + webui::window window_; + webui::set_config(use_cookies, false); + + if (vfsEnabled) + { + window_.set_file_handler(vfs); + } + else + { + window_.set_root_folder("/home/gordon/Dokumenty/PlatformIO/Projects/webui/examples/C++/test_index_redirect/ui/"); + + // Absolute paths: + // window_.set_root_folder("/path/to/ui/"); + // window_.set_root_folder("/path/to/ui"); + + // Relative if ui folder is next to executable: + // window_.set_root_folder("ui/"); + // window_.set_root_folder("ui"); + } + + if (serverMode) + { + window_.set_port(8080); + + // Explicit custom entry file: + window_.start_server("custom.html"); + + // Redirect to the hardcoded index.* fallback list: + // window_.start_server(); + + } + else + { + // Explicit custom entry file: + window_.show("custom.html"); + // window_.show_browser("custom.html"); // AnyBrowser is the default second argument in C++. + + // Redirect to the hardcoded index.* fallback list: + // window_.show(); + // window_.show_browser(); + } + + webui::wait(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(__argc, __argv); } +#endif diff --git a/v2/webui/examples/C++/test_index_redirect/ui/custom.html b/v2/webui/examples/C++/test_index_redirect/ui/custom.html new file mode 100644 index 0000000..0abbe9c --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/custom.html @@ -0,0 +1,29 @@ + + + + + + ui/custom.html + + +

ui/custom.html

+

IDENTIFIER: ui/custom.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C++/test_index_redirect/ui/index.css b/v2/webui/examples/C++/test_index_redirect/ui/index.css new file mode 100644 index 0000000..6bc789d --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/index.css @@ -0,0 +1,4 @@ +/* IDENTIFIER: ui/index.css */ +/* Directory routes: / | /sub | /sub/foo */ +/* All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js */ +body { font-family: monospace; } diff --git a/v2/webui/examples/C++/test_index_redirect/ui/index.html b/v2/webui/examples/C++/test_index_redirect/ui/index.html new file mode 100644 index 0000000..120a792 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/index.html @@ -0,0 +1,29 @@ + + + + + + ui/index.html + + +

ui/index.html

+

IDENTIFIER: ui/index.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C++/test_index_redirect/ui/index.js b/v2/webui/examples/C++/test_index_redirect/ui/index.js new file mode 100644 index 0000000..4094538 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/index.js @@ -0,0 +1,4 @@ +// IDENTIFIER: ui/index.js +// Directory routes: / | /sub | /sub/foo +// All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js +console.log('IDENTIFIER: ui/index.js'); diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/custom.html b/v2/webui/examples/C++/test_index_redirect/ui/sub/custom.html new file mode 100644 index 0000000..e90b2d5 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/custom.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/custom.html + + +

ui/sub/custom.html

+

IDENTIFIER: ui/sub/custom.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/custom.html b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/custom.html new file mode 100644 index 0000000..2b57d8b --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/custom.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/foo/custom.html + + +

ui/sub/foo/custom.html

+

IDENTIFIER: ui/sub/foo/custom.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.css b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.css new file mode 100644 index 0000000..2ce12c5 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.css @@ -0,0 +1,4 @@ +/* IDENTIFIER: ui/sub/foo/index.css */ +/* Directory routes: / | /sub | /sub/foo */ +/* All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js */ +body { font-family: monospace; } diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.html b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.html new file mode 100644 index 0000000..86026d7 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/foo/index.html + + +

ui/sub/foo/index.html

+

IDENTIFIER: ui/sub/foo/index.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.js b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.js new file mode 100644 index 0000000..e4cef1a --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/foo/index.js @@ -0,0 +1,4 @@ +// IDENTIFIER: ui/sub/foo/index.js +// Directory routes: / | /sub | /sub/foo +// All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js +console.log('IDENTIFIER: ui/sub/foo/index.js'); diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/index.css b/v2/webui/examples/C++/test_index_redirect/ui/sub/index.css new file mode 100644 index 0000000..68962cd --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/index.css @@ -0,0 +1,4 @@ +/* IDENTIFIER: ui/sub/index.css */ +/* Directory routes: / | /sub | /sub/foo */ +/* All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js */ +body { font-family: monospace; } diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/index.html b/v2/webui/examples/C++/test_index_redirect/ui/sub/index.html new file mode 100644 index 0000000..912a3a7 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/index.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/index.html + + +

ui/sub/index.html

+

IDENTIFIER: ui/sub/index.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C++/test_index_redirect/ui/sub/index.js b/v2/webui/examples/C++/test_index_redirect/ui/sub/index.js new file mode 100644 index 0000000..9fd0f34 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/ui/sub/index.js @@ -0,0 +1,4 @@ +// IDENTIFIER: ui/sub/index.js +// Directory routes: / | /sub | /sub/foo +// All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js +console.log('IDENTIFIER: ui/sub/index.js'); diff --git a/v2/webui/examples/C++/test_index_redirect/vfs.h b/v2/webui/examples/C++/test_index_redirect/vfs.h new file mode 100644 index 0000000..bc1d600 --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/vfs.h @@ -0,0 +1,133 @@ +#ifndef VIRTUAL_FILE_SYSTEM_H +#define VIRTUAL_FILE_SYSTEM_H + +typedef struct { + const char *path; + const unsigned char *data; + int length; +} VirtualFile; + +static const unsigned char FILE_0[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_1[] = {0x2f,0x2a,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x20,0x7d,0x0d,0x0a}; + +static const unsigned char FILE_2[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_3[] = {0x2f,0x2f,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x2f,0x2f,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x0d,0x0a,0x2f,0x2f,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x0d,0x0a}; + +static const unsigned char FILE_4[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_5[] = {0x2f,0x2a,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x20,0x7d,0x0d,0x0a}; + +static const unsigned char FILE_6[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_7[] = {0x2f,0x2f,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x2f,0x2f,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x0d,0x0a,0x2f,0x2f,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x0d,0x0a}; + +static const unsigned char FILE_8[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_9[] = {0x2f,0x2a,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x20,0x7d,0x0d,0x0a}; + +static const unsigned char FILE_10[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_11[] = {0x2f,0x2f,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x2f,0x2f,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x0d,0x0a,0x2f,0x2f,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x0d,0x0a}; + + +static const VirtualFile virtual_files[] = { + { + "/custom.html", + FILE_0, + 1170 + }, + { + "/index.css", + FILE_1, + 315 + }, + { + "/index.html", + FILE_2, + 1167 + }, + { + "/index.js", + FILE_3, + 312 + }, + { + "/sub/custom.html", + FILE_4, + 1182 + }, + { + "/sub/index.css", + FILE_5, + 319 + }, + { + "/sub/index.html", + FILE_6, + 1179 + }, + { + "/sub/index.js", + FILE_7, + 320 + }, + { + "/sub/foo/custom.html", + FILE_8, + 1194 + }, + { + "/sub/foo/index.css", + FILE_9, + 323 + }, + { + "/sub/foo/index.html", + FILE_10, + 1191 + }, + { + "/sub/foo/index.js", + FILE_11, + 328 + }, +}; + +static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]); + +bool virtual_file_system(const char* path, const unsigned char** file, int* length) { + for (int i = 0; i < virtual_files_count; ++i) { + if(virtual_files[i].path != NULL) { + if (strcmp(virtual_files[i].path, path) == 0) { + *file = virtual_files[i].data; + *length = virtual_files[i].length; + return true; + } + } + } + return false; +} + +const void* vfs(const char* path, int* length) { + const unsigned char* file_data; + int file_length; + + if (virtual_file_system(path, &file_data, &file_length)) { + const char* content_type = webui_get_mime_type(path); + const char* http_header_template = "HTTP/1.1 200 OK\r\n" + "Content-Type: %s\r\n" + "Content-Length: %d\r\n" + "Cache-Control: no-cache\r\n\r\n"; + int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length); + *length = header_length + file_length; + unsigned char* response = (unsigned char*) webui_malloc(*length); + snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length); + memcpy(response + header_length, file_data, file_length); + return response; + } + return NULL; +} + +#endif // VIRTUAL_FILE_SYSTEM_H diff --git a/v2/webui/examples/C++/test_index_redirect/vfs.py b/v2/webui/examples/C++/test_index_redirect/vfs.py new file mode 100644 index 0000000..2167b1e --- /dev/null +++ b/v2/webui/examples/C++/test_index_redirect/vfs.py @@ -0,0 +1,101 @@ +# WebUI Library +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# WebUI Virtual File System Generator +# v2.1 + +import os +import sys + +def generate_vfs_header(directory, output_header): + files = [] + + for root, _, filenames in os.walk(directory): + for filename in filenames: + filepath = os.path.join(root, filename) + relative_path = os.path.relpath(filepath, directory) + # Ensure path starts with a slash + relative_path = '/' + relative_path.replace('\\', '/') + files.append((relative_path, filepath)) + + with open(output_header, 'w') as header: + header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n') + header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n') + + header.write('typedef struct {\n') + header.write(' const char *path;\n') + header.write(' const unsigned char *data;\n') + header.write(' int length;\n') + header.write('} VirtualFile;\n\n') + + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(f'static const unsigned char FILE_{i}[] = {{') + header.write(','.join(f'0x{byte:02x}' for byte in data)) + header.write('};\n\n') + + header.write('\nstatic const VirtualFile virtual_files[] = {\n') + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(' {\n') + header.write(f' "{relative_path}",\n') + header.write(f' FILE_{i},\n') + header.write(f' {len(data)}\n') + header.write(' },\n') + if not files: + header.write(' {NULL, NULL, 0}\n') + header.write('};\n\n') + + header.write('static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]);\n\n') + + header.write('bool virtual_file_system(const char* path, const unsigned char** file, int* length) {\n') + header.write(' for (int i = 0; i < virtual_files_count; ++i) {\n') + header.write(' if(virtual_files[i].path != NULL) {\n') + header.write(' if (strcmp(virtual_files[i].path, path) == 0) {\n') + header.write(' *file = virtual_files[i].data;\n') + header.write(' *length = virtual_files[i].length;\n') + header.write(' return true;\n') + header.write(' }\n') + header.write(' }\n') + header.write(' }\n') + header.write(' return false;\n') + header.write('}\n\n') + + header.write('const void* vfs(const char* path, int* length) {\n') + header.write(' const unsigned char* file_data;\n') + header.write(' int file_length;\n\n') + + header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n') + header.write(' const char* content_type = webui_get_mime_type(path);\n') + header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n') + header.write(' "Content-Type: %s\\r\\n"\n') + header.write(' "Content-Length: %d\\r\\n"\n') + header.write(' "Cache-Control: no-cache\\r\\n\\r\\n";\n') + header.write(' int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length);\n') + header.write(' *length = header_length + file_length;\n') + header.write(' unsigned char* response = (unsigned char*) webui_malloc(*length);\n') + header.write(' snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length);\n') + header.write(' memcpy(response + header_length, file_data, file_length);\n') + header.write(' return response;\n') + header.write(' }\n') + header.write(' return NULL;\n') + header.write('}\n\n') + + header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n') + +if __name__ == '__main__': + if len(sys.argv) != 3: + print(f'Usage: {sys.argv[0]} ') + sys.exit(1) + + directory = sys.argv[1] + output_header = sys.argv[2] + generate_vfs_header(directory, output_header) + print(f'Generated {output_header} from {directory}') diff --git a/v2/webui/examples/C++/virtual_file_system/GNUmakefile b/v2/webui/examples/C++/virtual_file_system/GNUmakefile new file mode 100644 index 0000000..1744c98 --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C++ Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=g++` / `make CC=clang` +CC = g++ +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = -std=c++17 main.cpp -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C++ Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C++ Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C++ Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),g++ clang aarch64-linux-gnu-g++ arm-linux-gnueabihf-g++ musl-g++),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C++/virtual_file_system/Makefile b/v2/webui/examples/C++/virtual_file_system/Makefile new file mode 100644 index 0000000..67c1c11 --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/Makefile @@ -0,0 +1,72 @@ +# WebUI C++ Example +# Windows - Microsoft Visual C++ + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Debug Static)... + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C++ Example (Debug Dynamic)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)/debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C++ Example (Release Static)... + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C++ Example (Release Dynamic)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /EHsc /std:c++17 main.cpp icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C++/virtual_file_system/favicon.ico b/v2/webui/examples/C++/virtual_file_system/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C++/virtual_file_system/favicon.ico differ diff --git a/v2/webui/examples/C++/virtual_file_system/icon.rc b/v2/webui/examples/C++/virtual_file_system/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C++/virtual_file_system/main.cpp b/v2/webui/examples/C++/virtual_file_system/main.cpp new file mode 100644 index 0000000..a2ff9bf --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/main.cpp @@ -0,0 +1,57 @@ +// Virtual File System Example C++ + +#include "webui.hpp" +#include "vfs.h" + +class VirtualFileSystemApp { +public: + VirtualFileSystemApp() { + + // Bind the "Exit" button in the HTML to the exit_app() method in C++ + win.bind("Exit", this, &VirtualFileSystemApp::exit_app); + + // VSF (Virtual File System) C++ Example + // + // 1. Run Python script to generate header file of a folder + // python vfs.py "/path/to/folder" "vfs.h" + // + // 2. Include header file in your C++ project + // #include "vfs.h" + // + // 3. Use vfs in your custom files handler `webui::window::set_file_handler()` + // win.set_file_handler(vfs); + + win.set_file_handler(vfs); + } + + void run() { + // Show the main page (index.html) in the WebView/Browser window + win.show("index.html"); + // win.show_browser("index.html", webui_browser::Chrome); + // win.show_wv("index.html"); + + // Wait until the window gets closed + webui::wait(); + + // Clean up WebUI resources. This is optional, but recommended. + webui::clean(); + } + +private: + webui::window win; + + void exit_app(webui::window::event* e) { + // Exit the application, and close all windows. `webui::wait()` will return (Break). + webui::exit(); + } +}; + +int main() { + VirtualFileSystemApp app; + app.run(); + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C++/virtual_file_system/ui/index.html b/v2/webui/examples/C++/virtual_file_system/ui/index.html new file mode 100644 index 0000000..7c04de4 --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/ui/index.html @@ -0,0 +1,135 @@ + + + + + WebUI - Virtual File System C++ + + + +

Virtual File System C++ Example

+
+ +
+

+ This file is embedded in this C++ application.
+

+

/sub

+
+ + + + + + + + diff --git a/v2/webui/examples/C++/virtual_file_system/ui/sub/index.html b/v2/webui/examples/C++/virtual_file_system/ui/sub/index.html new file mode 100644 index 0000000..7fa3dc3 --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/ui/sub/index.html @@ -0,0 +1,64 @@ + + + + + WebUI - Virtual File System C++ + + + +

+ This is another file embedded in this C++ application.
+

+
+ + + + + + + diff --git a/v2/webui/examples/C++/virtual_file_system/ui/svg/webui.svg b/v2/webui/examples/C++/virtual_file_system/ui/svg/webui.svg new file mode 100644 index 0000000..5cf0cf7 --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/ui/svg/webui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/webui/examples/C++/virtual_file_system/vfs.h b/v2/webui/examples/C++/virtual_file_system/vfs.h new file mode 100644 index 0000000..ebbe33d --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/vfs.h @@ -0,0 +1,70 @@ +#ifndef VIRTUAL_FILE_SYSTEM_H +#define VIRTUAL_FILE_SYSTEM_H + +typedef struct { + const char *path; + const unsigned char *data; + int length; +} VirtualFile; + +static const unsigned char FILE_0[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x09,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x55,0x54,0x46,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x57,0x65,0x62,0x55,0x49,0x20,0x2d,0x20,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x46,0x69,0x6c,0x65,0x20,0x53,0x79,0x73,0x74,0x65,0x6d,0x20,0x43,0x2b,0x2b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x27,0x41,0x72,0x69,0x61,0x6c,0x27,0x2c,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x6c,0x69,0x6e,0x65,0x61,0x72,0x2d,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x28,0x74,0x6f,0x20,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x23,0x35,0x30,0x37,0x64,0x39,0x31,0x2c,0x20,0x23,0x31,0x63,0x35,0x39,0x36,0x66,0x2c,0x20,0x23,0x30,0x32,0x32,0x37,0x33,0x37,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x38,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x2c,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x31,0x30,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x33,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x63,0x63,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x78,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x30,0x20,0x33,0x70,0x78,0x20,0x35,0x70,0x78,0x20,0x72,0x67,0x62,0x61,0x28,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2e,0x31,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x30,0x2e,0x32,0x73,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x66,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x36,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x68,0x31,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x2d,0x37,0x70,0x78,0x20,0x31,0x30,0x70,0x78,0x20,0x37,0x70,0x78,0x20,0x72,0x67,0x62,0x28,0x36,0x37,0x20,0x35,0x37,0x20,0x35,0x37,0x20,0x2f,0x20,0x37,0x36,0x25,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x63,0x39,0x39,0x31,0x33,0x64,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x3a,0x66,0x6f,0x63,0x75,0x73,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x6f,0x75,0x74,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x6c,0x69,0x6e,0x6b,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x61,0x63,0x74,0x69,0x76,0x65,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x76,0x69,0x73,0x69,0x74,0x65,0x64,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x30,0x62,0x63,0x61,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x68,0x33,0x20,0x69,0x64,0x3d,0x22,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x46,0x69,0x6c,0x65,0x20,0x53,0x79,0x73,0x74,0x65,0x6d,0x20,0x43,0x2b,0x2b,0x20,0x45,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3c,0x2f,0x68,0x33,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x73,0x76,0x67,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x73,0x76,0x67,0x22,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x54,0x68,0x69,0x73,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x73,0x20,0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x69,0x73,0x20,0x43,0x2b,0x2b,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x68,0x34,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x68,0x34,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x69,0x64,0x3d,0x22,0x45,0x78,0x69,0x74,0x22,0x3e,0x45,0x78,0x69,0x74,0x3c,0x2f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x21,0x2d,0x2d,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x61,0x70,0x70,0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x09,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x2f,0x2f,0x20,0x4a,0x61,0x76,0x61,0x53,0x63,0x72,0x69,0x70,0x74,0x20,0x45,0x78,0x61,0x6d,0x70,0x6c,0x65,0x0d,0x0a,0x09,0x09,0x2f,0x2a,0x0d,0x0a,0x09,0x09,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x27,0x44,0x4f,0x4d,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x4c,0x6f,0x61,0x64,0x65,0x64,0x27,0x2c,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x4f,0x4d,0x20,0x69,0x73,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x2e,0x20,0x43,0x68,0x65,0x63,0x6b,0x20,0x69,0x66,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x60,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x69,0x73,0x20,0x61,0x76,0x61,0x69,0x6c,0x61,0x62,0x6c,0x65,0x0d,0x0a,0x09,0x09,0x09,0x69,0x66,0x20,0x28,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x65,0x62,0x75,0x69,0x20,0x21,0x3d,0x3d,0x20,0x27,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x27,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x53,0x65,0x74,0x20,0x65,0x76,0x65,0x6e,0x74,0x73,0x20,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x2e,0x73,0x65,0x74,0x45,0x76,0x65,0x6e,0x74,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x28,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x69,0x66,0x20,0x28,0x65,0x20,0x3d,0x3d,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x65,0x76,0x65,0x6e,0x74,0x2e,0x43,0x4f,0x4e,0x4e,0x45,0x43,0x54,0x45,0x44,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x20,0x69,0x73,0x20,0x65,0x73,0x74,0x61,0x62,0x6c,0x69,0x73,0x68,0x65,0x64,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x65,0x64,0x2e,0x27,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x54,0x65,0x73,0x74,0x28,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x20,0x28,0x65,0x20,0x3d,0x3d,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x65,0x76,0x65,0x6e,0x74,0x2e,0x44,0x49,0x53,0x43,0x4f,0x4e,0x4e,0x45,0x43,0x54,0x45,0x44,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x20,0x69,0x73,0x20,0x6c,0x6f,0x73,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x44,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x65,0x64,0x2e,0x27,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x54,0x68,0x65,0x20,0x76,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x66,0x69,0x6c,0x65,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x60,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x64,0x0d,0x0a,0x09,0x09,0x09,0x09,0x61,0x6c,0x65,0x72,0x74,0x28,0x27,0x50,0x6c,0x65,0x61,0x73,0x65,0x20,0x61,0x64,0x64,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x20,0x74,0x6f,0x20,0x79,0x6f,0x75,0x72,0x20,0x48,0x54,0x4d,0x4c,0x2e,0x27,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x65,0x62,0x75,0x69,0x54,0x65,0x73,0x74,0x28,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x20,0x61,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x0d,0x0a,0x09,0x09,0x09,0x69,0x66,0x20,0x28,0x77,0x65,0x62,0x75,0x69,0x2e,0x69,0x73,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x65,0x64,0x28,0x29,0x29,0x20,0x7b,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x57,0x68,0x65,0x6e,0x20,0x79,0x6f,0x75,0x20,0x62,0x69,0x6e,0x64,0x20,0x61,0x20,0x66,0x75,0x6e,0x63,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x77,0x65,0x62,0x75,0x69,0x20,0x77,0x69,0x6c,0x6c,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x74,0x68,0x65,0x20,0x60,0x66,0x75,0x6e,0x63,0x60,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x69,0x6e,0x20,0x74,0x68,0x72,0x65,0x65,0x20,0x70,0x6c,0x61,0x63,0x65,0x73,0x3a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x20,0x20,0x3a,0x20,0x66,0x75,0x6e,0x63,0x28,0x2e,0x2e,0x2e,0x29,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x3a,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x66,0x75,0x6e,0x63,0x28,0x2e,0x2e,0x2e,0x29,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x4d,0x65,0x74,0x68,0x6f,0x64,0x20,0x20,0x20,0x3a,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x27,0x66,0x75,0x6e,0x63,0x27,0x2c,0x20,0x2e,0x2e,0x2e,0x29,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x5b,0x21,0x5d,0x20,0x4e,0x6f,0x74,0x65,0x3a,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x73,0x20,0x63,0x72,0x65,0x61,0x74,0x69,0x6f,0x6e,0x20,0x66,0x61,0x69,0x6c,0x73,0x20,0x77,0x68,0x65,0x6e,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x61,0x20,0x73,0x69,0x6d,0x69,0x6c,0x61,0x72,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x61,0x6c,0x72,0x65,0x61,0x64,0x79,0x20,0x65,0x78,0x69,0x73,0x74,0x2e,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x74,0x20,0x66,0x6f,0x6f,0x20,0x3d,0x20,0x27,0x48,0x65,0x6c,0x6c,0x6f,0x27,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x74,0x20,0x62,0x61,0x72,0x20,0x3d,0x20,0x31,0x32,0x33,0x34,0x35,0x36,0x3b,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x69,0x6e,0x67,0x20,0x61,0x73,0x20,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x6f,0x20,0x73,0x6f,0x6d,0x65,0x74,0x68,0x69,0x6e,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x60,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x69,0x6e,0x67,0x20,0x61,0x73,0x20,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x6f,0x66,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x2e,0x60,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x2e,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x6f,0x20,0x73,0x6f,0x6d,0x65,0x74,0x68,0x69,0x6e,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x60,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x69,0x6e,0x67,0x20,0x75,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x29,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x27,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x27,0x2c,0x20,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x6f,0x20,0x73,0x6f,0x6d,0x65,0x74,0x68,0x69,0x6e,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x60,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x55,0x73,0x69,0x6e,0x67,0x20,0x61,0x77,0x61,0x69,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x20,0x3d,0x20,0x61,0x77,0x61,0x69,0x74,0x20,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x20,0x3d,0x20,0x61,0x77,0x61,0x69,0x74,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x20,0x3d,0x20,0x61,0x77,0x61,0x69,0x74,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x27,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x27,0x2c,0x20,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x2a,0x2f,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_1[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x09,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x55,0x54,0x46,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x57,0x65,0x62,0x55,0x49,0x20,0x2d,0x20,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x46,0x69,0x6c,0x65,0x20,0x53,0x79,0x73,0x74,0x65,0x6d,0x20,0x43,0x2b,0x2b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x27,0x41,0x72,0x69,0x61,0x6c,0x27,0x2c,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x6c,0x69,0x6e,0x65,0x61,0x72,0x2d,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x28,0x74,0x6f,0x20,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x23,0x35,0x30,0x37,0x64,0x39,0x31,0x2c,0x20,0x23,0x31,0x63,0x35,0x39,0x36,0x66,0x2c,0x20,0x23,0x30,0x32,0x32,0x37,0x33,0x37,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x38,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x2c,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x31,0x30,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x33,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x63,0x63,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x78,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x30,0x20,0x33,0x70,0x78,0x20,0x35,0x70,0x78,0x20,0x72,0x67,0x62,0x61,0x28,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2e,0x31,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x30,0x2e,0x32,0x73,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x66,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x36,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x68,0x31,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x2d,0x37,0x70,0x78,0x20,0x31,0x30,0x70,0x78,0x20,0x37,0x70,0x78,0x20,0x72,0x67,0x62,0x28,0x36,0x37,0x20,0x35,0x37,0x20,0x35,0x37,0x20,0x2f,0x20,0x37,0x36,0x25,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x63,0x39,0x39,0x31,0x33,0x64,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x3a,0x66,0x6f,0x63,0x75,0x73,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x6f,0x75,0x74,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x6c,0x69,0x6e,0x6b,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x61,0x63,0x74,0x69,0x76,0x65,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x76,0x69,0x73,0x69,0x74,0x65,0x64,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x30,0x62,0x63,0x61,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,0x6e,0x6f,0x74,0x68,0x65,0x72,0x20,0x66,0x69,0x6c,0x65,0x20,0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x69,0x73,0x20,0x43,0x2b,0x2b,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x69,0x64,0x3d,0x22,0x45,0x78,0x69,0x74,0x22,0x3e,0x45,0x78,0x69,0x74,0x3c,0x2f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x21,0x2d,0x2d,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x61,0x70,0x70,0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x09,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_2[] = {0x3c,0x73,0x76,0x67,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x30,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x32,0x30,0x70,0x78,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x62,0x78,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x62,0x6f,0x78,0x79,0x2d,0x73,0x76,0x67,0x2e,0x63,0x6f,0x6d,0x22,0x3e,0x20,0x3c,0x64,0x65,0x66,0x73,0x3e,0x20,0x3c,0x6d,0x61,0x73,0x6b,0x20,0x69,0x64,0x3d,0x22,0x63,0x69,0x72,0x63,0x6c,0x65,0x2d,0x6d,0x61,0x73,0x6b,0x22,0x3e,0x20,0x3c,0x72,0x65,0x63,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x2f,0x3e,0x20,0x3c,0x63,0x69,0x72,0x63,0x6c,0x65,0x20,0x63,0x78,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x63,0x79,0x3d,0x22,0x36,0x30,0x22,0x20,0x72,0x3d,0x22,0x31,0x36,0x2e,0x38,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x6d,0x61,0x73,0x6b,0x3e,0x20,0x3c,0x62,0x78,0x3a,0x67,0x72,0x69,0x64,0x20,0x78,0x3d,0x22,0x30,0x22,0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x38,0x33,0x2e,0x33,0x36,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x39,0x36,0x2e,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x64,0x65,0x66,0x73,0x3e,0x20,0x3c,0x72,0x65,0x63,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x32,0x61,0x36,0x36,0x39,0x39,0x22,0x20,0x6d,0x61,0x73,0x6b,0x3d,0x22,0x75,0x72,0x6c,0x28,0x23,0x63,0x69,0x72,0x63,0x6c,0x65,0x2d,0x6d,0x61,0x73,0x6b,0x29,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x22,0x2f,0x3e,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x20,0x33,0x39,0x31,0x2e,0x30,0x37,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x33,0x38,0x36,0x2e,0x38,0x34,0x32,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x33,0x38,0x39,0x2e,0x30,0x32,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x33,0x39,0x32,0x2e,0x33,0x35,0x38,0x20,0x33,0x37,0x31,0x2e,0x35,0x38,0x34,0x20,0x4c,0x20,0x33,0x39,0x37,0x2e,0x32,0x30,0x32,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x33,0x39,0x39,0x2e,0x33,0x30,0x32,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x30,0x34,0x2e,0x31,0x34,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x4c,0x20,0x34,0x30,0x37,0x2e,0x35,0x30,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x30,0x39,0x2e,0x36,0x30,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x30,0x35,0x2e,0x33,0x37,0x38,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x30,0x33,0x2e,0x31,0x39,0x34,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x33,0x39,0x38,0x2e,0x32,0x33,0x38,0x20,0x33,0x35,0x38,0x2e,0x33,0x39,0x36,0x20,0x4c,0x20,0x33,0x39,0x33,0x2e,0x32,0x35,0x34,0x20,0x33,0x37,0x35,0x20,0x5a,0x20,0x4d,0x20,0x34,0x31,0x32,0x2e,0x37,0x31,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x31,0x32,0x2e,0x37,0x31,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x37,0x33,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x37,0x33,0x38,0x20,0x33,0x35,0x37,0x2e,0x33,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x35,0x37,0x2e,0x33,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x36,0x34,0x2e,0x31,0x36,0x34,0x20,0x4c,0x20,0x34,0x32,0x32,0x2e,0x36,0x32,0x32,0x20,0x33,0x36,0x34,0x2e,0x31,0x36,0x34,0x20,0x4c,0x20,0x34,0x32,0x32,0x2e,0x36,0x32,0x32,0x20,0x33,0x36,0x36,0x2e,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x36,0x36,0x2e,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x37,0x33,0x2e,0x30,0x39,0x36,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x38,0x35,0x20,0x33,0x37,0x33,0x2e,0x30,0x39,0x36,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x38,0x35,0x20,0x33,0x37,0x35,0x20,0x5a,0x20,0x4d,0x20,0x34,0x32,0x39,0x2e,0x39,0x35,0x39,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x32,0x39,0x2e,0x39,0x35,0x39,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x33,0x37,0x2e,0x39,0x31,0x31,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x51,0x20,0x34,0x33,0x39,0x2e,0x38,0x31,0x35,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x34,0x34,0x31,0x2e,0x32,0x30,0x31,0x20,0x33,0x35,0x36,0x2e,0x30,0x31,0x36,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x35,0x38,0x37,0x20,0x33,0x35,0x36,0x2e,0x36,0x33,0x32,0x20,0x34,0x34,0x33,0x2e,0x33,0x34,0x33,0x20,0x33,0x35,0x37,0x2e,0x37,0x36,0x36,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x30,0x39,0x39,0x20,0x33,0x35,0x38,0x2e,0x39,0x20,0x34,0x34,0x34,0x2e,0x30,0x39,0x39,0x20,0x33,0x36,0x30,0x2e,0x34,0x34,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x30,0x39,0x39,0x20,0x33,0x36,0x31,0x2e,0x39,0x35,0x32,0x20,0x34,0x34,0x33,0x2e,0x33,0x30,0x31,0x20,0x33,0x36,0x33,0x2e,0x30,0x37,0x32,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x35,0x30,0x33,0x20,0x33,0x36,0x34,0x2e,0x31,0x39,0x32,0x20,0x34,0x34,0x31,0x2e,0x31,0x30,0x33,0x20,0x33,0x36,0x34,0x2e,0x37,0x38,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x38,0x36,0x37,0x20,0x33,0x36,0x35,0x2e,0x33,0x31,0x32,0x20,0x34,0x34,0x33,0x2e,0x38,0x38,0x39,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x39,0x31,0x31,0x20,0x33,0x36,0x37,0x2e,0x37,0x37,0x36,0x20,0x34,0x34,0x34,0x2e,0x39,0x31,0x31,0x20,0x33,0x36,0x39,0x2e,0x34,0x38,0x34,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x39,0x31,0x31,0x20,0x33,0x37,0x31,0x2e,0x31,0x36,0x34,0x20,0x34,0x34,0x34,0x2e,0x30,0x38,0x35,0x20,0x33,0x37,0x32,0x2e,0x34,0x31,0x20,0x51,0x20,0x34,0x34,0x33,0x2e,0x32,0x35,0x39,0x20,0x33,0x37,0x33,0x2e,0x36,0x35,0x36,0x20,0x34,0x34,0x31,0x2e,0x37,0x36,0x31,0x20,0x33,0x37,0x34,0x2e,0x33,0x32,0x38,0x20,0x51,0x20,0x34,0x34,0x30,0x2e,0x32,0x36,0x33,0x20,0x33,0x37,0x35,0x20,0x34,0x33,0x38,0x2e,0x32,0x34,0x37,0x20,0x33,0x37,0x35,0x20,0x5a,0x20,0x4d,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x36,0x33,0x2e,0x39,0x34,0x20,0x4c,0x20,0x34,0x33,0x37,0x2e,0x37,0x39,0x39,0x20,0x33,0x36,0x33,0x2e,0x39,0x34,0x20,0x51,0x20,0x34,0x33,0x39,0x2e,0x37,0x30,0x33,0x20,0x33,0x36,0x33,0x2e,0x39,0x34,0x20,0x34,0x34,0x30,0x2e,0x38,0x33,0x37,0x20,0x33,0x36,0x33,0x2e,0x30,0x34,0x34,0x20,0x51,0x20,0x34,0x34,0x31,0x2e,0x39,0x37,0x31,0x20,0x33,0x36,0x32,0x2e,0x31,0x34,0x38,0x20,0x34,0x34,0x31,0x2e,0x39,0x37,0x31,0x20,0x33,0x36,0x30,0x2e,0x36,0x30,0x38,0x20,0x51,0x20,0x34,0x34,0x31,0x2e,0x39,0x37,0x31,0x20,0x33,0x35,0x39,0x2e,0x30,0x36,0x38,0x20,0x34,0x34,0x30,0x2e,0x38,0x33,0x37,0x20,0x33,0x35,0x38,0x2e,0x31,0x37,0x32,0x20,0x51,0x20,0x34,0x33,0x39,0x2e,0x37,0x30,0x33,0x20,0x33,0x35,0x37,0x2e,0x32,0x37,0x36,0x20,0x34,0x33,0x37,0x2e,0x37,0x39,0x39,0x20,0x33,0x35,0x37,0x2e,0x32,0x37,0x36,0x20,0x4c,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x35,0x37,0x2e,0x32,0x37,0x36,0x20,0x5a,0x20,0x4d,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x4c,0x20,0x34,0x33,0x38,0x2e,0x30,0x37,0x39,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x51,0x20,0x34,0x34,0x30,0x2e,0x32,0x30,0x37,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x34,0x34,0x31,0x2e,0x34,0x36,0x37,0x20,0x33,0x37,0x32,0x2e,0x31,0x31,0x36,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x37,0x32,0x37,0x20,0x33,0x37,0x31,0x2e,0x31,0x30,0x38,0x20,0x34,0x34,0x32,0x2e,0x37,0x32,0x37,0x20,0x33,0x36,0x39,0x2e,0x34,0x32,0x38,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x37,0x32,0x37,0x20,0x33,0x36,0x37,0x2e,0x37,0x34,0x38,0x20,0x34,0x34,0x31,0x2e,0x34,0x36,0x37,0x20,0x33,0x36,0x36,0x2e,0x37,0x34,0x20,0x51,0x20,0x34,0x34,0x30,0x2e,0x32,0x30,0x37,0x20,0x33,0x36,0x35,0x2e,0x37,0x33,0x32,0x20,0x34,0x33,0x38,0x2e,0x30,0x37,0x39,0x20,0x33,0x36,0x35,0x2e,0x37,0x33,0x32,0x20,0x4c,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x36,0x35,0x2e,0x37,0x33,0x32,0x20,0x5a,0x22,0x20,0x74,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28,0x31,0x2e,0x32,0x36,0x34,0x35,0x39,0x32,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x31,0x2e,0x32,0x34,0x30,0x33,0x30,0x33,0x2c,0x20,0x2d,0x34,0x38,0x33,0x2e,0x38,0x39,0x39,0x33,0x35,0x33,0x2c,0x20,0x2d,0x33,0x35,0x35,0x2e,0x38,0x34,0x35,0x31,0x35,0x34,0x29,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x20,0x72,0x67,0x62,0x28,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x29,0x3b,0x22,0x2f,0x3e,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x20,0x34,0x35,0x36,0x2e,0x33,0x33,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x51,0x20,0x34,0x35,0x33,0x2e,0x36,0x37,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x34,0x35,0x31,0x2e,0x37,0x33,0x32,0x20,0x33,0x37,0x34,0x2e,0x32,0x31,0x36,0x20,0x51,0x20,0x34,0x34,0x39,0x2e,0x37,0x38,0x36,0x20,0x33,0x37,0x33,0x2e,0x31,0x35,0x32,0x20,0x34,0x34,0x38,0x2e,0x37,0x32,0x32,0x20,0x33,0x37,0x31,0x2e,0x31,0x37,0x38,0x20,0x51,0x20,0x34,0x34,0x37,0x2e,0x36,0x35,0x38,0x20,0x33,0x36,0x39,0x2e,0x32,0x30,0x34,0x20,0x34,0x34,0x37,0x2e,0x36,0x35,0x38,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x4c,0x20,0x34,0x34,0x37,0x2e,0x36,0x35,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x35,0x31,0x2e,0x37,0x31,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x35,0x31,0x2e,0x37,0x31,0x38,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x51,0x20,0x34,0x35,0x31,0x2e,0x37,0x31,0x38,0x20,0x33,0x36,0x38,0x2e,0x30,0x35,0x36,0x20,0x34,0x35,0x32,0x2e,0x32,0x39,0x32,0x20,0x33,0x36,0x39,0x2e,0x31,0x39,0x20,0x51,0x20,0x34,0x35,0x32,0x2e,0x38,0x36,0x36,0x20,0x33,0x37,0x30,0x2e,0x33,0x32,0x34,0x20,0x34,0x35,0x33,0x2e,0x39,0x31,0x36,0x20,0x33,0x37,0x30,0x2e,0x39,0x32,0x36,0x20,0x51,0x20,0x34,0x35,0x34,0x2e,0x39,0x36,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x34,0x35,0x36,0x2e,0x33,0x36,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x51,0x20,0x34,0x35,0x37,0x2e,0x37,0x36,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x34,0x35,0x38,0x2e,0x38,0x30,0x32,0x20,0x33,0x37,0x30,0x2e,0x39,0x32,0x36,0x20,0x51,0x20,0x34,0x35,0x39,0x2e,0x38,0x33,0x38,0x20,0x33,0x37,0x30,0x2e,0x33,0x32,0x34,0x20,0x34,0x36,0x30,0x2e,0x34,0x31,0x32,0x20,0x33,0x36,0x39,0x2e,0x31,0x39,0x20,0x51,0x20,0x34,0x36,0x30,0x2e,0x39,0x38,0x36,0x20,0x33,0x36,0x38,0x2e,0x30,0x35,0x36,0x20,0x34,0x36,0x30,0x2e,0x39,0x38,0x36,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x4c,0x20,0x34,0x36,0x30,0x2e,0x39,0x38,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x36,0x35,0x2e,0x30,0x31,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x36,0x35,0x2e,0x30,0x31,0x38,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x51,0x20,0x34,0x36,0x35,0x2e,0x30,0x31,0x38,0x20,0x33,0x36,0x39,0x2e,0x31,0x37,0x36,0x20,0x34,0x36,0x33,0x2e,0x39,0x35,0x34,0x20,0x33,0x37,0x31,0x2e,0x31,0x35,0x20,0x51,0x20,0x34,0x36,0x32,0x2e,0x38,0x39,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x34,0x36,0x30,0x2e,0x39,0x34,0x34,0x20,0x33,0x37,0x34,0x2e,0x32,0x30,0x32,0x20,0x51,0x20,0x34,0x35,0x38,0x2e,0x39,0x39,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x34,0x35,0x36,0x2e,0x33,0x33,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x5a,0x20,0x4d,0x20,0x34,0x36,0x38,0x2e,0x32,0x36,0x33,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x36,0x38,0x2e,0x32,0x36,0x33,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x37,0x32,0x2e,0x33,0x32,0x33,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x37,0x32,0x2e,0x33,0x32,0x33,0x20,0x33,0x37,0x35,0x20,0x5a,0x22,0x20,0x74,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28,0x31,0x2e,0x32,0x36,0x34,0x35,0x39,0x32,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x31,0x2e,0x32,0x34,0x30,0x33,0x30,0x33,0x2c,0x20,0x2d,0x34,0x38,0x33,0x2e,0x38,0x39,0x39,0x33,0x35,0x33,0x2c,0x20,0x2d,0x33,0x35,0x35,0x2e,0x38,0x34,0x35,0x31,0x35,0x34,0x29,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x20,0x72,0x67,0x62,0x28,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x29,0x3b,0x22,0x2f,0x3e,0x3c,0x2f,0x73,0x76,0x67,0x3e}; + + +static const VirtualFile virtual_files[] = { + { + "/index.html", + FILE_0, + 3234 + }, + { + "/sub/index.html", + FILE_1, + 1224 + }, + { + "/svg/webui.svg", + FILE_2, + 2347 + }, +}; + +static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]); + +bool virtual_file_system(const char* path, const unsigned char** file, int* length) { + for (int i = 0; i < virtual_files_count; ++i) { + if(virtual_files[i].path != NULL) { + if (strcmp(virtual_files[i].path, path) == 0) { + *file = virtual_files[i].data; + *length = virtual_files[i].length; + return true; + } + } + } + return false; +} + +const void* vfs(const char* path, int* length) { + const unsigned char* file_data; + int file_length; + + if (virtual_file_system(path, &file_data, &file_length)) { + const char* content_type = webui_get_mime_type(path); + const char* http_header_template = "HTTP/1.1 200 OK\r\n" + "Content-Type: %s\r\n" + "Content-Length: %d\r\n" + "Cache-Control: no-cache\r\n\r\n"; + int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length); + *length = header_length + file_length; + unsigned char* response = (unsigned char*) webui_malloc(*length); + snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length); + memcpy(response + header_length, file_data, file_length); + return response; + } + return NULL; +} + +#endif // VIRTUAL_FILE_SYSTEM_H diff --git a/v2/webui/examples/C++/virtual_file_system/vfs.py b/v2/webui/examples/C++/virtual_file_system/vfs.py new file mode 100644 index 0000000..2167b1e --- /dev/null +++ b/v2/webui/examples/C++/virtual_file_system/vfs.py @@ -0,0 +1,101 @@ +# WebUI Library +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# WebUI Virtual File System Generator +# v2.1 + +import os +import sys + +def generate_vfs_header(directory, output_header): + files = [] + + for root, _, filenames in os.walk(directory): + for filename in filenames: + filepath = os.path.join(root, filename) + relative_path = os.path.relpath(filepath, directory) + # Ensure path starts with a slash + relative_path = '/' + relative_path.replace('\\', '/') + files.append((relative_path, filepath)) + + with open(output_header, 'w') as header: + header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n') + header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n') + + header.write('typedef struct {\n') + header.write(' const char *path;\n') + header.write(' const unsigned char *data;\n') + header.write(' int length;\n') + header.write('} VirtualFile;\n\n') + + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(f'static const unsigned char FILE_{i}[] = {{') + header.write(','.join(f'0x{byte:02x}' for byte in data)) + header.write('};\n\n') + + header.write('\nstatic const VirtualFile virtual_files[] = {\n') + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(' {\n') + header.write(f' "{relative_path}",\n') + header.write(f' FILE_{i},\n') + header.write(f' {len(data)}\n') + header.write(' },\n') + if not files: + header.write(' {NULL, NULL, 0}\n') + header.write('};\n\n') + + header.write('static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]);\n\n') + + header.write('bool virtual_file_system(const char* path, const unsigned char** file, int* length) {\n') + header.write(' for (int i = 0; i < virtual_files_count; ++i) {\n') + header.write(' if(virtual_files[i].path != NULL) {\n') + header.write(' if (strcmp(virtual_files[i].path, path) == 0) {\n') + header.write(' *file = virtual_files[i].data;\n') + header.write(' *length = virtual_files[i].length;\n') + header.write(' return true;\n') + header.write(' }\n') + header.write(' }\n') + header.write(' }\n') + header.write(' return false;\n') + header.write('}\n\n') + + header.write('const void* vfs(const char* path, int* length) {\n') + header.write(' const unsigned char* file_data;\n') + header.write(' int file_length;\n\n') + + header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n') + header.write(' const char* content_type = webui_get_mime_type(path);\n') + header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n') + header.write(' "Content-Type: %s\\r\\n"\n') + header.write(' "Content-Length: %d\\r\\n"\n') + header.write(' "Cache-Control: no-cache\\r\\n\\r\\n";\n') + header.write(' int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length);\n') + header.write(' *length = header_length + file_length;\n') + header.write(' unsigned char* response = (unsigned char*) webui_malloc(*length);\n') + header.write(' snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length);\n') + header.write(' memcpy(response + header_length, file_data, file_length);\n') + header.write(' return response;\n') + header.write(' }\n') + header.write(' return NULL;\n') + header.write('}\n\n') + + header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n') + +if __name__ == '__main__': + if len(sys.argv) != 3: + print(f'Usage: {sys.argv[0]} ') + sys.exit(1) + + directory = sys.argv[1] + output_header = sys.argv[2] + generate_vfs_header(directory, output_header) + print(f'Generated {output_header} from {directory}') diff --git a/v2/webui/examples/C/README.md b/v2/webui/examples/C/README.md new file mode 100644 index 0000000..e3b1b42 --- /dev/null +++ b/v2/webui/examples/C/README.md @@ -0,0 +1,51 @@ +# WebUI C Examples + +Examples of how to create a WebUI application in C. + +## C Examples + +The only requirement to build the examples is a C compiler. + +- `minimal`: Creates a minimal WebUI application. +- `call_c_from_js`: Calls C from JavaScript. +- `call_js_from_c`: Calls JavaScript from C. +- `serve_a_folder`: Use WebUI to serve a folder that contains `.html`, `.css`, `.js`, or `.ts` files. +- `custom_web_server`: Use your preferred web server like NGINX/Apache... with WebUI to serve a folder. +- `chatgpt_api`: Calls ChatGPT API from C. +- `frameless`: Frameless window example. +- `public_network_access`: Allows network access to external devices. +- `react`: React + WebUI example. +- `virtual_file_system`: Embeds files using a virtual file system. +- `test_index_redirect`: Tests index fallback and custom entry behavior for `/`, `/sub`, and `/sub/foo`. +- `web_app_multi_client`: Multiple clients example. + +To build an example, cd into its directory and run the make command. + +- **Windows** + + ```sh + # GCC + mingw32-make + + # MSVC + nmake + ``` + +- **Linux** + + ```sh + # GCC + make + + # Clang + make CC=clang + ``` + +- **macOS** + ```sh + make + ``` + +## Additional Examples + +- [`text-editor`](https://github.com/webui-dev/webui/tree/main/examples/C/text-editor): A lightweight and portable text editor written in C using WebUI as the GUI library. diff --git a/v2/webui/examples/C/call_c_from_js/GNUmakefile b/v2/webui/examples/C/call_c_from_js/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/call_c_from_js/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/call_c_from_js/Makefile b/v2/webui/examples/C/call_c_from_js/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/call_c_from_js/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/call_c_from_js/favicon.ico b/v2/webui/examples/C/call_c_from_js/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/call_c_from_js/favicon.ico differ diff --git a/v2/webui/examples/C/call_c_from_js/icon.rc b/v2/webui/examples/C/call_c_from_js/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/call_c_from_js/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/call_c_from_js/main.c b/v2/webui/examples/C/call_c_from_js/main.c new file mode 100644 index 0000000..48a2775 --- /dev/null +++ b/v2/webui/examples/C/call_c_from_js/main.c @@ -0,0 +1,184 @@ +// Call C from JavaScript Example + +#include "webui.h" + +void my_function_string(webui_event_t* e) { + + // JavaScript: + // my_function_string('Hello', 'World`); + + const char* str_1 = webui_get_string(e); // Or webui_get_string_at(e, 0); + const char* str_2 = webui_get_string_at(e, 1); + + printf("my_function_string 1: %s\n", str_1); // Hello + printf("my_function_string 2: %s\n", str_2); // World +} + +void my_function_integer(webui_event_t* e) { + + // JavaScript: + // my_function_integer(123, 456, 789, 12345.6789); + + size_t count = webui_get_count(e); + printf("my_function_integer: There is %zu arguments in this event\n", count); // 4 + + long long number_1 = webui_get_int(e); // Or webui_get_int_at(e, 0); + long long number_2 = webui_get_int_at(e, 1); + long long number_3 = webui_get_int_at(e, 2); + + printf("my_function_integer 1: %lld\n", number_1); // 123 + printf("my_function_integer 2: %lld\n", number_2); // 456 + printf("my_function_integer 3: %lld\n", number_3); // 789 + + double float_1 = webui_get_float_at(e, 3); + + printf("my_function_integer 4: %f\n", float_1); // 12345.6789 +} + +void my_function_boolean(webui_event_t* e) { + + // JavaScript: + // my_function_boolean(true, false); + + bool status_1 = webui_get_bool(e); // Or webui_get_bool_at(e, 0); + bool status_2 = webui_get_bool_at(e, 1); + + printf("my_function_boolean 1: %s\n", (status_1 ? "True" : "False")); // True + printf("my_function_boolean 2: %s\n", (status_2 ? "True" : "False")); // False +} + +void my_function_raw_binary(webui_event_t* e) { + + // JavaScript: + // my_function_raw_binary(new Uint8Array([0x41]), new Uint8Array([0x42, 0x43])); + + const unsigned char* raw_1 = (const unsigned char*)webui_get_string(e); // Or webui_get_string_at(e, 0); + const unsigned char* raw_2 = (const unsigned char*)webui_get_string_at(e, 1); + + int len_1 = (int)webui_get_size(e); // Or webui_get_size_at(e, 0); + int len_2 = (int)webui_get_size_at(e, 1); + + // Print raw_1 + printf("my_function_raw_binary 1 (%d bytes): ", len_1); + for (size_t i = 0; i < len_1; i++) + printf("0x%02x ", raw_1[i]); + printf("\n"); + + // Check raw_2 (Big) + // [0xA1, 0x00..., 0xA2] + bool valid = false; + if (raw_2[0] == 0xA1 && raw_2[len_2 - 1] == 0xA2) + valid = true; + + // Print raw_2 + printf("my_function_raw_binary 2 big (%d bytes): valid data? %s\n", len_2, (valid ? "Yes" : "No")); +} + +void my_function_with_response(webui_event_t* e) { + + // JavaScript: + // my_function_with_response(number, 2).then(...) + + long long number = webui_get_int(e); // Or webui_get_int_at(e, 0); + long long times = webui_get_int_at(e, 1); + + long long res = number * times; + printf("my_function_with_response: %lld * %lld = %lld\n", number, times, res); + + // Send back the response to JavaScript + webui_return_int(e, res); +} + +int main() { + + // HTML + const char* my_html = + "" + "" + " " + " " + " " + " Call C from JavaScript Example" + " " + " " + " " + "

WebUI - Call C from JavaScript

" + "

Call C functions with arguments (See the logs in your terminal)

" + " " + "
" + " " + "
" + " " + "
" + " " + "
" + "

Call a C function that returns a response

" + " " + "
Double:
" + " " + " " + ""; + + // Create a window + size_t my_window = webui_new_window(); + + // Bind HTML elements with C functions + webui_bind(my_window, "my_function_string", my_function_string); + webui_bind(my_window, "my_function_integer", my_function_integer); + webui_bind(my_window, "my_function_boolean", my_function_boolean); + webui_bind(my_window, "my_function_with_response", my_function_with_response); + webui_bind(my_window, "my_function_raw_binary", my_function_raw_binary); + + // Show the window + webui_show(my_window, my_html); // webui_show_browser(my_window, my_html, Chrome); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/call_js_from_c/GNUmakefile b/v2/webui/examples/C/call_js_from_c/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/call_js_from_c/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/call_js_from_c/Makefile b/v2/webui/examples/C/call_js_from_c/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/call_js_from_c/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/call_js_from_c/favicon.ico b/v2/webui/examples/C/call_js_from_c/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/call_js_from_c/favicon.ico differ diff --git a/v2/webui/examples/C/call_js_from_c/icon.rc b/v2/webui/examples/C/call_js_from_c/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/call_js_from_c/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/call_js_from_c/main.c b/v2/webui/examples/C/call_js_from_c/main.c new file mode 100644 index 0000000..5b60593 --- /dev/null +++ b/v2/webui/examples/C/call_js_from_c/main.c @@ -0,0 +1,143 @@ +// Call JavaScript from C Example + +#include "webui.h" + +void my_function_exit(webui_event_t* e) { + + // Close all opened windows + webui_exit(); +} + +void my_function_count(webui_event_t* e) { + + // This function gets called every time the user clicks on "my_function_count" + + // Create a buffer to hold the response + char response[64]; + + // Run JavaScript + if (!webui_script(e->window, "return GetCount();", 0, response, 64)) { + + if (!webui_is_shown(e->window)) + printf("Window closed.\n"); + else + printf("JavaScript Error: %s\n", response); + return; + } + + // Get the count + int count = atoi(response); + + // Increment + count++; + + // Generate a JavaScript + char js[64]; + sprintf(js, "SetCount(%d);", count); + + // Run JavaScript (Quick Way) + webui_run(e->window, js); + + // Alternatively, Using `webui_extensions.h` + // webui_run_fmt(e->window, "SetCount(%d);", count); +} + +int main() { + + // HTML + const char* my_html = "" + "" + " " + " " + " " + " Call JavaScript from C Example" + " " + " " + " " + "

WebUI - Call JavaScript from C

" + "
" + "

0

" + "
" + " " + "
" + " " + "
" + " " + " " + " " + ""; + + // Set WebUI configuration to proceess UI events one at a time + webui_set_config(ui_event_blocking, true); + + // Create a window + size_t my_window = webui_new_window(); + + // Bind HTML elements with C functions + webui_bind(my_window, "my_function_count", my_function_count); + webui_bind(my_window, "my_function_exit", my_function_exit); + + // Show the window + webui_show(my_window, my_html); // webui_show_browser(my_window, my_html, Chrome); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/chatgpt_api/GNUmakefile b/v2/webui/examples/C/chatgpt_api/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/chatgpt_api/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/chatgpt_api/Makefile b/v2/webui/examples/C/chatgpt_api/Makefile new file mode 100644 index 0000000..bb0ea7a --- /dev/null +++ b/v2/webui/examples/C/chatgpt_api/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/chatgpt_api/favicon.ico b/v2/webui/examples/C/chatgpt_api/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/chatgpt_api/favicon.ico differ diff --git a/v2/webui/examples/C/chatgpt_api/icon.rc b/v2/webui/examples/C/chatgpt_api/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/chatgpt_api/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/chatgpt_api/main.c b/v2/webui/examples/C/chatgpt_api/main.c new file mode 100644 index 0000000..d928e4a --- /dev/null +++ b/v2/webui/examples/C/chatgpt_api/main.c @@ -0,0 +1,98 @@ +// WebUI C - ChatGPT HTTPS API Example + +#include "webui.h" + +// ChatGPT Configuration +#define USER_KEY "sk-proj-xxx-xxxxxxxxxxxxxxxxxxxxxxx_xxx" +#define USER_MODEL "gpt-4o" +#define USER_ASSISTANT "You are an assistant, answer with very short messages." + +#define BUF_SIZE (1024) +size_t hiddenWindow = 0; + +// HTML +const char* html = "" +"" +" " +" " +" " +" " +" " +" " +""; + +bool run_ai_query(const char* user_query, char* ai_response) { + + char js[BUF_SIZE]; + memset(js, 0, BUF_SIZE); + + // Generate JavaScript + sprintf(js, + "return run_gpt_api('%s', '%s', '%s', '%s');", + USER_KEY, USER_MODEL, USER_ASSISTANT, user_query + ); + + // Run HTTPS API + if (webui_script(hiddenWindow, js, 30, ai_response, BUF_SIZE)) { + return true; + } + + return false; +} + +int main(int argc, char *argv[]) { + + if (argc < 2) { + printf("Please provide a query.\nExample: %s What is the capital of Canada?\n", argv[0]); + return 0; + } + + // Initializing + char ai_response[BUF_SIZE]; + char user_query[BUF_SIZE]; + memset(ai_response, 0, BUF_SIZE); + memset(user_query, 0, BUF_SIZE); + + // Get user query + for (int i = 1; i < argc; i++) { + strcat(user_query, argv[i]); + strcat(user_query, " "); + } + + // Start WebUI server + hiddenWindow = webui_new_window(); + webui_set_hide(hiddenWindow, true); + webui_show_browser(hiddenWindow, html, ChromiumBased); + + // Run HTTPS API + if (run_ai_query(user_query, ai_response)) { + printf("AI Response: %s\n", ai_response); + } else { + printf("Error:\n%s\n", ai_response); + } + + // Exit + webui_exit(); + webui_clean(); + + return 0; +} diff --git a/v2/webui/examples/C/custom_web_server/GNUmakefile b/v2/webui/examples/C/custom_web_server/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/custom_web_server/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/custom_web_server/Makefile b/v2/webui/examples/C/custom_web_server/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/custom_web_server/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/custom_web_server/favicon.ico b/v2/webui/examples/C/custom_web_server/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/custom_web_server/favicon.ico differ diff --git a/v2/webui/examples/C/custom_web_server/icon.rc b/v2/webui/examples/C/custom_web_server/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/custom_web_server/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/custom_web_server/index.html b/v2/webui/examples/C/custom_web_server/index.html new file mode 100644 index 0000000..b671d44 --- /dev/null +++ b/v2/webui/examples/C/custom_web_server/index.html @@ -0,0 +1,18 @@ + + + + + WebUI - Custom Web-Server Example (C) + + + + +

Custom Web-Server Example (C)

+

+ This HTML page is handled by a custom Web-Server other than WebUI.
+ This window is connected to the back-end because we used:

http://localhost:8081/webui.js
+

+

Simple link example (Local file)

+ + + diff --git a/v2/webui/examples/C/custom_web_server/main.c b/v2/webui/examples/C/custom_web_server/main.c new file mode 100644 index 0000000..909bb2e --- /dev/null +++ b/v2/webui/examples/C/custom_web_server/main.c @@ -0,0 +1,74 @@ +// Serve a Folder Example + +#include "webui.h" + +void events(webui_event_t* e) { + + // This function gets called every time + // there is an event + + if (e->event_type == WEBUI_EVENT_CONNECTED) + printf("Connected. \n"); + else if (e->event_type == WEBUI_EVENT_DISCONNECTED) + printf("Disconnected. \n"); + else if (e->event_type == WEBUI_EVENT_MOUSE_CLICK) + printf("Click. \n"); + else if (e->event_type == WEBUI_EVENT_NAVIGATION) { + const char* url = webui_get_string(e); + printf("Starting navigation to: %s \n", url); + + // Because we used `webui_bind(MyWindow, "", events);` + // WebUI will block all `href` link clicks and sent here instead. + // We can then control the behaviour of links as needed. + webui_navigate(e->window, url); + } +} + +void my_backend_func(webui_event_t* e) { + + // JavaScript: + // my_backend_func(123, 456, 789); + // or webui.my_backend_func(...); + + long long number_1 = webui_get_int_at(e, 0); + long long number_2 = webui_get_int_at(e, 1); + long long number_3 = webui_get_int_at(e, 2); + + printf("my_backend_func 1: %lld\n", number_1); // 123 + printf("my_backend_func 2: %lld\n", number_2); // 456 + printf("my_backend_func 3: %lld\n", number_3); // 789 +} + +int main() { + + // Create new windows + size_t window = webui_new_window(); + + // Bind all events + webui_bind(window, "", events); + + // Bind HTML elements with C functions + webui_bind(window, "my_backend_func", my_backend_func); + + // Set the web-server/WebSocket port that WebUI should + // use. This means `webui.js` will be available at: + // http://localhost:MY_PORT_NUMBER/webui.js + webui_set_port(window, 8081); + + // Show a new window and show our custom web server + // Assuming the custom web server is running on port + // 8080... + webui_show(window, "http://localhost:8080/"); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/custom_web_server/second.html b/v2/webui/examples/C/custom_web_server/second.html new file mode 100644 index 0000000..c8b77f9 --- /dev/null +++ b/v2/webui/examples/C/custom_web_server/second.html @@ -0,0 +1,13 @@ + + + + + WebUI - Custom Web-Server second page (C) + + + + +

This is the second page !

+

Back

+ + diff --git a/v2/webui/examples/C/custom_web_server/simple_web_server.py b/v2/webui/examples/C/custom_web_server/simple_web_server.py new file mode 100644 index 0000000..dbb3c36 --- /dev/null +++ b/v2/webui/examples/C/custom_web_server/simple_web_server.py @@ -0,0 +1,10 @@ +import http.server +import socketserver + +PORT = 8080 + +Handler = http.server.SimpleHTTPRequestHandler + +with socketserver.TCPServer(("", PORT), Handler) as httpd: + print(f"Server started at http://localhost:{PORT}") + httpd.serve_forever() diff --git a/v2/webui/examples/C/frameless/GNUmakefile b/v2/webui/examples/C/frameless/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/frameless/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/frameless/Makefile b/v2/webui/examples/C/frameless/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/frameless/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/frameless/favicon.ico b/v2/webui/examples/C/frameless/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/frameless/favicon.ico differ diff --git a/v2/webui/examples/C/frameless/icon.rc b/v2/webui/examples/C/frameless/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/frameless/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/frameless/main.c b/v2/webui/examples/C/frameless/main.c new file mode 100644 index 0000000..12f2dec --- /dev/null +++ b/v2/webui/examples/C/frameless/main.c @@ -0,0 +1,131 @@ +// WebUI C - Frameless Example + +#include "webui.h" + +const char* html = +"" +" " +" " +" " +" " +" " +" " +"
" +"
" +" WebUI Frameless WebView Window" +"
" +" " +" " +" " +"
" +"
" +"
" +" Welcome to Your WebUI App" +" This is a stylish, frameless WebUI WebView window." +"
" +"
" +" " +""; + +void minimize(webui_event_t* e) { + webui_minimize(e->window); +} + +void maximize(webui_event_t* e) { + webui_maximize(e->window); +} + +void close_win(webui_event_t* e) { + webui_close(e->window); +} + +int main() { + + size_t my_window = webui_new_window(); + + webui_bind(my_window, "minimize", minimize); + webui_bind(my_window, "maximize", maximize); + webui_bind(my_window, "close_win", close_win); + + webui_set_size(my_window, 800, 600); + webui_set_frameless(my_window, true); + webui_set_transparent(my_window, true); + webui_set_resizable(my_window, true); + webui_set_center(my_window); + + webui_show_wv(my_window, html); + webui_wait(); + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/frameless/webui_frameless.png b/v2/webui/examples/C/frameless/webui_frameless.png new file mode 100644 index 0000000..42fa0ad Binary files /dev/null and b/v2/webui/examples/C/frameless/webui_frameless.png differ diff --git a/v2/webui/examples/C/frameless/webui_frameless_linux.png b/v2/webui/examples/C/frameless/webui_frameless_linux.png new file mode 100644 index 0000000..5261ed8 Binary files /dev/null and b/v2/webui/examples/C/frameless/webui_frameless_linux.png differ diff --git a/v2/webui/examples/C/minimal/GNUmakefile b/v2/webui/examples/C/minimal/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/minimal/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/minimal/Makefile b/v2/webui/examples/C/minimal/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/minimal/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/minimal/favicon.ico b/v2/webui/examples/C/minimal/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/minimal/favicon.ico differ diff --git a/v2/webui/examples/C/minimal/icon.rc b/v2/webui/examples/C/minimal/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/minimal/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/minimal/main.c b/v2/webui/examples/C/minimal/main.c new file mode 100644 index 0000000..b85d393 --- /dev/null +++ b/v2/webui/examples/C/minimal/main.c @@ -0,0 +1,15 @@ +// WebUI C - Minimal Example + +#include "webui.h" + +int main() { + + size_t my_window = webui_new_window(); + webui_show(my_window, " Hello World ! "); + webui_wait(); + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/public_network_access/GNUmakefile b/v2/webui/examples/C/public_network_access/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/public_network_access/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/public_network_access/Makefile b/v2/webui/examples/C/public_network_access/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/public_network_access/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/public_network_access/favicon.ico b/v2/webui/examples/C/public_network_access/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/public_network_access/favicon.ico differ diff --git a/v2/webui/examples/C/public_network_access/icon.rc b/v2/webui/examples/C/public_network_access/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/public_network_access/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/public_network_access/main.c b/v2/webui/examples/C/public_network_access/main.c new file mode 100644 index 0000000..39205e1 --- /dev/null +++ b/v2/webui/examples/C/public_network_access/main.c @@ -0,0 +1,139 @@ +// Public Network Access Example + +#include "webui.h" + +// Windows +size_t private_window = 0; +size_t public_window = 0; + +void app_exit(webui_event_t* e) { + webui_exit(); +} + +void public_window_events(webui_event_t* e) { + if (e->event_type == WEBUI_EVENT_CONNECTED) { + // New connection + webui_run(private_window, "document.getElementById(\"Logs\").value += \"New connection.\\n\";"); + } + else if (e->event_type == WEBUI_EVENT_DISCONNECTED) { + // Disconnection + webui_run(private_window, "document.getElementById(\"Logs\").value += \"Disconnected.\\n\";"); + } +} + +void private_window_events(webui_event_t* e) { + if (e->event_type == WEBUI_EVENT_CONNECTED) { + + // Get port of public window + size_t port = webui_get_port(public_window); + + // Get URL of public window + const char* url = webui_get_url(public_window); + + // JavaScript + char javascript[1024]; + sprintf(javascript, "document.getElementById('urlSpan1').innerHTML = 'http://localhost:%zu';", port); + webui_run(private_window, javascript); + sprintf(javascript, "document.getElementById('urlSpan2').innerHTML = '%s';", url); + webui_run(private_window, javascript); + sprintf(javascript, "document.getElementById('urlSpan3').innerHTML = 'http://[ANY_IP_OF_THIS_MACHINE]:%zu';", port); + webui_run(private_window, javascript); + } +} + +int main() { + + // Main Private Window HTML + const char* private_html = "" + "" + " " + " " + " " + " Public Network Access Example" + " " + " " + " " + "

WebUI - Public Network Access Example

" + "
" + " The public window is configured to be accessible from
" + " any device in the network.
" + "
" + " Public window links:
" + "

...

" + "

...

" + "

...

" + " Public window events:
" + " " + "
" + " " + " " + ""; + + // Public Window HTML + const char* public_html = "" + "" + " " + " " + " " + " Welcome to Public UI" + " " + " " + "

Welcome to Public UI!

" + " " + ""; + + // Create windows + private_window = webui_new_window(); + public_window = webui_new_window(); + + // App + webui_set_timeout(0); // Wait forever (never timeout) + + // Public Window + webui_set_public(public_window, true); // Make URL accessible from public networks + webui_bind(public_window, "", public_window_events); // Bind all events + webui_set_port(public_window, 9000); // Custom port + webui_show_browser(public_window, public_html, NoBrowser); // Set public window HTML + + // Private Window + webui_bind(private_window, "", private_window_events); // Run JS + webui_bind(private_window, "Exit", app_exit); // Bind exit button + webui_show(private_window, private_html); // Show the window + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/react/GNUmakefile b/v2/webui/examples/C/react/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/react/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/react/Makefile b/v2/webui/examples/C/react/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/react/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/react/README.md b/v2/webui/examples/C/react/README.md new file mode 100644 index 0000000..ce54ee1 --- /dev/null +++ b/v2/webui/examples/C/react/README.md @@ -0,0 +1,23 @@ +## React WebUI Example + +This is a basic example of how to use WebUI with React to generate a portable single executable program. WebUI will run the internal web server and use any installed web browser as GUI to show the React UI. + +A simple Python script `vfs.py` is used to generate `vfs.h` to embed the whole react's build folder into the portable single executable program. +The generated VFS serves exact file paths only; directory index fallback/redirect is handled by WebUI core. + +![Screenshot](webui_react.png) + +### How to use it? + +1. Run script `build_react` to re-build the React project and compile the C file + +### How to create a React WebUI project from scratch? + +1. Run `npx create-react-app my-react-app` to create a React app using NPM +2. Add `` into `public/index.html` to connect UI with the backend +3. Run `python vfs.py "./my-react-app/build" "vfs.h"` to embed the build folder +4. Now, use any C compiler to compile `main.c` into a portable executable program + +### Other backend languages examples: + +- Coming soon... diff --git a/v2/webui/examples/C/react/build_react.bat b/v2/webui/examples/C/react/build_react.bat new file mode 100644 index 0000000..464d43b --- /dev/null +++ b/v2/webui/examples/C/react/build_react.bat @@ -0,0 +1,19 @@ +@echo off + +echo. +echo * Build React project... + +cd webui-react-example +call npm install +call npm run build +cd .. + +echo. +echo * Embedding React's build files into 'vfs.h' + +python vfs.py "./webui-react-example/build" "vfs.h" + +echo. +echo * Compiling 'main.c' into 'main.exe' using Microsoft Visual Studio... + +nmake diff --git a/v2/webui/examples/C/react/build_react.sh b/v2/webui/examples/C/react/build_react.sh new file mode 100644 index 0000000..76589da --- /dev/null +++ b/v2/webui/examples/C/react/build_react.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +echo +echo "* Build React project..." + +cd webui-react-example +npm install || exit +npm run build || exit +cd .. + +echo +echo "* Embedding React's build files into 'vfs.h'" + +python3 vfs.py "./webui-react-example/build" "vfs.h" + +echo +echo "* Compiling 'main.c' into 'main' using GCC..." + +make diff --git a/v2/webui/examples/C/react/favicon.ico b/v2/webui/examples/C/react/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/react/favicon.ico differ diff --git a/v2/webui/examples/C/react/icon.rc b/v2/webui/examples/C/react/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/react/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/react/main.c b/v2/webui/examples/C/react/main.c new file mode 100644 index 0000000..f127ed6 --- /dev/null +++ b/v2/webui/examples/C/react/main.c @@ -0,0 +1,59 @@ +// React Example + +#include "webui.h" +#include "vfs.h" + +void exit_app(webui_event_t* e) { + webui_exit(); +} + +int main() { + + // Create new windows + size_t react_window = webui_new_window(); + + // Set window size + webui_set_size(react_window, 550, 450); + + // Set window position + webui_set_position(react_window, 250, 250); + + // Allow multi-user connection to WebUI window + webui_set_config(multi_client, true); + + // Disable WebUI's cookies + webui_set_config(use_cookies, false); + + // Bind React HTML element IDs with a C functions + webui_bind(react_window, "Exit", exit_app); + + // VSF (Virtual File System) Example + // + // 1. Run Python script to generate header file of a folder + // python vfs.py "/path/to/folder" "vfs.h" + // + // 2. Include header file in your C project + // #include "vfs.h" + // + // 3. use vfs in your custom files handler `webui_set_file_handler()` + // webui_set_file_handler(react_window, vfs); + + // Set a custom files handler + webui_set_file_handler(react_window, vfs); + + // Show the React window + // webui_show_browser(react_window, "index.html", Chrome); + webui_show(react_window, "index.html"); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/react/vfs.h b/v2/webui/examples/C/react/vfs.h new file mode 100644 index 0000000..197a84b --- /dev/null +++ b/v2/webui/examples/C/react/vfs.h @@ -0,0 +1,147 @@ +#ifndef VIRTUAL_FILE_SYSTEM_H +#define VIRTUAL_FILE_SYSTEM_H + +typedef struct { + const char *path; + const unsigned char *data; + int length; +} VirtualFile; + +static const unsigned char FILE_0[] = {0x7b,0x0a,0x20,0x20,0x22,0x66,0x69,0x6c,0x65,0x73,0x22,0x3a,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x22,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22,0x3a,0x20,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x63,0x73,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x39,0x66,0x63,0x62,0x32,0x64,0x36,0x38,0x2e,0x63,0x73,0x73,0x22,0x2c,0x0a,0x20,0x20,0x20,0x20,0x22,0x6d,0x61,0x69,0x6e,0x2e,0x6a,0x73,0x22,0x3a,0x20,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x22,0x2c,0x0a,0x20,0x20,0x20,0x20,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x34,0x35,0x33,0x2e,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x22,0x3a,0x20,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x34,0x35,0x33,0x2e,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x22,0x2c,0x0a,0x20,0x20,0x20,0x20,0x22,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3a,0x20,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x2c,0x0a,0x20,0x20,0x20,0x20,0x22,0x6d,0x61,0x69,0x6e,0x2e,0x39,0x66,0x63,0x62,0x32,0x64,0x36,0x38,0x2e,0x63,0x73,0x73,0x2e,0x6d,0x61,0x70,0x22,0x3a,0x20,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x63,0x73,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x39,0x66,0x63,0x62,0x32,0x64,0x36,0x38,0x2e,0x63,0x73,0x73,0x2e,0x6d,0x61,0x70,0x22,0x2c,0x0a,0x20,0x20,0x20,0x20,0x22,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x2e,0x6d,0x61,0x70,0x22,0x3a,0x20,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x2e,0x6d,0x61,0x70,0x22,0x2c,0x0a,0x20,0x20,0x20,0x20,0x22,0x34,0x35,0x33,0x2e,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x2e,0x6d,0x61,0x70,0x22,0x3a,0x20,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x34,0x35,0x33,0x2e,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x2e,0x6d,0x61,0x70,0x22,0x0a,0x20,0x20,0x7d,0x2c,0x0a,0x20,0x20,0x22,0x65,0x6e,0x74,0x72,0x79,0x70,0x6f,0x69,0x6e,0x74,0x73,0x22,0x3a,0x20,0x5b,0x0a,0x20,0x20,0x20,0x20,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x63,0x73,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x39,0x66,0x63,0x62,0x32,0x64,0x36,0x38,0x2e,0x63,0x73,0x73,0x22,0x2c,0x0a,0x20,0x20,0x20,0x20,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x22,0x0a,0x20,0x20,0x5d,0x0a,0x7d}; + +static const unsigned char FILE_1[] = {0x00,0x00,0x01,0x00,0x04,0x00,0x10,0x10,0x00,0x00,0x01,0x00,0x20,0x00,0xe3,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x01,0x00,0x20,0x00,0x0c,0x03,0x00,0x00,0x29,0x02,0x00,0x00,0x20,0x20,0x00,0x00,0x01,0x00,0x20,0x00,0x39,0x03,0x00,0x00,0x35,0x05,0x00,0x00,0x40,0x40,0x00,0x00,0x01,0x00,0x20,0x00,0xb0,0x06,0x00,0x00,0x6e,0x08,0x00,0x00,0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x08,0x03,0x00,0x00,0x00,0x28,0x2d,0x0f,0x53,0x00,0x00,0x00,0xe4,0x50,0x4c,0x54,0x45,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x32,0x50,0x58,0x3d,0x72,0x80,0x29,0x37,0x3b,0x2a,0x3a,0x3e,0x48,0x90,0xa4,0x2d,0x42,0x47,0x45,0x88,0x9a,0x38,0x64,0x6f,0x35,0x58,0x62,0x36,0x5b,0x65,0x4b,0x99,0xae,0x4b,0x9a,0xaf,0x31,0x4d,0x55,0x39,0x67,0x73,0x33,0x53,0x5c,0x49,0x93,0xa7,0x3a,0x67,0x74,0x27,0x30,0x33,0x40,0x7b,0x8b,0x56,0xb9,0xd4,0x54,0xb4,0xcf,0x41,0x7d,0x8d,0x56,0xbb,0xd6,0x40,0x79,0x89,0x36,0x5c,0x66,0x48,0x92,0xa6,0x2d,0x43,0x49,0x49,0x94,0xa8,0x45,0x88,0x9b,0x2b,0x3b,0x40,0x37,0x5f,0x69,0x37,0x5f,0x6a,0x46,0x8a,0x9d,0x4a,0x96,0xab,0x4b,0x9b,0xb0,0x48,0x90,0xa3,0x2d,0x42,0x48,0x61,0xda,0xfb,0x2c,0x40,0x46,0x43,0x83,0x94,0x4c,0x9d,0xb3,0x26,0x2e,0x30,0x57,0xbd,0xd9,0x4e,0xa3,0xba,0x49,0x93,0xa8,0x24,0x29,0x2b,0x42,0x81,0x91,0x4a,0x95,0xaa,0x52,0xaf,0xc8,0x3f,0x76,0x86,0x3e,0x73,0x81,0x3e,0x75,0x84,0x53,0xb1,0xca,0x3d,0x71,0x7f,0x50,0xa9,0xc1,0x50,0xa8,0xc0,0x50,0xa7,0xbf,0x2c,0x3f,0x44,0x34,0x55,0x5e,0x25,0x2b,0x2d,0x4d,0xa0,0xb6,0x4b,0x98,0xae,0x25,0x2b,0x2c,0x32,0x4f,0x58,0x2b,0x3c,0x41,0x4c,0x9c,0xb2,0x23,0x26,0x26,0x44,0x86,0x98,0x25,0x2c,0x2e,0x49,0x95,0xa9,0x76,0xf4,0x54,0xf6,0x00,0x00,0x00,0x05,0x74,0x52,0x4e,0x53,0x49,0xe6,0xe7,0x4a,0xe4,0x65,0xc0,0x65,0xa6,0x00,0x00,0x00,0xa9,0x49,0x44,0x41,0x54,0x78,0x01,0x4d,0x8e,0xb5,0x5a,0x45,0x41,0x0c,0x84,0xff,0xd9,0xb3,0x09,0xee,0xee,0x25,0x52,0xa1,0xef,0xdf,0xe1,0x54,0x54,0x68,0xc7,0x47,0x85,0xbb,0x2c,0xc1,0xae,0xc5,0x3d,0x03,0xb2,0x16,0xd2,0x7f,0xee,0x6d,0xed,0x66,0xed,0x6d,0x6e,0x66,0x92,0x41,0x96,0x24,0xe2,0x87,0x3e,0x21,0x03,0xa6,0x67,0xba,0xf4,0x48,0x67,0xbd,0x90,0x45,0xdf,0x8f,0xdc,0xb5,0x7d,0x02,0x09,0x06,0xdd,0xbb,0xfd,0x87,0xba,0xbc,0x6b,0x10,0x64,0x13,0xfa,0xa7,0xaf,0x4a,0x6f,0x11,0x97,0x99,0xce,0x33,0xe6,0x4c,0x22,0x4a,0xb9,0xa0,0x9b,0xcc,0xd5,0xfc,0x51,0x87,0x24,0xe2,0xe7,0xc4,0xbc,0x1f,0x66,0x66,0xb5,0x2c,0xe9,0x80,0x35,0x69,0x39,0x02,0x19,0xcc,0x9f,0xaf,0x48,0xa8,0x1c,0x2f,0x6d,0x42,0x02,0x86,0x87,0x77,0xcd,0xdc,0x77,0x3b,0x44,0x0d,0xd8,0x2b,0x26,0x82,0x57,0xab,0x15,0xaa,0xb9,0xa8,0x44,0xf4,0x6f,0x14,0x40,0xca,0xb4,0x52,0x49,0xa9,0xd0,0x42,0xa1,0x6f,0x6d,0x1a,0x2e,0x07,0xdb,0xb3,0x07,0xc0,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x08,0x03,0x00,0x00,0x00,0xd7,0xa9,0xcd,0xca,0x00,0x00,0x01,0x65,0x50,0x4c,0x54,0x45,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x32,0x52,0x5a,0x4e,0xa2,0xb9,0x4a,0x96,0xab,0x33,0x52,0x5b,0x4a,0x97,0xac,0x29,0x35,0x39,0x59,0xc1,0xde,0x30,0x4b,0x53,0x34,0x57,0x60,0x51,0xab,0xc4,0x4c,0x9c,0xb2,0x25,0x2b,0x2d,0x30,0x4a,0x52,0x29,0x36,0x3a,0x3a,0x67,0x74,0x43,0x82,0x93,0x22,0x23,0x23,0x3f,0x76,0x86,0x55,0xb7,0xd1,0x3f,0x77,0x86,0x3c,0x6e,0x7b,0x26,0x2d,0x2f,0x59,0xc2,0xdf,0x3d,0x71,0x7f,0x3a,0x69,0x75,0x42,0x7f,0x90,0x41,0x7d,0x8d,0x41,0x7b,0x8c,0x42,0x81,0x91,0x2f,0x49,0x50,0x50,0xa7,0xbf,0x3d,0x71,0x80,0x4b,0x99,0xae,0x5f,0xd4,0xf3,0x4c,0x9d,0xb3,0x24,0x28,0x29,0x3b,0x6c,0x7a,0x52,0xaf,0xc9,0x61,0xda,0xfb,0x49,0x93,0xa8,0x5a,0xc6,0xe3,0x33,0x55,0x5e,0x31,0x4d,0x55,0x33,0x54,0x5d,0x5a,0xc5,0xe2,0x49,0x93,0xa7,0x58,0xbf,0xdc,0x46,0x8b,0x9e,0x2d,0x42,0x47,0x50,0xa8,0xc0,0x36,0x5b,0x65,0x2c,0x40,0x45,0x35,0x5a,0x64,0x4f,0xa7,0xbf,0x2d,0x42,0x48,0x58,0xbf,0xdb,0x2b,0x3d,0x41,0x57,0xbe,0xda,0x2c,0x40,0x46,0x57,0xbc,0xd8,0x51,0xaa,0xc3,0x3f,0x76,0x85,0x57,0xbc,0xd7,0x2b,0x3c,0x41,0x40,0x79,0x88,0x22,0x23,0x24,0x5c,0xcc,0xea,0x34,0x57,0x61,0x5c,0xcc,0xeb,0x53,0xb2,0xcc,0x24,0x28,0x2a,0x2e,0x45,0x4c,0x5e,0xd1,0xf1,0x56,0xba,0xd5,0x36,0x5d,0x68,0x23,0x24,0x25,0x47,0x8e,0xa1,0x23,0x26,0x27,0x3b,0x6a,0x77,0x56,0xb9,0xd4,0x2d,0x43,0x49,0x4c,0x9b,0xb1,0x5a,0xc4,0xe1,0x5e,0xd0,0xef,0x3e,0x75,0x84,0x53,0xb0,0xca,0x2f,0x48,0x4e,0x4d,0xa0,0xb7,0x5f,0xd5,0xf5,0x5c,0xcb,0xe9,0x4d,0xa0,0xb6,0x38,0x64,0x6f,0x44,0x85,0x97,0x44,0x86,0x98,0x3e,0x74,0x83,0x2b,0x3d,0x42,0x5b,0xc8,0xe6,0x2c,0x3e,0x43,0x3e,0x74,0x82,0x3c,0x6f,0x7d,0x40,0x79,0x89,0x30,0x4c,0x53,0x2e,0x45,0x4b,0x54,0xb4,0xce,0x24,0x27,0x28,0x25,0x2c,0x2e,0x41,0x7e,0x8e,0x57,0xbd,0xd9,0x43,0x81,0x92,0x25,0x2b,0x2c,0x5c,0xca,0xe8,0x43,0x21,0xe4,0x1d,0x00,0x00,0x00,0x07,0x74,0x52,0x4e,0x53,0x06,0x91,0xed,0xee,0x90,0x88,0x89,0x9c,0x47,0xbe,0xd6,0x00,0x00,0x01,0x4f,0x49,0x44,0x41,0x54,0x78,0x01,0x6c,0x89,0xc3,0x42,0xb6,0x51,0x14,0x85,0x9f,0x75,0xb4,0xdf,0x5f,0xc8,0xb3,0x3c,0xcb,0x16,0xa6,0xdd,0x76,0x1c,0x65,0x8d,0xea,0x06,0xb2,0x8d,0xf3,0x61,0x16,0x36,0x16,0x41,0xce,0xbe,0x8c,0x17,0x04,0xfb,0x76,0xa2,0x7b,0x07,0x40,0xce,0x07,0x00,0x45,0x27,0x00,0xde,0x64,0x00,0x49,0xd5,0x21,0xe7,0x1c,0x9e,0xed,0x1a,0x20,0x00,0xf0,0x43,0x97,0xd4,0x54,0x8b,0x0b,0xfe,0x67,0x00,0x1c,0x00,0x31,0xc2,0x45,0x28,0xcf,0x05,0x14,0xf1,0x53,0x51,0x73,0x1a,0xe2,0x69,0x0d,0xc4,0x8f,0x85,0x5a,0xff,0xb7,0x16,0x56,0x06,0xb9,0x0b,0x00,0x02,0xd0,0x29,0xe9,0x67,0x21,0x89,0xaa,0x68,0xce,0xf9,0x10,0x02,0x74,0x05,0xe9,0xba,0x2d,0x69,0x7d,0x98,0xb5,0x11,0xb5,0x3c,0xd5,0x3f,0x15,0xb6,0x8f,0x6c,0x42,0x5a,0x61,0xc4,0xb4,0x34,0x7b,0x44,0xd3,0xe2,0x8c,0xbb,0x5f,0x65,0x38,0xa5,0x79,0xc7,0x81,0xad,0xc0,0x1f,0x33,0x9e,0x29,0x9f,0xa5,0x3f,0xb0,0x66,0x3b,0x38,0x2e,0xe3,0x1c,0xa4,0x74,0xcc,0x3d,0xe5,0x3b,0x0e,0x09,0x3a,0xe3,0x35,0x32,0x66,0x7f,0x4b,0x5a,0xec,0x7f,0x6c,0x12,0xf9,0xa8,0xd8,0x9a,0xcd,0x39,0x2e,0x9e,0x23,0x83,0xd2,0x02,0x41,0xc1,0x71,0xcc,0xfa,0xdb,0x16,0x06,0x1f,0xae,0xa3,0x56,0xff,0x81,0x60,0x3d,0x03,0x03,0x24,0xac,0xc2,0x3f,0x5f,0xb6,0xbe,0xae,0x05,0xd4,0x71,0x4d,0xe7,0x90,0x2e,0xef,0x4a,0x24,0x0f,0x0a,0x3f,0x5e,0x71,0xf7,0xf1,0xed,0xdb,0x8f,0xef,0x2e,0x7d,0x2c,0x82,0xec,0x73,0xe6,0xdd,0x0c,0x0c,0x5f,0x54,0x74,0x74,0xd4,0xbe,0x00,0x15,0x31,0x23,0x07,0x89,0x2f,0x28,0xec,0x97,0x2d,0x5b,0x06,0x12,0x81,0xe8,0x60,0x81,0xe8,0x60,0xcc,0x04,0xda,0xef,0xc5,0xf0,0x5a,0x1f,0x64,0x35,0x92,0x8e,0x99,0x9b,0x3f,0xce,0x65,0x62,0x5a,0xbf,0xde,0x88,0x69,0x2e,0xdb,0xe6,0x99,0x0c,0x10,0x19,0xec,0x71,0xce,0x84,0x2b,0x31,0xb0,0x01,0x7d,0xc2,0x8c,0x35,0xf9,0x00,0x00,0xef,0xe7,0x64,0xa8,0x47,0x95,0xcf,0xf8,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x08,0x03,0x00,0x00,0x00,0x44,0xa4,0x8a,0xc6,0x00,0x00,0x01,0x41,0x50,0x4c,0x54,0x45,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x32,0x52,0x5a,0x56,0xba,0xd6,0x5f,0xd4,0xf4,0x55,0xb7,0xd1,0x3d,0x72,0x80,0x24,0x28,0x29,0x27,0x32,0x35,0x5d,0xce,0xed,0x43,0x83,0x95,0x30,0x4c,0x53,0x3c,0x6f,0x7d,0x58,0xc0,0xdc,0x58,0xbf,0xdb,0x30,0x4a,0x51,0x3d,0x70,0x7e,0x44,0x84,0x96,0x3c,0x6e,0x7b,0x56,0xba,0xd5,0x45,0x87,0x99,0x38,0x64,0x6f,0x5f,0xd4,0xf3,0x45,0x88,0x9a,0x46,0x8b,0x9e,0x48,0x91,0xa5,0x39,0x64,0x70,0x5f,0xd5,0xf5,0x48,0x90,0xa4,0x49,0x93,0xa8,0x46,0x8c,0x9f,0x36,0x5b,0x65,0x60,0xd6,0xf7,0x60,0xd7,0xf8,0x4c,0x9d,0xb3,0x2f,0x47,0x4d,0x5f,0xd3,0xf2,0x55,0xb8,0xd3,0x27,0x30,0x32,0x50,0xa9,0xc1,0x2f,0x49,0x50,0x50,0xaa,0xc2,0x58,0xbf,0xdc,0x26,0x2f,0x31,0x3b,0x6c,0x79,0x33,0x52,0x5b,0x60,0xd8,0xf8,0x47,0x8e,0xa1,0x54,0xb3,0xcd,0x5c,0xcc,0xea,0x61,0xda,0xfb,0x31,0x4f,0x57,0x22,0x23,0x23,0x51,0xab,0xc4,0x61,0xd9,0xfa,0x52,0xae,0xc7,0x3d,0x71,0x80,0x60,0xd6,0xf6,0x2e,0x45,0x4c,0x2b,0x3d,0x41,0x54,0xb5,0xd0,0x2d,0x43,0x49,0x4b,0x98,0xae,0x23,0x26,0x27,0x43,0x82,0x93,0x5e,0xd0,0xef,0x49,0x94,0xa8,0x26,0x2e,0x30,0x34,0x55,0x5e,0x5e,0xd1,0xf0,0x40,0x79,0x88,0x5a,0xc7,0xe4,0x24,0x28,0x2a,0x5b,0xc9,0xe7,0x5e,0xd1,0xf1,0x2c,0x3f,0x44,0x52,0xaf,0xc9,0x22,0x23,0x24,0x31,0x4e,0x56,0x31,0x4d,0x54,0x44,0x85,0x97,0x3e,0x75,0x84,0x3b,0x6b,0x78,0x47,0x8d,0xa0,0x52,0xaf,0xc8,0x2f,0x48,0x4e,0x26,0x2d,0x2f,0x40,0x79,0x89,0x3e,0x73,0x81,0x3e,0x74,0x82,0x40,0x7a,0x8a,0x5d,0xcd,0xec,0x50,0xa8,0xc0,0x24,0x27,0x28,0x44,0x86,0x97,0x5d,0xcf,0xee,0x3c,0x6e,0x7c,0x30,0x4a,0x52,0x55,0xb7,0xd2,0x0e,0xd7,0x5c,0xbc,0x00,0x00,0x00,0x09,0x74,0x52,0x4e,0x53,0x00,0x25,0xad,0xf1,0x27,0xef,0xf3,0x28,0xf2,0x7e,0xd1,0xdd,0xe8,0x00,0x00,0x01,0x9e,0x49,0x44,0x41,0x54,0x78,0x01,0x8d,0x93,0x03,0x9a,0x43,0x31,0x14,0x46,0x5f,0xdd,0xbf,0x4d,0x6d,0xdb,0xb6,0x34,0xb6,0x6d,0x7b,0xff,0x0b,0x98,0xa4,0x6e,0x86,0xe7,0xe1,0xd3,0x09,0xae,0x04,0x41,0x24,0x96,0xe0,0x07,0x24,0x62,0x91,0x20,0x48,0x65,0xf8,0x05,0x99,0x54,0x10,0xe3,0x57,0xc4,0xc2,0x68,0x7f,0x95,0x9a,0x68,0xb4,0x3a,0x50,0x74,0x5a,0x0d,0x51,0xab,0x30,0x40,0x2e,0x60,0x80,0xde,0x60,0x34,0x99,0x2d,0x56,0x1b,0x60,0xb3,0x5a,0xec,0x26,0x87,0x41,0x8f,0x01,0x23,0xc1,0xe9,0x62,0x6b,0xdd,0xc4,0xe3,0xf1,0xfa,0xd8,0x3e,0x2e,0x27,0x27,0xf8,0x03,0x60,0x04,0x43,0x24,0x08,0x46,0xd8,0xcf,0x09,0x91,0x28,0x18,0xb1,0x78,0x22,0x36,0x58,0x10,0xe1,0x04,0x63,0x12,0x94,0x54,0xda,0xe9,0x4c,0xa7,0x40,0x49,0x1a,0xf9,0x3b,0x64,0x00,0x64,0x2d,0xb9,0x7c,0xbe,0x50,0x2c,0x01,0xc8,0x94,0x39,0xa1,0x52,0xad,0xd5,0x1b,0xcd,0x66,0x33,0x14,0xa2,0xbf,0x46,0xbd,0x56,0x6d,0x4d,0x0b,0xed,0x58,0xa7,0xda,0xed,0xcd,0x19,0xe7,0x17,0x40,0x59,0x98,0x37,0xce,0xf5,0xba,0xd5,0x4e,0xac,0x3d,0x12,0x16,0x97,0x0c,0x8e,0xe5,0xc8,0xca,0xaa,0x75,0x0d,0x7d,0xd6,0xac,0xab,0x2b,0x91,0x65,0x87,0x61,0x69,0x71,0x20,0xa4,0xd6,0x37,0x36,0x81,0xad,0xed,0x9d,0xdd,0x3d,0x68,0x0d,0xfb,0x5a,0xec,0xed,0xee,0x1c,0x6c,0x01,0x9b,0x1b,0xeb,0x87,0x7d,0xe1,0xa8,0x06,0xca,0xb1,0xa5,0x5b,0x46,0xab,0x49,0x39,0x41,0xb9,0x6b,0x39,0x06,0xa5,0xd6,0xeb,0x0b,0xe4,0x14,0x8c,0x33,0xa2,0xc3,0x39,0x13,0xce,0xa1,0xf3,0x9e,0x81,0x71,0x42,0x7e,0xd8,0xe1,0x62,0xb8,0xc3,0xe5,0x55,0x5f,0xb8,0x5e,0x8f,0xdc,0x00,0x5b,0x07,0xb7,0xf4,0x0e,0x77,0x86,0xfd,0x7b,0x7a,0x87,0x07,0x76,0x87,0x1b,0x7a,0x87,0xd9,0x28,0x8a,0xa3,0x28,0x8a,0xa3,0x28,0xfe,0x9b,0x07,0x86,0x8a,0x66,0xf2,0x71,0x94,0xc9,0x47,0x96,0xc9,0xef,0x6b,0xf1,0x94,0xcf,0xe7,0x8a,0x59,0xbe,0x16,0xff,0xaa,0x66,0xe4,0xf2,0xc7,0x7e,0xe0,0x3a,0x2a,0x34,0xd3,0x51,0x5c,0x4f,0x3e,0x9f,0x91,0xa0,0x87,0xbc,0x3c,0x7f,0xd7,0x93,0xfa,0x57,0xa3,0xe9,0xcd,0x5a,0x7c,0x07,0xde,0x8b,0xc5,0x37,0x93,0xf1,0x95,0xef,0x6a,0x54,0xd4,0xe4,0xe3,0x6e,0x0f,0x94,0xbd,0xbb,0x0f,0xa2,0xae,0x60,0x24,0x48,0xf0,0x2b,0xf2,0xbf,0x47,0x4f,0xf1,0xfb,0xf0,0x2a,0xe8,0x78,0x8b,0x95,0xf8,0x01,0xa5,0x58,0x2a,0x7c,0x02,0x94,0x18,0x5e,0xff,0x05,0x0f,0x64,0x0f,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x08,0x03,0x00,0x00,0x00,0x9d,0xb7,0x81,0xec,0x00,0x00,0x02,0x3a,0x50,0x4c,0x54,0x45,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x25,0x2b,0x2d,0x40,0x79,0x89,0x57,0xbc,0xd7,0x60,0xd7,0xf8,0x5e,0xd1,0xf1,0x53,0xb2,0xcc,0x43,0x82,0x93,0x2c,0x3e,0x43,0x2a,0x38,0x3c,0x58,0xc1,0xdd,0x61,0xda,0xfb,0x61,0xd9,0xf9,0x4d,0x9f,0xb5,0x2b,0x3c,0x41,0x61,0xd9,0xfa,0x58,0xc0,0xdc,0x23,0x25,0x25,0x54,0xb5,0xd0,0x4c,0x9e,0xb4,0x3d,0x71,0x7f,0x3e,0x75,0x84,0x4b,0x9b,0xb0,0x60,0xd6,0xf6,0x41,0x7d,0x8d,0x4c,0x9b,0xb1,0x38,0x64,0x6f,0x3d,0x72,0x80,0x25,0x2b,0x2c,0x40,0x79,0x88,0x5e,0xd0,0xef,0x53,0xb2,0xcb,0x29,0x35,0x39,0x3d,0x71,0x80,0x50,0xa9,0xc1,0x55,0xb7,0xd2,0x22,0x23,0x24,0x50,0xaa,0xc2,0x5c,0xca,0xe8,0x30,0x4a,0x51,0x51,0xaa,0xc3,0x22,0x23,0x23,0x55,0xb7,0xd1,0x23,0x26,0x26,0x5f,0xd4,0xf4,0x3e,0x74,0x82,0x3e,0x73,0x81,0x60,0xd8,0xf8,0x5f,0xd4,0xf3,0x35,0x59,0x63,0x31,0x4f,0x57,0x35,0x5a,0x64,0x31,0x4e,0x56,0x2b,0x3d,0x42,0x31,0x4d,0x55,0x2b,0x3b,0x40,0x2f,0x47,0x4d,0x5c,0xcc,0xea,0x2a,0x3b,0x3f,0x33,0x53,0x5c,0x29,0x38,0x3c,0x32,0x52,0x5a,0x5f,0xd5,0xf5,0x2b,0x3d,0x41,0x5d,0xcf,0xee,0x2c,0x40,0x46,0x2c,0x40,0x45,0x26,0x2d,0x2f,0x30,0x4b,0x53,0x37,0x61,0x6c,0x4f,0xa6,0xbe,0x39,0x64,0x70,0x38,0x61,0x6d,0x42,0x7e,0x8f,0x45,0x88,0x9a,0x50,0xa8,0xc0,0x4e,0xa2,0xb9,0x27,0x30,0x32,0x33,0x54,0x5d,0x5d,0xce,0xed,0x3f,0x78,0x87,0x33,0x55,0x5e,0x43,0x83,0x95,0x36,0x5c,0x67,0x55,0xb8,0xd3,0x26,0x2e,0x30,0x44,0x84,0x96,0x37,0x5f,0x69,0x52,0xad,0xc6,0x48,0x91,0xa5,0x49,0x94,0xa8,0x4d,0xa0,0xb6,0x24,0x28,0x2a,0x3f,0x76,0x85,0x5a,0xc6,0xe3,0x58,0xbf,0xdc,0x2d,0x41,0x47,0x23,0x24,0x25,0x5b,0xc9,0xe7,0x38,0x63,0x6f,0x5b,0xc8,0xe6,0x57,0xbd,0xd9,0x43,0x81,0x92,0x27,0x32,0x35,0x3f,0x76,0x86,0x38,0x62,0x6e,0x25,0x2a,0x2b,0x4c,0x9c,0xb2,0x4e,0xa3,0xba,0x32,0x50,0x58,0x29,0x37,0x3b,0x3d,0x70,0x7e,0x28,0x35,0x38,0x5e,0xd2,0xf2,0x50,0xa7,0xbf,0x34,0x57,0x61,0x51,0xab,0xc4,0x54,0xb4,0xcf,0x30,0x4a,0x52,0x51,0xac,0xc5,0x54,0xb4,0xce,0x49,0x93,0xa8,0x36,0x5d,0x68,0x52,0xaf,0xc9,0x54,0xb3,0xcd,0x30,0x4c,0x53,0x46,0x8b,0x9d,0x39,0x65,0x71,0x45,0x88,0x9b,0x45,0x89,0x9c,0x39,0x67,0x73,0x46,0x8a,0x9d,0x43,0x83,0x94,0x23,0x26,0x27,0x5c,0xcb,0xe9,0x60,0xd6,0xf7,0x26,0x2f,0x31,0x36,0x5c,0x66,0x42,0x81,0x91,0x41,0x7b,0x8c,0x52,0xae,0xc7,0x5d,0xcd,0xec,0x28,0x34,0x37,0x25,0x2c,0x2e,0x2a,0x3a,0x3e,0x2a,0x39,0x3d,0x39,0x66,0x72,0x3a,0x67,0x74,0x37,0x5e,0x69,0x55,0xb6,0xd0,0x3f,0x77,0x86,0x5a,0xc7,0xe4,0x58,0xbf,0xdb,0x5e,0xd1,0xf0,0x51,0xad,0xc5,0x48,0x90,0xa3,0x29,0x36,0x3a,0x56,0xb9,0xd4,0x27,0x30,0x33,0x34,0x55,0x5e,0x45,0x87,0x99,0x2e,0x45,0x4c,0x2e,0x46,0x4d,0x4b,0x99,0xae,0x40,0x7a,0x8a,0x53,0xd7,0x1c,0x0e,0x00,0x00,0x00,0x19,0x74,0x52,0x4e,0x53,0x00,0x2a,0x8e,0xd7,0xf8,0xd6,0x06,0x94,0xfd,0x98,0x09,0xbb,0xbd,0x95,0x2b,0xfc,0x8f,0xf9,0xf3,0xd4,0x90,0x2c,0xd8,0xfa,0xf4,0xc0,0x3d,0x56,0x8f,0x00,0x00,0x04,0x0c,0x49,0x44,0x41,0x54,0x78,0x01,0xa4,0xcb,0xb5,0x01,0x43,0x21,0x00,0x04,0xd0,0xef,0x8a,0x96,0x87,0x43,0x7c,0xff,0x05,0xe3,0xda,0x05,0x5e,0x79,0x52,0x5d,0xd5,0x4d,0xdb,0xe1,0x4f,0x5d,0xdf,0xd4,0xd5,0xdd,0x30,0x4e,0xc8,0x32,0xcd,0xcb,0xed,0xbf,0x22,0x1b,0x19,0xaa,0xaa,0xa2,0x28,0x30,0x56,0x15,0xe3,0x28,0xc0,0x59,0x25,0x50,0x44,0x54,0x2d,0x7e,0x28,0x6d,0xac,0xf3,0x21,0xe2,0x4b,0x0c,0xde,0x59,0xa3,0x15,0x7e,0xb4,0x95,0xfc,0x49,0xd2,0x66,0x7b,0xb3,0xdb,0x1f,0xde,0xe1,0x61,0x7f,0xbc,0xa7,0xa7,0xf4,0x33,0x97,0xd5,0x4f,0x70,0x26,0x94,0x1c,0xd0,0xa4,0x89,0xa1,0x00,0x78,0x8e,0xf7,0x23,0x9f,0x6a,0xad,0xf4,0xda,0xb6,0x6d,0x8d,0x6d,0xe9,0xf2,0x63,0x29,0x5d,0x6d,0xa4,0x92,0x87,0xc9,0x29,0xc6,0xa7,0x67,0x66,0xe7,0x14,0x68,0x6b,0xb2,0xf1,0xce,0xd2,0xa0,0xe6,0x67,0x67,0xa6,0xc7,0x99,0x9a,0xec,0x19,0xd0,0x2b,0x58,0x80,0xc5,0xea,0x75,0x69,0x79,0x05,0x56,0xd7,0xaa,0xb7,0x6b,0xab,0xb0,0xb2,0x5c,0x5b,0xfc,0x3a,0x2c,0xd8,0x08,0x36,0xd8,0xdc,0x6a,0xc4,0xb2,0x0d,0x3b,0xbb,0x22,0xbb,0x3b,0xb0,0xd7,0x58,0xf9,0xfe,0x01,0xdb,0x66,0xc1,0xe1,0x11,0xc7,0xcd,0xfb,0xfd,0x93,0x53,0xce,0xce,0xcf,0xcf,0x38,0x3d,0xde,0x6f,0xbe,0x3b,0xe6,0xe8,0xd0,0x28,0x18,0x83,0x8b,0xf6,0xd3,0xa5,0x42,0x6b,0xd4,0x65,0xfb,0xcd,0x15,0x5c,0x1b,0x05,0x37,0x70,0x2b,0x6d,0xee,0xee,0xe1,0xfe,0x4e,0xda,0x3c,0xc0,0x8d,0x51,0xf0,0x08,0x4f,0xd2,0xe6,0xf9,0x05,0xf4,0xb3,0xb4,0x79,0x82,0x67,0xbb,0x15,0x74,0x74,0xd0,0xeb,0x1b,0x6f,0x95,0xfd,0xbd,0xa3,0x9f,0xec,0x56,0xf0,0x01,0xbb,0xd2,0xe4,0x73,0x02,0xfd,0xfc,0xac,0x99,0xf8,0x94,0x26,0x5f,0xf0,0x61,0x14,0xfc,0x81,0xef,0x56,0x15,0x7e,0xe0,0xb7,0xd6,0x19,0x3f,0xad,0x2a,0x38,0xe0,0x8f,0x51,0x20,0x3b,0x38,0xa5,0xc1,0x2c,0xb8,0xa4,0x82,0x0b,0x66,0xa5,0x81,0x93,0x1d,0x31,0x0b,0xdc,0x78,0xa4,0x86,0xd7,0xa7,0xf1,0x9f,0x04,0x2a,0x9c,0xf8,0xd1,0x41,0xaf,0xd4,0xf0,0xb0,0x61,0x23,0x08,0xb1,0xb3,0x16,0xb6,0xa6,0x23,0x8a,0x6e,0x50,0x91,0x69,0x2b,0xbc,0xb6,0x43,0xc8,0x2c,0x88,0xc6,0xe8,0xe4,0xcd,0x5f,0xe1,0x8d,0x4e,0x62,0xd1,0xe1,0x82,0xc3,0xb8,0xe7,0x05,0x00,0x95,0x48,0x8e,0x42,0x2a,0xda,0xd2,0xa6,0x20,0x9d,0x4c,0x28,0x00,0x5e,0x3c,0xf1,0xc3,0x81,0x82,0x4c,0x36,0x07,0x70,0x4a,0xbe,0x50,0x94,0xc9,0x08,0xa5,0x8e,0xa9,0xa2,0x25,0x22,0x93,0x52,0x2c,0xe4,0x39,0x05,0xc8,0x65,0x33,0x65,0x52,0xcb,0x61,0x31,0x90,0x28,0x0a,0xa2,0xdf,0x71,0xc7,0x38,0xd9,0x8e,0xb4,0x8a,0x6d,0x4b,0xcb,0xb1,0x6d,0xc6,0xb6,0x6d,0xdb,0xfc,0xb7,0x79,0x69,0x21,0xe8,0x0e,0xce,0xaa,0x59,0xcf,0x75,0xeb,0xa0,0xc0,0xcf,0x5f,0xc0,0xef,0x3f,0x69,0xf7,0x88,0xfd,0x2b,0xf2,0x0f,0x8a,0xc4,0x41,0x11,0x7c,0x16,0xf9,0x7b,0x91,0x98,0xb4,0x3f,0xbf,0x81,0x5f,0x45,0x6e,0x01,0x29,0x2e,0x01,0x4a,0xcb,0x44,0xa4,0x3c,0x80,0x0a,0xa9,0xac,0xa2,0x5a,0x5c,0x54,0x73,0xa9,0x52,0x2a,0x08,0x28,0x17,0x09,0xaf,0xa9,0x05,0x4a,0x8a,0x9d,0x02,0x85,0x75,0x10,0x58,0x2f,0x1a,0x0d,0x34,0x4a,0x13,0x39,0x9a,0xa1,0x35,0xb7,0x44,0x45,0xb5,0x34,0x6b,0xc7,0x34,0x87,0x26,0x69,0xa5,0x56,0x34,0xda,0x02,0xa1,0xae,0xd0,0x16,0x08,0xaf,0x86,0x76,0x73,0x66,0x3a,0xe0,0x67,0x2c,0x9d,0xa2,0xe8,0x42,0x43,0xbb,0xee,0x24,0xb6,0x08,0xba,0xcd,0xf9,0xee,0x81,0x87,0xe1,0x96,0x40,0x11,0xf4,0x8a,0x49,0x5f,0x3f,0x03,0x3c,0x1d,0x14,0x91,0x21,0x0c,0x5e,0x8a,0xc8,0xe0,0xd3,0xbd,0xc7,0xf6,0xe4,0xf5,0x42,0x91,0x25,0x10,0x4c,0xe0,0x77,0xb1,0x18,0x06,0x46,0x44,0x31,0x8a,0xc1,0xa8,0x28,0x46,0x80,0x1e,0xb1,0xf8,0x1e,0x48,0x98,0x25,0x30,0xc6,0x03,0xb1,0x19,0xbf,0xc5,0xd8,0x84,0x28,0xa2,0x30,0x88,0x12,0xc5,0xc4,0x18,0x17,0x27,0xc5,0xe6,0x01,0x97,0x4e,0x2e,0x30,0x75,0x84,0x40,0xed,0x59,0x87,0x50,0x04,0x57,0xec,0x49,0xfc,0x61,0x4e,0xe2,0x4b,0x0c,0x9a,0x0f,0x99,0xc4,0x3f,0xf0,0xd3,0xb5,0x8c,0x3d,0x8e,0x65,0x9c,0x76,0x2f,0x63,0x97,0xb1,0x8c,0xd3,0x30,0x63,0x16,0x30,0xf7,0x32,0xca,0xeb,0x3a,0x88,0x30,0x36,0x52,0x2d,0x75,0xd2,0xc4,0xad,0x5c,0x51,0xcc,0xb6,0xe4,0xe4,0xb4,0xbc,0xb5,0x36,0x52,0x23,0x0d,0xc6,0x46,0x9a,0xb3,0x36,0xd2,0xf1,0xb7,0x72,0xd5,0x81,0xad,0xec,0x75,0x98,0xe6,0x8d,0x6d,0xe2,0xf0,0xc2,0x7f,0x9e,0x87,0x49,0xf1,0x69,0x7e,0x01,0x20,0x96,0xc5,0xfc,0xa0,0xc3,0x8f,0x73,0x50,0xfe,0x22,0xb1,0x00,0x0b,0xf3,0x9f,0xbc,0x0d,0x65,0x69,0x79,0xe5,0xa3,0xcb,0x50,0x9a,0xe0,0xe3,0xca,0xf2,0x92,0xa7,0xa1,0x9c,0xdd,0xd2,0x2c,0x53,0x5d,0x55,0xa6,0xba,0x56,0x85,0x1b,0xaa,0xd6,0x94,0xa9,0xae,0x5a,0xa6,0xea,0x6f,0xeb,0xeb,0x1b,0xb7,0x78,0x7a,0xe3,0x99,0xe2,0xc6,0x53,0x6e,0x6d,0xac,0x7b,0xda,0xba,0x77,0x61,0xd9,0x84,0xcf,0x1e,0x85,0xc5,0xbb,0xb4,0xdd,0xf5,0x28,0x6d,0x67,0x2f,0xae,0xfe,0xe5,0xbd,0xc0,0xbf,0xbc,0xfb,0x05,0x8c,0x5b,0xa7,0x08,0x18,0x19,0x62,0xb3,0xb5,0x17,0x71,0xb6,0xc5,0x26,0xd5,0xaf,0x07,0xb9,0x90,0x24,0x16,0xf1,0x7a,0xc8,0x8a,0x17,0x8b,0x04,0x48,0x3e,0x61,0xcc,0x4b,0x54,0x31,0x2f,0xe6,0xf8,0x31,0x4f,0x82,0x89,0x30,0xbe,0x2e,0x7f,0x68,0x07,0xcd,0x87,0x59,0xfe,0x41,0xd3,0xf6,0xa3,0x0a,0x2d,0xea,0x3e,0xdb,0x8b,0xba,0xab,0xa2,0x58,0xd5,0xa2,0xee,0x7d,0xdf,0xa8,0xeb,0x0c,0xdb,0xd1,0x3b,0x07,0xc3,0xf6,0x4e,0xb4,0x7f,0xd8,0x76,0xc5,0xfd,0x8f,0xce,0xb8,0xff,0x31,0x00,0x8d,0xeb,0xd7,0xc4,0x4f,0x40,0x26,0x76,0x2f,0xc4,0xfe,0x5f,0x97,0xf6,0x5c,0xf4,0x0e,0xc7,0x5c,0xed,0x2e,0x0f,0x99,0xbd,0x2b,0x30,0x94,0x03,0x3b,0x1c,0x14,0x01,0x21,0x06,0x66,0xca,0x0c,0x10,0xa6,0xb4,0xd3,0x25,0xc2,0x20,0x4a,0x59,0xb7,0x4f,0x94,0xc2,0x8e,0x27,0x2f,0xc5,0x5d,0x5f,0x8a,0x3b,0xdf,0x10,0xc0,0x27,0x22,0x26,0x4e,0xaa,0x6e,0x09,0x61,0x11,0x51,0x90,0x5e,0x00,0x19,0x94,0x63,0x78,0xa6,0x41,0xe1,0xd2,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82}; + +static const unsigned char FILE_2[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x2f,0x3e,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x22,0x2f,0x3e,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x2f,0x3e,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x74,0x68,0x65,0x6d,0x65,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x22,0x2f,0x3e,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x64,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x57,0x65,0x62,0x20,0x73,0x69,0x74,0x65,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x75,0x73,0x69,0x6e,0x67,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x2d,0x72,0x65,0x61,0x63,0x74,0x2d,0x61,0x70,0x70,0x22,0x2f,0x3e,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x61,0x70,0x70,0x6c,0x65,0x2d,0x74,0x6f,0x75,0x63,0x68,0x2d,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x6c,0x6f,0x67,0x6f,0x31,0x39,0x32,0x2e,0x70,0x6e,0x67,0x22,0x2f,0x3e,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x6d,0x61,0x6e,0x69,0x66,0x65,0x73,0x74,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x6d,0x61,0x6e,0x69,0x66,0x65,0x73,0x74,0x2e,0x6a,0x73,0x6f,0x6e,0x22,0x2f,0x3e,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x57,0x65,0x62,0x55,0x49,0x20,0x52,0x65,0x61,0x63,0x74,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x64,0x65,0x66,0x65,0x72,0x3d,0x22,0x64,0x65,0x66,0x65,0x72,0x22,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x63,0x73,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x39,0x66,0x63,0x62,0x32,0x64,0x36,0x38,0x2e,0x63,0x73,0x73,0x22,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x74,0x79,0x6c,0x65,0x73,0x68,0x65,0x65,0x74,0x22,0x3e,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x6e,0x6f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x59,0x6f,0x75,0x20,0x6e,0x65,0x65,0x64,0x20,0x74,0x6f,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x20,0x4a,0x61,0x76,0x61,0x53,0x63,0x72,0x69,0x70,0x74,0x20,0x74,0x6f,0x20,0x72,0x75,0x6e,0x20,0x74,0x68,0x69,0x73,0x20,0x61,0x70,0x70,0x2e,0x3c,0x2f,0x6e,0x6f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x3c,0x64,0x69,0x76,0x20,0x69,0x64,0x3d,0x22,0x72,0x6f,0x6f,0x74,0x22,0x3e,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e}; + +static const unsigned char FILE_3[] = {0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc0,0x08,0x03,0x00,0x00,0x00,0x65,0x02,0x9c,0x35,0x00,0x00,0x00,0x87,0x50,0x4c,0x54,0x45,0x00,0x00,0x00,0x64,0xda,0xfb,0x61,0xda,0xfc,0x61,0xdb,0xfc,0x61,0xda,0xfc,0x61,0xdb,0xfc,0x61,0xda,0xfb,0x61,0xdb,0xfc,0x61,0xda,0xfb,0x61,0xda,0xfc,0x61,0xdb,0xfc,0x61,0xda,0xfc,0x61,0xda,0xfc,0x61,0xdb,0xfc,0x61,0xda,0xfc,0x61,0xda,0xfc,0x61,0xda,0xfb,0x61,0xda,0xfb,0x61,0xda,0xfb,0x61,0xda,0xfc,0x60,0xda,0xfb,0x61,0xda,0xfb,0x61,0xdb,0xfb,0x61,0xda,0xfc,0x61,0xda,0xfc,0x61,0xda,0xfc,0x61,0xda,0xfc,0x61,0xda,0xfb,0x60,0xda,0xfb,0x61,0xda,0xfb,0x61,0xdb,0xfc,0x61,0xda,0xfc,0x61,0xdb,0xfc,0x61,0xda,0xfb,0x61,0xdb,0xfc,0x61,0xda,0xfb,0x61,0xda,0xfb,0x61,0xdb,0xfb,0x61,0xda,0xfb,0x61,0xda,0xfb,0x66,0xe8,0xff,0x61,0xdc,0xfe,0x63,0xdf,0xff,0x65,0xe3,0xff,0x68,0xeb,0xff,0x48,0xd5,0xc6,0x94,0x00,0x00,0x00,0x27,0x74,0x52,0x4e,0x53,0x00,0x08,0xfb,0x23,0xf6,0x0f,0x2c,0xe0,0xd8,0xeb,0x5f,0x93,0x80,0xac,0xf1,0x9c,0x45,0xc0,0xd0,0x4c,0x1c,0x17,0x6e,0x3f,0x58,0xe5,0xb3,0x34,0x51,0x67,0xb9,0x79,0x74,0xca,0x3a,0xa4,0xc5,0x87,0x8c,0x8c,0x8d,0x21,0xcd,0x00,0x00,0x13,0xe4,0x49,0x44,0x41,0x54,0x78,0xda,0xec,0x5b,0xe9,0x72,0x9b,0x30,0x10,0x2e,0x02,0x1b,0x6c,0x2e,0x1b,0x3b,0x3e,0xf0,0x15,0xc7,0x69,0xd0,0xc1,0xfb,0x3f,0x5f,0x2d,0x2c,0xf1,0x29,0x95,0xb1,0xc8,0x14,0xb7,0xfd,0x91,0xcd,0x4c,0x27,0x01,0xa4,0xd5,0xde,0xab,0xdd,0xed,0x8f,0x6f,0xf8,0x86,0x6f,0xf8,0x86,0x6f,0xf8,0x86,0x6f,0xf8,0x86,0x6f,0xf8,0x2a,0x78,0x2d,0xfc,0xe9,0x46,0x3f,0xe4,0x1e,0xb7,0x9f,0xbf,0x07,0x26,0xae,0x3f,0x42,0xed,0x59,0x7f,0x3e,0x15,0x80,0xc5,0xdb,0x4d,0x4f,0x1f,0x71,0x9c,0x1c,0x16,0xbe,0xe7,0xc0,0xec,0x38,0xfc,0x72,0xb6,0x8a,0xd3,0xe3,0x31,0xcd,0x4f,0x8b,0x97,0x27,0x93,0x00,0xbc,0xeb,0x3c,0xac,0xe8,0x0d,0x78,0x10,0xe5,0x9b,0xe5,0x97,0x68,0xc0,0x3e,0xde,0x5b,0xf2,0x9e,0x71,0xaa,0x40,0x4c,0xd2,0xc5,0x13,0x29,0x00,0xda,0xdd,0x91,0xd7,0xbc,0x22,0x37,0xa8,0x98,0xa8,0xe9,0x24,0xdd,0x8c,0x80,0xba,0x2f,0xf7,0xc7,0x49,0xc4,0x6b,0xca,0x2a,0xa2,0xb7,0xe2,0x54,0xcc,0x77,0xcf,0xa2,0x00,0x88,0x4f,0x8c,0x56,0xa4,0x02,0x10,0x42,0x38,0xa5,0xe1,0x4f,0x5f,0xbe,0xee,0x7f,0xfc,0x59,0x49,0xa8,0xb8,0x2e,0xae,0x0c,0x20,0x15,0x65,0xaf,0xcf,0x11,0x02,0x30,0xe7,0x35,0x53,0x48,0x01,0x0d,0xf7,0x82,0x7c,0x0c,0xdc,0xae,0xe3,0x2f,0xde,0x05,0x65,0x38,0x3d,0x76,0x62,0x75,0xfc,0x5c,0x35,0xba,0xd4,0x1a,0xab,0x8d,0xba,0xca,0x7d,0x37,0x72,0xf9,0xc1,0x6c,0x2e,0x68,0xd5,0xb5,0x4f,0x1d,0x0f,0x4f,0x00,0x70,0x27,0x38,0x3f,0x69,0xe0,0x33,0x09,0xc1,0x4f,0x87,0x2d,0xc8,0x97,0xe3,0x94,0x9b,0xc7,0xd7,0x36,0x00,0x0a,0x0e,0x43,0x53,0x00,0xe4,0x33,0x0e,0x75,0x15,0xd2,0x71,0x48,0x63,0x36,0x49,0xa0,0xdb,0x29,0x28,0xb8,0x1f,0xb6,0x12,0xa2,0x8e,0x0f,0xed,0x6b,0xa0,0xd5,0x4c,0x56,0x8d,0x07,0xa6,0x00,0xc8,0x23,0xa1,0xb1,0xd4,0x2c,0x3c,0xcf,0xe7,0xd1,0x84,0xd7,0x9f,0x74,0x99,0x70,0x7a,0x84,0x1e,0xdd,0xd3,0x9e,0xa8,0xb1,0x21,0xb0,0xa1,0x16,0x59,0x51,0xe6,0x79,0x5a,0x10,0xca,0xd4,0x43,0x3a,0xc7,0x92,0x61,0x09,0x78,0xa5,0x44,0x1d,0x93,0xc5,0xbb,0x91,0x7c,0xb4,0x5c,0xbf,0x1e,0x03,0xe9,0x4d,0xc0,0x51,0x1a,0xac,0x34,0x05,0x36,0x07,0x62,0x2e,0x8c,0x4f,0x39,0xe5,0x51,0xbc,0x58,0xde,0xde,0xfa,0x1f,0x8c,0xab,0x77,0x74,0x33,0xa4,0x08,0x80,0x7e,0x14,0xde,0x30,0x10,0x9e,0xcd,0x8c,0x17,0xfe,0xea,0xcc,0xa5,0x02,0x40,0x8f,0x8e,0x4b,0x1c,0xc0,0x64,0xff,0x5b,0x54,0x1b,0xa4,0x72,0x9a,0xe5,0x6b,0xcf,0x08,0xca,0xb3,0x40,0xed,0x4f,0xcf,0x58,0x36,0x24,0x01,0x07,0x4a,0x94,0x92,0xae,0x9b,0x0c,0x0c,0x89,0xd0,0x2c,0x35,0x83,0x03,0xa1,0xd9,0x46,0xbe,0xb1,0x23,0x88,0x30,0x8e,0x5f,0x6f,0x93,0xa5,0x99,0x49,0x79,0x86,0x89,0x89,0xd9,0x53,0xac,0xe0,0x9d,0x2a,0x06,0x9d,0x3e,0x6d,0xdf,0x90,0xb2,0x4b,0x39,0x25,0x04,0xcc,0x6d,0xbd,0x39,0xe4,0x57,0xd6,0x8c,0xb0,0x56,0x4a,0x93,0xa4,0x75,0x58,0xf8,0xe6,0x43,0x63,0xb8,0xe0,0xd5,0x70,0x02,0x18,0x2b,0xe4,0x22,0xf2,0xee,0xc5,0xa6,0xf5,0x9c,0xf2,0x96,0x82,0xaa,0x3e,0xfb,0xf2,0x29,0x3e,0x78,0x0b,0xa9,0x21,0x22,0x16,0x23,0x73,0x33,0x89,0xdc,0xde,0x64,0xc0,0x27,0xf2,0xf5,0xd0,0x04,0x9c,0x34,0x7b,0x94,0x9f,0xb6,0x48,0x98,0x6e,0xa1,0xe2,0x84,0x66,0x50,0x03,0xef,0xfa,0x8e,0x09,0x02,0x23,0x99,0xef,0xe4,0xc3,0xee,0x38,0x43,0x9e,0x62,0xc6,0xf3,0x86,0x00,0x22,0xb9,0xe3,0xdd,0xf7,0x91,0xa3,0x5c,0x40,0x08,0x9c,0xcb,0xb4,0x46,0xbd,0xf9,0xa0,0x50,0x9f,0xc6,0x4d,0x75,0x6c,0xe1,0x13,0x76,0xfb,0x26,0x1f,0x8a,0x00,0xec,0xfd,0x32,0xe1,0xb7,0xbd,0xd3,0x07,0x6e,0x7e,0x11,0xd6,0x50,0x23,0x9a,0xcb,0x67,0xd2,0x4c,0xcb,0x9a,0x10,0xb0,0x1f,0x81,0xa2,0x93,0x4b,0xa2,0xc0,0x37,0x43,0x11,0xb0,0xe6,0xca,0x49,0x4f,0xcd,0xad,0x2d,0x2d,0xbe,0xc0,0xa3,0x92,0xfa,0xe8,0x49,0x13,0x7f,0x29,0x40,0x95,0x60,0x27,0xf9,0x99,0x4b,0x4f,0x59,0x00,0x13,0x1a,0xd8,0x89,0x32,0x72,0x3f,0xd0,0x43,0xdb,0x03,0x0a,0x43,0x28,0xae,0xc6,0x38,0xde,0x1a,0x0f,0xc2,0x37,0xf9,0x91,0x9b,0x4d,0x7c,0x36,0x38,0x01,0xf1,0x8d,0x8d,0xd2,0x07,0x79,0x8f,0xbd,0x15,0x18,0x1e,0xd0,0xad,0xbf,0xcb,0x44,0xd0,0x2a,0x55,0x3a,0x52,0x8b,0x9d,0x8a,0xba,0x1a,0xdc,0x8a,0x8f,0x37,0xed,0xa4,0x47,0xc7,0xce,0x57,0xfa,0x2e,0x6d,0x54,0x23,0x74,0x92,0x09,0xfd,0x3b,0x17,0x89,0x5b,0xb3,0xcf,0x82,0x3c,0x29,0xa9,0x8e,0x14,0x01,0xae,0x9d,0xe5,0xeb,0x57,0xce,0xdb,0x53,0x33,0xfd,0x9b,0x08,0xf6,0x3f,0xdc,0x6b,0x53,0x85,0x26,0x1d,0xec,0xe0,0x88,0x31,0xc4,0x29,0x5b,0x78,0xa3,0xa0,0x75,0xfb,0x50,0x7f,0x47,0x96,0x8c,0x60,0x3c,0x64,0x3a,0x04,0x0f,0x9d,0xf1,0xfe,0x21,0xc6,0x6b,0x2d,0x17,0xe7,0x3f,0xbf,0xf4,0x5a,0xb8,0x52,0x7e,0x34,0x84,0xa9,0x0d,0x95,0x48,0xb0,0x2f,0xb8,0x07,0xe5,0x3b,0x01,0x75,0xe9,0xf5,0x5b,0x37,0x55,0xe1,0x72,0x3b,0x1a,0x98,0x80,0x9d,0xce,0x14,0x5d,0x85,0x0f,0x24,0x6f,0x1c,0xe7,0xe7,0x71,0xdf,0x0b,0xff,0x42,0xdc,0x4c,0x67,0xb2,0x1c,0x98,0x80,0xb5,0xa8,0x10,0x06,0x7a,0xad,0xd8,0x0b,0x10,0xc0,0xd6,0x58,0xe5,0xbc,0xb5,0x0e,0x1a,0xc9,0xb0,0x31,0xc5,0xc6,0xfd,0x16,0x54,0xcc,0x90,0x40,0xd0,0x57,0x70,0x6b,0xa6,0xf0,0x8c,0xff,0x0d,0x01,0xb0,0x99,0x80,0x9b,0xd7,0x7d,0x31,0xe9,0xb9,0xee,0xed,0xbf,0x20,0xe0,0xea,0xb4,0x26,0xa6,0x1f,0x6d,0xdc,0xca,0x55,0xa9,0xff,0x07,0x02,0x88,0x24,0xc0,0xed,0x83,0x42,0x4a,0xa0,0x41,0xcd,0x3a,0x1a,0xc1,0xaf,0x0c,0xa3,0x42,0xc3,0x1b,0x31,0x92,0x89,0x33,0x0d,0xf4,0xf5,0x56,0xb4,0x79,0xd1,0x5c,0xbe,0xea,0x69,0xc4,0x3c,0xf3,0x87,0x76,0xa3,0x4c,0xb1,0xe6,0xad,0xc7,0xc6,0xa9,0x8e,0x01,0xa4,0x4e,0x2e,0xf8,0x3d,0xff,0x8a,0x1b,0x7d,0x19,0x3a,0x90,0x11,0x04,0x32,0x67,0x3a,0x80,0x33,0xc7,0x32,0x0b,0x0c,0x74,0x34,0x4e,0xb0,0x76,0x80,0x40,0x36,0x7c,0x2a,0x81,0x9b,0x83,0x3e,0xff,0x45,0xea,0x93,0xac,0x66,0xe0,0x32,0xf4,0x6f,0x52,0x09,0x24,0x73,0xb8,0xd2,0x77,0x6b,0x71,0x7b,0xfb,0x3d,0xde,0x96,0x46,0xba,0xa2,0xc7,0xd8,0x9b,0x6b,0x75,0x82,0x64,0x6e,0x50,0x50,0x75,0x51,0xa8,0x41,0xe7,0x09,0x96,0x13,0x4e,0xf4,0x7d,0x4c,0x72,0xb1,0x79,0x24,0x88,0x0e,0x07,0x2f,0x8e,0xe5,0xb9,0x22,0xa0,0xc4,0xc3,0x41,0xcb,0x5a,0xa8,0x17,0x74,0x3b,0x20,0x7d,0xd8,0x50,0x1d,0x16,0x51,0x8d,0xc9,0xc2,0xed,0xe3,0xf5,0xa5,0x81,0x66,0x58,0x48,0xfb,0xdc,0xc8,0xbc,0xb6,0x03,0x42,0x38,0x1c,0xee,0xd5,0xb7,0xf0,0x7e,0xfd,0x0b,0xdc,0xc8,0x3e,0x06,0x25,0x00,0xae,0x85,0xe0,0x4e,0xdc,0x5d,0xc0,0x6e,0x80,0xef,0xf5,0x77,0xb0,0x4d,0x18,0x51,0x77,0x01,0xf9,0x39,0x77,0x62,0x1c,0x01,0x0e,0xba,0xa3,0xa8,0xa0,0xcf,0xf9,0x8a,0xcf,0x50,0x13,0xb8,0x02,0x63,0xbb,0x07,0x1b,0xf8,0xda,0x5b,0x2f,0x06,0x27,0x60,0xcf,0x81,0xbf,0x9b,0x7f,0x82,0xc0,0x81,0xe2,0x47,0xae,0x38,0xd6,0xad,0x6d,0xc0,0xc5,0x77,0x05,0xe2,0xe1,0xbb,0x34,0xb8,0x92,0x89,0xae,0x40,0xe0,0x29,0x3b,0xe9,0xf0,0x82,0x5e,0xd4,0x12,0x87,0xda,0x5e,0x2f,0x39,0x0f,0x55,0x5a,0xdc,0xf2,0x1b,0x7a,0xdb,0x8f,0x7a,0x5e,0xc3,0x63,0x18,0x00,0x9f,0x8c,0xbd,0xa5,0x3f,0x96,0xb0,0xdb,0xc9,0x7f,0xfd,0xe5,0xd2,0x5b,0x07,0x0c,0xea,0xa5,0xa6,0x3c,0x3c,0xbb,0xfa,0xa4,0x4b,0x8b,0xc3,0xc3,0x59,0xa0,0xe0,0x01,0xaf,0x69,0x50,0xb1,0x68,0xaf,0x30,0x6c,0x12,0x4d,0x26,0x59,0x40,0x88,0x54,0xb9,0x8a,0x90,0x20,0xc8,0x26,0x93,0x28,0x6b,0x5f,0x57,0x0b,0x1c,0x1d,0x7b,0xa0,0x36,0x8a,0x02,0xec,0x90,0x22,0xb8,0xd0,0xd6,0x0d,0x01,0xef,0xad,0x51,0x36,0x3d,0xc5,0x65,0x11,0x1a,0x57,0x30,0x2e,0x38,0xe7,0x0c,0xc0,0xaf,0x20,0xf0,0x9a,0x55,0x61,0x71,0xcc,0x93,0xe9,0x7a,0xf9,0x1b,0x1d,0xa3,0xd0,0x11,0x2e,0x07,0x68,0xf1,0x71,0x79,0xa5,0x51,0xfd,0x25,0x7f,0xb6,0x8a,0x8f,0x57,0xce,0xd2,0x5b,0xcb,0xd5,0x00,0xd5,0xf8,0xc5,0xdf,0xea,0x01,0x28,0x94,0x6b,0x58,0x16,0x1d,0xe3,0xd5,0xcc,0xf7,0x74,0xab,0x67,0x57,0xb1,0x67,0xf5,0x07,0x10,0x8c,0xe8,0xa2,0x69,0xed,0xed,0x93,0x34,0xca,0x04,0xad,0xa9,0x50,0xf3,0x1a,0xd5,0x57,0x40,0x2d,0x61,0xcd,0x06,0x59,0x94,0x26,0xfb,0x86,0x8a,0x0d,0x2a,0xc8,0xc3,0x13,0xb0,0xcc,0x14,0x77,0x3e,0xfc,0x43,0x5e,0x04,0xa2,0x61,0xba,0xfb,0xe0,0x6e,0x42,0xa4,0x38,0x6a,0x11,0x44,0x97,0x95,0x9f,0x2b,0x29,0x87,0xcf,0xe8,0xf1,0x79,0x85,0x50,0xec,0xa9,0xa8,0x66,0x7b,0xa3,0xcf,0x7f,0x04,0x72,0xb9,0x16,0x06,0xad,0x74,0x83,0xa6,0x1c,0xbe,0x41,0x73,0x05,0x1d,0x4c,0x19,0x7b,0xc4,0x77,0x02,0xb0,0x9f,0x3a,0x16,0x2a,0x6e,0x90,0xfa,0x75,0xb0,0xe1,0x2d,0x38,0x88,0xe5,0xb4,0xe0,0x77,0x59,0xc8,0x2a,0xdb,0x3a,0x1b,0x10,0x82,0x2b,0x10,0xc6,0x43,0x6e,0x09,0xc0,0x06,0xfe,0x3e,0xf5,0x15,0xea,0x81,0x98,0xbf,0x3c,0x94,0x19,0xe5,0x0e,0xc6,0xdd,0xb4,0xb7,0x78,0x2f,0x2f,0xf1,0xcf,0xd3,0x61,0xba,0xd9,0x2f,0x66,0xb3,0xd9,0x7a,0x7d,0xfd,0x67,0xb1,0xdf,0x4c,0x0f,0xaf,0x49,0x9c,0xa7,0xf3,0x73,0x88,0x6d,0x58,0xa7,0x09,0x09,0x9a,0x95,0x87,0xe5,0x1f,0x52,0x80,0xe6,0xe3,0xfe,0x92,0x61,0x9a,0xc4,0x00,0x79,0x74,0x4e,0xeb,0x9a,0xa3,0x85,0x54,0x7a,0xce,0xc2,0x43,0x49,0x8d,0x86,0x78,0x4d,0xf9,0x5d,0x32,0x08,0xa3,0x34,0x4b,0x37,0x23,0x27,0x0d,0x6e,0xe6,0x8f,0x7f,0x86,0x82,0xf2,0xdf,0x50,0x68,0xab,0x13,0x24,0x3c,0xe6,0x87,0x43,0xc0,0x2a,0x34,0xa8,0x6f,0xd9,0x5b,0x03,0x48,0xe6,0x1a,0x50,0xd2,0x9c,0x70,0x25,0x80,0x60,0x3a,0xcd,0x8f,0x61,0xe3,0xcf,0x40,0x85,0x39,0x0b,0x22,0xb6,0xf1,0xd8,0x41,0x82,0x6b,0xae,0x70,0x5f,0x56,0x54,0x0f,0x05,0x01,0x98,0x68,0xe6,0x15,0xd3,0xd3,0x7e,0x2c,0x37,0xcf,0x69,0xdf,0x31,0x13,0x14,0x1e,0x54,0xb7,0x47,0x46,0xc3,0xc5,0x29,0x2d,0x32,0xd1,0x04,0x14,0x7b,0x92,0xad,0x3a,0x6e,0x3c,0xd0,0xf0,0x55,0xdd,0x39,0x14,0x02,0xaa,0x63,0xc0,0x95,0xef,0xc9,0xc2,0xf7,0x74,0xa2,0x4d,0xd5,0x53,0x64,0x30,0xae,0x36,0x92,0x26,0xb8,0xbd,0xf4,0xf8,0x8b,0xa4,0xdc,0xde,0xc3,0x54,0x51,0x1a,0xad,0x30,0x56,0xf1,0xa5,0xe3,0x9f,0x42,0xfa,0xfb,0x80,0xa2,0x9e,0x96,0x18,0xa9,0x8f,0x9a,0x1f,0x99,0xbf,0x20,0x07,0xee,0xdb,0x33,0x47,0xf1,0x44,0xa7,0x55,0xcb,0x2d,0x27,0xc8,0x43,0x80,0x54,0xd0,0x6d,0x82,0xd1,0x8a,0xde,0xc7,0x7f,0x0d,0x3f,0x6b,0x3e,0x91,0x76,0xa5,0x95,0xd7,0x37,0xe6,0x6d,0x3e,0xb4,0x46,0xa0,0xea,0xd3,0x5f,0x89,0xd4,0xd5,0xb7,0x69,0x88,0xbf,0x69,0xff,0x44,0x35,0x66,0x58,0xc3,0xe4,0xd4,0x4f,0x0a,0x68,0x57,0x87,0x94,0xff,0x7e,0x7a,0x92,0x5e,0x14,0xe7,0x6a,0x79,0x63,0xc5,0x45,0x07,0x55,0x20,0x27,0xa0,0xf6,0x80,0x9b,0x97,0x7e,0xf8,0x53,0xdf,0x3a,0xe3,0x34,0xa0,0x7a,0x92,0x0d,0xe3,0x45,0x07,0x08,0xc1,0x3d,0x5b,0xfc,0x4e,0x05,0x31,0x35,0x47,0x50,0x32,0x5f,0xf9,0x3f,0x46,0x99,0x1d,0xea,0x8f,0x94,0xa0,0x6e,0xdd,0xbb,0xce,0x17,0x30,0x62,0x51,0x7d,0x16,0x2a,0x11,0xba,0x9a,0xc4,0xf4,0xa8,0xe7,0x62,0xe1,0x72,0xcf,0x33,0x45,0x81,0xb3,0x08,0x17,0x73,0xf1,0x79,0x29,0x2f,0x4e,0xbe,0x7c,0xa5,0x4f,0xcb,0xb2,0xa5,0x16,0xbd,0xcc,0x1f,0x71,0x53,0xfb,0x6a,0x6e,0x8e,0xc4,0x19,0xf3,0x48,0x75,0xde,0x3c,0xf1,0x5f,0xcf,0xbc,0x51,0x25,0xd8,0x82,0xc8,0x5f,0x5c,0x24,0xc8,0xd7,0xfb,0xb0,0xae,0x8c,0x65,0xbc,0xce,0xf2,0xb5,0x36,0xd9,0xd5,0x6f,0x33,0x43,0xca,0x82,0xbb,0xcb,0x2d,0xea,0xa1,0x8d,0xa5,0x50,0xeb,0x78,0xa8,0x1d,0x42,0xa2,0xf7,0xde,0xeb,0x55,0xeb,0x7c,0x52,0x0b,0x83,0x84,0xaa,0x9e,0x6c,0x9c,0x73,0xa9,0x5e,0x6c,0x28,0xbf,0xd4,0x9d,0xf0,0xa4,0x86,0xd3,0x55,0x8d,0x1a,0x3a,0x04,0xac,0xaa,0x6a,0x6d,0x6f,0x86,0x5f,0xba,0x0a,0x30,0xa4,0xfe,0xa9,0xde,0x9e,0x05,0xe6,0x91,0x34,0xc6,0xe5,0x6b,0x44,0xc5,0xa7,0x41,0xc1,0x1c,0x9b,0x75,0x4d,0x6a,0x60,0xea,0x8a,0x50,0x5a,0x4c,0x3d,0x1c,0x00,0x73,0x73,0x5c,0xea,0x10,0xee,0x08,0x77,0x42,0x80,0x96,0xd0,0x68,0xa4,0x4e,0x63,0x15,0x41,0x6b,0x02,0x97,0x06,0x67,0x80,0x3b,0xb7,0x62,0xda,0xb4,0x10,0x94,0xe0,0x48,0x75,0xb4,0x7b,0x54,0x18,0x5b,0x04,0xd4,0x24,0xb7,0xd8,0x00,0xb9,0x3d,0x77,0x86,0x53,0x10,0x8e,0xd6,0x19,0x70,0xfb,0x87,0xfc,0x3d,0xdc,0x6e,0xc3,0xf7,0x7c,0xda,0x58,0x90,0x15,0x0c,0x30,0xe1,0xd7,0xca,0x12,0xce,0x18,0xfb,0x6c,0x0a,0x53,0x29,0x44,0x65,0x0d,0x07,0xe3,0xdb,0x15,0xe7,0xc6,0x64,0x5b,0x38,0xb5,0xd0,0x42,0x87,0xe6,0x68,0xdb,0xe0,0x12,0x6e,0xee,0x35,0x2b,0x83,0x26,0x7b,0x6e,0xf2,0xeb,0xa0,0x84,0x07,0xb1,0xaa,0x8d,0x7c,0x2d,0x29,0x28,0xec,0x8a,0x10,0xa6,0xf1,0xc2,0x36,0x21,0x60,0x84,0xd1,0xce,0x99,0xa9,0x84,0x56,0xc6,0x64,0x5b,0x72,0x37,0x07,0x99,0xb7,0xb7,0x56,0xb8,0x73,0x58,0x30,0x08,0x3d,0xca,0x24,0xa4,0x05,0x46,0x45,0x09,0x19,0xc1,0x8e,0x35,0x33,0x9a,0x28,0x06,0x5d,0xb4,0x73,0xb2,0x04,0xaa,0x41,0x2a,0xfa,0xa1,0x0e,0x66,0x8f,0x0c,0x42,0x7b,0x4a,0x4c,0xb6,0x59,0x7c,0x53,0x5e,0xf3,0xc7,0x4c,0x54,0xd5,0x7d,0xb1,0x1f,0xda,0x09,0x6f,0x60,0x25,0x10,0x3d,0xda,0x61,0xca,0xef,0xa8,0xeb,0x1e,0xdc,0xaa,0x45,0x82,0x5f,0x2a,0x3d,0x42,0xed,0xda,0x76,0xcd,0xc6,0xe8,0x2d,0x90,0xd9,0x21,0x48,0x33,0x5d,0x4b,0xc3,0x9e,0xd6,0xfe,0x30,0x53,0x40,0x30,0xe5,0xe7,0xfd,0x78,0x4c,0x44,0x61,0x4c,0x8c,0x8e,0x3a,0x93,0x83,0x0c,0x42,0x40,0xd0,0xb9,0x3b,0xda,0x80,0xc1,0xc2,0x07,0x59,0x00,0xdd,0xad,0x3f,0x29,0x31,0x40,0x72,0x53,0xab,0x22,0x80,0x91,0xd6,0x63,0x5a,0x59,0x48,0xbd,0x98,0x51,0x82,0x28,0xd6,0x41,0xc1,0x72,0x5e,0x57,0x1a,0x20,0x28,0x70,0x96,0x13,0x6d,0xbd,0x0f,0x46,0x4b,0x10,0x7a,0x69,0xda,0x08,0x00,0x6a,0x0b,0x2d,0xab,0x2d,0xf6,0xdf,0xed,0x0d,0x78,0xd0,0x9b,0xf3,0x5c,0x38,0x87,0xfd,0x3c,0x43,0xb2,0x04,0x95,0x23,0x18,0xa7,0x7e,0xc5,0x0f,0x38,0x7f,0x47,0x09,0x1d,0xb7,0x79,0xab,0x14,0x0e,0xd7,0x64,0x03,0xf9,0xfd,0x53,0x3f,0xd3,0x7b,0xe8,0xfc,0xba,0xf0,0x1e,0xe7,0x98,0x8c,0xa1,0xfe,0x7d,0xb7,0x35,0x4a,0x38,0x7b,0x30,0xd9,0x06,0xb6,0x01,0xd0,0xce,0x42,0xac,0xeb,0xa0,0x80,0xc1,0x5a,0x74,0x02,0x8a,0xb0,0x83,0xb9,0xf2,0x87,0xe5,0xc1,0x8a,0x13,0x5d,0x7a,0x31,0x3f,0x1d,0xb5,0xf7,0x54,0xe6,0x68,0x8d,0x98,0x1c,0x46,0x24,0xb5,0x73,0x7d,0x1b,0x90,0xe8,0xe0,0x63,0x85,0xd7,0xde,0xab,0x9b,0x02,0x85,0x1d,0x01,0x03,0x01,0x56,0x82,0xe8,0x71,0x29,0x79,0x57,0x3a,0x64,0x75,0xed,0x90,0xd2,0x74,0x81,0x25,0x82,0x93,0x16,0xa7,0xab,0x22,0x07,0x06,0x09,0xf4,0xfd,0x91,0x6b,0x45,0xf2,0xa9,0x73,0xa8,0x12,0xea,0x06,0x9c,0x4d,0x56,0x64,0x8d,0xcb,0x74,0x02,0xc3,0xc8,0x1a,0xfa,0xe7,0x48,0x13,0x20,0x1f,0xc7,0x5c,0xa3,0x2a,0xa0,0x7a,0xe8,0x4c,0x19,0x11,0xd5,0x05,0xda,0x67,0xdb,0x31,0x05,0x29,0x8d,0x09,0x9d,0x5a,0x0e,0xd9,0x03,0xbd,0x0b,0xbc,0xb6,0x46,0x5b,0x09,0xad,0xed,0xb0,0x25,0xd1,0xa7,0x2c,0x8f,0xbb,0x1f,0xae,0x36,0x80,0xb9,0x8b,0x80,0xf2,0xde,0xff,0x79,0x80,0x5d,0xf6,0x1a,0x68,0xb1,0x78,0x57,0x52,0x57,0x0f,0xd8,0xce,0xe8,0xa0,0x73,0x96,0x93,0xed,0x02,0xe0,0xb0,0x44,0x00,0x6d,0x74,0x00,0x92,0x28,0xd8,0x13,0xe6,0x20,0xe2,0x7e,0x93,0x79,0x98,0x07,0xc2,0x45,0x18,0x43,0x2d,0x0f,0x08,0xc0,0x3c,0xa5,0xed,0x88,0x10,0x85,0xdd,0x1a,0x60,0x4e,0xb4,0x80,0x6d,0x08,0x94,0xee,0xb1,0x2a,0x66,0x0b,0x00,0xc2,0xe9,0x06,0x78,0x4a,0x5b,0x04,0xb0,0xef,0xfe,0xc3,0xb1,0x2f,0x06,0x01,0x7d,0x0b,0x3b,0xc8,0xe8,0x40,0xf2,0x1f,0x10,0x00,0xa7,0xd6,0xaf,0xaf,0x84,0x6c,0x06,0x97,0x4f,0xaf,0xef,0x28,0x8d,0xed,0x6a,0xe0,0x37,0x4c,0xd2,0xdc,0x2a,0xd4,0xd1,0x00,0x8f,0xbf,0x82,0x1e,0x2d,0x7f,0x74,0x67,0xc5,0xaf,0xf6,0xce,0x74,0x3b,0x6d,0x18,0x88,0xc2,0x45,0x98,0xc5,0xec,0x4b,0xd8,0x12,0x92,0xb0,0xc6,0x92,0xec,0xf7,0x7f,0xbe,0xd6,0x58,0xf0,0x19,0x84,0x91,0x69,0x44,0x97,0x73,0x98,0x1f,0x6d,0x12,0xb0,0x2d,0x59,0x9a,0xd1,0xe8,0xce,0x9d,0xd1,0xce,0x71,0xad,0xa5,0xa9,0x0c,0x9a,0x6d,0xd7,0x6d,0xe1,0xa9,0xf6,0x00,0x94,0xe7,0xc9,0x11,0x4c,0x5e,0xe3,0xde,0x48,0x01,0xa3,0xaf,0x3c,0x32,0x48,0xb6,0x0e,0xb2,0x76,0x99,0xd1,0x61,0x61,0x82,0x29,0x14,0x15,0xa7,0x2f,0x83,0x13,0x66,0x26,0x55,0x7c,0x17,0x3a,0x88,0xad,0x67,0xe9,0xc0,0xd5,0x73,0x74,0x80,0x3d,0x01,0x2f,0x83,0xb7,0x51,0x16,0x97,0x84,0x81,0x87,0x29,0x2b,0x69,0x87,0x00,0x61,0x0d,0xaf,0xcc,0x5a,0x65,0x8a,0xc5,0x76,0xf8,0x19,0x00,0xd6,0x56,0xf7,0xf8,0xe3,0xcd,0x59,0x73,0x48,0x38,0x4d,0x59,0x85,0x78,0x86,0xbd,0x89,0x4d,0xc1,0x76,0x5d,0x7e,0x1d,0xa3,0x35,0xec,0xe8,0x9d,0x13,0x48,0x28,0xdc,0x78,0xcb,0xfa,0x09,0x0d,0x49,0xdb,0x85,0xee,0x33,0xee,0x96,0x59,0x2f,0x14,0x78,0x50,0x0c,0xc0,0x7d,0xee,0xf4,0xcb,0xe2,0x74,0x05,0x56,0x97,0xa9,0x9b,0x5a,0x09,0xee,0xe1,0x52,0xe1,0x6b,0xd3,0xae,0xc8,0x0e,0x11,0xd1,0xb0,0x31,0x0e,0xbb,0x7f,0xc5,0xed,0x6f,0xc8,0x73,0xa3,0x8b,0x65,0x84,0x19,0xc9,0x2c,0xba,0xa9,0xc2,0xda,0x0c,0x1a,0x6e,0x2d,0xcb,0x4c,0xd9,0xfd,0x4c,0x43,0xb3,0xa5,0x44,0xa3,0x6e,0xa5,0xe6,0xc4,0xc2,0xb6,0xb9,0x28,0x9f,0xa1,0x1b,0x02,0x01,0xdf,0x4a,0xa6,0x69,0x2c,0x34,0xaf,0xed,0x1c,0xf5,0x0c,0xa2,0xab,0x12,0xf0,0xd6,0x98,0x6e,0x99,0x66,0xac,0x35,0x00,0xc7,0x0d,0xe0,0x9c,0xe4,0x28,0x5e,0x05,0xb0,0x16,0x09,0x6b,0x5f,0x60,0x72,0x45,0xbe,0xb4,0x48,0x5a,0x07,0xf4,0x81,0x97,0x81,0x1e,0x0f,0x93,0xe0,0x7a,0xfb,0x21,0x8d,0x02,0x8f,0x66,0xf7,0x1a,0x27,0xc0,0x2a,0x85,0xed,0xdf,0xc7,0x5a,0xdc,0x80,0xb6,0xa0,0x9c,0x47,0x72,0x5d,0x50,0xa5,0x03,0xb5,0x53,0xc1,0xa4,0x12,0xea,0xeb,0x9b,0x9a,0xda,0x2e,0xb9,0x12,0xba,0x16,0xc9,0xb0,0x62,0xaf,0x19,0x46,0x33,0x6a,0xa1,0x13,0xd8,0xaa,0xef,0x48,0x10,0x4c,0x5e,0xaf,0x7d,0xe3,0xe3,0xf4,0xe2,0x84,0x8c,0x3e,0x2b,0x74,0xc1,0xc2,0xf5,0x0d,0x0a,0xbe,0xb2,0xdc,0x30,0x92,0x11,0xd1,0x64,0xa0,0x7d,0xee,0x78,0x6e,0xfa,0x64,0xab,0x18,0x5a,0x24,0x3b,0x50,0x48,0xc1,0x50,0xf2,0x2a,0xce,0x87,0x3e,0x87,0x4d,0x8f,0x2e,0xf1,0x64,0x56,0x0c,0xb3,0xe6,0xa4,0x36,0x1f,0x68,0xeb,0x02,0xc0,0x09,0xb3,0x0a,0x38,0x27,0x4a,0x90,0x0c,0x41,0x2b,0x09,0x17,0x1b,0x43,0xec,0x04,0x77,0x7f,0xcc,0x46,0xa0,0x95,0x0c,0xa5,0x4d,0x9b,0x4c,0x04,0x16,0x4f,0x77,0x09,0xf3,0xe7,0xed,0x06,0x3e,0x19,0x16,0x55,0x8f,0x2d,0xf8,0x7f,0xbf,0x48,0xc1,0xf5,0x23,0x81,0x65,0x41,0x0d,0x00,0x28,0xa2,0xe8,0x23,0xf0,0x3a,0xde,0xea,0x79,0x35,0x93,0x98,0x96,0x91,0x54,0x67,0xf7,0xa0,0x9d,0xf6,0x13,0x3c,0x99,0x6a,0x2f,0x18,0x2b,0x76,0x32,0x04,0x6c,0x40,0xd4,0xf2,0x91,0xe6,0x79,0xbf,0xd9,0x53,0x71,0xac,0x7a,0xcd,0x2d,0xf5,0x87,0x90,0x91,0x24,0x50,0x79,0x33,0xc0,0x51,0x6d,0x83,0x75,0x17,0x21,0x9f,0x0c,0xbd,0x88,0x45,0xbe,0xda,0x4b,0xbf,0x6e,0x3e,0xc0,0x8d,0xc0,0xdc,0x19,0x8d,0xb0,0xf6,0xe3,0xc4,0x87,0xaa,0x6f,0xb3,0xd9,0x1b,0x55,0xac,0x2e,0x11,0x54,0x5c,0xe0,0x7c,0xf8,0xed,0xa2,0x8e,0x52,0x3b,0x90,0x2a,0x1f,0xa0,0x99,0xde,0x44,0x3e,0x4d,0x90,0x8c,0xee,0x8a,0xee,0x2c,0xfd,0x80,0xf5,0x8e,0xb4,0x68,0xe6,0x31,0xe8,0x84,0x1d,0xe3,0xe3,0x47,0xdb,0x21,0xa1,0x86,0x04,0xfc,0xfe,0x74,0x0e,0xd1,0xe3,0xcd,0x56,0xe4,0x9b,0x1f,0x59,0x21,0xb2,0xc2,0xfa,0x27,0x74,0x41,0x0f,0xdf,0x53,0xd3,0xc6,0x1b,0x67,0x06,0xb1,0x03,0x43,0xf9,0x10,0xd8,0x14,0x05,0x1e,0x21,0xee,0x8f,0x59,0xd5,0xb0,0x43,0x19,0x8b,0xb4,0x35,0xd4,0x52,0xe5,0x81,0xaf,0x98,0x20,0xe5,0xad,0x38,0xfd,0x45,0x05,0x1a,0x29,0x17,0xfd,0x19,0xab,0x18,0x0b,0x26,0xeb,0x1f,0xae,0xf0,0x9d,0x85,0x7e,0x44,0x72,0x00,0xba,0xb0,0xaa,0x0c,0xc9,0xa6,0xbd,0xc8,0xc8,0x26,0xcc,0xe8,0x86,0xa3,0x8a,0x18,0x35,0x80,0x82,0xb3,0x2b,0xb3,0x58,0x7d,0x3d,0x55,0x3c,0x66,0x50,0x7e,0x61,0xc3,0x51,0x2e,0xcf,0x80,0xe4,0xaa,0xcb,0x10,0xee,0x22,0x9d,0xc9,0x9d,0x91,0x92,0x3a,0x3a,0x7b,0x8f,0x62,0x5f,0x29,0x5d,0x04,0xab,0xba,0xd5,0xa6,0x0b,0x14,0x02,0x12,0xbb,0xe9,0x5c,0x28,0x16,0x7c,0x22,0x3b,0x44,0xac,0xef,0xae,0x14,0x05,0x1a,0xca,0x1f,0xf5,0x74,0xba,0x8e,0x92,0xf8,0xfc,0xf9,0x32,0xee,0xe2,0x1d,0x94,0xe9,0xc2,0xe6,0xf5,0xd4,0x05,0xf8,0x2a,0x79,0xcb,0x5d,0xb1,0xe8,0x4b,0xee,0x1d,0xb5,0xbd,0x06,0xbf,0x52,0xdc,0x06,0xdc,0x5e,0x9f,0xb8,0x2a,0x34,0x7f,0xe8,0x64,0x7a,0xd8,0x8b,0xdf,0xc7,0x41,0x83,0x10,0x01,0x7c,0x70,0xd4,0x6a,0xf4,0xf8,0xae,0x72,0x1c,0xc3,0xbc,0x06,0x63,0xa4,0xb2,0xd9,0xc8,0x93,0xb0,0x23,0x3b,0x6b,0xf2,0x97,0x1b,0x85,0xad,0x48,0xe0,0x8b,0x20,0x2a,0x78,0xed,0x0c,0x5e,0x4e,0x6f,0x6e,0x95,0x94,0x25,0xac,0xb0,0x8d,0x41,0x83,0xcd,0x15,0x2f,0x83,0xcf,0x6e,0x4f,0xf1,0x0c,0x06,0x3e,0x51,0xaf,0x83,0xbb,0x59,0x73,0xac,0x22,0x21,0xb4,0x1d,0x24,0x9d,0x4d,0xe1,0xba,0xff,0xbe,0x99,0x54,0x78,0xa1,0x25,0xc1,0x41,0xe2,0x89,0x42,0x66,0x38,0xd4,0x64,0xf6,0xde,0x5f,0x87,0xe9,0xbc,0xe1,0x09,0x10,0x95,0x7a,0xfd,0x37,0x9a,0xff,0x5b,0xc4,0xbf,0x9d,0x42,0xa1,0xb8,0xf5,0xc1,0xc3,0x51,0xbd,0x51,0xb7,0x33,0xaf,0x2e,0x23,0xc5,0x86,0x0a,0xbe,0xa5,0xbd,0x24,0x64,0x9f,0xd0,0xdf,0x65,0x75,0xde,0xd9,0xae,0x7b,0xea,0xa2,0x5e,0x1a,0x4c,0x1f,0x3d,0x5a,0xfd,0x3e,0xfd,0x95,0xd5,0xf0,0xab,0x19,0xa7,0xbe,0xe5,0x55,0xde,0x79,0x22,0xa5,0x5a,0x04,0x0a,0xd4,0xc7,0x25,0x24,0xaa,0xa8,0x60,0xa1,0xa4,0x4c,0xe0,0xc0,0x9f,0xb7,0x3e,0x5d,0x7e,0x98,0x3b,0xdf,0xac,0xce,0x39,0xde,0x86,0xb1,0xd4,0x05,0x54,0x6f,0xa5,0x15,0x71,0xc8,0x7e,0x67,0xda,0x1a,0x0f,0xde,0xea,0xd5,0x49,0xad,0x56,0x39,0x49,0xad,0x36,0xa9,0xd6,0x37,0x83,0x65,0x6b,0xd5,0xe9,0x07,0x7c,0x5b,0xab,0x02,0x3a,0xb8,0x92,0xa6,0x02,0xe5,0x77,0xdb,0xcf,0x30,0xd4,0x96,0xfd,0x85,0x2a,0xa2,0xcf,0x47,0x88,0x21,0x78,0x8b,0xa0,0xd7,0x0b,0x1b,0x8d,0x46,0xf3,0x97,0xfc,0xfa,0x2f,0xec,0xf5,0x02,0xa1,0x4c,0xda,0x06,0x5f,0x2e,0xa2,0xef,0xab,0xb0,0xdb,0x32,0x1c,0x60,0x8f,0xfc,0x75,0x30,0x10,0x17,0xfb,0xfe,0x10,0xae,0x55,0x86,0xb7,0x6e,0x38,0xec,0x4a,0x1d,0xba,0xea,0xb8,0x14,0x80,0xcb,0x47,0xeb,0x6d,0x8e,0x55,0xb6,0xfe,0x68,0xb8,0xce,0x3e,0x44,0xc1,0xc5,0x3e,0x8e,0x4e,0xdc,0x4c,0xd5,0xdd,0xb7,0x10,0x9a,0x6a,0x75,0x9b,0xe2,0x90,0x3c,0x23,0xbe,0xdb,0x0b,0xda,0x9e,0xc4,0xc1,0x68,0x3b,0xdf,0x1e,0xd9,0x48,0xd5,0x07,0xe6,0xd0,0x24,0xe9,0x8e,0xa2,0xde,0xfa,0xfa,0x68,0x1c,0x7a,0x91,0x29,0xa2,0xf8,0x9d,0x96,0x1b,0xfa,0xbe,0x94,0xa2,0xf1,0xba,0x3f,0x64,0x01,0x8d,0x8f,0x3b,0x3c,0xef,0x59,0x4c,0x78,0xc0,0xe0,0xcb,0x95,0xfa,0xb2,0xd3,0x1d,0x85,0xa6,0xee,0xa5,0x8a,0xee,0xe9,0x84,0xca,0x34,0x3a,0x16,0xe1,0x6e,0xdb,0x19,0xd7,0x2b,0xa7,0x72,0x1a,0xca,0x02,0xe1,0x7d,0xa6,0xb3,0x12,0x0c,0x45,0xc3,0x6a,0x6f,0xcb,0x55,0xff,0x63,0xd4,0x08,0x74,0x4c,0xfb,0x8e,0x1a,0x8b,0x9c,0xe7,0xaa,0xc4,0x2a,0x68,0x8c,0x5e,0xdb,0xd3,0x71,0xbd,0x86,0x9d,0x20,0xdc,0xe1,0x39,0x0b,0x08,0x40,0x05,0xf8,0x92,0x67,0x1a,0xa9,0x55,0xdf,0x3a,0x9a,0xe5,0x40,0x49,0x4b,0x14,0xf1,0xbf,0xb8,0x53,0xaf,0xd6,0xae,0xde,0xa6,0x6b,0x45,0xac,0x7d,0x09,0x91,0xa9,0x2d,0x7f,0xba,0x68,0x40,0x3f,0x39,0x25,0x83,0x8e,0x37,0x69,0xde,0x4c,0xeb,0x7d,0xfa,0x4b,0xde,0xdf,0x5b,0xad,0xe5,0x78,0x36,0xcb,0x50,0x24,0x6e,0xc1,0x85,0xd6,0x46,0x81,0x98,0xb7,0x17,0x01,0x11,0xc2,0xe5,0xb4,0x7b,0x01,0xb6,0x43,0x2f,0xf3,0xd2,0xce,0x87,0x36,0x2d,0x33,0x49,0xb0,0x8b,0x3d,0xab,0x4f,0xc1,0xed,0xc7,0x40,0x5c,0xf7,0x33,0x81,0x4b,0xc9,0xa1,0xc9,0x9c,0xee,0x3c,0x61,0xc5,0x45,0x46,0x92,0x2d,0xff,0x95,0xfe,0xc8,0xe8,0x76,0x13,0xea,0x68,0x01,0x36,0xcc,0x11,0x8b,0x04,0x6d,0x61,0x9c,0xfd,0x08,0x44,0xa3,0xe2,0xd9,0x69,0x47,0x7a,0x94,0x32,0x93,0x00,0x0e,0x05,0xc9,0xea,0x2e,0x2e,0x8d,0xff,0xb2,0x0c,0x70,0xab,0x1c,0x55,0x0d,0x20,0x0f,0x12,0x6d,0x33,0xc5,0x3d,0x54,0xbe,0x5a,0x06,0x82,0x90,0xa1,0xe0,0xb5,0x70,0x30,0xef,0xd6,0x7d,0x67,0xb0,0xbb,0x7c,0x41,0xa1,0x0a,0x69,0x1e,0x82,0xb2,0x3b,0x8e,0xca,0x1e,0x4d,0xef,0x56,0xb4,0x5b,0x2a,0x59,0xdc,0xe4,0x34,0x53,0x50,0x08,0xfb,0x0a,0x8c,0x5d,0x9a,0x07,0xe1,0x55,0x86,0x94,0x2a,0x74,0x05,0xa2,0x4f,0x38,0x78,0x37,0xfd,0x1d,0xc0,0x07,0x0c,0xd8,0x41,0xc8,0xb3,0x46,0xca,0x53,0xad,0x45,0x27,0xb3,0x13,0xfc,0x91,0x50,0x68,0xea,0x83,0x44,0x6e,0x4a,0x13,0x38,0x99,0xf0,0x5a,0x58,0x02,0xf3,0x50,0x86,0x14,0x45,0x9c,0x04,0x6a,0x64,0x66,0xbe,0x48,0x3a,0x28,0xeb,0x32,0x6e,0x1e,0x55,0x5f,0x68,0x5e,0x02,0x1e,0xa6,0x24,0x52,0x32,0x1d,0x1f,0xeb,0x5d,0xa2,0xd5,0xb7,0x55,0x28,0x13,0xe9,0xb5,0x62,0x2a,0x65,0x83,0x00,0x33,0xdd,0xa6,0xc8,0xb8,0xa5,0x3a,0x2a,0xc1,0x62,0xb0,0x53,0x44,0x96,0xfe,0x4b,0x54,0xb1,0x1b,0x70,0x37,0x03,0xee,0x9f,0x3a,0x11,0xbf,0x37,0xe5,0x50,0x2f,0x45,0xa4,0xc9,0x77,0x07,0xf0,0xb2,0xdc,0x8e,0x47,0x46,0xd2,0x46,0x94,0x5e,0x96,0xba,0xf0,0xe5,0x9f,0xe8,0x40,0x46,0xd2,0x3e,0xf6,0x00,0x52,0xf6,0x3f,0xd1,0x81,0x41,0x69,0x6e,0xa4,0x8a,0x90,0xc3,0x02,0xf0,0x3f,0x75,0x20,0xed,0x41,0x7e,0x0b,0x89,0x73,0xf9,0xb7,0x74,0x60,0x52,0xd2,0x0a,0x61,0x4b,0xe7,0x11,0xa2,0x49,0x9c,0xfa,0x3b,0x56,0xa8,0x3c,0x39,0x96,0xa4,0xba,0xf8,0x6c,0x0a,0x75,0x4b,0xf5,0x00,0xfa,0xbe,0x1c,0x3c,0x6a,0x25,0x5e,0x95,0x23,0x68,0xef,0xa5,0xba,0xa0,0x5b,0xd6,0x4a,0x52,0xd3,0xfd,0xaf,0xc4,0x10,0x42,0x49,0x22,0x77,0x7b,0x13,0x11,0x42,0xd9,0xe6,0x72,0x9c,0x54,0xca,0x75,0xfe,0x61,0x77,0x1a,0x85,0x39,0xd1,0x5f,0x41,0x9f,0x83,0xb8,0x47,0xa0,0xcb,0xe9,0x4e,0x7b,0x2f,0xb2,0x45,0xf5,0xab,0x75,0x89,0x79,0x1c,0x9e,0xda,0xaf,0x74,0x44,0x11,0x70,0x4d,0x16,0x67,0xa9,0x3a,0x52,0x7e,0x3b,0xb0,0x72,0xd5,0x1f,0x43,0x7d,0x95,0x86,0xfb,0xf5,0xb9,0x39,0x2b,0x1e,0xef,0xc4,0xab,0xd6,0xb1,0x80,0x43,0xec,0x51,0xd0,0x2e,0xb5,0x71,0x14,0x5b,0xec,0x9f,0x82,0xb3,0x42,0xc5,0xd3,0x8b,0xf2,0xfd,0x4d,0x0e,0xaf,0x28,0x40,0x90,0xb5,0xff,0x13,0x99,0x58,0x61,0x6e,0x98,0x21,0xce,0x9a,0xa1,0xb9,0x3a,0x9a,0xa7,0x1b,0x9a,0x97,0xfc,0x01,0x0a,0x11,0xe7,0x75,0x15,0xbc,0x26,0xc8,0xa8,0x9e,0x04,0x9a,0xb9,0x9d,0xc5,0x73,0xeb,0xac,0x99,0x40,0x86,0x9b,0x2b,0x47,0x58,0x70,0xd6,0x51,0x81,0xa6,0x01,0x7e,0x79,0x12,0xd4,0x0b,0x74,0xba,0x90,0x58,0x98,0x67,0xb6,0x35,0x53,0xff,0x1f,0x26,0x18,0xa9,0xd6,0x24,0x6b,0x16,0x71,0x22,0xb5,0xf7,0x3d,0x3d,0x16,0x1a,0x64,0xcd,0x4e,0xbb,0x8e,0xa4,0x80,0x9a,0x84,0xc2,0x5e,0x1c,0xe3,0xa2,0xe5,0x90,0xd8,0x75,0xc1,0x0c,0xda,0x3e,0x2e,0x42,0x63,0x5b,0x38,0xd3,0x98,0x65,0x53,0x2a,0x1a,0xa9,0x3b,0x34,0xd1,0x3e,0x48,0x27,0x6a,0x53,0xe2,0xc2,0x82,0xb5,0xbc,0xd7,0x99,0x23,0xf1,0x80,0x21,0xb0,0x9a,0xbf,0xf9,0x88,0xe3,0x5c,0x0b,0x43,0x16,0xad,0xe2,0xa3,0x8c,0xf8,0x0a,0x03,0x00,0xfd,0xd5,0xb7,0x80,0xdc,0xaa,0x5e,0xf5,0x92,0x0e,0x37,0x3b,0x90,0x73,0x98,0x3e,0xc3,0x97,0xfb,0x0e,0x93,0xe2,0xb8,0x2d,0xe0,0x17,0x8f,0x62,0x93,0xb3,0x26,0xc4,0x27,0x0c,0xb5,0x2d,0xa2,0x6d,0xb1,0x62,0xfa,0x9c,0x1f,0x08,0x79,0xf5,0x38,0x2f,0x0a,0x2d,0x9e,0x1c,0x10,0xe5,0xd7,0x06,0xd9,0x34,0x99,0x78,0xb1,0x3c,0xfe,0x75,0x32,0xee,0x1b,0x6a,0x1b,0xc4,0x42,0xce,0x9a,0x71,0x1f,0xa8,0xb6,0x1f,0x4c,0xcc,0xa7,0x4b,0xa3,0x25,0x0e,0x7f,0xcb,0xcb,0x91,0x76,0x42,0xc7,0xa3,0xf6,0xb4,0xd5,0x5a,0xb5,0x87,0xa1,0x3c,0xa3,0x14,0x09,0xa9,0xf6,0x95,0xfb,0x8e,0xb4,0x0b,0x77,0xdb,0xf6,0xfe,0xab,0xdb,0x8c,0xb5,0x78,0xf8,0xa1,0x7c,0x83,0x38,0xf7,0x64,0x19,0x4b,0x99,0x48,0x7d,0xc1,0x0e,0xdc,0xbd,0xdd,0x5c,0x69,0xaf,0x1f,0x2a,0x98,0x24,0xc9,0xa9,0x06,0x8c,0xb2,0x82,0x1b,0xde,0x5d,0x52,0x88,0x0d,0x42,0x38,0xca,0x30,0x95,0x3d,0xd6,0x91,0x1b,0x29,0x43,0x83,0x7a,0x94,0x40,0xd1,0x47,0x20,0x2a,0x7f,0xdd,0x2c,0x84,0xc5,0x3c,0xda,0x15,0x1f,0xac,0x19,0x48,0x93,0xe2,0xe9,0x5d,0xa0,0xe8,0xf3,0xe8,0xb3,0xc9,0x13,0xb4,0xab,0x65,0x77,0xee,0xc5,0x47,0x9b,0x0a,0xb9,0xb0,0x00,0x48,0xcf,0x3d,0xe8,0x52,0x99,0x30,0xcf,0xc8,0x5c,0xec,0xab,0xdf,0x38,0x5c,0x96,0x49,0xb8,0x63,0x05,0xf1,0x2c,0x14,0x7e,0xb9,0xc8,0x6d,0x50,0x32,0x11,0xc3,0x16,0xeb,0x6a,0x69,0x42,0xe1,0x9e,0xe3,0x7d,0x0f,0x12,0xe9,0x24,0xb0,0x57,0x90,0x07,0xf4,0x60,0xd2,0x69,0x1c,0xca,0xbd,0xea,0x8c,0xaf,0xd1,0x1b,0x7e,0x92,0x29,0x71,0x1f,0x93,0x6d,0xb6,0x5f,0x07,0xf1,0x81,0xe3,0x95,0xfe,0xab,0x1b,0x8c,0xe2,0x63,0x04,0x2a,0xe3,0x78,0xff,0x31,0x6a,0x2c,0x1a,0xcd,0x5d,0xb7,0x33,0x7e,0xf9,0x8d,0xca,0xa0,0x5c,0x52,0x1d,0x7f,0xf6,0x3f,0x76,0xeb,0xf5,0x70,0xbb,0x9a,0x51,0xd0,0xe8,0x91,0x42,0xf5,0xac,0x49,0x0d,0x77,0xd9,0xc3,0x19,0xe3,0x7f,0xa6,0xf5,0x28,0x33,0x3f,0x7d,0xfb,0x4e,0x14,0xb2,0xfe,0x53,0xc2,0x93,0x9f,0xf2,0x94,0xa7,0x3c,0xe5,0x29,0x4f,0x79,0xca,0x53,0xfe,0x6b,0xf9,0x09,0xcb,0xff,0x32,0xca,0x24,0xa7,0x19,0x80,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82}; + +static const unsigned char FILE_4[] = {0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x08,0x03,0x00,0x00,0x00,0xc3,0xa6,0x24,0xc8,0x00,0x00,0x00,0x78,0x50,0x4c,0x54,0x45,0x00,0x00,0x00,0x61,0xda,0xfb,0x61,0xda,0xfb,0x61,0xda,0xfb,0x5e,0xdf,0xff,0x61,0xdb,0xfb,0x61,0xda,0xfb,0x60,0xdb,0xfc,0x62,0xdb,0xff,0x61,0xda,0xfb,0x61,0xdb,0xfc,0x61,0xdb,0xfb,0x61,0xdb,0xfa,0x60,0xdb,0xfc,0x61,0xdb,0xfb,0x61,0xda,0xfb,0x63,0xda,0xff,0x61,0xda,0xfa,0x61,0xda,0xfb,0x61,0xdb,0xfa,0x61,0xda,0xfb,0x61,0xda,0xfe,0x61,0xda,0xfb,0x5f,0xdb,0xff,0x62,0xdb,0xf8,0x61,0xdb,0xfc,0x61,0xda,0xfb,0x61,0xdb,0xfb,0x61,0xda,0xfa,0x61,0xda,0xfb,0x61,0xdb,0xfb,0x61,0xdb,0xfa,0x60,0xd9,0xf9,0x61,0xda,0xfc,0x61,0xda,0xfa,0x61,0xdb,0xfb,0x61,0xda,0xfb,0x61,0xdb,0xfc,0x61,0xdb,0xfc,0x61,0xda,0xfb,0xb3,0x39,0x98,0xc6,0x00,0x00,0x00,0x27,0x74,0x52,0x4e,0x53,0x00,0xf6,0xe8,0xc3,0x09,0xd3,0xaa,0x9b,0x16,0xb4,0x4c,0x8e,0x2b,0x55,0x79,0xe0,0x0d,0x65,0x3a,0x33,0xee,0x1d,0x81,0x11,0x22,0xdb,0xcb,0xbb,0xa2,0x87,0x40,0x6f,0x26,0x5f,0x6a,0x44,0x74,0x5a,0x94,0x59,0x4d,0xfd,0x75,0x00,0x00,0x24,0xd0,0x49,0x44,0x41,0x54,0x78,0xda,0xec,0xc1,0x81,0x00,0x00,0x00,0x00,0x80,0xa0,0xfd,0xa9,0x17,0xa9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x5d,0x7b,0x5d,0x4e,0x10,0x06,0xa2,0x00,0xbc,0x21,0x28,0x04,0x22,0x17,0x05,0xaa,0x80,0x20,0x6d,0xf5,0xbc,0xff,0x1b,0xb6,0x9d,0xf1,0x4f,0x3b,0x5a,0x6f,0x09,0xe2,0x64,0xbf,0x47,0xc8,0x9e,0x99,0x4d,0xce,0x84,0x31,0xc6,0x18,0x63,0x8c,0x31,0xc6,0x18,0x63,0xec,0x32,0x5f,0x7f,0xec,0xfb,0xa4,0x8a,0x83,0xc3,0x36,0xf9,0x1c,0xba,0x35,0xbd,0x20,0x7f,0x15,0xf5,0xb1,0xaa,0x37,0x5e,0x01,0x14,0xe9,0x46,0xaa,0x20,0x59,0xac,0x88,0x5d,0x92,0x45,0x95,0x4a,0xf1,0x57,0x2a,0xe3,0x41,0xd3,0xab,0xf0,0x97,0x7d,0x3b,0xc3,0x29,0x42,0xc6,0x91,0x4f,0xec,0x9c,0x5d,0x22,0x71,0x74,0xe6,0xf4,0x32,0x9a,0xba,0x65,0x22,0xf1,0x2f,0xa1,0xf6,0x9c,0x81,0x53,0xb2,0xbe,0xc6,0x65,0xb2,0x5a,0xd2,0x64,0x85,0xf9,0xbc,0xc0,0x15,0x44,0xb0,0x23,0xf6,0x5b,0x19,0x0b,0x5c,0xc9,0x0b,0x3e,0x68,0x82,0xc2,0xbc,0xc1,0xf5,0xd4,0xeb,0x6c,0xb4,0x31,0x84,0xc7,0xf1,0xbf,0x6c,0x06,0xfc,0xa1,0xc1,0x8d,0xe6,0x25,0xb1,0xa3,0xf7,0x02,0x37,0x4b,0xab,0xe9,0x3c,0x0e,0xf4,0xa1,0xc0,0xed,0x44,0x4f,0xec,0x87,0x96,0xb8,0x8f,0x5a,0xd0,0x04,0x64,0x79,0x8d,0x3b,0xd5,0x7c,0x15,0xf8,0x96,0x0b,0xdc,0xcd,0xab,0x42,0x7a,0xae,0x70,0x5b,0xe0,0x7e,0x62,0x4f,0xae,0xf3,0x5b,0x3c,0x44,0x04,0x9a,0x9e,0x47,0x07,0x02,0x8f,0x89,0xc9,0x6d,0xa1,0xc4,0xc3,0x54,0x47,0xcf,0xd1,0x29,0x3c,0x4e,0x39,0x5d,0x0a,0xac,0x37,0x30,0xa1,0x8e,0x68,0x7c,0x4b,0x09,0x23,0xe4,0xf4,0xcb,0x2d,0x6b,0xca,0x14,0x86,0xc8,0xb1,0x23,0xa0,0xe7,0x00,0x38,0x01,0x53,0x99,0xff,0x37,0xd9,0xd1,0x78,0xb4,0x82,0x41,0xd2,0xd1,0x2d,0xf0,0x36,0x83,0x51,0xcd,0x8a,0xc6,0x51,0xb6,0x30,0x6b,0x4e,0x4e,0x6a,0x60,0x5a,0x5b,0x92,0x7d,0x59,0x25,0x60,0xda,0x96,0x1c,0x74,0x80,0x79,0xa2,0xca,0xc8,0xb2,0xdc,0x83,0x05,0x11,0x39,0x67,0x01,0x2b,0xbc,0x9c,0x6c,0xea,0x66,0xb0,0xa2,0x98,0x4e,0xaf,0x3d,0x92,0xb5,0x80,0x25,0xf5,0x8a,0x6c,0x09,0x5b,0xd8,0x52,0x93,0x63,0x24,0xec,0x69,0xdf,0xc8,0x8a,0xc1,0x83,0x3d,0x09,0x39,0xe5,0x1d,0x36,0x79,0x03,0x99,0xa7,0x25,0x6c,0x12,0x4e,0x7d,0x10,0x28,0x05,0xec,0x6a,0x76,0x64,0x96,0xbf,0x85,0x65,0xf2,0x8b,0xbd,0x3b,0xdb,0x42,0x13,0x06,0xc2,0x00,0x3c,0x61,0x0f,0x22,0xa0,0x80,0x2c,0x5a,0x97,0xaa,0xfd,0xdf,0xff,0x0d,0x7b,0x7a,0xd1,0x9e,0x2e,0x89,0x04,0x24,0x81,0x12,0xbf,0x07,0xf0,0x42,0x47,0x98,0x24,0x33,0x13,0xb2,0x48,0x80,0x5e,0x4e,0xdb,0xb9,0xc1,0xd1,0xf5,0x1d,0x8c,0xc2,0x52,0x9a,0xd2,0xbe,0xc5,0x08,0x99,0x1b,0xa6,0xbb,0x67,0x1c,0xef,0x2e,0x69,0xe8,0x96,0xe8,0xb1,0x88,0xc3,0x6d,0x33,0xf6,0x78,0x89,0xf1,0xaf,0xfb,0x9a,0x7e,0xca,0x93,0x6d,0xca,0x1d,0x0c,0xd6,0x25,0x34,0x15,0x6f,0x83,0xa1,0xb2,0xe0,0xb1,0xf7,0xe8,0x0f,0x49,0xda,0xe1,0x95,0xcc,0x9e,0x0d,0x41,0x17,0x2f,0xf8,0xc2,0xa2,0xd9,0xe6,0x19,0x3a,0xe3,0x1e,0x02,0xe6,0xff,0xfe,0x8c,0x5f,0x1a,0xc9,0x27,0x71,0xbc,0x60,0x4d,0x85,0x50,0x0c,0x39,0x67,0x4b,0x52,0x45,0xda,0x0d,0x7d,0x08,0x98,0xff,0xfb,0xb3,0x53,0xec,0x91,0xdc,0x39,0x83,0x94,0x63,0xcb,0x23,0xa0,0x83,0x14,0x8f,0xe8,0xa5,0xeb,0xc1,0x37,0xbc,0xb8,0x4a,0x7c,0x0c,0xd0,0x5f,0xf3,0x5f,0x07,0x90,0x7a,0x90,0x15,0xe2,0xf7,0xea,0x63,0x8a,0x6f,0x0c,0xea,0xdc,0x8a,0xde,0xf2,0x60,0x50,0x96,0xa5,0x11,0x29,0x08,0x21,0xe3,0x90,0x15,0x8e,0xef,0xd6,0x47,0xe5,0x3b,0x1f,0xca,0xca,0x2d,0x8d,0x17,0x71,0x28,0x3b,0xc6,0xef,0x9f,0x82,0xdc,0xc8,0x02,0x09,0x64,0xbe,0x91,0xb2,0x7d,0x00,0x65,0xa7,0x9c,0x46,0x8a,0x1d,0xa8,0x1a,0x54,0x9a,0xc8,0x21,0xe1,0x93,0x05,0xc2,0x69,0x76,0x42,0xae,0x21,0x83,0xa2,0x76,0xaf,0x39,0xfb,0x63,0x9b,0x8a,0x86,0xa8,0x33,0x48,0x2c,0xb8,0xef,0x6d,0x2a,0x39,0x83,0x98,0x53,0xe9,0xeb,0x26,0x7b,0xd0,0x70,0x4d,0x07,0x35,0xec,0x4b,0x44,0x03,0x15,0x90,0x08,0x69,0xf5,0x76,0x90,0x78,0x8e,0x29,0xca,0x67,0x50,0xc3,0x6b,0x1a,0x28,0x2e,0xa1,0x26,0x8c,0x68,0xb8,0x0d,0xc4,0xd8,0xfa,0xeb,0x03,0xdd,0x49,0xb7,0xc2,0xab,0x10,0x6a,0xb2,0x62,0xe8,0x2f,0xa4,0xe6,0xd4,0xd0,0x18,0xb9,0x03,0xb1,0x1d,0xad,0x5c,0x03,0x89,0x84,0xc6,0xb9,0x06,0x50,0xc2,0xbe,0x6a,0x68,0x57,0xe0,0xc9,0xd4,0xf5,0x30,0x47,0x5a,0xb9,0x07,0xc4,0x4e,0xfa,0xab,0x74,0x82,0x5c,0xf9,0x13,0x1d,0xa8,0x68,0x63,0x1a,0xcf,0x87,0x58,0x44,0xeb,0xe6,0x42,0x2c,0x31,0x50,0xa7,0xe7,0x5f,0x55,0x83,0x54,0x45,0xf9,0xa0,0x77,0xdc,0xec,0x7c,0x07,0x54,0x7a,0x0a,0xa3,0xf3,0x0d,0x54,0x94,0xf1,0x74,0xdd,0x8a,0x61,0x44,0xef,0xc9,0x20,0xc4,0x69,0xd5,0x76,0xba,0xd6,0xbf,0x89,0x3b,0xd1,0xd9,0x40,0xd4,0x41,0x41,0x7b,0xd6,0xf5,0x32,0x64,0xeb,0x3e,0x11,0xe2,0x10,0xf2,0x8d,0x55,0xec,0x05,0x1e,0xbd,0x54,0x64,0x50,0xf0,0xc5,0xa3,0xb7,0x45,0x56,0x56,0x88,0x97,0x1a,0x8f,0xc1,0xea,0x10,0x0a,0xfc,0x86,0x5e,0x78,0x32,0xf4,0x73,0x13,0x9a,0x02,0xb7,0xb0,0x61,0x7c,0xaf,0x37,0xf5,0x8d,0x33,0xf4,0x73,0xce,0x24,0xb5,0x31,0x39,0xd9,0x65,0x6b,0xe1,0x79,0x40,0xaa,0x39,0xf1,0xc9,0x43,0xf4,0x63,0x37,0x12,0xf3,0x38,0xfa,0xb9,0x57,0x9a,0x4a,0x69,0xdf,0x42,0x90,0xf7,0x2c,0x7d,0x0c,0x3d,0x04,0x36,0x92,0xf4,0xcf,0x70,0xad,0x69,0x60,0x5f,0x12,0xc0,0x20,0x54,0xd1,0x74,0xea,0xd3,0xc8,0x54,0x30,0xc9,0xf4,0xd4,0x98,0xc9,0xdd,0xac,0x4b,0x02,0x12,0x23,0x6f,0xbd,0x6d,0x89,0x5e,0x6e,0x44,0x7f,0xb9,0x97,0xc6,0x9b,0x78,0x23,0xeb,0x1a,0x04,0x9e,0x66,0x9a,0xa3,0x2b,0x17,0xbd,0xda,0xab,0x64,0x83,0x42,0xce,0xb9,0xd3,0xc4,0x3a,0x88,0x94,0xb4,0x5a,0x1b,0x08,0xdd,0x69,0x6a,0x29,0x7a,0x95,0x67,0xfa,0xcd,0x01,0x02,0x82,0x7a,0x55,0x23,0xdf,0xc7,0x7a,0x3b,0x85,0x39,0x84,0x72,0x9a,0x5c,0xd1,0xa2,0x0f,0xdb,0xd2,0x2f,0xa1,0xce,0xec,0x4f,0x6e,0x6b,0x5b,0x16,0xe8,0x98,0x5b,0xf8,0xe6,0x01,0x7a,0xed,0xd4,0x97,0x7f,0x59,0x41,0x1a,0x44,0x96,0x35,0x0a,0x47,0x46,0xcb,0xa0,0x76,0x4c,0x31,0xa9,0xab,0x5d,0x95,0x82,0x22,0x2d,0x5a,0xbb,0x46,0x06,0x9d,0xb5,0xef,0x02,0xc8,0xb7,0xf5,0xe5,0xb1,0x17,0xf9,0xf3,0xf5,0xee,0x07,0x10,0x69,0x69,0xa5,0x2e,0x10,0x2a,0x48,0xc0,0xd0,0x6b,0x80,0x7b,0x4d,0x6b,0x2a,0xfb,0x57,0x4f,0x56,0xd7,0x5a,0x18,0x18,0x42,0xc8,0x23,0x6d,0x52,0xf4,0x71,0x9d,0x71,0xbd,0x45,0x5a,0x9b,0xa4,0xd6,0x7a,0xb9,0xd4,0xd1,0xfc,0x03,0x2f,0x2e,0xf1,0xa6,0xc0,0x23,0x7d,0x1a,0xbb,0x96,0x01,0xfe,0x0c,0x25,0x30,0x8d,0x8f,0x1f,0x96,0x3a,0xba,0x87,0x41,0xe4,0x2b,0xad,0x13,0x9b,0x63,0x48,0x62,0xce,0x31,0x5e,0x79,0x27,0xbd,0x3a,0x9b,0xe6,0x46,0xd6,0x33,0x55,0x41,0xa6,0x18,0xab,0xbd,0x92,0x66,0x01,0x44,0x4e,0xb4,0x4a,0xc9,0x5c,0x2f,0xbc,0x2d,0xc3,0x28,0x3c,0x27,0xdd,0x36,0x36,0x1d,0x07,0xc5,0x10,0xba,0x92,0x76,0x49,0x86,0x11,0x42,0xd2,0xef,0x02,0x91,0x8c,0x56,0x69,0x37,0xdf,0xa2,0x37,0xea,0x30,0xd8,0x81,0x0c,0xd8,0x42,0x84,0xd1,0x2a,0x1d,0xc6,0x1f,0x7e,0x9a,0x4f,0x05,0x59,0x4c,0x26,0x14,0x36,0x55,0x85,0x85,0xb3,0xd6,0x40,0x7e,0xc3,0x10,0x4e,0x41,0x46,0x54,0x10,0x5a,0xe7,0xd4,0xd0,0x60,0xde,0x84,0xe7,0x02,0x75,0x7e,0x45,0x66,0x78,0x36,0xcd,0x89,0xe0,0x33,0x1f,0x7d,0xc5,0x0c,0x8a,0xba,0x88,0x4c,0x61,0x10,0x59,0xd8,0xc5,0xb8,0x13,0x71,0xe7,0x9e,0x89,0x71,0x2e,0x97,0x77,0x93,0x5b,0x66,0xd1,0xd4,0x58,0x7f,0xf6,0x5d,0xaf,0x7f,0x96,0x83,0xf3,0x6f,0xc3,0xf8,0x16,0xb5,0x08,0xb7,0xf3,0x0f,0x47,0xac,0xfc,0xa5,0xdd,0xdf,0x73,0xb4,0x68,0x68,0xac,0xb3,0x80,0x60,0xaf,0x5d,0x00,0x58,0xd0,0xc0,0x5e,0x0e,0x91,0x03,0xad,0x11,0x5b,0xc2,0x6c,0xc4,0xe7,0xc2,0xee,0x6d,0x08,0x2c,0xea,0x0d,0x59,0xc2,0x94,0xfc,0x33,0x43,0x0f,0xa7,0x21,0x93,0x4e,0xb0,0x66,0x5a,0x5c,0xbe,0x80,0xe2,0x87,0x82,0xa1,0x57,0x1b,0x91,0x41,0xe1,0xfc,0x79,0xa8,0x29,0xf5,0xfc,0x01,0xd0,0x38,0x50,0xe0,0xd7,0x64,0xce,0xc6,0x9e,0x00,0xc8,0x21,0x74,0x26,0x63,0xaa,0x6c,0x79,0x77,0xf9,0x7e,0xb1,0x3e,0x00,0xf6,0xa4,0x9f,0xfc,0xae,0xe2,0xd9,0x07,0x35,0x1d,0x3e,0x01,0x40,0x86,0x78,0xee,0x12,0x6f,0x73,0xfe,0x3c,0x01,0xce,0x64,0x08,0xc7,0x00,0xdf,0x48,0xe6,0x13,0x00,0xff,0x69,0x00,0x04,0x0b,0x2c,0x07,0xf9,0x04,0x80,0xb9,0x00,0x08,0xf1,0x97,0x85,0xec,0x08,0x7e,0x02,0xe0,0x4e,0x26,0x7c,0xc1,0x60,0x37,0x92,0xfb,0x2c,0x03,0xff,0xb3,0x00,0xb8,0x2c,0xf6,0x4e,0x7f,0x8b,0x02,0xe0,0x3b,0x7b,0x77,0xb6,0xe4,0xaa,0x0d,0x84,0x01,0xb8,0x25,0x76,0xcc,0xbe,0x63,0x63,0x8c,0xd7,0x7e,0xff,0x37,0x4c,0x26,0xeb,0x49,0x65,0x04,0x42,0x48,0x02,0x9b,0xf9,0xae,0x52,0x49,0x55,0x92,0x63,0x1b,0xd4,0x52,0xff,0x92,0xcc,0xf5,0x3e,0xe6,0x70,0xbb,0xd7,0x39,0x3b,0xfb,0x59,0x0a,0x06,0xd6,0x45,0x21,0xca,0xe5,0x04,0x85,0xd0,0x12,0x94,0xeb,0x76,0xd4,0x0c,0x2a,0x56,0x6a,0x07,0x97,0x14,0x05,0x59,0x09,0xa8,0x66,0xef,0xa8,0x1d,0x1c,0xaf,0x53,0x6d,0x27,0x16,0xfe,0xcf,0x76,0x96,0x04,0xbd,0xf5,0x53,0x32,0xda,0x58,0xeb,0x1c,0x88,0x73,0xc2,0x11,0xa4,0xb7,0xd7,0xdd,0x1d,0x64,0xec,0x68,0x7b,0xb0,0xb1,0x4a,0x02,0xcb,0x99,0xa8,0xf4,0xcd,0xd3,0xaa,0xcb,0x01,0xc7,0x2d,0xa4,0x64,0x34,0x39,0xad,0xb1,0xe8,0x1a,0xe1,0x98,0x70,0xba,0x47,0xe0,0x83,0x52,0xed,0x06,0x52,0x32,0xba,0xd8,0x2b,0xf4,0x5d,0x42,0x8e,0x73,0xe2,0x92,0x23,0x8e,0x20,0x19,0xa8,0x54,0xec,0x68,0x5f,0x40,0xa7,0xff,0x9e,0xb4,0x9c,0xf0,0x9c,0xfe,0xe1,0x5a,0xeb,0x65,0xc4,0x70,0x47,0x3b,0x83,0x5e,0xf8,0x9d,0x23,0xa8,0xd3,0x50,0xbe,0xfc,0x77,0x19,0xaf,0x95,0x10,0x72,0xf7,0xb4,0x37,0xb0,0xd2,0xbd,0x17,0xbe,0xb6,0x78,0x0b,0xfc,0x81,0xe2,0x88,0x13,0x28,0x33,0xb0,0xce,0xcf,0xff,0x44,0x37,0xdd,0x7b,0xe1,0x0d,0xfe,0xcc,0x47,0x50,0xac,0x33,0x19,0xcc,0xf0,0x5b,0xf0,0x91,0x42,0xcd,0xc7,0x04,0xbe,0xe6,0xe4,0xfe,0x7a,0xb2,0xca,0x64,0xd0,0xc7,0xef,0x50,0xf8,0x48,0x99,0xde,0xd7,0x5d,0x3a,0x6f,0x5c,0x0f,0x71,0x4c,0x0f,0x6a,0xa4,0x7b,0xba,0x37,0xaa,0xd1,0x5a,0xf1,0x66,0x64,0x66,0x9b,0xe7,0x86,0x23,0x8a,0x06,0x94,0xa8,0xf6,0x74,0x83,0xb4,0xa9,0x73,0x6b,0x90,0x1b,0xcf,0x6e,0xf4,0x1e,0x70,0x84,0x65,0xc2,0xaf,0x7e,0xf6,0x85,0x88,0x20,0x1a,0x1b,0x1f,0x06,0xb2,0xb0,0xd7,0x59,0x3a,0xfd,0x41,0x61,0x6f,0x47,0xdd,0x60,0x80,0x56,0xdf,0x9f,0xd6,0x11,0x0a,0x7b,0x9d,0x70,0xc4,0x03,0x14,0xb0,0x76,0xd4,0x0c,0x04,0x30,0xb4,0x3d,0x5a,0x57,0xb1,0xe3,0x7f,0x13,0x4b,0x77,0x57,0x80,0xee,0xa8,0x17,0xa4,0xf1,0x94,0xa8,0x8c,0x08,0x4e,0xea,0xdd,0x58,0x6f,0x21,0x68,0xe2,0x8e,0x5a,0x01,0x00,0x2f,0x4d,0x4b,0x81,0x2e,0x45,0x36,0x63,0xa2,0x79,0xa0,0x35,0x20,0x34,0xec,0x69,0x25,0x18,0xe0,0xa1,0x69,0x25,0xc8,0x58,0xb0,0xf9,0xdb,0xd7,0x17,0x10,0x62,0xff,0xd7,0x6a,0xf8,0x4c,0xa1,0x9e,0xdf,0xbb,0xb3,0x28,0xe9,0xfb,0xd0,0x79,0x7b,0xc0,0x65,0x4f,0x0b,0x81,0xba,0x8e,0x0b,0xbf,0x71,0x4d,0x00,0xd9,0x5e,0x1a,0x0b,0xc1,0x03,0xa3,0x41,0xfa,0xa1,0x12,0xe6,0xfc,0x4a,0x57,0x01,0x78,0x5b,0x1a,0x22,0x2c,0x06,0xf8,0xcb,0x47,0x9c,0x9d,0xa9,0x1b,0x55,0x1f,0x0a,0xab,0x63,0x64,0x3b,0x08,0xc4,0x88,0x59,0x2b,0x82,0x1f,0x72,0x74,0xa2,0x5e,0x86,0xfa,0x95,0x6f,0x4f,0x42,0x0d,0xd7,0x50,0x5d,0xad,0x61,0xb2,0x81,0x93,0xf3,0x74,0xea,0x94,0xcf,0x03,0x1f,0x52,0x66,0x71,0x3d,0x8e,0x78,0x82,0x34,0xe5,0xea,0xa7,0xe6,0x68,0x56,0xa9,0xbe,0x32,0x22,0x27,0x72,0xb6,0xfa,0xdd,0xf4,0x6c,0x19,0xf4,0xf7,0x94,0x07,0x1a,0x59,0xa1,0xcd,0xb5,0x14,0x00,0x21,0xcc,0xe0,0x68,0x29,0x03,0x2e,0x7b,0xca,0x03,0x7d,0xc9,0x14,0xef,0xc4,0xb7,0xe5,0x1d,0xf9,0x61,0xe8,0x68,0x0c,0x3a,0xfb,0xba,0x3a,0x98,0x99,0x81,0x3d,0x68,0x38,0x05,0xc0,0x93,0xb9,0x9c,0x7c,0x55,0x5a,0x14,0x7b,0xf0,0xb9,0x0a,0xfc,0x8e,0xa7,0xbe,0x00,0x88,0x5d,0x75,0xe5,0x84,0x38,0xba,0xab,0x34,0xc0,0x17,0x43,0xe1,0x34,0x20,0x69,0x91,0x89,0xe4,0x72,0x5b,0xca,0x6d,0x22,0xe7,0x85,0xb8,0xb3,0x59,0x20,0xb3,0xb6,0x4a,0x54,0x17,0x00,0x4f,0xd9,0xa9,0xe2,0x0e,0x24,0xb8,0xef,0x69,0x5b,0xd0,0xe8,0xf4,0x2a,0x53,0xdc,0x02,0xb0,0x9b,0x3c,0xbb,0xfb,0x61,0x7a,0x8b,0xaa,0xf3,0xcb,0xb1,0xbf,0x78,0xa7,0x2f,0xc6,0xf1,0x77,0xc6,0xd7,0x5f,0x7d,0xfd,0xbd,0xce,0x71,0x9c,0x73,0x15,0x5d,0xd2,0x67,0x78,0xef,0xf3,0x60,0xb0,0x90,0x2d,0x55,0xb7,0x68,0x91,0xc0,0xe7,0xea,0x95,0xc5,0xee,0x03,0x82,0x5a,0x91,0xfc,0x1d,0xd6,0xc5,0x36,0xa7,0x56,0xb5,0xbc,0x9a,0x58,0xa8,0x59,0x9b,0xbc,0xe5,0x75,0xfa,0x6b,0xa3,0xb2,0x37,0x42,0x98,0xc3,0x3d,0xad,0x3a,0x83,0xa2,0x76,0xd4,0xe8,0xaa,0xf4,0x3e,0x98,0x20,0xca,0xdc,0xc2,0x9d,0x45,0xba,0x9d,0x64,0x85,0x82,0xcc,0xe6,0x9e,0x9e,0xbb,0x53,0x8b,0xab,0x2b,0x8e,0xf6,0x21,0x0a,0xf3,0x44,0xd6,0xb5,0xb1,0x4f,0xf8,0x64,0x87,0xc5,0x8b,0xc1,0x66,0x10,0x46,0xdd,0xb1,0xc0,0xcd,0xa1,0xc7,0x2e,0x0a,0x03,0xe0,0x97,0xee,0x2b,0x10,0xf8,0xa7,0xeb,0x82,0x9a,0xda,0xcd,0xd2,0x83,0xb7,0x81,0x47,0x7e,0x5c,0xeb,0x1d,0xd2,0xcc,0x5d,0x30,0xcd,0x34,0xe1,0x93,0xe5,0x42,0x55,0x60,0xe9,0x3f,0x1c,0x63,0x83,0x0f,0x3d,0x1b,0x35,0x9c,0x87,0x5f,0xc2,0x28,0x63,0x4f,0x1b,0x43,0x27,0x0a,0x1f,0x0b,0x58,0x86,0xf0,0x7c,0xa2,0xf8,0xa6,0xe8,0xe9,0xfc,0x1c,0x80,0x85,0xec,0x2c,0x0f,0xf6,0x27,0x8b,0x7f,0xf1,0x23,0xb8,0x1e,0x0c,0x82,0x6f,0x8f,0x58,0xdd,0x25,0x33,0xbf,0x7b,0x19,0xee,0x6a,0x5b,0xd8,0xdf,0x1c,0x9e,0x10,0x8c,0x99,0x5d,0x3a,0x0b,0x3f,0x8a,0x65,0x3f,0x7a,0x13,0x7e,0x75,0xdb,0xdf,0x42,0xf0,0x97,0x74,0x2a,0x70,0x9f,0xdc,0xab,0xd3,0x07,0x3c,0xf7,0xdf,0xb2,0x9c,0x6b,0x00,0x7f,0x73,0xf6,0x58,0x03,0x02,0x04,0x63,0xed,0xfa,0xe6,0xea,0x7c,0xd8,0x83,0xff,0x7f,0xd4,0x8b,0xfe,0x1c,0x10,0xac,0x3d,0xd6,0x80,0xcc,0xd2,0x87,0x9a,0x7d,0xe4,0xbd,0x6d,0xb1,0x37,0x17,0x31,0xce,0x7e,0x83,0x3b,0xba,0x29,0xe0,0x57,0x06,0xfe,0xf8,0xd3,0x8e,0x8e,0x89,0xfe,0xd5,0x19,0x7f,0x8c,0xc8,0xe1,0xd3,0x85,0xf8,0x83,0x8d,0xc0,0xc7,0x2b,0xf1,0x07,0x9b,0x01,0x9f,0x6f,0x37,0xa5,0xde,0x84,0xdd,0x05,0x42,0xff,0xe6,0xe1,0x8f,0x2f,0xbb,0x3a,0x1d,0xe8,0x5f,0x77,0xe7,0xad,0x9a,0x3a,0xba,0x51,0xc7,0x87,0x0f,0x96,0x1d,0x7e,0xde,0xff,0x93,0x0a,0xfb,0xfa,0x91,0xb1,0x50,0xd3,0xef,0xd6,0x7f,0xf6,0x49,0x11,0xb7,0xd6,0xf1,0x2b,0x04,0xfc,0x07,0xe7,0x2f,0xf6,0x1f,0x4e,0xa7,0xd3,0xf1,0xd8,0xb6,0xc5,0x06,0xfe,0x37,0xed,0xf0,0xc3,0x7e,0x03,0x66,0x68,0x13,0xd4,0x8e,0x5a,0x86,0xd7,0x39,0xe7,0xe8,0x76,0xf5,0xfb,0xbc,0x71,0x6b,0xe0,0x56,0xd7,0x4d,0x90,0xf9,0x61,0xfa,0xa8,0x0e,0x8e,0xed,0x1d,0xe3,0x02,0x75,0x23,0xde,0x07,0xbd,0x07,0x7a,0x87,0xa0,0x46,0xf1,0xe1,0x71,0xf5,0xb3,0xc1,0x05,0x99,0xdc,0x20,0xf3,0xaf,0x8f,0x18,0x35,0x22,0xdd,0x47,0xd4,0x03,0x43,0xd5,0xa2,0x5e,0x3d,0x28,0xd3,0xa3,0x5e,0xd4,0x79,0xf3,0xee,0x70,0x9d,0x1a,0xc8,0xe5,0x5d,0xa6,0xd2,0x07,0xd4,0xcd,0xaa,0x1a,0x78,0x57,0xbe,0x47,0x50,0x09,0x42,0xd5,0x1e,0xdf,0xc0,0x66,0xb6,0xc8,0x44,0x51,0x91,0xd3,0xf5,0x1d,0x43,0x02,0x6e,0x14,0xa3,0x7c,0xc5,0xd1,0xae,0xc2,0x00,0xbc,0xd5,0xba,0x29,0x19,0x32,0x39,0xd0,0xdc,0x2f,0x8e,0x92,0x14,0x5b,0xe1,0xbc,0x5b,0x58,0xdc,0xf7,0x50,0xb2,0xc2,0x78,0xa5,0xbd,0x3b,0xd9,0x50,0xaa,0x40,0xb1,0xf3,0x64,0xf1,0x51,0xde,0x6f,0x0a,0x7e,0x06,0xa7,0x37,0xba,0x4d,0xb4,0xbe,0xb4,0x28,0x13,0xf5,0xbe,0x9e,0xfa,0x7f,0x25,0x14,0x59,0x2c,0x50,0xce,0x42,0x96,0xd6,0x84,0x7f,0xb9,0x7e,0x24,0x39,0xd7,0x48,0xcf,0xef,0x51,0x0d,0x64,0x32,0xa7,0xfc,0x47,0x27,0xcd,0x4d,0xfe,0x8d,0xfb,0x24,0x00,0xe5,0x02,0xc2,0xff,0xfa,0x31,0xb3,0x9b,0xd4,0x90,0x9b,0xb7,0xfd,0x89,0xa1,0x7f,0x44,0x49,0x18,0x69,0x6a,0x46,0x9e,0x5a,0x63,0xa6,0x3a,0x9a,0xfb,0xfb,0x0b,0xae,0x87,0x23,0x4a,0xd2,0x5e,0xb6,0x5c,0x10,0x26,0x97,0x18,0x65,0x88,0xed,0xaf,0xef,0x9e,0xc5,0x5a,0xbb,0x9b,0x7e,0x14,0xf8,0x1f,0x48,0xfa,0x87,0xa4,0xcc,0x23,0x8d,0xb6,0x7a,0x9a,0xbc,0x5b,0x51,0x39,0xd1,0xe9,0x46,0xf0,0x30,0x50,0x12,0x80,0x16,0x03,0x11,0x8c,0xf4,0xb9,0xa1,0x94,0x57,0x01,0xe9,0x06,0xd8,0x9e,0x41,0xc2,0x7a,0xaf,0x15,0x65,0x26,0x4c,0x68,0x08,0xb2,0x44,0xa0,0x49,0x85,0x2c,0x85,0x0b,0x13,0x6a,0xff,0x4c,0x70,0x31,0x7b,0x6b,0xd9,0xc1,0xdc,0xd6,0x15,0x88,0xf2,0x90,0xc5,0x02,0x6d,0xac,0x25,0x87,0x48,0xba,0x28,0x83,0xb1,0xa5,0x13,0x85,0x03,0x1b,0xe5,0x28,0xf9,0x32,0xa5,0xab,0x6f,0xaa,0x0a,0x96,0x5c,0x29,0x91,0x22,0x7e,0xd6,0x4f,0xa0,0x71,0x50,0x96,0x14,0x26,0x24,0x74,0x1b,0x71,0xba,0x33,0xb2,0xd0,0x44,0x5f,0x26,0xee,0xb4,0x85,0x81,0xa0,0xe9,0x50,0x1e,0x4f,0xfc,0xec,0xbe,0xd6,0x04,0x8d,0xcc,0x56,0xf8,0x87,0x68,0x12,0x94,0xc7,0x0b,0x60,0x5d,0xe5,0x81,0xa0,0x44,0xc4,0xe4,0x38,0x5f,0x62,0x13,0x77,0xed,0x65,0xc8,0x14,0xc0,0x28,0x1f,0xa5,0xf2,0x72,0x58,0x4f,0x22,0xfc,0xf5,0x5b,0x62,0x23,0xa8,0x81,0x88,0x1b,0xd9,0x53,0xf7,0x42,0x16,0x43,0x68,0x83,0x7c,0x6c,0xa1,0x20,0xc7,0x85,0x95,0xa4,0x54,0xb4,0xc5,0x1d,0x80,0x25,0xf2,0x3d,0x3e,0x91,0x85,0xd6,0xa0,0x59,0x12,0x0b,0x66,0xbb,0x29,0x6b,0x0e,0x3b,0x44,0x47,0x14,0x42,0x1e,0x26,0xac,0xa0,0xb7,0x50,0x44,0x5b,0x05,0x23,0x53,0x69,0x2a,0x58,0x01,0x86,0xa0,0x9d,0x2f,0x56,0x07,0xe6,0x63,0x03,0x47,0x79,0x31,0x50,0x44,0x1b,0x82,0x6e,0x65,0x27,0x16,0xd7,0xcb,0x26,0x3e,0x87,0x4c,0x28,0x8e,0x73,0x82,0x15,0xd8,0x42,0x75,0x60,0x85,0xec,0x5b,0x22,0x16,0xfc,0x06,0x8c,0x00,0x74,0x32,0x2b,0x22,0xf2,0xed,0xe7,0xf0,0xaf,0x18,0xbf,0x75,0x16,0x59,0x81,0x25,0x0d,0xac,0xc0,0x25,0x22,0x75,0xa0,0x35,0xfd,0x9b,0x19,0x2a,0x6b,0xe3,0xa5,0x80,0x1f,0xe3,0x5c,0xf4,0x90,0x71,0x3d,0xce,0xad,0xc8,0xfc,0xb9,0x82,0x55,0xdc,0x04,0xea,0xc0,0x86,0x2f,0xc9,0x9a,0x0b,0x6c,0xa1,0xa1,0x4f,0xd0,0xa3,0x76,0x64,0xc4,0x59,0xfa,0xb9,0x91,0x2e,0x7f,0x23,0x4b,0x00,0x5c,0x93,0x92,0xe7,0xcc,0x5e,0x72,0x01,0xff,0x73,0x9f,0x9f,0xab,0xf0,0x4a,0xd0,0xc0,0xa7,0xb3,0x5b,0x3c,0x2e,0x7c,0x83,0xce,0x1b,0x03,0xcc,0x78,0x2b,0x4b,0x00,0x3c,0x2b,0xc2,0x34,0x99,0xd7,0x4a,0xee,0xe4,0x64,0xaa,0x49,0x04,0xaa,0xb9,0x1e,0xce,0x42,0x9c,0x7c,0xd6,0x69,0xf9,0xd8,0xce,0xee,0xc0,0x75,0xb0,0x9a,0xc3,0xdc,0x3a,0xb0,0x99,0x39,0x8b,0xc9,0xe7,0xf6,0x58,0x8d,0x01,0x94,0x4a,0x0b,0x9c,0xc3,0xba,0xd4,0xc0,0x12,0xce,0x1a,0x03,0x4a,0x22,0xd0,0x81,0x65,0xd0,0xb2,0x18,0x10,0xcc,0x09,0x33,0x90,0x04,0x58,0x92,0x9b,0xb5,0x9d,0x97,0xc0,0xcc,0xc7,0xdf,0xee,0x61,0x44,0x42,0xe6,0x8c,0x01,0xf6,0x36,0x8f,0x55,0xf2,0x67,0xce,0x4c,0x0d,0x91,0x1e,0x48,0xd6,0x11,0x9c,0xc1,0x68,0x40,0x91,0x9e,0x22,0xbf,0xe2,0x5c,0x8a,0x75,0xc5,0x5a,0xe6,0xd2,0xfb,0x16,0x2f,0xdb,0xf7,0x66,0xf5,0x85,0x4b,0xd6,0x8f,0x58,0x6a,0xd8,0xaa,0x08,0x41,0x89,0x08,0xf9,0xb5,0x51,0x02,0x53,0xd2,0x19,0x63,0x80,0xb1,0xd5,0x63,0xb5,0xd8,0x43,0x53,0x3b,0x23,0xce,0x56,0xc2,0xa4,0xab,0x85,0xfc,0x3a,0x13,0xa4,0x73,0x0d,0xe4,0x66,0xf8,0xc0,0xc1,0x45,0xee,0x31,0xe0,0xb9,0x9d,0x26,0x10,0x7f,0x71,0x7a,0xe1,0xfe,0x1d,0x1f,0x81,0xc7,0xfd,0x84,0xdc,0xac,0x00,0x18,0x34,0x4c,0xfe,0xbc,0x0c,0xf8,0x18,0xbc,0x8f,0x8e,0x19,0x6f,0xb1,0x02,0x9c,0x4a,0x06,0x14,0x35,0xef,0x08,0x10,0x01,0x9f,0xdc,0x43,0x5e,0x24,0x05,0xa9,0x2a,0x15,0x71,0xc5,0x07,0x6f,0x3f,0xe0,0x31,0xf6,0x94,0x89,0x2b,0x87,0xfc,0xee,0xfb,0x7d,0x3e,0x94,0x6a,0xea,0xc0,0x03,0xef,0x20,0x1a,0x08,0x84,0xef,0xb4,0x0e,0x03,0xa6,0x8d,0x9c,0xba,0x40,0xc2,0x91,0x81,0x2f,0xf8,0x2f,0xb7,0x90,0x9d,0x03,0x75,0xc3,0xb3,0x6d,0x11,0xfc,0x07,0xb1,0xec,0xca,0xaf,0xa5,0xd7,0x81,0x03,0x5f,0x1f,0xc0,0x9a,0x97,0xbe,0x46,0x4e,0x86,0x0b,0x92,0xb8,0x47,0xe4,0x63,0x07,0x52,0x96,0x52,0x29,0x77,0xf6,0xa2,0x17,0x3a,0xac,0xe8,0x65,0x31,0x86,0xe2,0x83,0x0f,0x02,0x1a,0xc2,0x99,0x70,0x0b,0xe4,0xc4,0xd9,0x07,0x1b,0xf9,0xd0,0x0c,0xa4,0x08,0x62,0x55,0x11,0xc5,0x1b,0xd7,0x0c,0x6a,0x58,0x7c,0x91,0x3f,0x7f,0x97,0xa5,0x70,0x32,0x99,0xe3,0xe3,0x9d,0x2b,0x49,0xda,0xa8,0x4a,0x61,0x93,0x10,0x24,0xf0,0x09,0xf2,0x30,0x32,0x69,0xd7,0x67,0xa3,0xcd,0xf7,0x8a,0x25,0x25,0xcc,0x63,0xf2,0x6c,0x5b,0xb6,0xae,0x30,0x93,0x19,0xf3,0x0d,0x51,0xb1,0xbc,0x0d,0x6d,0x99,0x81,0x5c,0x2e,0xb0,0xd8,0x05,0x79,0xc4,0x21,0x88,0xf0,0x38,0x56,0x46,0x7b,0x59,0x3b,0x81,0x92,0x0b,0x45,0x2e,0xf1,0xdc,0x0d,0x98,0x21,0x57,0xce,0xbd,0x97,0xfa,0x25,0x85,0x31,0xf2,0x38,0x68,0x29,0xff,0x49,0x64,0x82,0x90,0x2b,0xc7,0xe7,0x66,0x21,0x43,0x6c,0xc2,0x1c,0xb7,0x42,0x5d,0x6b,0xfd,0xc4,0xd3,0x15,0x64,0x55,0x6f,0x2e,0x08,0x31,0x23,0x82,0x1c,0x1c,0x58,0xe4,0xa0,0x36,0x8b,0x92,0x90,0xc9,0xb7,0xe2,0x55,0x4e,0x0e,0x30,0x37,0x54,0x46,0xac,0x02,0x9e,0xac,0x4a,0x21,0x7b,0x4b,0xb3,0xeb,0x20,0x07,0x1b,0x16,0x70,0x70,0x9a,0x95,0x29,0xc8,0xd5,0x95,0x8c,0x81,0x53,0xf0,0x83,0x33,0x5f,0x38,0x17,0xa9,0xa4,0x7c,0x50,0xc4,0x9d,0x5a,0x2f,0x48,0x41,0x5c,0x7e,0xc4,0x69,0x9e,0x84,0xec,0x3b,0x1b,0xb9,0x28,0xe9,0xa6,0x45,0xd3,0xb1,0xab,0x0c,0xb8,0x0d,0x16,0x0a,0x38,0x36,0x32,0xf2,0x81,0x87,0x89,0xdf,0x3a,0xa9,0x61,0x89,0x0b,0x51,0xf8,0x0e,0x38,0x6b,0x08,0x21,0x15,0xe3,0xcb,0xc1,0x26,0x95,0xf0,0xa7,0xba,0x12,0x14,0x42,0x7d,0xe0,0x16,0x4d,0x05,0x56,0x6b,0xc2,0x7a,0x3e,0x97,0x71,0x3b,0x9c,0x64,0xab,0xaa,0xff,0x68,0xa8,0xea,0x22,0x49,0xec,0xa7,0x3e,0xd7,0x52,0xc7,0xe1,0x8e,0x0f,0x09,0x53,0x41,0x67,0x7c,0x36,0xf5,0xd4,0xd1,0xa6,0x71,0x40,0x40,0x8a,0x53,0x3c,0x17,0x16,0xbb,0x8f,0xe6,0xbc,0xea,0x02,0x19,0xce,0xc0,0xcb,0xd1,0x73,0xec,0x68,0x38,0x91,0x0d,0xb2,0x98,0x33,0xde,0xc5,0xea,0x0e,0xa7,0x54,0xc2,0xa3,0x33,0x5b,0xf1,0x04,0x19,0xe8,0xd8,0x07,0x73,0xe6,0x0c,0x5d,0xb2,0x99,0x1e,0x2e,0xd2,0x01,0x2f,0x63,0xf4,0x05,0x9c,0x33,0xff,0xa1,0x0c,0x21,0xc5,0x09,0xa9,0xe0,0x61,0x68,0x6c,0x27,0x57,0x6d,0xae,0xf2,0x36,0x5a,0x5a,0xdd,0x80,0x8f,0x69,0xe0,0x42,0x36,0x70,0xca,0x91,0x25,0x1f,0xf9,0x63,0xfa,0x20,0x85,0x7b,0x92,0x7c,0x84,0xb6,0x1b,0x0b,0xbc,0x53,0x84,0xe4,0x23,0x51,0xaf,0xd7,0xe2,0x2e,0xa0,0x8d,0x8b,0x39,0xc0,0xa9,0x43,0x86,0x13,0xbb,0x98,0x2d,0x4c,0x5d,0x79,0x2d,0xda,0xc8,0xbc,0xdf,0x93,0xf6,0x20,0x8d,0xc5,0x1c,0x3a,0x1b,0x82,0x0b,0x9f,0x1b,0x07,0x25,0xa8,0x16,0xa7,0xc3,0x7a,0x08,0x99,0x9d,0x6f,0x69,0xb2,0x18,0x19,0x04,0x4e,0xd1,0x3e,0x6b,0x79,0xfd,0x8f,0x97,0xc7,0x2f,0xe8,0x96,0xae,0x01,0x45,0x28,0xc5,0x75,0xe9,0x74,0xc3,0x00,0x4f,0x43,0xa2,0xb1,0xf6,0xa4,0x4d,0x05,0x7a,0x81,0x7f,0x93,0x20,0xf6,0x04,0xb9,0x08,0x90,0x25,0xd3,0x7b,0xbd,0x03,0x09,0x80,0x0b,0x7b,0xce,0x92,0xb2,0x9e,0x4a,0xad,0xb9,0xad,0x27,0x70,0x72,0xa9,0xc6,0xb4,0x19,0x7b,0x9c,0x5e,0xba,0x06,0xe4,0x52,0x14,0x22,0xfe,0xf6,0x8c,0xd6,0xbe,0x2a,0xfa,0x49,0x70,0x04,0x69,0x64,0x54,0x4e,0xb4,0x07,0xc9,0xee,0x38,0x53,0x20,0xd0,0x6b,0xd6,0x52,0x08,0x9a,0x14,0x67,0x21,0x35,0x48,0x96,0x53,0x1c,0x61,0x48,0x58,0x01,0x88,0x07,0x90,0x2e,0x56,0xf2,0x6d,0x5c,0x51,0x22,0x1f,0xb8,0xa4,0x02,0x53,0x4c,0xb9,0xca,0x76,0xf1,0x1b,0x27,0xa1,0xc8,0x66,0x95,0x20,0x5f,0x85,0x4c,0xe2,0x8b,0xc0,0x35,0x45,0x89,0x5a,0x53,0x7c,0x4a,0xa3,0xf7,0x64,0x33,0xf7,0xb8,0xf4,0xb3,0x3b,0x20,0xdb,0xd1,0x05,0x05,0x4a,0x15,0xab,0xb3,0x0e,0x4a,0x15,0x29,0xb8,0x1c,0x3f,0x06,0x15,0x92,0xd3,0xb2,0x85,0xcd,0x81,0x20,0x93,0x61,0x82,0x12,0x1e,0xf2,0x2b,0x6a,0xe0,0x91,0xa3,0x98,0xa5,0xcd,0xa7,0x23,0xf2,0xab,0x40,0x09,0xf3,0x84,0x6c,0xd9,0x92,0x2f,0xe3,0x98,0x80,0x1a,0xa1,0xfc,0x47,0xd1,0x43,0xc9,0x5e,0xf2,0xa7,0x9e,0x25,0x88,0x12,0x5f,0xff,0x36,0x16,0x3c,0x39,0x56,0x0d,0xaa,0x50,0xe4,0x45,0x4d,0xce,0x8c,0x96,0x6c,0xc4,0x15,0x8d,0x07,0xea,0x3f,0xda,0x2c,0x31,0x90,0xc9,0x17,0x7e,0x72,0x62,0x17,0x94,0x39,0x20,0xaf,0x8b,0x9e,0x1e,0x80,0x78,0xed,0x91,0x21,0xaf,0x10,0x94,0xa9,0x2d,0xd1,0xed,0xf4,0xc1,0x3a,0xd7,0x71,0x04,0x92,0x5f,0x00,0x0d,0xca,0x47,0x6a,0xb9,0x83,0x0f,0x35,0x41,0x9d,0xe6,0x37,0xf6,0xee,0x6b,0xc9,0x75,0x1b,0x06,0x00,0x28,0x48,0xf5,0x6a,0x35,0xab,0x5a,0xee,0x5e,0xfc,0xff,0x1f,0x26,0x99,0x64,0x26,0x93,0x64,0x69,0x91,0x14,0x48,0xc9,0x7b,0x73,0x9e,0x6f,0x76,0x1c,0xcb,0x62,0x01,0x40,0x82,0x6b,0x0e,0x01,0x81,0xd4,0x7f,0x47,0xcf,0xa1,0x1d,0x00,0x5a,0x34,0xa0,0x04,0x29,0xf5,0x1e,0x5a,0xdc,0x42,0xc5,0xb4,0x6a,0x44,0x3b,0xb6,0x51,0x3b,0x96,0x12,0x05,0xf4,0x8e,0x02,0x0c,0x68,0x80,0x43,0xbb,0xa7,0x49,0xc1,0xa8,0x12,0x45,0x7a,0x9d,0x86,0x4c,0x13,0x98,0x55,0x34,0x94,0xb1,0xf3,0x33,0x1a,0x71,0xa5,0x9c,0xcf,0x1c,0x30,0xcc,0x47,0x81,0x59,0x63,0x17,0xdb,0x1c,0xc1,0xb0,0x84,0x72,0x00,0x08,0xd0,0x88,0x96,0xb2,0x0a,0x25,0x03,0xc3,0xba,0x83,0x7a,0xfc,0xa9,0x17,0x27,0x12,0x4d,0xeb,0x09,0x67,0x61,0xe0,0x68,0x84,0x43,0xb8,0xa4,0xe5,0x60,0xdc,0x43,0x3d,0x18,0x94,0x6f,0x78,0x19,0x77,0x44,0x17,0x3a,0xbd,0xa2,0x21,0x1d,0xdd,0x10,0xd0,0x82,0x79,0xbe,0xf2,0xf2,0xd3,0xd9,0xf0,0x26,0xae,0x98,0x6e,0x00,0xb8,0xa3,0x21,0x31,0xdd,0x2f,0x30,0x04,0x02,0x9a,0x35,0x6a,0x9e,0x6a,0x3b,0xa3,0x00,0x6c,0xf0,0x70,0xc1,0xa0,0xf8,0xcb,0xa7,0x97,0x90,0x7d,0x02,0x1f,0x6c,0x98,0x15,0x63,0xd0,0x0f,0xe1,0xbf,0xb7,0xe1,0x4e,0x56,0xda,0x7e,0x40,0x43,0x1c,0xb2,0xc0,0x56,0x05,0x36,0x74,0x4c,0x6d,0x49,0x97,0x8b,0x22,0x07,0x56,0x14,0x0d,0x51,0xe4,0xcc,0x45,0x53,0x1a,0xc5,0xe9,0x77,0xf3,0x26,0xa7,0x81,0xda,0x48,0xe6,0x8b,0x66,0x3e,0x3b,0x12,0xa2,0x73,0x7a,0x35,0x1a,0x13,0x12,0x7d,0x86,0x1b,0xd8,0x51,0xab,0x8d,0x64,0x9e,0xa1,0x0d,0x0b,0xc9,0xd2,0x89,0x17,0xca,0xc9,0x65,0x7a,0x15,0xc8,0x8a,0x2c,0xa7,0x01,0x48,0x1e,0x29,0x13,0xac,0x57,0x6c,0x89,0x68,0xf6,0x4d,0x39,0x1a,0x53,0xaa,0x35,0x96,0xd4,0x3c,0xd9,0x6a,0x7e,0x54,0x2d,0xe0,0x3b,0x9d,0xe8,0x7f,0xda,0x96,0x98,0xa6,0x80,0x36,0x41,0x63,0x9e,0x34,0xe9,0xad,0x1e,0x6c,0xc9,0x54,0xf2,0x10,0xa9,0xe8,0x1f,0x5b,0x33,0x90,0xe4,0xce,0x02,0x34,0xa6,0x25,0x29,0x76,0x8f,0xc0,0x9a,0x50,0xe5,0xa4,0x68,0x2d,0x5a,0xf8,0x58,0x73,0x79,0x5b,0x8f,0xb3,0x79,0x18,0x00,0x31,0x21,0xc9,0x70,0x9f,0xc1,0x1e,0xfc,0x56,0xac,0x92,0x43,0x03,0x7b,0x0a,0x86,0x04,0x87,0x28,0x23,0x34,0x26,0xa0,0x98,0xd0,0x3c,0xb0,0x88,0xe3,0x77,0x32,0x85,0x41,0x8b,0x81,0x45,0x3e,0x45,0xf2,0x7c,0x42,0x63,0x4e,0x20,0x2f,0xdc,0xc1,0x0c,0x20,0x9a,0x55,0x6f,0x2a,0x0b,0x57,0x17,0xac,0x71,0x39,0x0a,0x3c,0x3f,0x6f,0x04,0x48,0x50,0xe4,0x0a,0xf6,0x34,0x0a,0x23,0x40,0x4d,0x16,0x08,0xa6,0xaf,0x62,0xe1,0xee,0xa7,0xad,0x01,0x3a,0xa6,0xfe,0x57,0xe8,0xb9,0x2a,0x6b,0x80,0x9e,0x2e,0x6c,0x4d,0x9f,0x0f,0xba,0x7f,0xda,0x2e,0xa0,0x45,0xa1,0xa6,0x00,0x5b,0x52,0x95,0x67,0xea,0x9a,0xaf,0x06,0xd4,0xaf,0xe4,0x3a,0xc0,0x1e,0xe2,0x00,0x17,0xa5,0xcc,0xc6,0x0e,0x3a,0xdd,0xdd,0x95,0x46,0x75,0xbe,0x71,0x6b,0x76,0x9f,0x26,0x7c,0xfe,0x44,0x63,0x32,0x90,0x95,0xef,0x21,0x17,0x24,0xfc,0x4a,0x95,0x76,0xae,0xac,0x00,0x3b,0x8e,0x34,0xd5,0x00,0x10,0xa3,0x31,0xa9,0xda,0x72,0x76,0xf3,0x6e,0xc7,0x6e,0xa3,0x34,0x9c,0x06,0xdb,0x0e,0x58,0x2d,0xd1,0xdb,0x77,0x45,0x63,0x0a,0xa5,0x90,0xd6,0xf6,0xb1,0xc0,0x9b,0x5a,0x39,0xca,0x7d,0xdb,0x01,0x8b,0x53,0xe5,0xd0,0x19,0x1a,0x72,0x50,0x1b,0x00,0xb6,0xcf,0x06,0x8c,0x6a,0xcb,0xba,0x7a,0xd3,0xd0,0xe5,0x8b,0xaa,0x22,0x0f,0x3c,0x34,0x64,0x22,0x3b,0xe7,0x92,0x80,0x0d,0x95,0xea,0x37,0xc9,0xb7,0x6c,0xcf,0xeb,0xe0,0x82,0x11,0x24,0x7d,0xa1,0x21,0x39,0x59,0x51,0x5a,0xe3,0x82,0x80,0x85,0xaf,0x94,0xb9,0xaa,0xcb,0xf0,0x17,0x98,0x57,0xd3,0x15,0xe5,0x66,0x68,0x48,0x45,0x77,0xd0,0xad,0x04,0xf3,0x62,0xe5,0xd2,0xc6,0x9b,0xf8,0x44,0x8e,0x71,0x27,0x44,0xaa,0x21,0xa0,0x43,0x33,0x98,0xd2,0x00,0xb0,0x7d,0x55,0xe0,0xa0,0x3c,0x90,0x75,0x4c,0x98,0x8c,0x33,0x2d,0x64,0xb8,0x2c,0xde,0x76,0x11,0x10,0x51,0x9e,0x4b,0x38,0x83,0x69,0xb3,0xc6,0x0a,0x34,0xd2,0xfb,0xea,0x6d,0xf5,0xa6,0xf7,0x54,0x36,0x94,0xf4,0x4a,0x95,0x01,0x60,0xf3,0x93,0x01,0x15,0x0a,0x38,0x3a,0xb3,0x27,0xef,0xc0,0xac,0x03,0x65,0x24,0xae,0x47,0x13,0x58,0xa7,0x3f,0x00,0xd8,0x4f,0xb2,0x15,0x07,0xad,0x40,0x34,0xdf,0x28,0x74,0x11,0x23,0x52,0x0e,0x01,0x0e,0x1a,0xe0,0xab,0xc4,0x00,0x36,0x3f,0x1d,0x18,0x21,0xea,0xf4,0x28,0xc9,0x37,0xda,0xb9,0x46,0xb4,0xc1,0xf8,0x12,0x0d,0x88,0x75,0x82,0x80,0x62,0x07,0x30,0x69,0xd6,0x7c,0x90,0x21,0xdb,0x64,0xe3,0x12,0xa2,0x24,0x4f,0x3a,0x17,0x47,0x6e,0xd0,0x1f,0x00,0xec,0xaf,0xab,0x5e,0xda,0xd7,0x5c,0x24,0x9b,0x7c,0xe0,0x1c,0x65,0xdd,0x36,0x5b,0x06,0x96,0xda,0x03,0x80,0xfd,0x65,0xe0,0x99,0xa1,0xc8,0x49,0x7f,0x3b,0xc6,0xce,0x60,0x8a,0x47,0xfd,0x1e,0x76,0x0c,0x89,0x1d,0x5c,0xea,0x0b,0xc3,0x59,0x08,0x86,0x54,0x0c,0x85,0xae,0x2b,0x9a,0x85,0xb0,0x0a,0xcc,0xa8,0xe8,0x5f,0xc4,0x04,0x89,0x5d,0xe8,0x8f,0x25,0x5d,0xc0,0x8c,0xba,0x41,0xa1,0x60,0xd5,0x65,0xe1,0x4d,0x05,0x46,0x04,0x88,0xd4,0x57,0x85,0x86,0x0d,0x92,0x1a,0x5c,0xcd,0xa6,0x21,0xf6,0xa3,0x81,0x29,0x5f,0x37,0xea,0xdc,0x50,0x8c,0xc5,0x60,0x40,0xc1,0x0c,0x64,0x64,0xee,0x48,0x2a,0x36,0x31,0xf0,0x54,0x60,0x40,0xd5,0xa0,0xd8,0x73,0xed,0x26,0x9a,0x65,0x40,0xaf,0x44,0x15,0x4d,0xb7,0x41,0x2c,0xc0,0x5f,0xd9,0x38,0xcc,0xde,0xd5,0x2b,0x31,0x5b,0xdd,0xfb,0xe6,0xca,0x28,0xdb,0xdc,0xd0,0x3f,0xaa,0xc4,0xfe,0x35,0x01,0xec,0x48,0x30,0x97,0x59,0xa9,0xb6,0xbb,0x51,0x0c,0x39,0x4f,0xbb,0x3f,0xdb,0xab,0xa1,0xa7,0xd1,0x5a,0xdf,0x02,0x5e,0x49,0xff,0x2e,0xfd,0x7e,0x3a,0xa1,0x79,0x25,0xa7,0x0e,0x48,0x25,0xaa,0x5d,0xc3,0x02,0xdb,0x67,0xc4,0xfc,0xb5,0x65,0xcd,0xbe,0x9d,0xeb,0x42,0x8b,0x88,0xa8,0x75,0xe4,0x91,0xe3,0x3b,0x43,0x0a,0x94,0x44,0x5d,0x55,0x6b,0x14,0x49,0xed,0xf6,0x8d,0x1b,0x8a,0x95,0x93,0x0e,0x77,0x3d,0x1b,0x17,0x06,0xf7,0xde,0x42,0xfb,0x43,0xb2,0xdc,0x4c,0x93,0x01,0x9d,0x58,0xf8,0x9e,0x07,0x6b,0x33,0x53,0x67,0x86,0x04,0x9a,0x74,0xed,0x88,0x73,0x87,0xbb,0x85,0x0c,0x4b,0xdc,0x10,0xce,0x37,0x33,0xbe,0x17,0xb8,0x40,0x45,0xdc,0x55,0xb5,0x67,0x28,0x50,0x59,0x3c,0x22,0xc0,0x1e,0x6b,0xaf,0x84,0x38,0x88,0x23,0x93,0x9c,0x7a,0x26,0x15,0x0b,0x68,0xd3,0x73,0xde,0xd5,0x70,0x1e,0xc8,0x03,0x80,0x64,0x75,0x7d,0xe8,0xdd,0xe2,0x69,0x20,0xef,0x5d,0xfe,0xe2,0x64,0x38,0xc1,0xd2,0x8f,0x28,0xa0,0xd9,0xf0,0xab,0xf0,0xf0,0x3d,0x56,0x9a,0xbd,0x1f,0xf2,0xf9,0x36,0x31,0xf1,0x02,0x49,0xad,0xb5,0x7b,0xa1,0xca,0xb7,0x01,0xbf,0xb3,0xd9,0x8c,0xd0,0xab,0xc1,0xf7,0x0e,0xa1,0x6e,0xd3,0x11,0xb1,0xe8,0x68,0x32,0x08,0x10,0x0a,0x1e,0x9f,0xea,0x71,0xf1,0x0b,0xae,0xc1,0x5e,0x20,0xa9,0xe0,0xef,0x87,0x90,0xc1,0x60,0x28,0x20,0xf4,0xf5,0xfb,0x5f,0x8b,0xa5,0x0d,0x2e,0x68,0x4a,0x73,0x07,0x02,0xa3,0x85,0x6f,0x35,0xa7,0x3b,0x70,0x42,0x13,0xfa,0x6e,0x17,0xa6,0xab,0xdc,0x5c,0xc9,0x7d,0xcc,0xcd,0xf4,0x28,0x7d,0x30,0x5c,0x12,0x85,0xb0,0x52,0xfe,0x7e,0x6e,0x7c,0x12,0xe4,0x52,0x1f,0x0d,0x6a,0xe2,0x35,0x41,0x55,0xf3,0x63,0xe9,0x97,0xbe,0x52,0xe7,0x1b,0xeb,0x4e,0x11,0x33,0x5c,0xd2,0x5c,0x60,0x1d,0xef,0xfd,0xea,0xd8,0x3d,0x10,0x2c,0x6a,0x8f,0x0e,0x6a,0x99,0x42,0x82,0x84,0xa6,0xb3,0xb4,0xac,0x0e,0x61,0x95,0x1b,0x37,0x18,0x70,0xcc,0x70,0xd9,0x58,0x9b,0xe8,0x17,0x97,0x2c,0x2f,0xe3,0x6b,0xfd,0x83,0xc7,0xf4,0x55,0x9b,0xe9,0x72,0xf8,0x3d,0x33,0x91,0x5c,0x49,0x1d,0xb3,0x01,0xe7,0x0c,0x25,0x24,0x05,0x68,0x6b,0x17,0x9f,0xee,0x40,0xd2,0x75,0x29,0x1e,0x50,0x91,0x57,0x81,0x82,0x69,0x39,0x66,0xe5,0x36,0xe4,0xe1,0x60,0x77,0x66,0xb8,0xec,0x4e,0x94,0x5c,0x14,0xe3,0x25,0xf5,0xe9,0x25,0x4f,0x66,0x0d,0x17,0x83,0x8a,0x9c,0xa1,0x02,0x96,0x13,0x55,0xb5,0xa7,0xcb,0xb3,0xc4,0x11,0x34,0xbd,0x0e,0x04,0x55,0x94,0x34,0xd1,0x54,0xef,0x4c,0x7b,0x22,0x34,0x97,0xc9,0x4c,0x0d,0x2e,0xa8,0xe8,0x7d,0x94,0x16,0x84,0x44,0x35,0x8d,0x81,0xc4,0x15,0x48,0x4f,0xd0,0x52,0x39,0x76,0x1a,0xd4,0xd6,0x1c,0x65,0x44,0x3d,0x65,0xf8,0xb2,0x97,0x2a,0x18,0xcc,0x41,0x4d,0x1f,0xa0,0x0c,0x76,0xea,0x41,0x96,0xd2,0x5e,0xe5,0x40,0x58,0x19,0x76,0xf4,0x51,0x46,0xf3,0xa0,0xc8,0x31,0xd1,0xbe,0x35,0x12,0x5f,0x89,0x23,0x97,0x64,0x65,0x3d,0x28,0xea,0x13,0x8e,0x0b,0x0e,0x6d,0x08,0x8a,0xc2,0x46,0x6e,0x1d,0x39,0x93,0xa5,0x04,0xbb,0x99,0xa1,0x8c,0x43,0x0a,0x04,0x3a,0x07,0xa5,0xb0,0xa4,0x03,0x35,0x95,0xd4,0xb2,0xa5,0x67,0x94,0x95,0xf5,0x8f,0x13,0x7b,0xf7,0xf2,0xc7,0xa0,0xee,0x24,0xd9,0xe4,0x22,0x25,0x3a,0x24,0xd6,0xb5,0x0c,0xa5,0x38,0xa1,0xe5,0xaa,0x5d,0x36,0x17,0x24,0x7f,0x37,0x94,0x4d,0x4d,0xc6,0xa0,0xc1,0xad,0xf2,0x89,0xe1,0x7f,0x8d,0xf3,0xc3,0xa5,0x2d,0x6a,0x2f,0xe5,0xae,0xec,0x19,0x40,0x85,0x7b,0xe1,0x28,0xc7,0x77,0x81,0xca,0x05,0x25,0xf1,0xbc,0x5b,0x5f,0x0a,0x12,0x49,0x87,0xd9,0x3d,0xd0,0x54,0xd4,0xb7,0xd9,0x1f,0x07,0xce,0x10,0x1b,0x3e,0x38,0x7e,0xfb,0xaa,0x5d,0xd0,0x34,0x4a,0x7f,0xba,0xcb,0xfa,0x90,0x46,0x91,0x73,0xf9,0x38,0x06,0xa1,0x33,0x47,0x49,0x6c,0x0e,0xd7,0xf6,0x54,0x78,0xc9,0x97,0x0d,0x3f,0x61,0x73,0xa5,0xfc,0xf8,0x14,0xae,0x2d,0x0b,0xe9,0xda,0x06,0x05,0x4c,0xd7,0x6f,0x87,0x13,0xca,0x62,0x49,0x08,0x52,0xbe,0xa4,0xef,0x30,0xf2,0x64,0x53,0x02,0xf6,0x75,0x5c,0xe1,0x4e,0xb1,0x69,0xd5,0x1c,0x10,0x26,0x0c,0x65,0x79,0x57,0xa0,0x96,0xa3,0x34,0x16,0xa4,0x2b,0xf6,0x00,0xbe,0x4a,0xff,0x15,0x1f,0x36,0xf6,0xa5,0x52,0xb9,0x58,0xae,0xd8,0x07,0xa4,0x01,0x43,0x69,0x5f,0x2e,0xd0,0xab,0x07,0x94,0xe7,0xc4,0xb0,0xa4,0x56,0x08,0x5d,0x44,0xbb,0xe8,0xbf,0xf2,0x8d,0x54,0xa9,0x04,0x2b,0xd4,0x8e,0x68,0x54,0x11,0xca,0x63,0x19,0x18,0xd1,0x45,0xa8,0xc0,0x2b,0x5d,0x78,0xab,0x55,0xb8,0xc5,0xee,0xba,0x83,0x8b,0x97,0xbf,0xe5,0xa8,0x9d,0x5e,0x98,0xb4,0x4a,0xdc,0xdc,0xd2,0x43,0x05,0xce,0x11,0x4c,0xb9,0x33,0x54,0xd0,0x24,0x57,0x8d,0xf8,0xa9,0xaf,0x58,0xf2,0x98,0xc3,0x86,0x4a,0xc5,0x35,0x78,0xa9,0x91,0x0f,0xb8,0x26,0x0d,0xaa,0x98,0xc1,0xa0,0x7e,0x42,0x25,0xe3,0x4d,0xb9,0x16,0x28,0x53,0xac,0xb8,0x62,0x3d,0x6c,0xa6,0xe3,0x8a,0xd7,0x09,0x84,0xca,0x19,0xbb,0x47,0x44,0x90,0xc5,0xa4,0x54,0x32,0x54,0xc2,0xdb,0x5e,0x30,0x9a,0xa8,0x15,0xc9,0xdd,0x36,0xbf,0x7a,0xfb,0x1b,0x81,0x72,0x0e,0x66,0x52,0xba,0x85,0xb8,0x6f,0x39,0x2a,0x61,0x2d,0x18,0x17,0xfa,0xa8,0x68,0x2c,0x0b,0xf9,0xaf,0xc2,0x57,0x3f,0xaf,0x96,0xc1,0x46,0x2a,0x14,0x99,0x54,0xe7,0x8c,0x0e,0xfe,0xc3,0xcd,0x26,0x54,0xe4,0xd5,0x60,0x43,0xc6,0x51,0x11,0xf3,0x1f,0xb2,0x97,0x02,0xbc,0xd4,0xd7,0xdb,0xbc,0x03,0x2b,0x14,0xc2,0x13,0x57,0x10,0x08,0x65,0x83,0x5f,0x75,0xc0,0x50,0x11,0xcb,0xc1,0x92,0xf0,0x84,0xca,0x86,0xf6,0x2a,0x53,0x6c,0xc4,0x0a,0x8d,0xa3,0x2f,0x5f,0x60,0x94,0xfe,0x9d,0x7a,0xba,0x03,0x5f,0xda,0x0e,0xa8,0xcc,0xe9,0xc1,0x9e,0x6a,0x44,0x75,0xe3,0xf3,0xb8,0x98,0xe4,0x8d,0x16,0x2a,0xef,0x37,0xef,0x6c,0x26,0x93,0xa5,0xe4,0x05,0x08,0xdd,0x17,0x37,0xbf,0x7d,0xee,0xa1,0xba,0x43,0x06,0x76,0xdd,0x38,0x6a,0x70,0xca,0x10,0xfe,0xd4,0xa8,0x17,0x30,0xde,0xf6,0x15,0x0c,0x88,0x50,0xe7,0xdc,0xd2,0xf1,0x7d,0xe2,0xe0,0x78,0x71,0x50,0x03,0xcb,0x5d,0xb0,0xad,0x98,0x19,0xea,0x98,0xee,0x21,0x00,0x3c,0x74,0x8a,0xa4,0x9d,0x3d,0x25,0x85,0x32,0x14,0x71,0x74,0x92,0x87,0x81,0xe0,0xe9,0x4b,0x39,0x85,0xb0,0x85,0xde,0x47,0x3d,0xce,0xe5,0xf8,0xa5,0x13,0x12,0x4b,0x71,0x3f,0xc1,0x80,0x37,0x13,0x52,0xaa,0x13,0x00,0xe5,0xfd,0xd3,0x41,0x3d,0x4e,0x05,0x5b,0x39,0x8f,0xa8,0x89,0x69,0xe5,0xb0,0x13,0x14,0x99,0xc0,0xb2,0x40,0x77,0x49,0x5a,0x23,0xad,0xc3,0x0b,0xb6,0xf4,0x18,0x91,0x52,0xad,0xfd,0xda,0x95,0x60,0xd5,0x19,0x45,0x9a,0x70,0x31,0x09,0x4a,0x88,0xe7,0x2e,0x6c,0x2c,0xf3,0x90,0xcc,0x41,0xff,0xa4,0x67,0x73,0x04,0x8b,0xdc,0x01,0x45,0x4a,0x8b,0x3d,0xad,0xf8,0x65,0xf3,0xc7,0xff,0x87,0x6c,0x40,0x22,0x5f,0xb0,0x24,0xda,0x47,0x44,0x78,0x46,0xfd,0x03,0x4b,0x0f,0x24,0xd2,0xb4,0x05,0xec,0x04,0xd5,0x4f,0x20,0x5e,0x73,0x15,0xe3,0x0b,0xac,0x49,0x57,0x1d,0xc4,0x6f,0x90,0x02,0x9b,0x3b,0xd8,0x91,0x72,0xc0,0xf5,0x98,0xbb,0xe6,0x12,0x43,0x1e,0x82,0x2d,0xde,0xaa,0x4a,0x4c,0x1f,0xd7,0xe3,0xed,0xae,0x1e,0xff,0x1f,0xe2,0x09,0x57,0x1b,0x4e,0x65,0x0a,0x0b,0xbc,0xed,0xcb,0xc3,0x72,0xfd,0x3b,0xa5,0xfb,0x5b,0xe0,0xe1,0x6a,0x87,0x7d,0xcc,0xfd,0xff,0x56,0x9f,0x90,0x00,0x8f,0xda,0x87,0xab,0xb7,0x8d,0xca,0xc0,0x8a,0x2b,0xd3,0xbb,0x89,0xa3,0xbe,0xf8,0x1c,0x09,0x78,0x37,0xd8,0xab,0x6b,0xc0,0x90,0x02,0x73,0x92,0xac,0x07,0x81,0x64,0xeb,0xb4,0xa0,0xa3,0xde,0x8e,0x23,0xbd,0x7d,0x39,0x48,0x23,0x3a,0xc3,0x9e,0x85,0x2d,0x47,0x22,0xcd,0x34,0x67,0x47,0x41,0x43,0xb4,0x2d,0x27,0x81,0xa7,0x5a,0x08,0xa0,0xcf,0x12,0x87,0x21,0x11,0x16,0xa4,0xb0,0x77,0xee,0xcb,0x41,0x3a,0x3c,0x9a,0xb3,0x14,0xfe,0x29,0xde,0x74,0x12,0x48,0xe5,0xfb,0x6a,0xa5,0xd9,0x1c,0x71,0xa4,0x33,0x3c,0x37,0x3f,0x06,0x21,0xe7,0x3a,0x37,0x48,0xca,0x3b,0xe5,0x71,0x28,0x58,0x46,0xdb,0xde,0x09,0x8c,0x32,0x21,0x80,0xa2,0x2a,0x13,0x87,0x21,0xa9,0x29,0x83,0xcf,0xe1,0x96,0x23,0x52,0xe3,0x53,0x72,0x3f,0x87,0x0b,0xc1,0x80,0x08,0x0c,0xcb,0x17,0x42,0x00,0x61,0x55,0x26,0xd1,0x01,0xa9,0xf1,0xf6,0x08,0x1f,0xa6,0x0e,0x18,0x1a,0xd0,0x38,0xc1,0x33,0x4e,0x08,0x6e,0x44,0x21,0x9f,0x00,0x4e,0xf1,0x33,0x70,0x38,0xfe,0xe5,0xd7,0x7d,0xf9,0xff,0x56,0xdc,0x26,0x34,0xcb,0x7e,0x4e,0x60,0x44,0xeb,0x0e,0x73,0x0f,0x1f,0xeb,0x78,0xf1,0xd0,0xb2,0x09,0x0c,0x9a,0xd1,0xb2,0xe6,0xf4,0x80,0x0f,0x97,0xce,0x1c,0xad,0xba,0x83,0x31,0x35,0xda,0x35,0xdd,0x76,0x19,0xf1,0x53,0x16,0xfb,0x0c,0xed,0x61,0x49,0x7e,0xcf,0x1e,0x75,0x5f,0x00,0x99,0x30,0x3d,0x67,0x65,0x9e,0x9c,0x0e,0x68,0xd1,0x78,0xf9,0x90,0x4d,0x9f,0x8c,0xe2,0xe5,0x33,0xb4,0x8e,0x7b,0xce,0xe4,0x07,0x49,0xfb,0x2c,0x5f,0xf1,0xb9,0xbe,0xf6,0x61,0x07,0xcb,0xdc,0x2e,0xec,0xd3,0xfa,0x1c,0xbf,0xee,0xf9,0xfc,0x75,0x8a,0xa6,0x71,0x60,0x68,0x9f,0xf3,0xfc,0xe0,0x89,0xff,0x7b,0x6e,0xe6,0x33,0xdc,0x1e,0x6b,0xf8,0xe0,0x8d,0xbf,0x73,0xa6,0x3f,0x44,0xfe,0xf4,0x07,0x67,0xfc,0x9d,0x37,0x1c,0x9a,0x3d,0x7c,0x44,0x74,0x2e,0x1f,0xb7,0xe7,0x93,0xe3,0x3e,0x12,0x8e,0xff,0xfb,0x45,0x9f,0xfe,0x5f,0x62,0x1f,0xff,0x27,0xc4,0xca,0x1f,0x34,0xef,0x0b,0x64,0xf8,0x3f,0xb1,0xdd,0x95,0x79,0xd0,0x4b,0xf0,0x7f,0x62,0x1f,0xbf,0xeb,0x5f,0xe6,0xe0,0xff,0x70,0x9f,0xf7,0x9d,0xd8,0xb1,0x8b,0x75,0xf6,0x6e,0x45,0xf0,0xd3,0xa5,0xf8,0xbf,0x37,0x38,0xfc,0x74,0x37,0xfc,0x96,0xf7,0x8b,0x0d,0x0c,0x83,0xe8,0xce,0xea,0x9f,0xbd,0x07,0x14,0x9f,0xa9,0xeb,0x20,0x2d,0x4f,0x07,0xfc,0x25,0x8c,0xc9,0xed,0x08,0x10,0xed,0xec,0xbe,0x1b,0x5b,0xc6,0x77,0x97,0xa5,0x86,0xf1,0xec,0xfc,0xe8,0xa1,0x80,0x4d,0xed,0xc3,0x7d,0x7b,0x4a,0x78,0x86,0x9f,0xcd,0x65,0x4b,0xd5,0x9c,0xee,0x39,0x8f,0x7e,0x64,0xbc,0xd0,0x0b,0x6e,0x57,0xf8,0x5b,0xbc,0x93,0x63,0xce,0x96,0x55,0xf8,0xad,0xcb,0x7f,0x4a,0x69,0xdb,0x9f,0xf4,0x2b,0xf0,0x82,0xcb,0xb9,0x80,0x7f,0xea,0xf0,0x5b,0x0c,0x7e,0xb6,0x8b,0xc2,0x25,0x3f,0x5d,0x75,0x39,0x79,0xf8,0xd9,0xd8,0x78,0xba,0x54,0xae,0x4a,0xc7,0xb4,0xfd,0xd7,0x7d,0xaf,0x72,0xc2,0x6f,0xb9,0x20,0xe2,0x56,0xf7,0x60,0xfc,0xc8,0x75,0x01,0x9f,0xe6,0xec,0xaa,0xfe,0x55,0xec,0xf7,0xd8,0x0f,0x09,0x4f,0xef,0x92,0xa7,0x3e,0x7e,0x06,0xce,0xc7,0xcc,0x09,0x43,0x34,0x97,0x55,0xa7,0xd9,0x38,0x3f,0x81,0x1f,0x8d,0xad,0x69,0x04,0xdc,0x55,0xe5,0x1c,0xed,0x79,0x52,0x68,0x9c,0x20,0xcf,0x52,0x90,0x53,0xfd,0x8a,0xb1,0xc0,0x2b,0x45,0x19,0xdf,0x35,0xce,0x83,0x69,0xd8,0xd5,0xb4,0xc0,0x1d,0x7f,0x2e,0xcf,0x21,0xa8,0x70,0x7f,0xc5,0x58,0x60,0x46,0x78,0xd1,0x63,0x57,0x67,0x97,0xd9,0xdf,0x76,0x7d,0xd0,0x8c,0xfe,0x5c,0xc6,0x75,0x01,0x3a,0xbc,0x5f,0x30,0x23,0xdc,0xe2,0xb7,0x0a,0x58,0x21,0xac,0xb3,0x67,0x80,0xd6,0x05,0xb7,0x73,0x0f,0xab,0x9c,0x76,0xd9,0x03,0xc5,0x2c,0x5f,0xb7,0x69,0x12,0xd5,0xcd,0x4b,0x7b,0x4a,0xdb,0x5d,0x44,0xf3,0xe1,0x0f,0xe6,0x99,0x3a,0xd5,0xed,0x8e,0x28,0xc6,0xbd,0x81,0x37,0xaa,0xb5,0xa3,0x87,0x61,0x40,0xb1,0x43,0x07,0xab,0x9d,0x77,0x75,0xf5,0xf5,0x6f,0xec,0xdd,0xe9,0xba,0xda,0x20,0x10,0x06,0xe0,0x81,0xec,0x9b,0xd1,0x44,0x63,0xe2,0x71,0xb7,0xf6,0xbb,0xff,0x3b,0x6c,0xfb,0x74,0x6f,0xb3,0x40,0x0c,0x04,0xc5,0xf7,0x77,0x4f,0xcf,0xf1,0x91,0x10,0x18,0x86,0x19,0x2d,0x5c,0x75,0x59,0x10,0xf5,0x1a,0x9d,0xf8,0x86,0xbe,0xf9,0x9e,0xef,0x7d,0x8b,0xb3,0xaf,0x56,0x5f,0x9d,0x16,0x3f,0x9d,0x56,0xdf,0xdc,0xb3,0x2c,0xbb,0x15,0xe5,0xb9,0xde,0x2e,0x07,0x53,0x57,0x0a,0x7a,0xdc,0x12,0xad,0x1c,0x7a,0x5d,0x29,0x5a,0xc5,0xaa,0x73,0x0d,0x1d,0x97,0xe4,0x05,0xca,0x13,0x77,0x1a,0xb4,0x59,0xd3,0xeb,0xba,0xa3,0x55,0xad,0x3c,0xd9,0x70,0x4f,0xd2,0x2e,0xea,0xf3,0x76,0x22,0xeb,0x52,0x02,0x0e,0x68,0xc3,0x34,0xdc,0xdc,0x3d,0x91,0xa4,0x92,0x41,0x79,0x19,0x8a,0x43,0xd7,0x84,0xf8,0xb2,0x7c,0xb4,0xd9,0xd1,0x34,0x36,0x1c,0xdd,0x8e,0x24,0x25,0xcc,0xd1,0xed,0xa8,0x36,0x3b,0xea,0x44,0x2f,0xcb,0x93,0x99,0x9f,0xe5,0xc5,0xe8,0xc6,0x6b,0x92,0xe1,0xe8,0xc8,0xdc,0x2d,0xad,0x3b,0x0d,0x60,0x8a,0x53,0xa1,0x13,0x74,0xf3,0xdc,0x89,0xfe,0x23,0x87,0xa6,0xe2,0xda,0x76,0x1a,0x10,0x2a,0x4f,0x83,0x73,0xd0,0xcd,0x97,0x5a,0xac,0x6a,0xa9,0x43,0xd5,0x98,0xd3,0x00,0x47,0x8b,0x12,0xad,0xce,0x44,0xa4,0x63,0x19,0xb0,0x90,0x5c,0x00,0xaa,0x8f,0xd4,0x46,0x96,0x25,0x05,0xdd,0xd1,0x8a,0x26,0x14,0xa3,0x47,0x36,0xc1,0x02,0x70,0x41,0x13,0x4a,0x2c,0xdb,0x07,0x2e,0x7a,0xba,0x44,0xe8,0xa8,0xe2,0xc3,0x4a,0x12,0xe0,0x3a,0xe8,0xe6,0xd0,0x94,0x4e,0x06,0x75,0xc1,0xd3,0x21,0xd0,0x11,0xfa,0xfc,0x40,0x37,0xbe,0x79,0xb0,0x9a,0x7b,0x1e,0xd2,0x94,0x62,0xcb,0xb2,0xc2,0x1c,0xb4,0x09,0x68,0x52,0xdb,0x06,0xdd,0xbc,0x25,0x0d,0xa9,0x86,0xa6,0x10,0xf5,0xf9,0x31,0x15,0xbd,0xa8,0x5c,0xcb,0x85,0xd8,0x94,0x3d,0x12,0xc4,0xcd,0xd0,0x63,0x45,0xd3,0x72,0xbb,0xf6,0x2b,0x2f,0x4a,0x53,0xab,0x97,0x0c,0x3d,0x12,0xea,0x55,0xb0,0xde,0x9f,0x9d,0x5a,0x6e,0xd5,0x79,0x60,0xad,0x6b,0xc9,0x73,0x40,0x8f,0xd5,0xe8,0x6d,0xa4,0x43,0x93,0x73,0x3a,0x96,0xc5,0xaf,0xa9,0x40,0xab,0x90,0x26,0x17,0x8d,0x2c,0xc2,0xb1,0xf4,0x94,0x2c,0x00,0xbb,0xed,0xad,0x0a,0x04,0xc4,0x68,0x45,0xd3,0xdb,0x36,0xe3,0x56,0x72,0x91,0xc8,0x8f,0x69,0x98,0xab,0x5e,0xb4,0x52,0xd4,0x55,0xdf,0x7c,0x77,0x66,0x63,0xce,0x85,0x02,0x40,0x73,0x19,0xf2,0xab,0x55,0xd7,0xc3,0x2a,0x8d,0x2b,0x9e,0x18,0x3d,0x9a,0x50,0x7e,0xe9,0x90,0x90,0x0a,0x99,0x55,0xa5,0xa2,0x3e,0xeb,0xdc,0xf3,0x54,0xe8,0xb1,0x73,0xe9,0x7f,0xab,0x19,0x6a,0x90,0x97,0x56,0x45,0x82,0x7c,0xad,0xa7,0xdf,0xbe,0x64,0x52,0x77,0x0c,0x99,0x05,0xa0,0xda,0xf3,0xd1,0x4f,0xf4,0x92,0x1c,0xad,0x1f,0x76,0xe9,0xa1,0x47,0x20,0x15,0x00,0x60,0x25,0x29,0x62,0x55,0x4a,0x48,0xa3,0x77,0xba,0x3b,0xaf,0x25,0x0a,0xf2,0x9d,0x39,0x7a,0xdc,0x49,0x15,0x6e,0x53,0x28,0x90,0x69,0x4e,0x81,0x8c,0x21,0x1c,0x10,0x0a,0x1b,0xf4,0xa8,0x48,0x19,0xcf,0xa2,0x3a,0x31,0xae,0xf6,0xb3,0xcf,0x15,0x04,0xb3,0x03,0xb6,0x1e,0x7a,0xf8,0xa4,0x8e,0x63,0x51,0x4e,0x50,0x28,0x73,0x29,0x40,0x47,0x8b,0x9f,0x58,0x28,0x03,0x00,0x8e,0x4b,0xea,0x44,0x16,0xc5,0x82,0xcf,0x33,0xdc,0x86,0xf6,0xd1,0x83,0x1d,0x45,0x22,0xc7,0x4d,0x48,0x0a,0x05,0x16,0x5d,0x0e,0x2a,0xd1,0x8a,0x54,0x10,0x7b,0xb6,0x59,0x39,0x3c,0x4a,0xd6,0x67,0x6a,0xf5,0x14,0x57,0x65,0xcc,0x72,0xd4,0x55,0x10,0x43,0x7c,0x75,0xc7,0xd3,0xa1,0x00,0x30,0x2b,0x48,0xa9,0x05,0x5a,0xbd,0x46,0xb3,0x30,0xa1,0x45,0x79,0x43,0x1d,0xb4,0x6c,0x06,0xf9,0x99,0x12,0xf4,0xb9,0x90,0x5a,0x57,0x8b,0xaa,0x84,0x64,0xf3,0x2c,0x78,0x8f,0x0c,0x3d,0xf2,0x64,0xde,0xf2,0xfd,0x17,0xb4,0x7a,0xb9,0x96,0x61,0xdd,0x9b,0xb2,0x1d,0x75,0x9b,0xbd,0x47,0x8d,0x4f,0xaa,0x65,0x16,0x1d,0x07,0x9e,0xe6,0x4a,0x7f,0xaa,0x30,0x92,0xe3,0x92,0x6a,0xb1,0x45,0x89,0xe1,0x8b,0xd9,0x2e,0xc2,0xed,0x31,0x8a,0xb7,0x25,0xe5,0x8e,0x16,0x9d,0x07,0x1f,0xe6,0x0b,0x7b,0x3b,0x18,0x81,0xd7,0xa4,0x5e,0x69,0x51,0xd7,0x80,0x04,0x6d,0xf6,0xa4,0xc1,0xd6,0x83,0x34,0x56,0x92,0x06,0xa9,0xf5,0x03,0x20,0x20,0x1d,0xc2,0x1c,0x92,0x58,0x4c,0xad,0xde,0x03,0xe0,0x29,0x07,0x00,0xd5,0x1c,0x72,0x32,0xea,0xf0,0x1e,0x00,0x4f,0x39,0x00,0x28,0x5d,0x43,0xc6,0x8a,0x3a,0xbc,0x07,0xc0,0x93,0x0e,0x00,0x2a,0x98,0x89,0xfd,0x1b,0xcf,0xef,0x01,0x40,0xba,0xdc,0x18,0x44,0x7d,0xa6,0x6e,0xef,0x01,0xf0,0xac,0x03,0x80,0xee,0x10,0xb4,0xa7,0x1e,0xef,0x01,0xf0,0xb4,0x03,0x80,0xae,0xe6,0xb5,0x6f,0x7d,0xaf,0x01,0x7c,0xd2,0xa8,0x32,0x24,0x00,0xfc,0x0e,0x04,0xcd,0x55,0x13,0x2d,0x31,0x23,0x00,0xfc,0x5b,0x61,0xd1,0x00,0xa8,0x0c,0x18,0x00,0x14,0x60,0x40,0x13,0x92,0x4e,0x37,0x8b,0xaa,0xc5,0x9e,0x8c,0x28,0x86,0x90,0xe3,0x27,0x23,0xea,0xb4,0xda,0x74,0x1a,0xa8,0x38,0x1f,0x40,0x3e,0x4b,0xd4,0x84,0x86,0x1d,0x36,0xe5,0x03,0x64,0xf3,0xa7,0xc0,0xbb,0x11,0xfe,0x64,0x40,0xfb,0xe6,0x95,0x45,0x95,0x02,0xe3,0xd9,0xbb,0xa4,0x6d,0x1d,0xd3,0xc2,0x00,0xb4,0xb0,0x28,0x27,0xb0,0x40,0x2b,0xd2,0xa6,0x6e,0x20,0x26,0x72,0x49,0x97,0x04,0xad,0xe8,0x15,0xa5,0x33,0x0f,0xf6,0x94,0x43,0x94,0xb3,0x25,0x4d,0x02,0x8b,0xee,0x05,0x6c,0xe6,0x4d,0x80,0x8d,0x19,0xc4,0x35,0x35,0xe9,0x11,0xcd,0xfe,0x5e,0xd4,0x67,0x3b,0xeb,0x8e,0x67,0x05,0x29,0xbc,0x20,0x2d,0x1c,0xb4,0x69,0xe8,0x25,0xb1,0x19,0x83,0x5e,0x15,0x24,0xb1,0x0b,0x0d,0x79,0x57,0x8a,0x94,0xd4,0xcc,0x16,0x79,0x71,0x7d,0xfc,0xc3,0x94,0xed,0xe0,0xfc,0xfb,0x10,0x8d,0x9c,0xb9,0xca,0xa1,0x6c,0x1d,0x8c,0xe1,0xbb,0xa4,0xda,0xc6,0x80,0x50,0x84,0x3e,0xfb,0x99,0x8e,0x03,0xd3,0x1c,0xe3,0x38,0x21,0x29,0x56,0x98,0x10,0x8d,0xd4,0xa6,0x9a,0x27,0x16,0x9c,0x31,0xfc,0x66,0xd8,0x52,0xf0,0x6e,0xd1,0x59,0x10,0xd1,0x4a,0xa6,0x18,0xc2,0xfc,0x17,0xc3,0x74,0x2c,0x05,0x2b,0xb4,0x2a,0xe9,0x25,0xc5,0x33,0xc4,0xbd,0x97,0x3e,0x1e,0x13,0x90,0x4a,0xbe,0x55,0xb5,0x82,0x53,0xfd,0xf3,0x5d,0xed,0xe1,0x51,0x1f,0x21,0xa9,0xe3,0x59,0x14,0x08,0x24,0x5a,0x6a,0x2f,0x8b,0x19,0x73,0x0c,0xf0,0x86,0xff,0x49,0x5e,0x90,0x32,0xcc,0xa6,0x38,0x10,0x11,0xd7,0x3c,0xc9,0x56,0x18,0xb2,0x0b,0x69,0xe3,0x61,0x00,0x3b,0x91,0x22,0xe9,0xfc,0x59,0xa9,0x5a,0x7d,0x68,0xdd,0x06,0x84,0x11,0x86,0x44,0x4b,0xb1,0x28,0x81,0xbf,0x24,0x25,0x2e,0x56,0x85,0x01,0xba,0xca,0x85,0x63,0x49,0x2a,0x94,0x39,0x86,0xf8,0xc2,0x69,0x22,0x4d,0x4a,0x2a,0x04,0x68,0x75,0xa7,0x17,0x75,0x45,0xab,0x23,0x29,0x70,0x65,0x18,0x92,0xd0,0x4f,0xfb,0x99,0xf6,0x83,0x9e,0x55,0xbb,0x40,0xa2,0x62,0xe8,0x22,0x9e,0xd6,0xdd,0x5f,0x25,0x17,0x2c,0xf0,0xb7,0x34,0xb5,0x25,0xac,0xda,0x04,0x68,0x6c,0x97,0x7e,0xcc,0x65,0x1f,0xe9,0x13,0xa0,0x7f,0x37,0x70,0x83,0x09,0x79,0xb2,0x22,0x9e,0x6c,0xdb,0x5b,0x61,0xd0,0xfa,0x38,0x22,0x5f,0xa4,0xa2,0x69,0x25,0x98,0xfd,0xb6,0x9c,0x66,0x81,0x8e,0x45,0x40,0xed,0x60,0x50,0x9e,0x8e,0x3a,0x32,0x72,0x6a,0x0d,0xcf,0x03,0x56,0xf4,0xb2,0x56,0x1a,0x1a,0x64,0x5c,0xd8,0xc8,0x63,0xbe,0x70,0x87,0x41,0x6c,0x41,0xd3,0xa9,0xd1,0xee,0x4c,0x2f,0xeb,0x0c,0xd5,0x77,0x03,0xc2,0x48,0xea,0xa0,0x5f,0xfe,0xd6,0x80,0x73,0x9e,0x70,0x53,0x64,0x51,0x42,0xe0,0x0f,0x5c,0xf1,0x98,0xbf,0xac,0x31,0x2c,0xa1,0x2e,0x09,0x86,0xb1,0x2b,0x4d,0xc4,0xb1,0xac,0x75,0x74,0xcf,0xe9,0x57,0xa5,0xf1,0xf1,0x67,0x2b,0xea,0xb6,0x62,0x18,0xf6,0x51,0xd3,0x14,0x36,0x66,0xdc,0x4e,0xd4,0x6b,0x05,0x85,0x1d,0x32,0x2e,0x1c,0xc3,0xf8,0x91,0xfa,0x14,0x1c,0xc3,0x58,0xe5,0xd2,0xe3,0x16,0xf6,0x2d,0x01,0xba,0x47,0xfd,0x8d,0x1e,0x96,0x3a,0x10,0xb0,0xdb,0x50,0xbf,0xcd,0x0e,0x02,0xbc,0x82,0x1e,0xd6,0xc0,0xa2,0x76,0x31,0xbf,0x78,0x8a,0xde,0x7b,0x6e,0xc5,0x20,0x60,0xef,0xd2,0x10,0x77,0x0f,0x11,0xc1,0x96,0x1e,0x13,0xc3,0xba,0x28,0xc0,0x37,0x07,0x28,0xb9,0x1f,0x14,0x37,0x10,0xf1,0x89,0x44,0x9c,0x20,0x62,0x7d,0xa5,0x87,0x38,0xb0,0x2a,0x1f,0xf0,0xa7,0x52,0xc5,0xb8,0x3f,0x47,0x10,0xc1,0x6f,0x24,0xe6,0xc8,0x21,0xc2,0xbb,0x3d,0x76,0x2e,0x62,0x51,0xbf,0xa8,0xe1,0x0a,0x1d,0x6c,0x43,0x63,0x2d,0x13,0x08,0xd9,0x89,0xff,0x8a,0x8d,0x03,0x21,0xd1,0x99,0xc6,0x8a,0x0c,0xb8,0x9b,0x3e,0x8b,0x64,0xea,0x29,0xe0,0xca,0x21,0xe4,0xb3,0x2b,0xf7,0x67,0x8a,0x09,0x36,0x34,0xca,0x0d,0x76,0xbe,0x01,0x88,0x52,0x74,0x28,0x68,0x8c,0xac,0x81,0x10,0x76,0x27,0x39,0xf1,0x1a,0x42,0x58,0x10,0xd2,0x08,0x1e,0x2c,0x0c,0x03,0x7e,0xb7,0xc3,0x74,0xf1,0xe0,0xd8,0x83,0x18,0x2f,0x25,0x59,0xf5,0x0e,0x62,0x58,0xb5,0x1d,0x13,0x03,0xb0,0xaa,0x6f,0xf8,0x9f,0xae,0x93,0x15,0x68,0x8e,0x77,0xe8,0x30,0x49,0x4e,0x9f,0xfb,0x19,0x82,0xd8,0x21,0x94,0x5f,0x01,0x5a,0x54,0x1d,0xea,0x6f,0x5b,0x86,0x49,0xa2,0x41,0x17,0x4f,0xf9,0xf5,0x9e,0x98,0x43,0x10,0x0b,0x6a,0xd9,0xf6,0x15,0x36,0xdd,0x0b,0x17,0x4a,0x0d,0x05,0xf8,0x86,0x44,0x2d,0xaf,0x39,0x44,0xed,0xea,0x09,0x0f,0x17,0xba,0xf9,0x37,0x12,0xe4,0x7e,0xc0,0xda,0x25,0xe0,0x37,0x67,0x74,0xc9,0x6b,0x12,0x72,0x3e,0xac,0x21,0x2c,0xa1,0x47,0xac,0x18,0x84,0x35,0x8b,0xad,0xf0,0xf7,0x6f,0x65,0x18,0xf8,0xa7,0xe8,0xa1,0x11,0xe0,0xde,0x1d,0x88,0xcb,0x8f,0xf4,0x98,0xd4,0x83,0x38,0xb6,0x8f,0x05,0x8a,0x15,0x98,0x52,0xa4,0x72,0x36,0x25,0x3a,0xf1,0x8c,0xfa,0xdd,0xf6,0x0c,0x1d,0x14,0xa5,0xf2,0xba,0x09,0x64,0xf0,0xcf,0xc5,0xe8,0x7c,0xd5,0xfc,0x25,0x7b,0x46,0xb7,0x88,0xc6,0x1d,0xb2,0xb8,0xf1,0x67,0x0e,0x19,0x3c,0xa3,0x29,0x14,0x1e,0xa4,0xf0,0xfd,0xbd,0xeb,0x43,0x6c,0x3e,0x9b,0x53,0xa5,0x76,0x46,0x25,0x7a,0xb0,0x64,0x43,0x2d,0xd2,0x6b,0xc4,0x20,0xc7,0x0f,0x69,0x1a,0x6e,0x02,0x59,0x4e,0x92,0xd5,0xf4,0xaf,0x5b,0xc0,0x80,0xf7,0x04,0x30,0x7c,0x13,0x67,0xb7,0x28,0x96,0xf4,0x8b,0x9b,0x66,0x87,0x0f,0x06,0x59,0x3c,0xa3,0xe9,0x14,0x1e,0xe4,0xf1,0x8f,0x60,0x91,0x15,0x69,0xbd,0xdd,0x6e,0xce,0xc5,0xfd,0x10,0x31,0x33,0x3a,0xd5,0x99,0x20,0x64,0x18,0x92,0x3b,0x7e,0x90,0x04,0x7e,0xe4,0x70,0x8c,0xe2,0x87,0x34,0x25,0xf7,0x80,0xa9,0x58,0x1d,0x03,0xf8,0x69,0x01,0xb5,0xf2,0x98,0xa6,0x96,0x3a,0x50,0x8a,0x59,0x10,0x04,0xfc,0xc3,0x0e,0x2a,0x25,0x4b,0x52,0xe0,0xc2,0x21,0xcb,0xc4,0x56,0x85,0x66,0x48,0x19,0x94,0x71,0x52,0x52,0x63,0x9b,0x60,0x0a,0xf3,0xf7,0x4d,0x30,0xc1,0x02,0x8a,0xf0,0x15,0x75,0x98,0x76,0x31,0xf8,0x7e,0x01,0x3c,0xe8,0x03,0x4a,0x04,0x21,0x29,0x95,0xe5,0x50,0xe1,0x42,0xd6,0x09,0x39,0x64,0x4c,0x96,0xa3,0xa5,0x26,0xff,0xd8,0xe8,0x62,0x74,0x86,0x2a,0x19,0x26,0xe6,0xc5,0xa4,0x43,0x18,0x40,0x82,0x71,0xbd,0x2a,0xcd,0x11,0x03,0x78,0x96,0x97,0xff,0xdf,0xca,0x08,0xe2,0x4c,0xeb,0x55,0x69,0x90,0x2b,0xa6,0xc3,0x4f,0x2e,0xf5,0x31,0x78,0x08,0x34,0x2f,0xd9,0x23,0x4c,0xc8,0x0a,0x13,0xe1,0x0b,0x97,0x34,0x2b,0x22,0x4c,0x23,0xaf,0xc9,0x5e,0xd7,0x89,0xbe,0xfe,0x25,0x89,0x30,0x72,0x08,0x78,0xf6,0x3e,0xff,0x1d,0xa5,0x79,0x64,0xe5,0x27,0x97,0x66,0x72,0x4e,0x18,0x1e,0xf4,0xb1,0x24,0xbb,0x95,0x1c,0x0f,0xd9,0x65,0x34,0xa7,0x50,0x30,0x3b,0xcd,0xe2,0x34,0x70,0x89,0xc4,0x4b,0x79,0xd1,0x91,0xe6,0xb6,0xbc,0x7a,0x18,0x8b,0x5b,0x91,0x04,0x3a,0xe8,0xc4,0x30,0x4a,0xbe,0x30,0xe4,0xf5,0x59,0x06,0xcc,0x84,0x23,0xeb,0xe7,0xb5,0x89,0x20,0xcf,0x37,0xe9,0xe9,0x71,0x57,0x0e,0x64,0x35,0x26,0x7d,0x80,0xb9,0xc5,0x1e,0xa4,0x38,0x57,0xe3,0x1e,0x9e,0xcd,0xc9,0x81,0x04,0x6e,0x4d,0x02,0xa0,0xa0,0x6c,0xf7,0xcc,0xdf,0xfe,0x77,0xe1,0x49,0x34,0x75,0xcd,0xbb,0xd8,0x19,0xfc,0xed,0x75,0xf4,0x19,0x06,0xe5,0xc1,0xdd,0xd0,0x6f,0xff,0x3b,0x37,0x4e,0x3c,0x91,0xcc,0xf1,0xb7,0x36,0xcb,0x8b,0xbf,0x46,0xb7,0xdc,0x3f,0x3d,0xc5,0xa9,0x79,0x18,0x57,0x11,0x47,0x07,0xef,0x30,0xff,0xc6,0xc5,0x68,0xc5,0x27,0xbf,0xc1,0xbf,0x98,0xe7,0x2f,0x6e,0xcf,0x75,0x62,0xb2,0x89,0x4f,0x49,0xe4,0xad,0xf1,0x1b,0x77,0x82,0x4f,0x47,0xdb,0xc3,0x3e,0x62,0xdc,0x34,0x5e,0x2d,0x0e,0x41,0xb0,0x0f,0x92,0x6a,0x71,0xcd,0xca,0xe7,0xfa,0xea,0xff,0xe2,0x6e,0xeb,0x73,0x59,0x94,0x65,0xfd,0xc4,0x9f,0xe1,0xed,0xed,0xed,0xed,0x4b,0x7b,0x70,0x48,0x00,0x00,0x00,0x00,0x20,0xe8,0xff,0x6b,0x5f,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x01,0x5d,0x8d,0xc7,0xed,0xe2,0x96,0xee,0xdc,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82}; + +static const unsigned char FILE_5[] = {0x7b,0x0d,0x0a,0x20,0x20,0x22,0x73,0x68,0x6f,0x72,0x74,0x5f,0x6e,0x61,0x6d,0x65,0x22,0x3a,0x20,0x22,0x52,0x65,0x61,0x63,0x74,0x20,0x41,0x70,0x70,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x22,0x6e,0x61,0x6d,0x65,0x22,0x3a,0x20,0x22,0x43,0x72,0x65,0x61,0x74,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x41,0x70,0x70,0x20,0x53,0x61,0x6d,0x70,0x6c,0x65,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x22,0x69,0x63,0x6f,0x6e,0x73,0x22,0x3a,0x20,0x5b,0x0d,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x73,0x72,0x63,0x22,0x3a,0x20,0x22,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x73,0x69,0x7a,0x65,0x73,0x22,0x3a,0x20,0x22,0x36,0x34,0x78,0x36,0x34,0x20,0x33,0x32,0x78,0x33,0x32,0x20,0x32,0x34,0x78,0x32,0x34,0x20,0x31,0x36,0x78,0x31,0x36,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x74,0x79,0x70,0x65,0x22,0x3a,0x20,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x22,0x0d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x73,0x72,0x63,0x22,0x3a,0x20,0x22,0x6c,0x6f,0x67,0x6f,0x31,0x39,0x32,0x2e,0x70,0x6e,0x67,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x74,0x79,0x70,0x65,0x22,0x3a,0x20,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x73,0x69,0x7a,0x65,0x73,0x22,0x3a,0x20,0x22,0x31,0x39,0x32,0x78,0x31,0x39,0x32,0x22,0x0d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x73,0x72,0x63,0x22,0x3a,0x20,0x22,0x6c,0x6f,0x67,0x6f,0x35,0x31,0x32,0x2e,0x70,0x6e,0x67,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x74,0x79,0x70,0x65,0x22,0x3a,0x20,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x73,0x69,0x7a,0x65,0x73,0x22,0x3a,0x20,0x22,0x35,0x31,0x32,0x78,0x35,0x31,0x32,0x22,0x0d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0d,0x0a,0x20,0x20,0x5d,0x2c,0x0d,0x0a,0x20,0x20,0x22,0x73,0x74,0x61,0x72,0x74,0x5f,0x75,0x72,0x6c,0x22,0x3a,0x20,0x22,0x2e,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x22,0x3a,0x20,0x22,0x73,0x74,0x61,0x6e,0x64,0x61,0x6c,0x6f,0x6e,0x65,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x22,0x74,0x68,0x65,0x6d,0x65,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x22,0x3a,0x20,0x22,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x22,0x2c,0x0d,0x0a,0x20,0x20,0x22,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x22,0x3a,0x20,0x22,0x23,0x66,0x66,0x66,0x66,0x66,0x66,0x22,0x0d,0x0a,0x7d,0x0d,0x0a}; + +static const unsigned char FILE_6[] = {0x23,0x20,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x72,0x6f,0x62,0x6f,0x74,0x73,0x74,0x78,0x74,0x2e,0x6f,0x72,0x67,0x2f,0x72,0x6f,0x62,0x6f,0x74,0x73,0x74,0x78,0x74,0x2e,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x55,0x73,0x65,0x72,0x2d,0x61,0x67,0x65,0x6e,0x74,0x3a,0x20,0x2a,0x0d,0x0a,0x44,0x69,0x73,0x61,0x6c,0x6c,0x6f,0x77,0x3a,0x0d,0x0a}; + +static const unsigned char FILE_7[] = {0x62,0x6f,0x64,0x79,0x7b,0x2d,0x77,0x65,0x62,0x6b,0x69,0x74,0x2d,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x69,0x6e,0x67,0x3a,0x61,0x6e,0x74,0x69,0x61,0x6c,0x69,0x61,0x73,0x65,0x64,0x3b,0x2d,0x6d,0x6f,0x7a,0x2d,0x6f,0x73,0x78,0x2d,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x69,0x6e,0x67,0x3a,0x67,0x72,0x61,0x79,0x73,0x63,0x61,0x6c,0x65,0x3b,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x32,0x61,0x32,0x63,0x32,0x65,0x3b,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x35,0x65,0x64,0x32,0x66,0x32,0x3b,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x2d,0x61,0x70,0x70,0x6c,0x65,0x2d,0x73,0x79,0x73,0x74,0x65,0x6d,0x2c,0x42,0x6c,0x69,0x6e,0x6b,0x4d,0x61,0x63,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6f,0x6e,0x74,0x2c,0x53,0x65,0x67,0x6f,0x65,0x20,0x55,0x49,0x2c,0x52,0x6f,0x62,0x6f,0x74,0x6f,0x2c,0x4f,0x78,0x79,0x67,0x65,0x6e,0x2c,0x55,0x62,0x75,0x6e,0x74,0x75,0x2c,0x43,0x61,0x6e,0x74,0x61,0x72,0x65,0x6c,0x6c,0x2c,0x46,0x69,0x72,0x61,0x20,0x53,0x61,0x6e,0x73,0x2c,0x44,0x72,0x6f,0x69,0x64,0x20,0x53,0x61,0x6e,0x73,0x2c,0x48,0x65,0x6c,0x76,0x65,0x74,0x69,0x63,0x61,0x20,0x4e,0x65,0x75,0x65,0x2c,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x30,0x7d,0x63,0x6f,0x64,0x65,0x7b,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x73,0x6f,0x75,0x72,0x63,0x65,0x2d,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x6f,0x2c,0x4d,0x65,0x6e,0x6c,0x6f,0x2c,0x4d,0x6f,0x6e,0x61,0x63,0x6f,0x2c,0x43,0x6f,0x6e,0x73,0x6f,0x6c,0x61,0x73,0x2c,0x43,0x6f,0x75,0x72,0x69,0x65,0x72,0x20,0x4e,0x65,0x77,0x2c,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x7d,0x0a,0x2f,0x2a,0x23,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x4d,0x61,0x70,0x70,0x69,0x6e,0x67,0x55,0x52,0x4c,0x3d,0x6d,0x61,0x69,0x6e,0x2e,0x39,0x66,0x63,0x62,0x32,0x64,0x36,0x38,0x2e,0x63,0x73,0x73,0x2e,0x6d,0x61,0x70,0x2a,0x2f}; + +static const unsigned char FILE_8[] = {0x7b,0x22,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x22,0x3a,0x33,0x2c,0x22,0x66,0x69,0x6c,0x65,0x22,0x3a,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x63,0x73,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x39,0x66,0x63,0x62,0x32,0x64,0x36,0x38,0x2e,0x63,0x73,0x73,0x22,0x2c,0x22,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0x73,0x22,0x3a,0x22,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x4b,0x45,0x2c,0x6b,0x43,0x41,0x41,0x6d,0x43,0x2c,0x43,0x41,0x43,0x6e,0x43,0x2c,0x69,0x43,0x41,0x41,0x6b,0x43,0x2c,0x43,0x41,0x47,0x6c,0x43,0x2c,0x77,0x42,0x41,0x41,0x79,0x42,0x2c,0x43,0x41,0x44,0x7a,0x42,0x2c,0x61,0x41,0x41,0x63,0x2c,0x43,0x41,0x4e,0x64,0x2c,0x6d,0x49,0x41,0x45,0x59,0x2c,0x43,0x41,0x48,0x5a,0x2c,0x51,0x41,0x53,0x46,0x2c,0x43,0x41,0x45,0x41,0x2c,0x4b,0x41,0x43,0x45,0x2c,0x75,0x45,0x41,0x45,0x46,0x22,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x22,0x3a,0x5b,0x22,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x5d,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x3a,0x5b,0x22,0x62,0x6f,0x64,0x79,0x20,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x2d,0x61,0x70,0x70,0x6c,0x65,0x2d,0x73,0x79,0x73,0x74,0x65,0x6d,0x2c,0x20,0x42,0x6c,0x69,0x6e,0x6b,0x4d,0x61,0x63,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6f,0x6e,0x74,0x2c,0x20,0x27,0x53,0x65,0x67,0x6f,0x65,0x20,0x55,0x49,0x27,0x2c,0x20,0x27,0x52,0x6f,0x62,0x6f,0x74,0x6f,0x27,0x2c,0x20,0x27,0x4f,0x78,0x79,0x67,0x65,0x6e,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x27,0x55,0x62,0x75,0x6e,0x74,0x75,0x27,0x2c,0x20,0x27,0x43,0x61,0x6e,0x74,0x61,0x72,0x65,0x6c,0x6c,0x27,0x2c,0x20,0x27,0x46,0x69,0x72,0x61,0x20,0x53,0x61,0x6e,0x73,0x27,0x2c,0x20,0x27,0x44,0x72,0x6f,0x69,0x64,0x20,0x53,0x61,0x6e,0x73,0x27,0x2c,0x20,0x27,0x48,0x65,0x6c,0x76,0x65,0x74,0x69,0x63,0x61,0x20,0x4e,0x65,0x75,0x65,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x2d,0x77,0x65,0x62,0x6b,0x69,0x74,0x2d,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x69,0x6e,0x67,0x3a,0x20,0x61,0x6e,0x74,0x69,0x61,0x6c,0x69,0x61,0x73,0x65,0x64,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x2d,0x6d,0x6f,0x7a,0x2d,0x6f,0x73,0x78,0x2d,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x69,0x6e,0x67,0x3a,0x20,0x67,0x72,0x61,0x79,0x73,0x63,0x61,0x6c,0x65,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x35,0x65,0x64,0x32,0x66,0x32,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x32,0x61,0x32,0x63,0x32,0x65,0x3b,0x5c,0x72,0x5c,0x6e,0x7d,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x63,0x6f,0x64,0x65,0x20,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x2d,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x6f,0x2c,0x20,0x4d,0x65,0x6e,0x6c,0x6f,0x2c,0x20,0x4d,0x6f,0x6e,0x61,0x63,0x6f,0x2c,0x20,0x43,0x6f,0x6e,0x73,0x6f,0x6c,0x61,0x73,0x2c,0x20,0x27,0x43,0x6f,0x75,0x72,0x69,0x65,0x72,0x20,0x4e,0x65,0x77,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x5c,0x72,0x5c,0x6e,0x7d,0x5c,0x72,0x5c,0x6e,0x22,0x5d,0x2c,0x22,0x6e,0x61,0x6d,0x65,0x73,0x22,0x3a,0x5b,0x5d,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x6f,0x6f,0x74,0x22,0x3a,0x22,0x22,0x7d}; + +static const unsigned char FILE_9[] = {0x22,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x22,0x3b,0x28,0x73,0x65,0x6c,0x66,0x2e,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x43,0x68,0x75,0x6e,0x6b,0x77,0x65,0x62,0x75,0x69,0x5f,0x72,0x65,0x61,0x63,0x74,0x5f,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3d,0x73,0x65,0x6c,0x66,0x2e,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x43,0x68,0x75,0x6e,0x6b,0x77,0x65,0x62,0x75,0x69,0x5f,0x72,0x65,0x61,0x63,0x74,0x5f,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x5b,0x5b,0x34,0x35,0x33,0x5d,0x2c,0x7b,0x34,0x35,0x33,0x3a,0x28,0x65,0x2c,0x74,0x2c,0x6e,0x29,0x3d,0x3e,0x7b,0x6e,0x2e,0x72,0x28,0x74,0x29,0x2c,0x6e,0x2e,0x64,0x28,0x74,0x2c,0x7b,0x67,0x65,0x74,0x43,0x4c,0x53,0x3a,0x28,0x29,0x3d,0x3e,0x79,0x2c,0x67,0x65,0x74,0x46,0x43,0x50,0x3a,0x28,0x29,0x3d,0x3e,0x67,0x2c,0x67,0x65,0x74,0x46,0x49,0x44,0x3a,0x28,0x29,0x3d,0x3e,0x43,0x2c,0x67,0x65,0x74,0x4c,0x43,0x50,0x3a,0x28,0x29,0x3d,0x3e,0x50,0x2c,0x67,0x65,0x74,0x54,0x54,0x46,0x42,0x3a,0x28,0x29,0x3d,0x3e,0x44,0x7d,0x29,0x3b,0x76,0x61,0x72,0x20,0x69,0x2c,0x72,0x2c,0x61,0x2c,0x6f,0x2c,0x75,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x6e,0x61,0x6d,0x65,0x3a,0x65,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x74,0x3f,0x2d,0x31,0x3a,0x74,0x2c,0x64,0x65,0x6c,0x74,0x61,0x3a,0x30,0x2c,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x3a,0x5b,0x5d,0x2c,0x69,0x64,0x3a,0x22,0x76,0x32,0x2d,0x22,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x44,0x61,0x74,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2c,0x22,0x2d,0x22,0x29,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x4d,0x61,0x74,0x68,0x2e,0x66,0x6c,0x6f,0x6f,0x72,0x28,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x2a,0x4d,0x61,0x74,0x68,0x2e,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x28,0x29,0x29,0x2b,0x31,0x65,0x31,0x32,0x29,0x7d,0x7d,0x2c,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x50,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x4f,0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x2e,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x45,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x73,0x2e,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x73,0x28,0x65,0x29,0x29,0x7b,0x69,0x66,0x28,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x21,0x28,0x22,0x50,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x45,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x69,0x6e,0x67,0x22,0x69,0x6e,0x20,0x73,0x65,0x6c,0x66,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x6e,0x65,0x77,0x20,0x50,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x4f,0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x74,0x29,0x7d,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x6f,0x62,0x73,0x65,0x72,0x76,0x65,0x28,0x7b,0x74,0x79,0x70,0x65,0x3a,0x65,0x2c,0x62,0x75,0x66,0x66,0x65,0x72,0x65,0x64,0x3a,0x21,0x30,0x7d,0x29,0x2c,0x6e,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x7d,0x7d,0x2c,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x28,0x69,0x29,0x7b,0x22,0x70,0x61,0x67,0x65,0x68,0x69,0x64,0x65,0x22,0x21,0x3d,0x3d,0x69,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x21,0x3d,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x65,0x28,0x69,0x29,0x2c,0x74,0x26,0x26,0x28,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x2c,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x70,0x61,0x67,0x65,0x68,0x69,0x64,0x65,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x29,0x29,0x7d,0x3b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x2c,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x70,0x61,0x67,0x65,0x68,0x69,0x64,0x65,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x7d,0x2c,0x73,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x70,0x61,0x67,0x65,0x73,0x68,0x6f,0x77,0x22,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x74,0x29,0x7b,0x74,0x2e,0x70,0x65,0x72,0x73,0x69,0x73,0x74,0x65,0x64,0x26,0x26,0x65,0x28,0x74,0x29,0x7d,0x29,0x2c,0x21,0x30,0x29,0x7d,0x2c,0x6d,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x72,0x29,0x7b,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3e,0x3d,0x30,0x26,0x26,0x28,0x72,0x7c,0x7c,0x6e,0x29,0x26,0x26,0x28,0x74,0x2e,0x64,0x65,0x6c,0x74,0x61,0x3d,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2d,0x28,0x69,0x7c,0x7c,0x30,0x29,0x2c,0x28,0x74,0x2e,0x64,0x65,0x6c,0x74,0x61,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x69,0x29,0x26,0x26,0x28,0x69,0x3d,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x65,0x28,0x74,0x29,0x29,0x29,0x7d,0x7d,0x2c,0x76,0x3d,0x2d,0x31,0x2c,0x70,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x3d,0x3d,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x53,0x74,0x61,0x74,0x65,0x3f,0x30,0x3a,0x31,0x2f,0x30,0x7d,0x2c,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x66,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3b,0x76,0x3d,0x74,0x7d,0x29,0x2c,0x21,0x30,0x29,0x7d,0x2c,0x6c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x3c,0x30,0x26,0x26,0x28,0x76,0x3d,0x70,0x28,0x29,0x2c,0x64,0x28,0x29,0x2c,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x3d,0x70,0x28,0x29,0x2c,0x64,0x28,0x29,0x7d,0x29,0x2c,0x30,0x29,0x7d,0x29,0x29,0x29,0x2c,0x7b,0x67,0x65,0x74,0x20,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x7d,0x7d,0x7d,0x2c,0x67,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x69,0x3d,0x6c,0x28,0x29,0x2c,0x72,0x3d,0x75,0x28,0x22,0x46,0x43,0x50,0x22,0x29,0x2c,0x61,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x66,0x75,0x6c,0x2d,0x70,0x61,0x69,0x6e,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x26,0x26,0x28,0x66,0x26,0x26,0x66,0x2e,0x64,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x28,0x29,0x2c,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x69,0x2e,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x26,0x26,0x28,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2c,0x72,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x2c,0x6e,0x28,0x21,0x30,0x29,0x29,0x29,0x7d,0x2c,0x6f,0x3d,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x26,0x26,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x4e,0x61,0x6d,0x65,0x26,0x26,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x4e,0x61,0x6d,0x65,0x28,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x66,0x75,0x6c,0x2d,0x70,0x61,0x69,0x6e,0x74,0x22,0x29,0x5b,0x30,0x5d,0x2c,0x66,0x3d,0x6f,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x63,0x28,0x22,0x70,0x61,0x69,0x6e,0x74,0x22,0x2c,0x61,0x29,0x3b,0x28,0x6f,0x7c,0x7c,0x66,0x29,0x26,0x26,0x28,0x6e,0x3d,0x6d,0x28,0x65,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x6f,0x26,0x26,0x61,0x28,0x6f,0x29,0x2c,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x69,0x29,0x7b,0x72,0x3d,0x75,0x28,0x22,0x46,0x43,0x50,0x22,0x29,0x2c,0x6e,0x3d,0x6d,0x28,0x65,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x69,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2c,0x6e,0x28,0x21,0x30,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x29,0x7d,0x2c,0x68,0x3d,0x21,0x31,0x2c,0x54,0x3d,0x2d,0x31,0x2c,0x79,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x68,0x7c,0x7c,0x28,0x67,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x54,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7d,0x29,0x29,0x2c,0x68,0x3d,0x21,0x30,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x69,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x74,0x29,0x7b,0x54,0x3e,0x2d,0x31,0x26,0x26,0x65,0x28,0x74,0x29,0x7d,0x2c,0x72,0x3d,0x75,0x28,0x22,0x43,0x4c,0x53,0x22,0x2c,0x30,0x29,0x2c,0x61,0x3d,0x30,0x2c,0x6f,0x3d,0x5b,0x5d,0x2c,0x76,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x65,0x2e,0x68,0x61,0x64,0x52,0x65,0x63,0x65,0x6e,0x74,0x49,0x6e,0x70,0x75,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6f,0x5b,0x30,0x5d,0x2c,0x69,0x3d,0x6f,0x5b,0x6f,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x5d,0x3b,0x61,0x26,0x26,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x69,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x31,0x65,0x33,0x26,0x26,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x74,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x35,0x65,0x33,0x3f,0x28,0x61,0x2b,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6f,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x29,0x3a,0x28,0x61,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6f,0x3d,0x5b,0x65,0x5d,0x29,0x2c,0x61,0x3e,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x28,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x61,0x2c,0x72,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x3d,0x6f,0x2c,0x6e,0x28,0x29,0x29,0x7d,0x7d,0x2c,0x70,0x3d,0x63,0x28,0x22,0x6c,0x61,0x79,0x6f,0x75,0x74,0x2d,0x73,0x68,0x69,0x66,0x74,0x22,0x2c,0x76,0x29,0x3b,0x70,0x26,0x26,0x28,0x6e,0x3d,0x6d,0x28,0x69,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x66,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x70,0x2e,0x74,0x61,0x6b,0x65,0x52,0x65,0x63,0x6f,0x72,0x64,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x76,0x29,0x2c,0x6e,0x28,0x21,0x30,0x29,0x7d,0x29,0x29,0x2c,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x61,0x3d,0x30,0x2c,0x54,0x3d,0x2d,0x31,0x2c,0x72,0x3d,0x75,0x28,0x22,0x43,0x4c,0x53,0x22,0x2c,0x30,0x29,0x2c,0x6e,0x3d,0x6d,0x28,0x69,0x2c,0x72,0x2c,0x74,0x29,0x7d,0x29,0x29,0x29,0x7d,0x2c,0x45,0x3d,0x7b,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x3a,0x21,0x30,0x2c,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x3a,0x21,0x30,0x7d,0x2c,0x77,0x3d,0x6e,0x65,0x77,0x20,0x44,0x61,0x74,0x65,0x2c,0x4c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x69,0x7c,0x7c,0x28,0x69,0x3d,0x74,0x2c,0x72,0x3d,0x65,0x2c,0x61,0x3d,0x6e,0x65,0x77,0x20,0x44,0x61,0x74,0x65,0x2c,0x46,0x28,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x29,0x2c,0x53,0x28,0x29,0x29,0x7d,0x2c,0x53,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x69,0x66,0x28,0x72,0x3e,0x3d,0x30,0x26,0x26,0x72,0x3c,0x61,0x2d,0x77,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x7b,0x65,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x3a,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x6e,0x61,0x6d,0x65,0x3a,0x69,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x3a,0x69,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2c,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x3a,0x69,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x2c,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x69,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2c,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x3a,0x69,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2b,0x72,0x7d,0x3b,0x6f,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x74,0x29,0x7b,0x74,0x28,0x65,0x29,0x7d,0x29,0x29,0x2c,0x6f,0x3d,0x5b,0x5d,0x7d,0x7d,0x2c,0x62,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x28,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3e,0x31,0x65,0x31,0x32,0x3f,0x6e,0x65,0x77,0x20,0x44,0x61,0x74,0x65,0x3a,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x29,0x2d,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3b,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x22,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x4c,0x28,0x65,0x2c,0x74,0x29,0x2c,0x72,0x28,0x29,0x7d,0x2c,0x69,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x28,0x29,0x7d,0x2c,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x22,0x2c,0x6e,0x2c,0x45,0x29,0x2c,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x2c,0x69,0x2c,0x45,0x29,0x7d,0x3b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x22,0x2c,0x6e,0x2c,0x45,0x29,0x2c,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x2c,0x69,0x2c,0x45,0x29,0x7d,0x28,0x74,0x2c,0x65,0x29,0x3a,0x4c,0x28,0x74,0x2c,0x65,0x29,0x7d,0x7d,0x2c,0x46,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x5b,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x2c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x2c,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x74,0x2c,0x62,0x2c,0x45,0x29,0x7d,0x29,0x29,0x7d,0x2c,0x43,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x61,0x3d,0x6c,0x28,0x29,0x2c,0x76,0x3d,0x75,0x28,0x22,0x46,0x49,0x44,0x22,0x29,0x2c,0x70,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x26,0x26,0x28,0x76,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x65,0x2e,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x2d,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2c,0x76,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x2c,0x6e,0x28,0x21,0x30,0x29,0x29,0x7d,0x2c,0x64,0x3d,0x63,0x28,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x70,0x29,0x3b,0x6e,0x3d,0x6d,0x28,0x65,0x2c,0x76,0x2c,0x74,0x29,0x2c,0x64,0x26,0x26,0x66,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x64,0x2e,0x74,0x61,0x6b,0x65,0x52,0x65,0x63,0x6f,0x72,0x64,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x70,0x29,0x2c,0x64,0x2e,0x64,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x28,0x29,0x7d,0x29,0x2c,0x21,0x30,0x29,0x2c,0x64,0x26,0x26,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3b,0x76,0x3d,0x75,0x28,0x22,0x46,0x49,0x44,0x22,0x29,0x2c,0x6e,0x3d,0x6d,0x28,0x65,0x2c,0x76,0x2c,0x74,0x29,0x2c,0x6f,0x3d,0x5b,0x5d,0x2c,0x72,0x3d,0x2d,0x31,0x2c,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x46,0x28,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x29,0x2c,0x61,0x3d,0x70,0x2c,0x6f,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x2c,0x53,0x28,0x29,0x7d,0x29,0x29,0x7d,0x2c,0x6b,0x3d,0x7b,0x7d,0x2c,0x50,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x69,0x3d,0x6c,0x28,0x29,0x2c,0x72,0x3d,0x75,0x28,0x22,0x4c,0x43,0x50,0x22,0x29,0x2c,0x61,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3b,0x74,0x3c,0x69,0x2e,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x26,0x26,0x28,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x74,0x2c,0x72,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x2c,0x6e,0x28,0x29,0x29,0x7d,0x2c,0x6f,0x3d,0x63,0x28,0x22,0x6c,0x61,0x72,0x67,0x65,0x73,0x74,0x2d,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x66,0x75,0x6c,0x2d,0x70,0x61,0x69,0x6e,0x74,0x22,0x2c,0x61,0x29,0x3b,0x69,0x66,0x28,0x6f,0x29,0x7b,0x6e,0x3d,0x6d,0x28,0x65,0x2c,0x72,0x2c,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x76,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6b,0x5b,0x72,0x2e,0x69,0x64,0x5d,0x7c,0x7c,0x28,0x6f,0x2e,0x74,0x61,0x6b,0x65,0x52,0x65,0x63,0x6f,0x72,0x64,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x61,0x29,0x2c,0x6f,0x2e,0x64,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x28,0x29,0x2c,0x6b,0x5b,0x72,0x2e,0x69,0x64,0x5d,0x3d,0x21,0x30,0x2c,0x6e,0x28,0x21,0x30,0x29,0x29,0x7d,0x3b,0x5b,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x2c,0x22,0x63,0x6c,0x69,0x63,0x6b,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x65,0x2c,0x76,0x2c,0x7b,0x6f,0x6e,0x63,0x65,0x3a,0x21,0x30,0x2c,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x3a,0x21,0x30,0x7d,0x29,0x7d,0x29,0x29,0x2c,0x66,0x28,0x76,0x2c,0x21,0x30,0x29,0x2c,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x69,0x29,0x7b,0x72,0x3d,0x75,0x28,0x22,0x4c,0x43,0x50,0x22,0x29,0x2c,0x6e,0x3d,0x6d,0x28,0x65,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x69,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2c,0x6b,0x5b,0x72,0x2e,0x69,0x64,0x5d,0x3d,0x21,0x30,0x2c,0x6e,0x28,0x21,0x30,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x7d,0x7d,0x2c,0x44,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x2c,0x6e,0x3d,0x75,0x28,0x22,0x54,0x54,0x46,0x42,0x22,0x29,0x3b,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x54,0x79,0x70,0x65,0x28,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x22,0x29,0x5b,0x30,0x5d,0x7c,0x7c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x74,0x69,0x6d,0x69,0x6e,0x67,0x2c,0x74,0x3d,0x7b,0x65,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x3a,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x30,0x7d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x20,0x69,0x6e,0x20,0x65,0x29,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x22,0x74,0x6f,0x4a,0x53,0x4f,0x4e,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x74,0x5b,0x6e,0x5d,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x61,0x78,0x28,0x65,0x5b,0x6e,0x5d,0x2d,0x65,0x2e,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x2c,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x7d,0x28,0x29,0x3b,0x69,0x66,0x28,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x6e,0x2e,0x64,0x65,0x6c,0x74,0x61,0x3d,0x74,0x2e,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x53,0x74,0x61,0x72,0x74,0x2c,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3c,0x30,0x7c,0x7c,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3e,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x3d,0x5b,0x74,0x5d,0x2c,0x65,0x28,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x7d,0x7d,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x22,0x3d,0x3d,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x72,0x65,0x61,0x64,0x79,0x53,0x74,0x61,0x74,0x65,0x3f,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x74,0x2c,0x30,0x29,0x3a,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x74,0x2c,0x30,0x29,0x7d,0x29,0x29,0x7d,0x7d,0x7d,0x5d,0x29,0x3b,0x0a,0x2f,0x2f,0x23,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x4d,0x61,0x70,0x70,0x69,0x6e,0x67,0x55,0x52,0x4c,0x3d,0x34,0x35,0x33,0x2e,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x2e,0x6d,0x61,0x70}; + +static const unsigned char FILE_10[] = {0x7b,0x22,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x22,0x3a,0x33,0x2c,0x22,0x66,0x69,0x6c,0x65,0x22,0x3a,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x34,0x35,0x33,0x2e,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0x73,0x22,0x3a,0x22,0x30,0x4d,0x41,0x41,0x41,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x4a,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x4c,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x57,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x53,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x63,0x41,0x41,0x63,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x67,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x53,0x41,0x41,0x53,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x6f,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x65,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x53,0x41,0x41,0x53,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x42,0x2c,0x61,0x41,0x41,0x61,0x43,0x2c,0x49,0x41,0x41,0x49,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x55,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x76,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x49,0x41,0x41,0x49,0x34,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x32,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x57,0x41,0x41,0x57,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x35,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x34,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x57,0x41,0x41,0x57,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x4e,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x59,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x53,0x4a,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x4e,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x52,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x55,0x41,0x41,0x55,0x48,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x51,0x2c,0x59,0x41,0x41,0x59,0x2c,0x57,0x41,0x41,0x57,0x4c,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x6d,0x42,0x41,0x41,0x49,0x49,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x4e,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x7a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x43,0x2c,0x49,0x41,0x41,0x49,0x5a,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x61,0x41,0x41,0x61,0x31,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x55,0x41,0x41,0x55,0x78,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x64,0x2c,0x45,0x41,0x41,0x45,0x70,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x4e,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x55,0x41,0x41,0x55,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x42,0x2c,0x51,0x41,0x41,0x51,0x6f,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x59,0x41,0x41,0x59,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x59,0x41,0x41,0x59,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x58,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x6b,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2b,0x43,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x57,0x41,0x41,0x57,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x43,0x2c,0x59,0x41,0x41,0x59,0x6c,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x54,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x55,0x41,0x41,0x55,0x6e,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6e,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x67,0x44,0x2c,0x49,0x41,0x41,0x49,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x7a,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6c,0x44,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x32,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x46,0x2c,0x47,0x41,0x41,0x47,0x69,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6c,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x74,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x65,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x55,0x41,0x41,0x55,0x78,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x55,0x41,0x41,0x55,0x31,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x52,0x2c,0x47,0x41,0x41,0x47,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x70,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x35,0x42,0x2c,0x51,0x41,0x41,0x51,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x51,0x41,0x41,0x51,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x44,0x2c,0x45,0x41,0x41,0x45,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x65,0x41,0x41,0x65,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x61,0x2c,0x49,0x41,0x41,0x49,0x6a,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x63,0x41,0x41,0x63,0x68,0x43,0x2c,0x49,0x41,0x41,0x49,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x73,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2f,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x78,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x44,0x2c,0x45,0x41,0x41,0x45,0x2f,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x67,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x35,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x30,0x44,0x2c,0x55,0x41,0x41,0x55,0x2c,0x63,0x41,0x41,0x63,0x7a,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x4c,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x57,0x41,0x41,0x57,0x68,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x45,0x2c,0x57,0x41,0x41,0x57,0x72,0x42,0x2c,0x55,0x41,0x41,0x55,0x33,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x55,0x41,0x41,0x55,0x34,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6a,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x55,0x41,0x41,0x55,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x44,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2f,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x43,0x2c,0x59,0x41,0x41,0x59,0x6c,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x5a,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x65,0x41,0x41,0x65,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x79,0x44,0x2c,0x45,0x41,0x41,0x45,0x33,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x79,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x59,0x41,0x41,0x59,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x44,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x59,0x41,0x41,0x59,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x44,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x68,0x4f,0x2c,0x43,0x41,0x41,0x6b,0x4f,0x74,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x32,0x44,0x2c,0x45,0x41,0x41,0x45,0x31,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x35,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x55,0x41,0x41,0x55,0x2c,0x61,0x41,0x41,0x61,0x2c,0x65,0x41,0x41,0x65,0x6b,0x45,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x6a,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x61,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6a,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x55,0x41,0x41,0x55,0x50,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x6e,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x4e,0x2c,0x45,0x41,0x41,0x45,0x69,0x45,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6a,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x55,0x41,0x41,0x55,0x46,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x51,0x41,0x41,0x51,0x6f,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x43,0x2c,0x47,0x41,0x41,0x47,0x6d,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x65,0x2c,0x45,0x41,0x41,0x45,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x63,0x41,0x41,0x63,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x64,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x50,0x2c,0x47,0x41,0x41,0x47,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x63,0x41,0x41,0x63,0x68,0x43,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x52,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x51,0x2c,0x47,0x41,0x41,0x47,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x66,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x50,0x2c,0x47,0x41,0x41,0x47,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x44,0x2c,0x45,0x41,0x41,0x45,0x39,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x64,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x39,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x43,0x2c,0x49,0x41,0x41,0x49,0x4a,0x2c,0x45,0x41,0x41,0x45,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x55,0x41,0x41,0x55,0x31,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4e,0x2c,0x45,0x41,0x41,0x45,0x35,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x4c,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x51,0x41,0x41,0x51,0x6f,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x63,0x41,0x41,0x63,0x68,0x43,0x2c,0x49,0x41,0x41,0x49,0x61,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x61,0x41,0x41,0x61,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x50,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x67,0x45,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x38,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x38,0x42,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x64,0x2c,0x53,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x65,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2b,0x43,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x57,0x41,0x41,0x57,0x64,0x2c,0x45,0x41,0x41,0x45,0x35,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x43,0x2c,0x59,0x41,0x41,0x59,0x6c,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x54,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x55,0x41,0x41,0x55,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x50,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x78,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x43,0x2c,0x59,0x41,0x41,0x59,0x32,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x7a,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x43,0x2c,0x59,0x41,0x41,0x59,0x34,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x36,0x44,0x2c,0x55,0x41,0x41,0x55,0x2c,0x61,0x41,0x41,0x61,0x6e,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x7a,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x44,0x2c,0x49,0x41,0x41,0x49,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x45,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x6a,0x4c,0x2c,0x47,0x41,0x41,0x71,0x4c,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x4a,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x4e,0x2c,0x45,0x41,0x41,0x45,0x34,0x45,0x2c,0x63,0x41,0x41,0x63,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x43,0x2c,0x59,0x41,0x41,0x59,0x6c,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x56,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x50,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x61,0x41,0x41,0x61,0x32,0x42,0x2c,0x53,0x41,0x41,0x53,0x6d,0x44,0x2c,0x57,0x41,0x41,0x57,0x76,0x43,0x2c,0x57,0x41,0x41,0x57,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x36,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x53,0x2c,0x57,0x41,0x41,0x57,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x22,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x22,0x3a,0x5b,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x77,0x65,0x62,0x2d,0x76,0x69,0x74,0x61,0x6c,0x73,0x2f,0x64,0x69,0x73,0x74,0x2f,0x77,0x65,0x62,0x2d,0x76,0x69,0x74,0x61,0x6c,0x73,0x2e,0x6a,0x73,0x22,0x5d,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x3a,0x5b,0x22,0x76,0x61,0x72,0x20,0x65,0x2c,0x74,0x2c,0x6e,0x2c,0x69,0x2c,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x6e,0x61,0x6d,0x65,0x3a,0x65,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x74,0x3f,0x2d,0x31,0x3a,0x74,0x2c,0x64,0x65,0x6c,0x74,0x61,0x3a,0x30,0x2c,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x3a,0x5b,0x5d,0x2c,0x69,0x64,0x3a,0x5c,0x22,0x76,0x32,0x2d,0x5c,0x22,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x44,0x61,0x74,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2c,0x5c,0x22,0x2d,0x5c,0x22,0x29,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x4d,0x61,0x74,0x68,0x2e,0x66,0x6c,0x6f,0x6f,0x72,0x28,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x2a,0x4d,0x61,0x74,0x68,0x2e,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x28,0x29,0x29,0x2b,0x31,0x65,0x31,0x32,0x29,0x7d,0x7d,0x2c,0x61,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x50,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x4f,0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x2e,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x45,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x73,0x2e,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x73,0x28,0x65,0x29,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x21,0x28,0x5c,0x22,0x50,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x45,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x69,0x6e,0x67,0x5c,0x22,0x69,0x6e,0x20,0x73,0x65,0x6c,0x66,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x6e,0x65,0x77,0x20,0x50,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x4f,0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x74,0x29,0x7d,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x6f,0x62,0x73,0x65,0x72,0x76,0x65,0x28,0x7b,0x74,0x79,0x70,0x65,0x3a,0x65,0x2c,0x62,0x75,0x66,0x66,0x65,0x72,0x65,0x64,0x3a,0x21,0x30,0x7d,0x29,0x2c,0x6e,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x7d,0x7d,0x2c,0x6f,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x28,0x69,0x29,0x7b,0x5c,0x22,0x70,0x61,0x67,0x65,0x68,0x69,0x64,0x65,0x5c,0x22,0x21,0x3d,0x3d,0x69,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x5c,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x65,0x28,0x69,0x29,0x2c,0x74,0x26,0x26,0x28,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x2c,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x70,0x61,0x67,0x65,0x68,0x69,0x64,0x65,0x5c,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x29,0x29,0x7d,0x3b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x2c,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x70,0x61,0x67,0x65,0x68,0x69,0x64,0x65,0x5c,0x22,0x2c,0x6e,0x2c,0x21,0x30,0x29,0x7d,0x2c,0x75,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x70,0x61,0x67,0x65,0x73,0x68,0x6f,0x77,0x5c,0x22,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x74,0x29,0x7b,0x74,0x2e,0x70,0x65,0x72,0x73,0x69,0x73,0x74,0x65,0x64,0x26,0x26,0x65,0x28,0x74,0x29,0x7d,0x29,0x2c,0x21,0x30,0x29,0x7d,0x2c,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x72,0x29,0x7b,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3e,0x3d,0x30,0x26,0x26,0x28,0x72,0x7c,0x7c,0x6e,0x29,0x26,0x26,0x28,0x74,0x2e,0x64,0x65,0x6c,0x74,0x61,0x3d,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2d,0x28,0x69,0x7c,0x7c,0x30,0x29,0x2c,0x28,0x74,0x2e,0x64,0x65,0x6c,0x74,0x61,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x69,0x29,0x26,0x26,0x28,0x69,0x3d,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x65,0x28,0x74,0x29,0x29,0x29,0x7d,0x7d,0x2c,0x66,0x3d,0x2d,0x31,0x2c,0x73,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x53,0x74,0x61,0x74,0x65,0x3f,0x30,0x3a,0x31,0x2f,0x30,0x7d,0x2c,0x6d,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6f,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3b,0x66,0x3d,0x74,0x7d,0x29,0x2c,0x21,0x30,0x29,0x7d,0x2c,0x76,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x3c,0x30,0x26,0x26,0x28,0x66,0x3d,0x73,0x28,0x29,0x2c,0x6d,0x28,0x29,0x2c,0x75,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x66,0x3d,0x73,0x28,0x29,0x2c,0x6d,0x28,0x29,0x7d,0x29,0x2c,0x30,0x29,0x7d,0x29,0x29,0x29,0x2c,0x7b,0x67,0x65,0x74,0x20,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x7d,0x7d,0x7d,0x2c,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x69,0x3d,0x76,0x28,0x29,0x2c,0x6f,0x3d,0x72,0x28,0x5c,0x22,0x46,0x43,0x50,0x5c,0x22,0x29,0x2c,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x5c,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x66,0x75,0x6c,0x2d,0x70,0x61,0x69,0x6e,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x26,0x26,0x28,0x6d,0x26,0x26,0x6d,0x2e,0x64,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x28,0x29,0x2c,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x69,0x2e,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x26,0x26,0x28,0x6f,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2c,0x6f,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x2c,0x6e,0x28,0x21,0x30,0x29,0x29,0x29,0x7d,0x2c,0x73,0x3d,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x26,0x26,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x4e,0x61,0x6d,0x65,0x26,0x26,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x4e,0x61,0x6d,0x65,0x28,0x5c,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x66,0x75,0x6c,0x2d,0x70,0x61,0x69,0x6e,0x74,0x5c,0x22,0x29,0x5b,0x30,0x5d,0x2c,0x6d,0x3d,0x73,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x28,0x5c,0x22,0x70,0x61,0x69,0x6e,0x74,0x5c,0x22,0x2c,0x66,0x29,0x3b,0x28,0x73,0x7c,0x7c,0x6d,0x29,0x26,0x26,0x28,0x6e,0x3d,0x63,0x28,0x65,0x2c,0x6f,0x2c,0x74,0x29,0x2c,0x73,0x26,0x26,0x66,0x28,0x73,0x29,0x2c,0x75,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x69,0x29,0x7b,0x6f,0x3d,0x72,0x28,0x5c,0x22,0x46,0x43,0x50,0x5c,0x22,0x29,0x2c,0x6e,0x3d,0x63,0x28,0x65,0x2c,0x6f,0x2c,0x74,0x29,0x2c,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6f,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x69,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2c,0x6e,0x28,0x21,0x30,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x29,0x7d,0x2c,0x70,0x3d,0x21,0x31,0x2c,0x6c,0x3d,0x2d,0x31,0x2c,0x68,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x70,0x7c,0x7c,0x28,0x64,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x6c,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7d,0x29,0x29,0x2c,0x70,0x3d,0x21,0x30,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x69,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x74,0x29,0x7b,0x6c,0x3e,0x2d,0x31,0x26,0x26,0x65,0x28,0x74,0x29,0x7d,0x2c,0x66,0x3d,0x72,0x28,0x5c,0x22,0x43,0x4c,0x53,0x5c,0x22,0x2c,0x30,0x29,0x2c,0x73,0x3d,0x30,0x2c,0x6d,0x3d,0x5b,0x5d,0x2c,0x76,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x65,0x2e,0x68,0x61,0x64,0x52,0x65,0x63,0x65,0x6e,0x74,0x49,0x6e,0x70,0x75,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6d,0x5b,0x30,0x5d,0x2c,0x69,0x3d,0x6d,0x5b,0x6d,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x5d,0x3b,0x73,0x26,0x26,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x69,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x31,0x65,0x33,0x26,0x26,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x74,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x35,0x65,0x33,0x3f,0x28,0x73,0x2b,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6d,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x29,0x3a,0x28,0x73,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6d,0x3d,0x5b,0x65,0x5d,0x29,0x2c,0x73,0x3e,0x66,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x28,0x66,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x73,0x2c,0x66,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x3d,0x6d,0x2c,0x6e,0x28,0x29,0x29,0x7d,0x7d,0x2c,0x68,0x3d,0x61,0x28,0x5c,0x22,0x6c,0x61,0x79,0x6f,0x75,0x74,0x2d,0x73,0x68,0x69,0x66,0x74,0x5c,0x22,0x2c,0x76,0x29,0x3b,0x68,0x26,0x26,0x28,0x6e,0x3d,0x63,0x28,0x69,0x2c,0x66,0x2c,0x74,0x29,0x2c,0x6f,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x68,0x2e,0x74,0x61,0x6b,0x65,0x52,0x65,0x63,0x6f,0x72,0x64,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x76,0x29,0x2c,0x6e,0x28,0x21,0x30,0x29,0x7d,0x29,0x29,0x2c,0x75,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x73,0x3d,0x30,0x2c,0x6c,0x3d,0x2d,0x31,0x2c,0x66,0x3d,0x72,0x28,0x5c,0x22,0x43,0x4c,0x53,0x5c,0x22,0x2c,0x30,0x29,0x2c,0x6e,0x3d,0x63,0x28,0x69,0x2c,0x66,0x2c,0x74,0x29,0x7d,0x29,0x29,0x29,0x7d,0x2c,0x54,0x3d,0x7b,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x3a,0x21,0x30,0x2c,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x3a,0x21,0x30,0x7d,0x2c,0x79,0x3d,0x6e,0x65,0x77,0x20,0x44,0x61,0x74,0x65,0x2c,0x67,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x69,0x2c,0x72,0x29,0x7b,0x65,0x7c,0x7c,0x28,0x65,0x3d,0x72,0x2c,0x74,0x3d,0x69,0x2c,0x6e,0x3d,0x6e,0x65,0x77,0x20,0x44,0x61,0x74,0x65,0x2c,0x77,0x28,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x29,0x2c,0x45,0x28,0x29,0x29,0x7d,0x2c,0x45,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x69,0x66,0x28,0x74,0x3e,0x3d,0x30,0x26,0x26,0x74,0x3c,0x6e,0x2d,0x79,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x7b,0x65,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x3a,0x5c,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x2c,0x6e,0x61,0x6d,0x65,0x3a,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x3a,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2c,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x3a,0x65,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x2c,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2c,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x3a,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2b,0x74,0x7d,0x3b,0x69,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x65,0x28,0x72,0x29,0x7d,0x29,0x29,0x2c,0x69,0x3d,0x5b,0x5d,0x7d,0x7d,0x2c,0x53,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x28,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3e,0x31,0x65,0x31,0x32,0x3f,0x6e,0x65,0x77,0x20,0x44,0x61,0x74,0x65,0x3a,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x29,0x2d,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3b,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x67,0x28,0x65,0x2c,0x74,0x29,0x2c,0x72,0x28,0x29,0x7d,0x2c,0x69,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x28,0x29,0x7d,0x2c,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x5c,0x22,0x2c,0x6e,0x2c,0x54,0x29,0x2c,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x2c,0x69,0x2c,0x54,0x29,0x7d,0x3b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x5c,0x22,0x2c,0x6e,0x2c,0x54,0x29,0x2c,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x2c,0x69,0x2c,0x54,0x29,0x7d,0x28,0x74,0x2c,0x65,0x29,0x3a,0x67,0x28,0x74,0x2c,0x65,0x29,0x7d,0x7d,0x2c,0x77,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x5b,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x74,0x2c,0x53,0x2c,0x54,0x29,0x7d,0x29,0x29,0x7d,0x2c,0x4c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x6e,0x2c,0x66,0x29,0x7b,0x76,0x61,0x72,0x20,0x73,0x2c,0x6d,0x3d,0x76,0x28,0x29,0x2c,0x64,0x3d,0x72,0x28,0x5c,0x22,0x46,0x49,0x44,0x5c,0x22,0x29,0x2c,0x70,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x6d,0x2e,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x26,0x26,0x28,0x64,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x65,0x2e,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x2d,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2c,0x64,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x2c,0x73,0x28,0x21,0x30,0x29,0x29,0x7d,0x2c,0x6c,0x3d,0x61,0x28,0x5c,0x22,0x66,0x69,0x72,0x73,0x74,0x2d,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x2c,0x70,0x29,0x3b,0x73,0x3d,0x63,0x28,0x6e,0x2c,0x64,0x2c,0x66,0x29,0x2c,0x6c,0x26,0x26,0x6f,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6c,0x2e,0x74,0x61,0x6b,0x65,0x52,0x65,0x63,0x6f,0x72,0x64,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x70,0x29,0x2c,0x6c,0x2e,0x64,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x28,0x29,0x7d,0x29,0x2c,0x21,0x30,0x29,0x2c,0x6c,0x26,0x26,0x75,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3b,0x64,0x3d,0x72,0x28,0x5c,0x22,0x46,0x49,0x44,0x5c,0x22,0x29,0x2c,0x73,0x3d,0x63,0x28,0x6e,0x2c,0x64,0x2c,0x66,0x29,0x2c,0x69,0x3d,0x5b,0x5d,0x2c,0x74,0x3d,0x2d,0x31,0x2c,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x77,0x28,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x29,0x2c,0x61,0x3d,0x70,0x2c,0x69,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x2c,0x45,0x28,0x29,0x7d,0x29,0x29,0x7d,0x2c,0x62,0x3d,0x7b,0x7d,0x2c,0x46,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x69,0x3d,0x76,0x28,0x29,0x2c,0x66,0x3d,0x72,0x28,0x5c,0x22,0x4c,0x43,0x50,0x5c,0x22,0x29,0x2c,0x73,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3b,0x74,0x3c,0x69,0x2e,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x26,0x26,0x28,0x66,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x74,0x2c,0x66,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x2c,0x6e,0x28,0x29,0x29,0x7d,0x2c,0x6d,0x3d,0x61,0x28,0x5c,0x22,0x6c,0x61,0x72,0x67,0x65,0x73,0x74,0x2d,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x66,0x75,0x6c,0x2d,0x70,0x61,0x69,0x6e,0x74,0x5c,0x22,0x2c,0x73,0x29,0x3b,0x69,0x66,0x28,0x6d,0x29,0x7b,0x6e,0x3d,0x63,0x28,0x65,0x2c,0x66,0x2c,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x62,0x5b,0x66,0x2e,0x69,0x64,0x5d,0x7c,0x7c,0x28,0x6d,0x2e,0x74,0x61,0x6b,0x65,0x52,0x65,0x63,0x6f,0x72,0x64,0x73,0x28,0x29,0x2e,0x6d,0x61,0x70,0x28,0x73,0x29,0x2c,0x6d,0x2e,0x64,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x28,0x29,0x2c,0x62,0x5b,0x66,0x2e,0x69,0x64,0x5d,0x3d,0x21,0x30,0x2c,0x6e,0x28,0x21,0x30,0x29,0x29,0x7d,0x3b,0x5b,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x65,0x2c,0x64,0x2c,0x7b,0x6f,0x6e,0x63,0x65,0x3a,0x21,0x30,0x2c,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x3a,0x21,0x30,0x7d,0x29,0x7d,0x29,0x29,0x2c,0x6f,0x28,0x64,0x2c,0x21,0x30,0x29,0x2c,0x75,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x69,0x29,0x7b,0x66,0x3d,0x72,0x28,0x5c,0x22,0x4c,0x43,0x50,0x5c,0x22,0x29,0x2c,0x6e,0x3d,0x63,0x28,0x65,0x2c,0x66,0x2c,0x74,0x29,0x2c,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x66,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x69,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x2c,0x62,0x5b,0x66,0x2e,0x69,0x64,0x5d,0x3d,0x21,0x30,0x2c,0x6e,0x28,0x21,0x30,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x7d,0x29,0x29,0x7d,0x7d,0x2c,0x50,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x2c,0x6e,0x3d,0x72,0x28,0x5c,0x22,0x54,0x54,0x46,0x42,0x5c,0x22,0x29,0x3b,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x54,0x79,0x70,0x65,0x28,0x5c,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x29,0x5b,0x30,0x5d,0x7c,0x7c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x74,0x69,0x6d,0x69,0x6e,0x67,0x2c,0x74,0x3d,0x7b,0x65,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x3a,0x5c,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x2c,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x30,0x7d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x20,0x69,0x6e,0x20,0x65,0x29,0x5c,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x5c,0x22,0x74,0x6f,0x4a,0x53,0x4f,0x4e,0x5c,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x74,0x5b,0x6e,0x5d,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x61,0x78,0x28,0x65,0x5b,0x6e,0x5d,0x2d,0x65,0x2e,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x2c,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x7d,0x28,0x29,0x3b,0x69,0x66,0x28,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x6e,0x2e,0x64,0x65,0x6c,0x74,0x61,0x3d,0x74,0x2e,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x53,0x74,0x61,0x72,0x74,0x2c,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3c,0x30,0x7c,0x7c,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3e,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x2e,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x3d,0x5b,0x74,0x5d,0x2c,0x65,0x28,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x7d,0x7d,0x2c,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x72,0x65,0x61,0x64,0x79,0x53,0x74,0x61,0x74,0x65,0x3f,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x74,0x2c,0x30,0x29,0x3a,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x6c,0x6f,0x61,0x64,0x5c,0x22,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x74,0x2c,0x30,0x29,0x7d,0x29,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x7b,0x68,0x20,0x61,0x73,0x20,0x67,0x65,0x74,0x43,0x4c,0x53,0x2c,0x64,0x20,0x61,0x73,0x20,0x67,0x65,0x74,0x46,0x43,0x50,0x2c,0x4c,0x20,0x61,0x73,0x20,0x67,0x65,0x74,0x46,0x49,0x44,0x2c,0x46,0x20,0x61,0x73,0x20,0x67,0x65,0x74,0x4c,0x43,0x50,0x2c,0x50,0x20,0x61,0x73,0x20,0x67,0x65,0x74,0x54,0x54,0x46,0x42,0x7d,0x3b,0x5c,0x6e,0x22,0x5d,0x2c,0x22,0x6e,0x61,0x6d,0x65,0x73,0x22,0x3a,0x5b,0x22,0x65,0x22,0x2c,0x22,0x74,0x22,0x2c,0x22,0x6e,0x22,0x2c,0x22,0x69,0x22,0x2c,0x22,0x72,0x22,0x2c,0x22,0x6e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x64,0x65,0x6c,0x74,0x61,0x22,0x2c,0x22,0x65,0x6e,0x74,0x72,0x69,0x65,0x73,0x22,0x2c,0x22,0x69,0x64,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x63,0x61,0x74,0x22,0x2c,0x22,0x44,0x61,0x74,0x65,0x22,0x2c,0x22,0x6e,0x6f,0x77,0x22,0x2c,0x22,0x4d,0x61,0x74,0x68,0x22,0x2c,0x22,0x66,0x6c,0x6f,0x6f,0x72,0x22,0x2c,0x22,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x22,0x2c,0x22,0x61,0x22,0x2c,0x22,0x50,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x4f,0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x22,0x2c,0x22,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x45,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x73,0x22,0x2c,0x22,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x73,0x22,0x2c,0x22,0x73,0x65,0x6c,0x66,0x22,0x2c,0x22,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x22,0x2c,0x22,0x6d,0x61,0x70,0x22,0x2c,0x22,0x6f,0x62,0x73,0x65,0x72,0x76,0x65,0x22,0x2c,0x22,0x74,0x79,0x70,0x65,0x22,0x2c,0x22,0x62,0x75,0x66,0x66,0x65,0x72,0x65,0x64,0x22,0x2c,0x22,0x6f,0x22,0x2c,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x76,0x69,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x22,0x2c,0x22,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x22,0x2c,0x22,0x75,0x22,0x2c,0x22,0x70,0x65,0x72,0x73,0x69,0x73,0x74,0x65,0x64,0x22,0x2c,0x22,0x63,0x22,0x2c,0x22,0x66,0x22,0x2c,0x22,0x73,0x22,0x2c,0x22,0x6d,0x22,0x2c,0x22,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x22,0x2c,0x22,0x76,0x22,0x2c,0x22,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x22,0x2c,0x22,0x66,0x69,0x72,0x73,0x74,0x48,0x69,0x64,0x64,0x65,0x6e,0x54,0x69,0x6d,0x65,0x22,0x2c,0x22,0x64,0x22,0x2c,0x22,0x64,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x22,0x2c,0x22,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x22,0x2c,0x22,0x70,0x75,0x73,0x68,0x22,0x2c,0x22,0x77,0x69,0x6e,0x64,0x6f,0x77,0x22,0x2c,0x22,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x22,0x2c,0x22,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x46,0x72,0x61,0x6d,0x65,0x22,0x2c,0x22,0x70,0x22,0x2c,0x22,0x6c,0x22,0x2c,0x22,0x68,0x22,0x2c,0x22,0x68,0x61,0x64,0x52,0x65,0x63,0x65,0x6e,0x74,0x49,0x6e,0x70,0x75,0x74,0x22,0x2c,0x22,0x6c,0x65,0x6e,0x67,0x74,0x68,0x22,0x2c,0x22,0x74,0x61,0x6b,0x65,0x52,0x65,0x63,0x6f,0x72,0x64,0x73,0x22,0x2c,0x22,0x54,0x22,0x2c,0x22,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x22,0x2c,0x22,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x2c,0x22,0x79,0x22,0x2c,0x22,0x67,0x22,0x2c,0x22,0x77,0x22,0x2c,0x22,0x45,0x22,0x2c,0x22,0x65,0x6e,0x74,0x72,0x79,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x74,0x61,0x72,0x67,0x65,0x74,0x22,0x2c,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x22,0x2c,0x22,0x53,0x22,0x2c,0x22,0x4c,0x22,0x2c,0x22,0x62,0x22,0x2c,0x22,0x46,0x22,0x2c,0x22,0x6f,0x6e,0x63,0x65,0x22,0x2c,0x22,0x50,0x22,0x2c,0x22,0x67,0x65,0x74,0x45,0x6e,0x74,0x72,0x69,0x65,0x73,0x42,0x79,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x74,0x69,0x6d,0x69,0x6e,0x67,0x22,0x2c,0x22,0x6d,0x61,0x78,0x22,0x2c,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x72,0x65,0x61,0x64,0x79,0x53,0x74,0x61,0x74,0x65,0x22,0x5d,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x6f,0x6f,0x74,0x22,0x3a,0x22,0x22,0x7d}; + +static const unsigned char FILE_11[] = {0x2f,0x2a,0x21,0x20,0x46,0x6f,0x72,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x69,0x6e,0x66,0x6f,0x72,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x20,0x70,0x6c,0x65,0x61,0x73,0x65,0x20,0x73,0x65,0x65,0x20,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x2e,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x2e,0x74,0x78,0x74,0x20,0x2a,0x2f,0x0a,0x28,0x28,0x29,0x3d,0x3e,0x7b,0x22,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x22,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x7b,0x37,0x33,0x30,0x3a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x28,0x34,0x33,0x29,0x2c,0x6c,0x3d,0x74,0x28,0x38,0x35,0x33,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x72,0x65,0x61,0x63,0x74,0x6a,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x6f,0x63,0x73,0x2f,0x65,0x72,0x72,0x6f,0x72,0x2d,0x64,0x65,0x63,0x6f,0x64,0x65,0x72,0x2e,0x68,0x74,0x6d,0x6c,0x3f,0x69,0x6e,0x76,0x61,0x72,0x69,0x61,0x6e,0x74,0x3d,0x22,0x2b,0x65,0x2c,0x74,0x3d,0x31,0x3b,0x74,0x3c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x6e,0x2b,0x3d,0x22,0x26,0x61,0x72,0x67,0x73,0x5b,0x5d,0x3d,0x22,0x2b,0x65,0x6e,0x63,0x6f,0x64,0x65,0x55,0x52,0x49,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x28,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x74,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x4d,0x69,0x6e,0x69,0x66,0x69,0x65,0x64,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x23,0x22,0x2b,0x65,0x2b,0x22,0x3b,0x20,0x76,0x69,0x73,0x69,0x74,0x20,0x22,0x2b,0x6e,0x2b,0x22,0x20,0x66,0x6f,0x72,0x20,0x74,0x68,0x65,0x20,0x66,0x75,0x6c,0x6c,0x20,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x20,0x6f,0x72,0x20,0x75,0x73,0x65,0x20,0x74,0x68,0x65,0x20,0x6e,0x6f,0x6e,0x2d,0x6d,0x69,0x6e,0x69,0x66,0x69,0x65,0x64,0x20,0x64,0x65,0x76,0x20,0x65,0x6e,0x76,0x69,0x72,0x6f,0x6e,0x6d,0x65,0x6e,0x74,0x20,0x66,0x6f,0x72,0x20,0x66,0x75,0x6c,0x6c,0x20,0x65,0x72,0x72,0x6f,0x72,0x73,0x20,0x61,0x6e,0x64,0x20,0x61,0x64,0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x20,0x68,0x65,0x6c,0x70,0x66,0x75,0x6c,0x20,0x77,0x61,0x72,0x6e,0x69,0x6e,0x67,0x73,0x2e,0x22,0x7d,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x2c,0x75,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x73,0x28,0x65,0x2b,0x22,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x75,0x5b,0x65,0x5d,0x3d,0x6e,0x2c,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x6f,0x2e,0x61,0x64,0x64,0x28,0x6e,0x5b,0x65,0x5d,0x29,0x7d,0x76,0x61,0x72,0x20,0x63,0x3d,0x21,0x28,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x7c,0x7c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x2c,0x66,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2c,0x64,0x3d,0x2f,0x5e,0x5b,0x3a,0x41,0x2d,0x5a,0x5f,0x61,0x2d,0x7a,0x5c,0x75,0x30,0x30,0x43,0x30,0x2d,0x5c,0x75,0x30,0x30,0x44,0x36,0x5c,0x75,0x30,0x30,0x44,0x38,0x2d,0x5c,0x75,0x30,0x30,0x46,0x36,0x5c,0x75,0x30,0x30,0x46,0x38,0x2d,0x5c,0x75,0x30,0x32,0x46,0x46,0x5c,0x75,0x30,0x33,0x37,0x30,0x2d,0x5c,0x75,0x30,0x33,0x37,0x44,0x5c,0x75,0x30,0x33,0x37,0x46,0x2d,0x5c,0x75,0x31,0x46,0x46,0x46,0x5c,0x75,0x32,0x30,0x30,0x43,0x2d,0x5c,0x75,0x32,0x30,0x30,0x44,0x5c,0x75,0x32,0x30,0x37,0x30,0x2d,0x5c,0x75,0x32,0x31,0x38,0x46,0x5c,0x75,0x32,0x43,0x30,0x30,0x2d,0x5c,0x75,0x32,0x46,0x45,0x46,0x5c,0x75,0x33,0x30,0x30,0x31,0x2d,0x5c,0x75,0x44,0x37,0x46,0x46,0x5c,0x75,0x46,0x39,0x30,0x30,0x2d,0x5c,0x75,0x46,0x44,0x43,0x46,0x5c,0x75,0x46,0x44,0x46,0x30,0x2d,0x5c,0x75,0x46,0x46,0x46,0x44,0x5d,0x5b,0x3a,0x41,0x2d,0x5a,0x5f,0x61,0x2d,0x7a,0x5c,0x75,0x30,0x30,0x43,0x30,0x2d,0x5c,0x75,0x30,0x30,0x44,0x36,0x5c,0x75,0x30,0x30,0x44,0x38,0x2d,0x5c,0x75,0x30,0x30,0x46,0x36,0x5c,0x75,0x30,0x30,0x46,0x38,0x2d,0x5c,0x75,0x30,0x32,0x46,0x46,0x5c,0x75,0x30,0x33,0x37,0x30,0x2d,0x5c,0x75,0x30,0x33,0x37,0x44,0x5c,0x75,0x30,0x33,0x37,0x46,0x2d,0x5c,0x75,0x31,0x46,0x46,0x46,0x5c,0x75,0x32,0x30,0x30,0x43,0x2d,0x5c,0x75,0x32,0x30,0x30,0x44,0x5c,0x75,0x32,0x30,0x37,0x30,0x2d,0x5c,0x75,0x32,0x31,0x38,0x46,0x5c,0x75,0x32,0x43,0x30,0x30,0x2d,0x5c,0x75,0x32,0x46,0x45,0x46,0x5c,0x75,0x33,0x30,0x30,0x31,0x2d,0x5c,0x75,0x44,0x37,0x46,0x46,0x5c,0x75,0x46,0x39,0x30,0x30,0x2d,0x5c,0x75,0x46,0x44,0x43,0x46,0x5c,0x75,0x46,0x44,0x46,0x30,0x2d,0x5c,0x75,0x46,0x46,0x46,0x44,0x5c,0x2d,0x2e,0x30,0x2d,0x39,0x5c,0x75,0x30,0x30,0x42,0x37,0x5c,0x75,0x30,0x33,0x30,0x30,0x2d,0x5c,0x75,0x30,0x33,0x36,0x46,0x5c,0x75,0x32,0x30,0x33,0x46,0x2d,0x5c,0x75,0x32,0x30,0x34,0x30,0x5d,0x2a,0x24,0x2f,0x2c,0x70,0x3d,0x7b,0x7d,0x2c,0x6d,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x61,0x63,0x63,0x65,0x70,0x74,0x73,0x42,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x73,0x3d,0x32,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x6e,0x2c,0x74,0x68,0x69,0x73,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x3d,0x72,0x2c,0x74,0x68,0x69,0x73,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x3d,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x6d,0x75,0x73,0x74,0x55,0x73,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x3d,0x74,0x2c,0x74,0x68,0x69,0x73,0x2e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x3d,0x65,0x2c,0x74,0x68,0x69,0x73,0x2e,0x74,0x79,0x70,0x65,0x3d,0x6e,0x2c,0x74,0x68,0x69,0x73,0x2e,0x73,0x61,0x6e,0x69,0x74,0x69,0x7a,0x65,0x55,0x52,0x4c,0x3d,0x61,0x2c,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x6d,0x70,0x74,0x79,0x53,0x74,0x72,0x69,0x6e,0x67,0x3d,0x6f,0x7d,0x76,0x61,0x72,0x20,0x76,0x3d,0x7b,0x7d,0x3b,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x20,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x20,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x20,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x20,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x20,0x73,0x74,0x79,0x6c,0x65,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x30,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x5b,0x22,0x61,0x63,0x63,0x65,0x70,0x74,0x43,0x68,0x61,0x72,0x73,0x65,0x74,0x22,0x2c,0x22,0x61,0x63,0x63,0x65,0x70,0x74,0x2d,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x22,0x5d,0x2c,0x5b,0x22,0x63,0x6c,0x61,0x73,0x73,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x63,0x6c,0x61,0x73,0x73,0x22,0x5d,0x2c,0x5b,0x22,0x68,0x74,0x6d,0x6c,0x46,0x6f,0x72,0x22,0x2c,0x22,0x66,0x6f,0x72,0x22,0x5d,0x2c,0x5b,0x22,0x68,0x74,0x74,0x70,0x45,0x71,0x75,0x69,0x76,0x22,0x2c,0x22,0x68,0x74,0x74,0x70,0x2d,0x65,0x71,0x75,0x69,0x76,0x22,0x5d,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x5b,0x30,0x5d,0x3b,0x76,0x5b,0x6e,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x6e,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x65,0x5b,0x31,0x5d,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x64,0x72,0x61,0x67,0x67,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x73,0x70,0x65,0x6c,0x6c,0x43,0x68,0x65,0x63,0x6b,0x22,0x2c,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x32,0x2c,0x21,0x31,0x2c,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x61,0x75,0x74,0x6f,0x52,0x65,0x76,0x65,0x72,0x73,0x65,0x22,0x2c,0x22,0x65,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x22,0x2c,0x22,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x41,0x6c,0x70,0x68,0x61,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x32,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x22,0x61,0x6c,0x6c,0x6f,0x77,0x46,0x75,0x6c,0x6c,0x53,0x63,0x72,0x65,0x65,0x6e,0x20,0x61,0x73,0x79,0x6e,0x63,0x20,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x20,0x61,0x75,0x74,0x6f,0x50,0x6c,0x61,0x79,0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x64,0x65,0x66,0x65,0x72,0x20,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x20,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x50,0x69,0x63,0x74,0x75,0x72,0x65,0x49,0x6e,0x50,0x69,0x63,0x74,0x75,0x72,0x65,0x20,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x52,0x65,0x6d,0x6f,0x74,0x65,0x50,0x6c,0x61,0x79,0x62,0x61,0x63,0x6b,0x20,0x66,0x6f,0x72,0x6d,0x4e,0x6f,0x56,0x61,0x6c,0x69,0x64,0x61,0x74,0x65,0x20,0x68,0x69,0x64,0x64,0x65,0x6e,0x20,0x6c,0x6f,0x6f,0x70,0x20,0x6e,0x6f,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x6e,0x6f,0x56,0x61,0x6c,0x69,0x64,0x61,0x74,0x65,0x20,0x6f,0x70,0x65,0x6e,0x20,0x70,0x6c,0x61,0x79,0x73,0x49,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x72,0x65,0x61,0x64,0x4f,0x6e,0x6c,0x79,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x20,0x72,0x65,0x76,0x65,0x72,0x73,0x65,0x64,0x20,0x73,0x63,0x6f,0x70,0x65,0x64,0x20,0x73,0x65,0x61,0x6d,0x6c,0x65,0x73,0x73,0x20,0x69,0x74,0x65,0x6d,0x53,0x63,0x6f,0x70,0x65,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x33,0x2c,0x21,0x31,0x2c,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x22,0x2c,0x22,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x2c,0x22,0x6d,0x75,0x74,0x65,0x64,0x22,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x33,0x2c,0x21,0x30,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x2c,0x22,0x64,0x6f,0x77,0x6e,0x6c,0x6f,0x61,0x64,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x34,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x63,0x6f,0x6c,0x73,0x22,0x2c,0x22,0x72,0x6f,0x77,0x73,0x22,0x2c,0x22,0x73,0x69,0x7a,0x65,0x22,0x2c,0x22,0x73,0x70,0x61,0x6e,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x36,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x72,0x6f,0x77,0x53,0x70,0x61,0x6e,0x22,0x2c,0x22,0x73,0x74,0x61,0x72,0x74,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x35,0x2c,0x21,0x31,0x2c,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x2f,0x5b,0x5c,0x2d,0x3a,0x5d,0x28,0x5b,0x61,0x2d,0x7a,0x5d,0x29,0x2f,0x67,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x5b,0x31,0x5d,0x2e,0x74,0x6f,0x55,0x70,0x70,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x76,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6e,0x29,0x3f,0x76,0x5b,0x6e,0x5d,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3f,0x30,0x21,0x3d,0x3d,0x6c,0x2e,0x74,0x79,0x70,0x65,0x3a,0x72,0x7c,0x7c,0x21,0x28,0x32,0x3c,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x7c,0x7c,0x22,0x6f,0x22,0x21,0x3d,0x3d,0x6e,0x5b,0x30,0x5d,0x26,0x26,0x22,0x4f,0x22,0x21,0x3d,0x3d,0x6e,0x5b,0x30,0x5d,0x7c,0x7c,0x22,0x6e,0x22,0x21,0x3d,0x3d,0x6e,0x5b,0x31,0x5d,0x26,0x26,0x22,0x4e,0x22,0x21,0x3d,0x3d,0x6e,0x5b,0x31,0x5d,0x29,0x26,0x26,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x7c,0x7c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x74,0x2e,0x74,0x79,0x70,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x72,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3f,0x21,0x74,0x2e,0x61,0x63,0x63,0x65,0x70,0x74,0x73,0x42,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x73,0x3a,0x22,0x64,0x61,0x74,0x61,0x2d,0x22,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x30,0x2c,0x35,0x29,0x29,0x26,0x26,0x22,0x61,0x72,0x69,0x61,0x2d,0x22,0x21,0x3d,0x3d,0x65,0x29,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x69,0x66,0x28,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x2e,0x74,0x79,0x70,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3d,0x3d,0x3d,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x73,0x4e,0x61,0x4e,0x28,0x6e,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x73,0x4e,0x61,0x4e,0x28,0x6e,0x29,0x7c,0x7c,0x31,0x3e,0x6e,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x28,0x6e,0x2c,0x74,0x2c,0x6c,0x2c,0x72,0x29,0x26,0x26,0x28,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x72,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6c,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x21,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6d,0x2c,0x65,0x29,0x7c,0x7c,0x21,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x70,0x2c,0x65,0x29,0x26,0x26,0x28,0x64,0x2e,0x74,0x65,0x73,0x74,0x28,0x65,0x29,0x3f,0x6d,0x5b,0x65,0x5d,0x3d,0x21,0x30,0x3a,0x28,0x70,0x5b,0x65,0x5d,0x3d,0x21,0x30,0x2c,0x21,0x31,0x29,0x29,0x7d,0x28,0x6e,0x29,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x3f,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x6e,0x29,0x3a,0x65,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x6e,0x2c,0x22,0x22,0x2b,0x74,0x29,0x29,0x3a,0x6c,0x2e,0x6d,0x75,0x73,0x74,0x55,0x73,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x3f,0x65,0x5b,0x6c,0x2e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x3f,0x33,0x21,0x3d,0x3d,0x6c,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x22,0x22,0x3a,0x74,0x3a,0x28,0x6e,0x3d,0x6c,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x2c,0x72,0x3d,0x6c,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x3f,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x6e,0x29,0x3a,0x28,0x74,0x3d,0x33,0x3d,0x3d,0x3d,0x28,0x6c,0x3d,0x6c,0x2e,0x74,0x79,0x70,0x65,0x29,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x6c,0x26,0x26,0x21,0x30,0x3d,0x3d,0x3d,0x74,0x3f,0x22,0x22,0x3a,0x22,0x22,0x2b,0x74,0x2c,0x72,0x3f,0x65,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x53,0x28,0x72,0x2c,0x6e,0x2c,0x74,0x29,0x3a,0x65,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x6e,0x2c,0x74,0x29,0x29,0x29,0x29,0x7d,0x22,0x61,0x63,0x63,0x65,0x6e,0x74,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x20,0x61,0x6c,0x69,0x67,0x6e,0x6d,0x65,0x6e,0x74,0x2d,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x20,0x61,0x72,0x61,0x62,0x69,0x63,0x2d,0x66,0x6f,0x72,0x6d,0x20,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x2d,0x73,0x68,0x69,0x66,0x74,0x20,0x63,0x61,0x70,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x20,0x63,0x6c,0x69,0x70,0x2d,0x70,0x61,0x74,0x68,0x20,0x63,0x6c,0x69,0x70,0x2d,0x72,0x75,0x6c,0x65,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x69,0x6e,0x74,0x65,0x72,0x70,0x6f,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x69,0x6e,0x74,0x65,0x72,0x70,0x6f,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x66,0x69,0x6c,0x74,0x65,0x72,0x73,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x64,0x6f,0x6d,0x69,0x6e,0x61,0x6e,0x74,0x2d,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,0x65,0x20,0x66,0x6c,0x6f,0x6f,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x66,0x6c,0x6f,0x6f,0x64,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x2d,0x61,0x64,0x6a,0x75,0x73,0x74,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,0x79,0x6c,0x65,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x76,0x61,0x72,0x69,0x61,0x6e,0x74,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x67,0x6c,0x79,0x70,0x68,0x2d,0x6e,0x61,0x6d,0x65,0x20,0x67,0x6c,0x79,0x70,0x68,0x2d,0x6f,0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x68,0x6f,0x72,0x69,0x7a,0x6f,0x6e,0x74,0x61,0x6c,0x20,0x67,0x6c,0x79,0x70,0x68,0x2d,0x6f,0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x76,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,0x20,0x68,0x6f,0x72,0x69,0x7a,0x2d,0x61,0x64,0x76,0x2d,0x78,0x20,0x68,0x6f,0x72,0x69,0x7a,0x2d,0x6f,0x72,0x69,0x67,0x69,0x6e,0x2d,0x78,0x20,0x69,0x6d,0x61,0x67,0x65,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x6c,0x65,0x74,0x74,0x65,0x72,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x20,0x6c,0x69,0x67,0x68,0x74,0x69,0x6e,0x67,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x6d,0x61,0x72,0x6b,0x65,0x72,0x2d,0x65,0x6e,0x64,0x20,0x6d,0x61,0x72,0x6b,0x65,0x72,0x2d,0x6d,0x69,0x64,0x20,0x6d,0x61,0x72,0x6b,0x65,0x72,0x2d,0x73,0x74,0x61,0x72,0x74,0x20,0x6f,0x76,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x76,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x74,0x68,0x69,0x63,0x6b,0x6e,0x65,0x73,0x73,0x20,0x70,0x61,0x69,0x6e,0x74,0x2d,0x6f,0x72,0x64,0x65,0x72,0x20,0x70,0x61,0x6e,0x6f,0x73,0x65,0x2d,0x31,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x2d,0x65,0x76,0x65,0x6e,0x74,0x73,0x20,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x2d,0x69,0x6e,0x74,0x65,0x6e,0x74,0x20,0x73,0x68,0x61,0x70,0x65,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x73,0x74,0x72,0x69,0x6b,0x65,0x74,0x68,0x72,0x6f,0x75,0x67,0x68,0x2d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x73,0x74,0x72,0x69,0x6b,0x65,0x74,0x68,0x72,0x6f,0x75,0x67,0x68,0x2d,0x74,0x68,0x69,0x63,0x6b,0x6e,0x65,0x73,0x73,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,0x68,0x61,0x72,0x72,0x61,0x79,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,0x68,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6e,0x63,0x68,0x6f,0x72,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x74,0x68,0x69,0x63,0x6b,0x6e,0x65,0x73,0x73,0x20,0x75,0x6e,0x69,0x63,0x6f,0x64,0x65,0x2d,0x62,0x69,0x64,0x69,0x20,0x75,0x6e,0x69,0x63,0x6f,0x64,0x65,0x2d,0x72,0x61,0x6e,0x67,0x65,0x20,0x75,0x6e,0x69,0x74,0x73,0x2d,0x70,0x65,0x72,0x2d,0x65,0x6d,0x20,0x76,0x2d,0x61,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x20,0x76,0x2d,0x68,0x61,0x6e,0x67,0x69,0x6e,0x67,0x20,0x76,0x2d,0x69,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x20,0x76,0x2d,0x6d,0x61,0x74,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x20,0x76,0x65,0x63,0x74,0x6f,0x72,0x2d,0x65,0x66,0x66,0x65,0x63,0x74,0x20,0x76,0x65,0x72,0x74,0x2d,0x61,0x64,0x76,0x2d,0x79,0x20,0x76,0x65,0x72,0x74,0x2d,0x6f,0x72,0x69,0x67,0x69,0x6e,0x2d,0x78,0x20,0x76,0x65,0x72,0x74,0x2d,0x6f,0x72,0x69,0x67,0x69,0x6e,0x2d,0x79,0x20,0x77,0x6f,0x72,0x64,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x20,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0x2d,0x6d,0x6f,0x64,0x65,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x20,0x78,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x67,0x2c,0x79,0x29,0x3b,0x76,0x5b,0x6e,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x6e,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x22,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x61,0x63,0x74,0x75,0x61,0x74,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x61,0x72,0x63,0x72,0x6f,0x6c,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x72,0x6f,0x6c,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x73,0x68,0x6f,0x77,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x74,0x69,0x74,0x6c,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x74,0x79,0x70,0x65,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x67,0x2c,0x79,0x29,0x3b,0x76,0x5b,0x6e,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x6e,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x78,0x6d,0x6c,0x3a,0x62,0x61,0x73,0x65,0x22,0x2c,0x22,0x78,0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x22,0x2c,0x22,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x67,0x2c,0x79,0x29,0x3b,0x76,0x5b,0x6e,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x6e,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x58,0x4d,0x4c,0x2f,0x31,0x39,0x39,0x38,0x2f,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x22,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x5b,0x22,0x74,0x61,0x62,0x49,0x6e,0x64,0x65,0x78,0x22,0x2c,0x22,0x63,0x72,0x6f,0x73,0x73,0x4f,0x72,0x69,0x67,0x69,0x6e,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x29,0x2c,0x76,0x2e,0x78,0x6c,0x69,0x6e,0x6b,0x48,0x72,0x65,0x66,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x22,0x78,0x6c,0x69,0x6e,0x6b,0x48,0x72,0x65,0x66,0x22,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x22,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x68,0x72,0x65,0x66,0x22,0x2c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0x2c,0x21,0x30,0x2c,0x21,0x31,0x29,0x2c,0x5b,0x22,0x73,0x72,0x63,0x22,0x2c,0x22,0x68,0x72,0x65,0x66,0x22,0x2c,0x22,0x61,0x63,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x66,0x6f,0x72,0x6d,0x41,0x63,0x74,0x69,0x6f,0x6e,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x5b,0x65,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x68,0x28,0x65,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x30,0x2c,0x21,0x30,0x29,0x7d,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x72,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x2c,0x77,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x29,0x2c,0x53,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x6f,0x72,0x74,0x61,0x6c,0x22,0x29,0x2c,0x78,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x22,0x29,0x2c,0x45,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x74,0x72,0x69,0x63,0x74,0x5f,0x6d,0x6f,0x64,0x65,0x22,0x29,0x2c,0x43,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x22,0x29,0x2c,0x5f,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x22,0x29,0x2c,0x50,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x29,0x2c,0x4e,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x5f,0x72,0x65,0x66,0x22,0x29,0x2c,0x7a,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x22,0x29,0x2c,0x54,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x5f,0x6c,0x69,0x73,0x74,0x22,0x29,0x2c,0x4c,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x22,0x29,0x2c,0x52,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6c,0x61,0x7a,0x79,0x22,0x29,0x3b,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x63,0x6f,0x70,0x65,0x22,0x29,0x2c,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x64,0x65,0x62,0x75,0x67,0x5f,0x74,0x72,0x61,0x63,0x65,0x5f,0x6d,0x6f,0x64,0x65,0x22,0x29,0x3b,0x76,0x61,0x72,0x20,0x46,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x22,0x29,0x3b,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6c,0x65,0x67,0x61,0x63,0x79,0x5f,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x29,0x2c,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x63,0x61,0x63,0x68,0x65,0x22,0x29,0x2c,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x74,0x72,0x61,0x63,0x69,0x6e,0x67,0x5f,0x6d,0x61,0x72,0x6b,0x65,0x72,0x22,0x29,0x3b,0x76,0x61,0x72,0x20,0x4f,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x65,0x3d,0x4f,0x26,0x26,0x65,0x5b,0x4f,0x5d,0x7c,0x7c,0x65,0x5b,0x22,0x40,0x40,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x22,0x5d,0x29,0x3f,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x49,0x2c,0x44,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x61,0x73,0x73,0x69,0x67,0x6e,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x49,0x29,0x74,0x72,0x79,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x74,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2e,0x74,0x72,0x69,0x6d,0x28,0x29,0x2e,0x6d,0x61,0x74,0x63,0x68,0x28,0x2f,0x5c,0x6e,0x28,0x20,0x2a,0x28,0x61,0x74,0x20,0x29,0x3f,0x29,0x2f,0x29,0x3b,0x49,0x3d,0x6e,0x26,0x26,0x6e,0x5b,0x31,0x5d,0x7c,0x7c,0x22,0x22,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x5c,0x6e,0x22,0x2b,0x49,0x2b,0x65,0x7d,0x76,0x61,0x72,0x20,0x6a,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x21,0x65,0x7c,0x7c,0x6a,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x22,0x3b,0x6a,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x45,0x72,0x72,0x6f,0x72,0x2e,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x53,0x74,0x61,0x63,0x6b,0x54,0x72,0x61,0x63,0x65,0x3b,0x45,0x72,0x72,0x6f,0x72,0x2e,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x53,0x74,0x61,0x63,0x6b,0x54,0x72,0x61,0x63,0x65,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x6e,0x29,0x69,0x66,0x28,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x7d,0x2c,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6e,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2c,0x22,0x70,0x72,0x6f,0x70,0x73,0x22,0x2c,0x7b,0x73,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x7d,0x7d,0x29,0x2c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x26,0x26,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x29,0x7b,0x74,0x72,0x79,0x7b,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x28,0x6e,0x2c,0x5b,0x5d,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x73,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x73,0x7d,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x28,0x65,0x2c,0x5b,0x5d,0x2c,0x6e,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x74,0x72,0x79,0x7b,0x6e,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x73,0x29,0x7b,0x72,0x3d,0x73,0x7d,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6e,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x74,0x72,0x79,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x73,0x29,0x7b,0x72,0x3d,0x73,0x7d,0x65,0x28,0x29,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x73,0x29,0x7b,0x69,0x66,0x28,0x73,0x26,0x26,0x72,0x26,0x26,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x2e,0x73,0x74,0x61,0x63,0x6b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6c,0x3d,0x73,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x5c,0x6e,0x22,0x29,0x2c,0x61,0x3d,0x72,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x5c,0x6e,0x22,0x29,0x2c,0x6f,0x3d,0x6c,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x2c,0x75,0x3d,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x3b,0x31,0x3c,0x3d,0x6f,0x26,0x26,0x30,0x3c,0x3d,0x75,0x26,0x26,0x6c,0x5b,0x6f,0x5d,0x21,0x3d,0x3d,0x61,0x5b,0x75,0x5d,0x3b,0x29,0x75,0x2d,0x2d,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x31,0x3c,0x3d,0x6f,0x26,0x26,0x30,0x3c,0x3d,0x75,0x3b,0x6f,0x2d,0x2d,0x2c,0x75,0x2d,0x2d,0x29,0x69,0x66,0x28,0x6c,0x5b,0x6f,0x5d,0x21,0x3d,0x3d,0x61,0x5b,0x75,0x5d,0x29,0x7b,0x69,0x66,0x28,0x31,0x21,0x3d,0x3d,0x6f,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x75,0x29,0x64,0x6f,0x7b,0x69,0x66,0x28,0x6f,0x2d,0x2d,0x2c,0x30,0x3e,0x2d,0x2d,0x75,0x7c,0x7c,0x6c,0x5b,0x6f,0x5d,0x21,0x3d,0x3d,0x61,0x5b,0x75,0x5d,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3d,0x22,0x5c,0x6e,0x22,0x2b,0x6c,0x5b,0x6f,0x5d,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x22,0x20,0x61,0x74,0x20,0x6e,0x65,0x77,0x20,0x22,0x2c,0x22,0x20,0x61,0x74,0x20,0x22,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x26,0x26,0x69,0x2e,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x73,0x28,0x22,0x3c,0x61,0x6e,0x6f,0x6e,0x79,0x6d,0x6f,0x75,0x73,0x3e,0x22,0x29,0x26,0x26,0x28,0x69,0x3d,0x69,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x22,0x3c,0x61,0x6e,0x6f,0x6e,0x79,0x6d,0x6f,0x75,0x73,0x3e,0x22,0x2c,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x29,0x29,0x2c,0x69,0x7d,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x31,0x3c,0x3d,0x6f,0x26,0x26,0x30,0x3c,0x3d,0x75,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x7d,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6a,0x3d,0x21,0x31,0x2c,0x45,0x72,0x72,0x6f,0x72,0x2e,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x53,0x74,0x61,0x63,0x6b,0x54,0x72,0x61,0x63,0x65,0x3d,0x74,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x65,0x3f,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x3a,0x22,0x22,0x29,0x3f,0x55,0x28,0x65,0x29,0x3a,0x22,0x22,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x28,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x28,0x65,0x2e,0x74,0x79,0x70,0x65,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x28,0x22,0x4c,0x61,0x7a,0x79,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x28,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x28,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x4c,0x69,0x73,0x74,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x41,0x28,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x21,0x31,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x41,0x28,0x65,0x2e,0x74,0x79,0x70,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x2c,0x21,0x31,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x41,0x28,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x21,0x30,0x29,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x22,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x78,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x53,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x50,0x6f,0x72,0x74,0x61,0x6c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x43,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x45,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x7a,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x54,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x4c,0x69,0x73,0x74,0x22,0x7d,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x50,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x29,0x2b,0x22,0x2e,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x5f,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x29,0x2b,0x22,0x2e,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x4e,0x3a,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x29,0x7c,0x7c,0x28,0x65,0x3d,0x22,0x22,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x6e,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x22,0x22,0x29,0x3f,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x28,0x22,0x2b,0x65,0x2b,0x22,0x29,0x22,0x3a,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x22,0x29,0x2c,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x4c,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x29,0x3f,0x6e,0x3a,0x24,0x28,0x65,0x2e,0x74,0x79,0x70,0x65,0x29,0x7c,0x7c,0x22,0x4d,0x65,0x6d,0x6f,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x52,0x3a,0x6e,0x3d,0x65,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x2c,0x65,0x3d,0x65,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x24,0x28,0x65,0x28,0x6e,0x29,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x32,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x43,0x61,0x63,0x68,0x65,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x29,0x2b,0x22,0x2e,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x29,0x2b,0x22,0x2e,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x28,0x65,0x3d,0x6e,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x29,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x22,0x22,0x2c,0x6e,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x28,0x22,0x22,0x21,0x3d,0x3d,0x65,0x3f,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x28,0x22,0x2b,0x65,0x2b,0x22,0x29,0x22,0x3a,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x50,0x6f,0x72,0x74,0x61,0x6c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x52,0x6f,0x6f,0x74,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x54,0x65,0x78,0x74,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x24,0x28,0x6e,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3d,0x3d,0x3d,0x45,0x3f,0x22,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x22,0x3a,0x22,0x4d,0x6f,0x64,0x65,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x4f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x53,0x63,0x6f,0x70,0x65,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x4c,0x69,0x73,0x74,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x54,0x72,0x61,0x63,0x69,0x6e,0x67,0x4d,0x61,0x72,0x6b,0x65,0x72,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x28,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x22,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x29,0x26,0x26,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x26,0x26,0x28,0x22,0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,0x22,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x22,0x72,0x61,0x64,0x69,0x6f,0x22,0x3d,0x3d,0x3d,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x28,0x65,0x29,0x7b,0x65,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x7c,0x7c,0x28,0x65,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x57,0x28,0x65,0x29,0x3f,0x22,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x22,0x3a,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x2c,0x74,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x67,0x65,0x74,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x6f,0x72,0x28,0x65,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x6f,0x72,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2c,0x6e,0x29,0x2c,0x72,0x3d,0x22,0x22,0x2b,0x65,0x5b,0x6e,0x5d,0x3b,0x69,0x66,0x28,0x21,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6e,0x29,0x26,0x26,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x2e,0x67,0x65,0x74,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x2e,0x73,0x65,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x2e,0x67,0x65,0x74,0x2c,0x61,0x3d,0x74,0x2e,0x73,0x65,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x2c,0x6e,0x2c,0x7b,0x63,0x6f,0x6e,0x66,0x69,0x67,0x75,0x72,0x61,0x62,0x6c,0x65,0x3a,0x21,0x30,0x2c,0x67,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x74,0x68,0x69,0x73,0x29,0x7d,0x2c,0x73,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x3d,0x22,0x22,0x2b,0x65,0x2c,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x74,0x68,0x69,0x73,0x2c,0x65,0x29,0x7d,0x7d,0x29,0x2c,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x2c,0x6e,0x2c,0x7b,0x65,0x6e,0x75,0x6d,0x65,0x72,0x61,0x62,0x6c,0x65,0x3a,0x74,0x2e,0x65,0x6e,0x75,0x6d,0x65,0x72,0x61,0x62,0x6c,0x65,0x7d,0x29,0x2c,0x7b,0x67,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x7d,0x2c,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x3d,0x22,0x22,0x2b,0x65,0x7d,0x2c,0x73,0x74,0x6f,0x70,0x54,0x72,0x61,0x63,0x6b,0x69,0x6e,0x67,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x65,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x65,0x5b,0x6e,0x5d,0x7d,0x7d,0x7d,0x7d,0x28,0x65,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x3b,0x69,0x66,0x28,0x21,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x67,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x28,0x29,0x2c,0x72,0x3d,0x22,0x22,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x26,0x26,0x28,0x72,0x3d,0x57,0x28,0x65,0x29,0x3f,0x65,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3f,0x22,0x74,0x72,0x75,0x65,0x22,0x3a,0x22,0x66,0x61,0x6c,0x73,0x65,0x22,0x3a,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x28,0x65,0x3d,0x72,0x29,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x6e,0x2e,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x28,0x65,0x29,0x2c,0x21,0x30,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x65,0x3d,0x65,0x7c,0x7c,0x28,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3f,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x61,0x63,0x74,0x69,0x76,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x65,0x2e,0x62,0x6f,0x64,0x79,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x62,0x6f,0x64,0x79,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x44,0x28,0x7b,0x7d,0x2c,0x6e,0x2c,0x7b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x3f,0x74,0x3a,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3f,0x22,0x22,0x3a,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x2c,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3f,0x6e,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3b,0x74,0x3d,0x48,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3f,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3a,0x74,0x29,0x2c,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x72,0x2c,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x3a,0x74,0x2c,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x64,0x3a,0x22,0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,0x22,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x72,0x61,0x64,0x69,0x6f,0x22,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x6e,0x3d,0x6e,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x29,0x26,0x26,0x62,0x28,0x65,0x2c,0x22,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x22,0x2c,0x6e,0x2c,0x21,0x31,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x47,0x28,0x65,0x2c,0x6e,0x29,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x48,0x28,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x29,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x72,0x3f,0x28,0x30,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x22,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7c,0x7c,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x21,0x3d,0x74,0x29,0x26,0x26,0x28,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x22,0x2b,0x74,0x29,0x3a,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x22,0x22,0x2b,0x74,0x26,0x26,0x28,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x22,0x2b,0x74,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x3d,0x3d,0x3d,0x72,0x7c,0x7c,0x22,0x72,0x65,0x73,0x65,0x74,0x22,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x20,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x29,0x3b,0x6e,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x29,0x3f,0x65,0x65,0x28,0x65,0x2c,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x29,0x3a,0x6e,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x22,0x29,0x26,0x26,0x65,0x65,0x28,0x65,0x2c,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x48,0x28,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6e,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x26,0x26,0x28,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3d,0x21,0x21,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x29,0x7c,0x7c,0x6e,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x22,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x21,0x28,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x21,0x3d,0x3d,0x72,0x26,0x26,0x22,0x72,0x65,0x73,0x65,0x74,0x22,0x21,0x3d,0x3d,0x72,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x3d,0x22,0x22,0x2b,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x2c,0x74,0x7c,0x7c,0x6e,0x3d,0x3d,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7c,0x7c,0x28,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x6e,0x29,0x2c,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x6e,0x7d,0x22,0x22,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x29,0x26,0x26,0x28,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x22,0x29,0x2c,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3d,0x21,0x21,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x2c,0x22,0x22,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x3d,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x4b,0x28,0x65,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x74,0x3f,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x22,0x22,0x2b,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x3a,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x22,0x22,0x2b,0x74,0x26,0x26,0x28,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x22,0x22,0x2b,0x74,0x29,0x29,0x7d,0x76,0x61,0x72,0x20,0x6e,0x65,0x3d,0x41,0x72,0x72,0x61,0x79,0x2e,0x69,0x73,0x41,0x72,0x72,0x61,0x79,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x65,0x3d,0x65,0x2e,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x73,0x2c,0x6e,0x29,0x7b,0x6e,0x3d,0x7b,0x7d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6c,0x3d,0x30,0x3b,0x6c,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6c,0x2b,0x2b,0x29,0x6e,0x5b,0x22,0x24,0x22,0x2b,0x74,0x5b,0x6c,0x5d,0x5d,0x3d,0x21,0x30,0x3b,0x66,0x6f,0x72,0x28,0x74,0x3d,0x30,0x3b,0x74,0x3c,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x6c,0x3d,0x6e,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x22,0x24,0x22,0x2b,0x65,0x5b,0x74,0x5d,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x65,0x5b,0x74,0x5d,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x65,0x5b,0x74,0x5d,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x6c,0x29,0x2c,0x6c,0x26,0x26,0x72,0x26,0x26,0x28,0x65,0x5b,0x74,0x5d,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x66,0x6f,0x72,0x28,0x74,0x3d,0x22,0x22,0x2b,0x48,0x28,0x74,0x29,0x2c,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x3d,0x30,0x3b,0x6c,0x3c,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6c,0x2b,0x2b,0x29,0x7b,0x69,0x66,0x28,0x65,0x5b,0x6c,0x5d,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x3d,0x3d,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x5b,0x6c,0x5d,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x2c,0x76,0x6f,0x69,0x64,0x28,0x72,0x26,0x26,0x28,0x65,0x5b,0x6c,0x5d,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x29,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x7c,0x7c,0x65,0x5b,0x6c,0x5d,0x2e,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x7c,0x7c,0x28,0x6e,0x3d,0x65,0x5b,0x6c,0x5d,0x29,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x6e,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x39,0x31,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x44,0x28,0x7b,0x7d,0x2c,0x6e,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x22,0x22,0x2b,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x74,0x29,0x7b,0x69,0x66,0x28,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x6e,0x3d,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x39,0x32,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x65,0x28,0x74,0x29,0x29,0x7b,0x69,0x66,0x28,0x31,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x39,0x33,0x29,0x29,0x3b,0x74,0x3d,0x74,0x5b,0x30,0x5d,0x7d,0x6e,0x3d,0x74,0x7d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x6e,0x3d,0x22,0x22,0x29,0x2c,0x74,0x3d,0x6e,0x7d,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x3a,0x48,0x28,0x74,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x48,0x28,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x72,0x3d,0x48,0x28,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x26,0x26,0x28,0x28,0x74,0x3d,0x22,0x22,0x2b,0x74,0x29,0x21,0x3d,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x28,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x74,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x72,0x26,0x26,0x28,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x22,0x22,0x2b,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x65,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3b,0x6e,0x3d,0x3d,0x3d,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x22,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x65,0x28,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x73,0x76,0x67,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x3b,0x63,0x61,0x73,0x65,0x22,0x6d,0x61,0x74,0x68,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x38,0x2f,0x4d,0x61,0x74,0x68,0x2f,0x4d,0x61,0x74,0x68,0x4d,0x4c,0x22,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x22,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x22,0x3d,0x3d,0x3d,0x65,0x3f,0x75,0x65,0x28,0x6e,0x29,0x3a,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x22,0x66,0x6f,0x72,0x65,0x69,0x67,0x6e,0x4f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x6e,0x3f,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x22,0x3a,0x65,0x7d,0x76,0x61,0x72,0x20,0x73,0x65,0x2c,0x63,0x65,0x2c,0x66,0x65,0x3d,0x28,0x63,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x55,0x52,0x49,0x7c,0x7c,0x22,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x22,0x69,0x6e,0x20,0x65,0x29,0x65,0x2e,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x3d,0x6e,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x66,0x6f,0x72,0x28,0x28,0x73,0x65,0x3d,0x73,0x65,0x7c,0x7c,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x22,0x64,0x69,0x76,0x22,0x29,0x29,0x2e,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x3d,0x22,0x3c,0x73,0x76,0x67,0x3e,0x22,0x2b,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x4f,0x66,0x28,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x29,0x2b,0x22,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x22,0x2c,0x6e,0x3d,0x73,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x65,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x6e,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x7d,0x7d,0x2c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x4d,0x53,0x41,0x70,0x70,0x26,0x26,0x4d,0x53,0x41,0x70,0x70,0x2e,0x65,0x78,0x65,0x63,0x55,0x6e,0x73,0x61,0x66,0x65,0x4c,0x6f,0x63,0x61,0x6c,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x4d,0x53,0x41,0x70,0x70,0x2e,0x65,0x78,0x65,0x63,0x55,0x6e,0x73,0x61,0x66,0x65,0x4c,0x6f,0x63,0x61,0x6c,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x29,0x29,0x7d,0x3a,0x63,0x65,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x74,0x26,0x26,0x74,0x3d,0x3d,0x3d,0x65,0x2e,0x6c,0x61,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x26,0x26,0x33,0x3d,0x3d,0x3d,0x74,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x28,0x74,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x3d,0x6e,0x29,0x7d,0x65,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x6e,0x7d,0x76,0x61,0x72,0x20,0x70,0x65,0x3d,0x7b,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x49,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x43,0x6f,0x75,0x6e,0x74,0x3a,0x21,0x30,0x2c,0x61,0x73,0x70,0x65,0x63,0x74,0x52,0x61,0x74,0x69,0x6f,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x4f,0x75,0x74,0x73,0x65,0x74,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x53,0x6c,0x69,0x63,0x65,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x57,0x69,0x64,0x74,0x68,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x78,0x46,0x6c,0x65,0x78,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x78,0x46,0x6c,0x65,0x78,0x47,0x72,0x6f,0x75,0x70,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x78,0x4f,0x72,0x64,0x69,0x6e,0x61,0x6c,0x47,0x72,0x6f,0x75,0x70,0x3a,0x21,0x30,0x2c,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x43,0x6f,0x75,0x6e,0x74,0x3a,0x21,0x30,0x2c,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x73,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x47,0x72,0x6f,0x77,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x50,0x6f,0x73,0x69,0x74,0x69,0x76,0x65,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x53,0x68,0x72,0x69,0x6e,0x6b,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x4e,0x65,0x67,0x61,0x74,0x69,0x76,0x65,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x4f,0x72,0x64,0x65,0x72,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x41,0x72,0x65,0x61,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x45,0x6e,0x64,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x53,0x70,0x61,0x6e,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x53,0x74,0x61,0x72,0x74,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x45,0x6e,0x64,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x53,0x70,0x61,0x6e,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x53,0x74,0x61,0x72,0x74,0x3a,0x21,0x30,0x2c,0x66,0x6f,0x6e,0x74,0x57,0x65,0x69,0x67,0x68,0x74,0x3a,0x21,0x30,0x2c,0x6c,0x69,0x6e,0x65,0x43,0x6c,0x61,0x6d,0x70,0x3a,0x21,0x30,0x2c,0x6c,0x69,0x6e,0x65,0x48,0x65,0x69,0x67,0x68,0x74,0x3a,0x21,0x30,0x2c,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x6f,0x72,0x64,0x65,0x72,0x3a,0x21,0x30,0x2c,0x6f,0x72,0x70,0x68,0x61,0x6e,0x73,0x3a,0x21,0x30,0x2c,0x74,0x61,0x62,0x53,0x69,0x7a,0x65,0x3a,0x21,0x30,0x2c,0x77,0x69,0x64,0x6f,0x77,0x73,0x3a,0x21,0x30,0x2c,0x7a,0x49,0x6e,0x64,0x65,0x78,0x3a,0x21,0x30,0x2c,0x7a,0x6f,0x6f,0x6d,0x3a,0x21,0x30,0x2c,0x66,0x69,0x6c,0x6c,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x6f,0x6f,0x64,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x6f,0x70,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x44,0x61,0x73,0x68,0x61,0x72,0x72,0x61,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x44,0x61,0x73,0x68,0x6f,0x66,0x66,0x73,0x65,0x74,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x4d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x57,0x69,0x64,0x74,0x68,0x3a,0x21,0x30,0x7d,0x2c,0x6d,0x65,0x3d,0x5b,0x22,0x57,0x65,0x62,0x6b,0x69,0x74,0x22,0x2c,0x22,0x6d,0x73,0x22,0x2c,0x22,0x4d,0x6f,0x7a,0x22,0x2c,0x22,0x4f,0x22,0x5d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6e,0x7c,0x7c,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x7c,0x7c,0x22,0x22,0x3d,0x3d,0x3d,0x6e,0x3f,0x22,0x22,0x3a,0x74,0x7c,0x7c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x7c,0x7c,0x30,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x29,0x26,0x26,0x70,0x65,0x5b,0x65,0x5d,0x3f,0x28,0x22,0x22,0x2b,0x6e,0x29,0x2e,0x74,0x72,0x69,0x6d,0x28,0x29,0x3a,0x6e,0x2b,0x22,0x70,0x78,0x22,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x20,0x69,0x6e,0x20,0x65,0x3d,0x65,0x2e,0x73,0x74,0x79,0x6c,0x65,0x2c,0x6e,0x29,0x69,0x66,0x28,0x6e,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x74,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x30,0x3d,0x3d,0x3d,0x74,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x22,0x2d,0x2d,0x22,0x29,0x2c,0x6c,0x3d,0x68,0x65,0x28,0x74,0x2c,0x6e,0x5b,0x74,0x5d,0x2c,0x72,0x29,0x3b,0x22,0x66,0x6c,0x6f,0x61,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x28,0x74,0x3d,0x22,0x63,0x73,0x73,0x46,0x6c,0x6f,0x61,0x74,0x22,0x29,0x2c,0x72,0x3f,0x65,0x2e,0x73,0x65,0x74,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x74,0x2c,0x6c,0x29,0x3a,0x65,0x5b,0x74,0x5d,0x3d,0x6c,0x7d,0x7d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x70,0x65,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x6d,0x65,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x6e,0x29,0x7b,0x6e,0x3d,0x6e,0x2b,0x65,0x2e,0x63,0x68,0x61,0x72,0x41,0x74,0x28,0x30,0x29,0x2e,0x74,0x6f,0x55,0x70,0x70,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2b,0x65,0x2e,0x73,0x75,0x62,0x73,0x74,0x72,0x69,0x6e,0x67,0x28,0x31,0x29,0x2c,0x70,0x65,0x5b,0x6e,0x5d,0x3d,0x70,0x65,0x5b,0x65,0x5d,0x7d,0x29,0x29,0x7d,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x65,0x3d,0x44,0x28,0x7b,0x6d,0x65,0x6e,0x75,0x69,0x74,0x65,0x6d,0x3a,0x21,0x30,0x7d,0x2c,0x7b,0x61,0x72,0x65,0x61,0x3a,0x21,0x30,0x2c,0x62,0x61,0x73,0x65,0x3a,0x21,0x30,0x2c,0x62,0x72,0x3a,0x21,0x30,0x2c,0x63,0x6f,0x6c,0x3a,0x21,0x30,0x2c,0x65,0x6d,0x62,0x65,0x64,0x3a,0x21,0x30,0x2c,0x68,0x72,0x3a,0x21,0x30,0x2c,0x69,0x6d,0x67,0x3a,0x21,0x30,0x2c,0x69,0x6e,0x70,0x75,0x74,0x3a,0x21,0x30,0x2c,0x6b,0x65,0x79,0x67,0x65,0x6e,0x3a,0x21,0x30,0x2c,0x6c,0x69,0x6e,0x6b,0x3a,0x21,0x30,0x2c,0x6d,0x65,0x74,0x61,0x3a,0x21,0x30,0x2c,0x70,0x61,0x72,0x61,0x6d,0x3a,0x21,0x30,0x2c,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x21,0x30,0x2c,0x74,0x72,0x61,0x63,0x6b,0x3a,0x21,0x30,0x2c,0x77,0x62,0x72,0x3a,0x21,0x30,0x7d,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x29,0x7b,0x69,0x66,0x28,0x67,0x65,0x5b,0x65,0x5d,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x33,0x37,0x2c,0x65,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x36,0x30,0x29,0x29,0x3b,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x7c,0x7c,0x21,0x28,0x22,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x22,0x69,0x6e,0x20,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x36,0x31,0x29,0x29,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x73,0x74,0x79,0x6c,0x65,0x26,0x26,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x73,0x74,0x79,0x6c,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x36,0x32,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x2d,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x22,0x2d,0x22,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x69,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x61,0x6e,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x78,0x6d,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x73,0x72,0x63,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x75,0x72,0x69,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x66,0x6f,0x72,0x6d,0x61,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x6e,0x61,0x6d,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x69,0x73,0x73,0x69,0x6e,0x67,0x2d,0x67,0x6c,0x79,0x70,0x68,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6b,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x65,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x7c,0x7c,0x65,0x2e,0x73,0x72,0x63,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x29,0x2e,0x63,0x6f,0x72,0x72,0x65,0x73,0x70,0x6f,0x6e,0x64,0x69,0x6e,0x67,0x55,0x73,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x26,0x26,0x28,0x65,0x3d,0x65,0x2e,0x63,0x6f,0x72,0x72,0x65,0x73,0x70,0x6f,0x6e,0x64,0x69,0x6e,0x67,0x55,0x73,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x2c,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x65,0x7d,0x76,0x61,0x72,0x20,0x53,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x78,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x45,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x65,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x3d,0x62,0x6c,0x28,0x65,0x29,0x29,0x7b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x53,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x38,0x30,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x6e,0x26,0x26,0x28,0x6e,0x3d,0x77,0x6c,0x28,0x6e,0x29,0x2c,0x53,0x65,0x28,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6e,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x65,0x28,0x65,0x29,0x7b,0x78,0x65,0x3f,0x45,0x65,0x3f,0x45,0x65,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x3a,0x45,0x65,0x3d,0x5b,0x65,0x5d,0x3a,0x78,0x65,0x3d,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x65,0x28,0x29,0x7b,0x69,0x66,0x28,0x78,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x78,0x65,0x2c,0x6e,0x3d,0x45,0x65,0x3b,0x69,0x66,0x28,0x45,0x65,0x3d,0x78,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x43,0x65,0x28,0x65,0x29,0x2c,0x6e,0x29,0x66,0x6f,0x72,0x28,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x43,0x65,0x28,0x6e,0x5b,0x65,0x5d,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x65,0x28,0x29,0x7b,0x7d,0x76,0x61,0x72,0x20,0x54,0x65,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x54,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x6e,0x2c,0x74,0x29,0x3b,0x54,0x65,0x3d,0x21,0x30,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4e,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x54,0x65,0x3d,0x21,0x31,0x2c,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x78,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x45,0x65,0x29,0x26,0x26,0x28,0x7a,0x65,0x28,0x29,0x2c,0x50,0x65,0x28,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x77,0x6c,0x28,0x74,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x3d,0x72,0x5b,0x6e,0x5d,0x3b,0x65,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x44,0x6f,0x75,0x62,0x6c,0x65,0x43,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x44,0x6f,0x75,0x62,0x6c,0x65,0x43,0x6c,0x69,0x63,0x6b,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x44,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x44,0x6f,0x77,0x6e,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4d,0x6f,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4d,0x6f,0x76,0x65,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x55,0x70,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x55,0x70,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x45,0x6e,0x74,0x65,0x72,0x22,0x3a,0x28,0x72,0x3d,0x21,0x72,0x2e,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x29,0x7c,0x7c,0x28,0x72,0x3d,0x21,0x28,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x29,0x7c,0x7c,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3d,0x3d,0x3d,0x65,0x29,0x29,0x2c,0x65,0x3d,0x21,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x65,0x3d,0x21,0x31,0x7d,0x69,0x66,0x28,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x74,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x33,0x31,0x2c,0x6e,0x2c,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x7d,0x76,0x61,0x72,0x20,0x46,0x65,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x63,0x29,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x4f,0x65,0x3d,0x7b,0x7d,0x3b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x4f,0x65,0x2c,0x22,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x22,0x2c,0x7b,0x67,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x46,0x65,0x3d,0x21,0x30,0x7d,0x7d,0x29,0x2c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x74,0x65,0x73,0x74,0x22,0x2c,0x4f,0x65,0x2c,0x4f,0x65,0x29,0x2c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x22,0x74,0x65,0x73,0x74,0x22,0x2c,0x4f,0x65,0x2c,0x4f,0x65,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x63,0x65,0x29,0x7b,0x46,0x65,0x3d,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x2c,0x75,0x2c,0x69,0x29,0x7b,0x76,0x61,0x72,0x20,0x73,0x3d,0x41,0x72,0x72,0x61,0x79,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x73,0x6c,0x69,0x63,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2c,0x33,0x29,0x3b,0x74,0x72,0x79,0x7b,0x6e,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x2c,0x73,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x6f,0x6e,0x45,0x72,0x72,0x6f,0x72,0x28,0x63,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x49,0x65,0x3d,0x21,0x31,0x2c,0x44,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x55,0x65,0x3d,0x21,0x31,0x2c,0x6a,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x41,0x65,0x3d,0x7b,0x6f,0x6e,0x45,0x72,0x72,0x6f,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x49,0x65,0x3d,0x21,0x30,0x2c,0x44,0x65,0x3d,0x65,0x7d,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x2c,0x75,0x2c,0x69,0x29,0x7b,0x49,0x65,0x3d,0x21,0x31,0x2c,0x44,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4d,0x65,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x41,0x65,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x65,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2c,0x74,0x3d,0x65,0x3b,0x69,0x66,0x28,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x29,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x65,0x3d,0x6e,0x3b,0x64,0x6f,0x7b,0x30,0x21,0x3d,0x3d,0x28,0x34,0x30,0x39,0x38,0x26,0x28,0x6e,0x3d,0x65,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x28,0x74,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x2c,0x65,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x65,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x3f,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x65,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x28,0x6e,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x65,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x24,0x65,0x28,0x65,0x29,0x21,0x3d,0x3d,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x38,0x38,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x65,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x21,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x24,0x65,0x28,0x65,0x29,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x21,0x3d,0x3d,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x65,0x7d,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2c,0x72,0x3d,0x6e,0x3b,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6c,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6c,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6f,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x6c,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x29,0x7b,0x74,0x3d,0x72,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x3d,0x3d,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x66,0x6f,0x72,0x28,0x6f,0x3d,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6f,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6f,0x3d,0x3d,0x3d,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x65,0x28,0x6c,0x29,0x2c,0x65,0x3b,0x69,0x66,0x28,0x6f,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x65,0x28,0x6c,0x29,0x2c,0x6e,0x3b,0x6f,0x3d,0x6f,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x38,0x38,0x29,0x29,0x7d,0x69,0x66,0x28,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x3d,0x3d,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x74,0x3d,0x6c,0x2c,0x72,0x3d,0x6f,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x75,0x3d,0x21,0x31,0x2c,0x69,0x3d,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x3b,0x29,0x7b,0x69,0x66,0x28,0x69,0x3d,0x3d,0x3d,0x74,0x29,0x7b,0x75,0x3d,0x21,0x30,0x2c,0x74,0x3d,0x6c,0x2c,0x72,0x3d,0x6f,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x69,0x3d,0x3d,0x3d,0x72,0x29,0x7b,0x75,0x3d,0x21,0x30,0x2c,0x72,0x3d,0x6c,0x2c,0x74,0x3d,0x6f,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x3d,0x69,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x69,0x66,0x28,0x21,0x75,0x29,0x7b,0x66,0x6f,0x72,0x28,0x69,0x3d,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x3b,0x29,0x7b,0x69,0x66,0x28,0x69,0x3d,0x3d,0x3d,0x74,0x29,0x7b,0x75,0x3d,0x21,0x30,0x2c,0x74,0x3d,0x6f,0x2c,0x72,0x3d,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x69,0x3d,0x3d,0x3d,0x72,0x29,0x7b,0x75,0x3d,0x21,0x30,0x2c,0x72,0x3d,0x6f,0x2c,0x74,0x3d,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x3d,0x69,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x69,0x66,0x28,0x21,0x75,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x38,0x39,0x29,0x29,0x7d,0x7d,0x69,0x66,0x28,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x21,0x3d,0x3d,0x72,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x39,0x30,0x29,0x29,0x7d,0x69,0x66,0x28,0x33,0x21,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x3d,0x3d,0x74,0x3f,0x65,0x3a,0x6e,0x7d,0x28,0x65,0x29,0x29,0x3f,0x51,0x65,0x28,0x65,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x65,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x51,0x65,0x28,0x65,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3b,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x71,0x65,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x4b,0x65,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x61,0x6e,0x63,0x65,0x6c,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x59,0x65,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x68,0x6f,0x75,0x6c,0x64,0x59,0x69,0x65,0x6c,0x64,0x2c,0x58,0x65,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x50,0x61,0x69,0x6e,0x74,0x2c,0x47,0x65,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x2c,0x5a,0x65,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x2c,0x4a,0x65,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x65,0x6e,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x55,0x73,0x65,0x72,0x42,0x6c,0x6f,0x63,0x6b,0x69,0x6e,0x67,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x6e,0x6e,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x74,0x6e,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4c,0x6f,0x77,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x72,0x6e,0x3d,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x64,0x6c,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x6c,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x6f,0x6e,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x63,0x6c,0x7a,0x33,0x32,0x3f,0x4d,0x61,0x74,0x68,0x2e,0x63,0x6c,0x7a,0x33,0x32,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3e,0x3e,0x3e,0x3d,0x30,0x2c,0x30,0x3d,0x3d,0x3d,0x65,0x3f,0x33,0x32,0x3a,0x33,0x31,0x2d,0x28,0x75,0x6e,0x28,0x65,0x29,0x2f,0x73,0x6e,0x7c,0x30,0x29,0x7c,0x30,0x7d,0x2c,0x75,0x6e,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6c,0x6f,0x67,0x2c,0x73,0x6e,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x4c,0x4e,0x32,0x3b,0x76,0x61,0x72,0x20,0x63,0x6e,0x3d,0x36,0x34,0x2c,0x66,0x6e,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x6e,0x28,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x26,0x2d,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x34,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x38,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x32,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x32,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x34,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x30,0x39,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x31,0x39,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x33,0x38,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x37,0x36,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x35,0x35,0x33,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x31,0x30,0x37,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x32,0x31,0x34,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x32,0x34,0x32,0x38,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x26,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x33,0x38,0x38,0x36,0x30,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x37,0x37,0x37,0x32,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x33,0x35,0x35,0x34,0x34,0x33,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x37,0x31,0x30,0x38,0x38,0x36,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x26,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x36,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x30,0x2c,0x6c,0x3d,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x61,0x3d,0x65,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x6f,0x3d,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x26,0x74,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x6f,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6f,0x26,0x7e,0x6c,0x3b,0x30,0x21,0x3d,0x3d,0x75,0x3f,0x72,0x3d,0x64,0x6e,0x28,0x75,0x29,0x3a,0x30,0x21,0x3d,0x3d,0x28,0x61,0x26,0x3d,0x6f,0x29,0x26,0x26,0x28,0x72,0x3d,0x64,0x6e,0x28,0x61,0x29,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x30,0x21,0x3d,0x3d,0x28,0x6f,0x3d,0x74,0x26,0x7e,0x6c,0x29,0x3f,0x72,0x3d,0x64,0x6e,0x28,0x6f,0x29,0x3a,0x30,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x72,0x3d,0x64,0x6e,0x28,0x61,0x29,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x21,0x3d,0x3d,0x72,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x6e,0x26,0x6c,0x29,0x26,0x26,0x28,0x28,0x6c,0x3d,0x72,0x26,0x2d,0x72,0x29,0x3e,0x3d,0x28,0x61,0x3d,0x6e,0x26,0x2d,0x6e,0x29,0x7c,0x7c,0x31,0x36,0x3d,0x3d,0x3d,0x6c,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x26,0x61,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x34,0x26,0x72,0x29,0x26,0x26,0x28,0x72,0x7c,0x3d,0x31,0x36,0x26,0x74,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x65,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x29,0x66,0x6f,0x72,0x28,0x65,0x3d,0x65,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x2c,0x6e,0x26,0x3d,0x72,0x3b,0x30,0x3c,0x6e,0x3b,0x29,0x6c,0x3d,0x31,0x3c,0x3c,0x28,0x74,0x3d,0x33,0x31,0x2d,0x6f,0x6e,0x28,0x6e,0x29,0x29,0x2c,0x72,0x7c,0x3d,0x65,0x5b,0x74,0x5d,0x2c,0x6e,0x26,0x3d,0x7e,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2b,0x32,0x35,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x32,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x34,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x30,0x39,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x31,0x39,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x33,0x38,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x37,0x36,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x35,0x35,0x33,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x31,0x30,0x37,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x32,0x31,0x34,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x32,0x34,0x32,0x38,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2b,0x35,0x65,0x33,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x2d,0x31,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x2d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x35,0x26,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x29,0x3f,0x65,0x3a,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x26,0x65,0x3f,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3a,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x6e,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x26,0x28,0x63,0x6e,0x3c,0x3c,0x3d,0x31,0x29,0x29,0x26,0x26,0x28,0x63,0x6e,0x3d,0x36,0x34,0x29,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x6e,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x3d,0x5b,0x5d,0x2c,0x74,0x3d,0x30,0x3b,0x33,0x31,0x3e,0x74,0x3b,0x74,0x2b,0x2b,0x29,0x6e,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x2c,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x65,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x29,0x2c,0x28,0x65,0x3d,0x65,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x29,0x5b,0x6e,0x3d,0x33,0x31,0x2d,0x6f,0x6e,0x28,0x6e,0x29,0x5d,0x3d,0x74,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x65,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x3b,0x74,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x33,0x31,0x2d,0x6f,0x6e,0x28,0x74,0x29,0x2c,0x6c,0x3d,0x31,0x3c,0x3c,0x72,0x3b,0x6c,0x26,0x6e,0x7c,0x65,0x5b,0x72,0x5d,0x26,0x6e,0x26,0x26,0x28,0x65,0x5b,0x72,0x5d,0x7c,0x3d,0x6e,0x29,0x2c,0x74,0x26,0x3d,0x7e,0x6c,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6b,0x6e,0x3d,0x30,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3c,0x28,0x65,0x26,0x3d,0x2d,0x65,0x29,0x3f,0x34,0x3c,0x65,0x3f,0x30,0x21,0x3d,0x3d,0x28,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x26,0x65,0x29,0x3f,0x31,0x36,0x3a,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x34,0x3a,0x31,0x7d,0x76,0x61,0x72,0x20,0x53,0x6e,0x2c,0x78,0x6e,0x2c,0x45,0x6e,0x2c,0x43,0x6e,0x2c,0x5f,0x6e,0x2c,0x50,0x6e,0x3d,0x21,0x31,0x2c,0x4e,0x6e,0x3d,0x5b,0x5d,0x2c,0x7a,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x54,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4c,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x52,0x6e,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x2c,0x46,0x6e,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x2c,0x4f,0x6e,0x3d,0x5b,0x5d,0x2c,0x4d,0x6e,0x3d,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x20,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x20,0x74,0x6f,0x75,0x63,0x68,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x74,0x6f,0x75,0x63,0x68,0x65,0x6e,0x64,0x20,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x20,0x61,0x75,0x78,0x63,0x6c,0x69,0x63,0x6b,0x20,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x20,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x20,0x64,0x72,0x61,0x67,0x73,0x74,0x61,0x72,0x74,0x20,0x64,0x72,0x6f,0x70,0x20,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x20,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x20,0x63,0x6f,0x70,0x79,0x20,0x63,0x75,0x74,0x20,0x70,0x61,0x73,0x74,0x65,0x20,0x63,0x6c,0x69,0x63,0x6b,0x20,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x20,0x72,0x65,0x73,0x65,0x74,0x20,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x3a,0x7a,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x6c,0x65,0x61,0x76,0x65,0x22,0x3a,0x54,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x22,0x3a,0x4c,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x22,0x3a,0x52,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x67,0x6f,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6c,0x6f,0x73,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x46,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x65,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x61,0x3f,0x28,0x65,0x3d,0x7b,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3a,0x6e,0x2c,0x64,0x6f,0x6d,0x45,0x76,0x65,0x6e,0x74,0x4e,0x61,0x6d,0x65,0x3a,0x74,0x2c,0x65,0x76,0x65,0x6e,0x74,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6c,0x61,0x67,0x73,0x3a,0x72,0x2c,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3a,0x61,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x73,0x3a,0x5b,0x6c,0x5d,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x62,0x6c,0x28,0x6e,0x29,0x29,0x26,0x26,0x78,0x6e,0x28,0x6e,0x29,0x29,0x2c,0x65,0x29,0x3a,0x28,0x65,0x2e,0x65,0x76,0x65,0x6e,0x74,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x72,0x2c,0x6e,0x3d,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x2d,0x31,0x3d,0x3d,0x3d,0x6e,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x6c,0x29,0x26,0x26,0x6e,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x29,0x2c,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x79,0x6c,0x28,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x24,0x65,0x28,0x6e,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x74,0x2e,0x74,0x61,0x67,0x29,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x42,0x65,0x28,0x74,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x2c,0x76,0x6f,0x69,0x64,0x20,0x5f,0x6e,0x28,0x65,0x2e,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x45,0x6e,0x28,0x74,0x29,0x7d,0x29,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x28,0x65,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x33,0x3d,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x3f,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x65,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x73,0x3b,0x30,0x3c,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x58,0x6e,0x28,0x65,0x2e,0x64,0x6f,0x6d,0x45,0x76,0x65,0x6e,0x74,0x4e,0x61,0x6d,0x65,0x2c,0x65,0x2e,0x65,0x76,0x65,0x6e,0x74,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6c,0x61,0x67,0x73,0x2c,0x6e,0x5b,0x30,0x5d,0x2c,0x65,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x62,0x6c,0x28,0x74,0x29,0x29,0x26,0x26,0x78,0x6e,0x28,0x6e,0x29,0x2c,0x65,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x74,0x2c,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x65,0x77,0x28,0x74,0x3d,0x65,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x29,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x6f,0x72,0x28,0x74,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x29,0x3b,0x6b,0x65,0x3d,0x72,0x2c,0x74,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x28,0x72,0x29,0x2c,0x6b,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x73,0x68,0x69,0x66,0x74,0x28,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x6a,0x6e,0x28,0x65,0x29,0x26,0x26,0x74,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x6e,0x28,0x29,0x7b,0x50,0x6e,0x3d,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x7a,0x6e,0x26,0x26,0x6a,0x6e,0x28,0x7a,0x6e,0x29,0x26,0x26,0x28,0x7a,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x54,0x6e,0x26,0x26,0x6a,0x6e,0x28,0x54,0x6e,0x29,0x26,0x26,0x28,0x54,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4c,0x6e,0x26,0x26,0x6a,0x6e,0x28,0x4c,0x6e,0x29,0x26,0x26,0x28,0x4c,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x52,0x6e,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x41,0x6e,0x29,0x2c,0x46,0x6e,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x41,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x65,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x65,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x50,0x6e,0x7c,0x7c,0x28,0x50,0x6e,0x3d,0x21,0x30,0x2c,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x28,0x6c,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x56,0x6e,0x29,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x6e,0x28,0x65,0x29,0x7b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x28,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x24,0x6e,0x28,0x6e,0x2c,0x65,0x29,0x7d,0x69,0x66,0x28,0x30,0x3c,0x4e,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x7b,0x24,0x6e,0x28,0x4e,0x6e,0x5b,0x30,0x5d,0x2c,0x65,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x31,0x3b,0x74,0x3c,0x4e,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x4e,0x6e,0x5b,0x74,0x5d,0x3b,0x72,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x72,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x7d,0x66,0x6f,0x72,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x7a,0x6e,0x26,0x26,0x24,0x6e,0x28,0x7a,0x6e,0x2c,0x65,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x54,0x6e,0x26,0x26,0x24,0x6e,0x28,0x54,0x6e,0x2c,0x65,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4c,0x6e,0x26,0x26,0x24,0x6e,0x28,0x4c,0x6e,0x2c,0x65,0x29,0x2c,0x52,0x6e,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x6e,0x29,0x2c,0x46,0x6e,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x6e,0x29,0x2c,0x74,0x3d,0x30,0x3b,0x74,0x3c,0x4f,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x28,0x72,0x3d,0x4f,0x6e,0x5b,0x74,0x5d,0x29,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x72,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x4f,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x4f,0x6e,0x5b,0x30,0x5d,0x29,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3b,0x29,0x55,0x6e,0x28,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x26,0x26,0x4f,0x6e,0x2e,0x73,0x68,0x69,0x66,0x74,0x28,0x29,0x7d,0x76,0x61,0x72,0x20,0x48,0x6e,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x57,0x6e,0x3d,0x21,0x30,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6b,0x6e,0x2c,0x61,0x3d,0x48,0x6e,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x48,0x6e,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x72,0x79,0x7b,0x6b,0x6e,0x3d,0x31,0x2c,0x4b,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6b,0x6e,0x3d,0x6c,0x2c,0x48,0x6e,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x61,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6b,0x6e,0x2c,0x61,0x3d,0x48,0x6e,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x48,0x6e,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x72,0x79,0x7b,0x6b,0x6e,0x3d,0x34,0x2c,0x4b,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6b,0x6e,0x3d,0x6c,0x2c,0x48,0x6e,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x61,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x57,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x58,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6c,0x29,0x48,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x59,0x6e,0x2c,0x74,0x29,0x2c,0x49,0x6e,0x28,0x65,0x2c,0x72,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x7a,0x6e,0x3d,0x44,0x6e,0x28,0x7a,0x6e,0x2c,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x54,0x6e,0x3d,0x44,0x6e,0x28,0x54,0x6e,0x2c,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4c,0x6e,0x3d,0x44,0x6e,0x28,0x4c,0x6e,0x2c,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x3a,0x76,0x61,0x72,0x20,0x61,0x3d,0x6c,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x6e,0x2e,0x73,0x65,0x74,0x28,0x61,0x2c,0x44,0x6e,0x28,0x52,0x6e,0x2e,0x67,0x65,0x74,0x28,0x61,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x29,0x2c,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x22,0x67,0x6f,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x6c,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x2c,0x46,0x6e,0x2e,0x73,0x65,0x74,0x28,0x61,0x2c,0x44,0x6e,0x28,0x46,0x6e,0x2e,0x67,0x65,0x74,0x28,0x61,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x29,0x2c,0x21,0x30,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x28,0x6c,0x2c,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x29,0x72,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x49,0x6e,0x28,0x65,0x2c,0x72,0x29,0x2c,0x34,0x26,0x6e,0x26,0x26,0x2d,0x31,0x3c,0x4d,0x6e,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x65,0x29,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x62,0x6c,0x28,0x6c,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x53,0x6e,0x28,0x61,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x61,0x3d,0x58,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x29,0x26,0x26,0x48,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x59,0x6e,0x2c,0x74,0x29,0x2c,0x61,0x3d,0x3d,0x3d,0x6c,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x6c,0x3d,0x61,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x72,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x48,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x59,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x59,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x79,0x6c,0x28,0x65,0x3d,0x77,0x65,0x28,0x72,0x29,0x29,0x29,0x29,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x24,0x65,0x28,0x65,0x29,0x29,0x29,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x29,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x42,0x65,0x28,0x6e,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x3f,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x59,0x6e,0x3d,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x6e,0x28,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6c,0x6f,0x73,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x70,0x79,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x61,0x75,0x78,0x63,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x73,0x74,0x61,0x72,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x6f,0x70,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x61,0x73,0x74,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x61,0x75,0x73,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6c,0x61,0x79,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x72,0x61,0x74,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x72,0x65,0x73,0x65,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x72,0x65,0x73,0x69,0x7a,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x65,0x6b,0x65,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x65,0x6e,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x76,0x6f,0x6c,0x75,0x6d,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x75,0x70,0x64,0x61,0x74,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x62,0x6c,0x75,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x61,0x66,0x74,0x65,0x72,0x62,0x6c,0x75,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x62,0x6c,0x75,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x75,0x6c,0x6c,0x73,0x63,0x72,0x65,0x65,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x68,0x61,0x73,0x68,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x70,0x73,0x74,0x61,0x74,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x73,0x74,0x61,0x72,0x74,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3b,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x78,0x69,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x6c,0x65,0x61,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6d,0x6f,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6d,0x6f,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x67,0x67,0x6c,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x6d,0x6f,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x77,0x68,0x65,0x65,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x65,0x6e,0x74,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6c,0x65,0x61,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x65,0x6e,0x74,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x34,0x3b,0x63,0x61,0x73,0x65,0x22,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x22,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x5a,0x65,0x28,0x29,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x4a,0x65,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x65,0x6e,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x34,0x3b,0x63,0x61,0x73,0x65,0x20,0x6e,0x6e,0x3a,0x63,0x61,0x73,0x65,0x20,0x74,0x6e,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x3b,0x63,0x61,0x73,0x65,0x20,0x72,0x6e,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x7d,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x7d,0x7d,0x76,0x61,0x72,0x20,0x5a,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4a,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x74,0x28,0x29,0x7b,0x69,0x66,0x28,0x65,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x74,0x3b,0x76,0x61,0x72,0x20,0x65,0x2c,0x6e,0x2c,0x74,0x3d,0x4a,0x6e,0x2c,0x72,0x3d,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2c,0x6c,0x3d,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x69,0x6e,0x20,0x5a,0x6e,0x3f,0x5a,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3a,0x5a,0x6e,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x61,0x3d,0x6c,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x72,0x26,0x26,0x74,0x5b,0x65,0x5d,0x3d,0x3d,0x3d,0x6c,0x5b,0x65,0x5d,0x3b,0x65,0x2b,0x2b,0x29,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x72,0x2d,0x65,0x3b,0x66,0x6f,0x72,0x28,0x6e,0x3d,0x31,0x3b,0x6e,0x3c,0x3d,0x6f,0x26,0x26,0x74,0x5b,0x72,0x2d,0x6e,0x5d,0x3d,0x3d,0x3d,0x6c,0x5b,0x61,0x2d,0x6e,0x5d,0x3b,0x6e,0x2b,0x2b,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x74,0x3d,0x6c,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x65,0x2c,0x31,0x3c,0x6e,0x3f,0x31,0x2d,0x6e,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x74,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x63,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x22,0x69,0x6e,0x20,0x65,0x3f,0x30,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x63,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x29,0x26,0x26,0x31,0x33,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x65,0x3d,0x31,0x33,0x29,0x3a,0x65,0x3d,0x6e,0x2c,0x31,0x30,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x65,0x3d,0x31,0x33,0x29,0x2c,0x33,0x32,0x3c,0x3d,0x65,0x7c,0x7c,0x31,0x33,0x3d,0x3d,0x3d,0x65,0x3f,0x65,0x3a,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x74,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x74,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x74,0x28,0x65,0x29,0x7b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x28,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6f,0x20,0x69,0x6e,0x20,0x74,0x68,0x69,0x73,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x4e,0x61,0x6d,0x65,0x3d,0x6e,0x2c,0x74,0x68,0x69,0x73,0x2e,0x5f,0x74,0x61,0x72,0x67,0x65,0x74,0x49,0x6e,0x73,0x74,0x3d,0x72,0x2c,0x74,0x68,0x69,0x73,0x2e,0x74,0x79,0x70,0x65,0x3d,0x74,0x2c,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3d,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x61,0x2c,0x74,0x68,0x69,0x73,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x29,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6f,0x29,0x26,0x26,0x28,0x6e,0x3d,0x65,0x5b,0x6f,0x5d,0x2c,0x74,0x68,0x69,0x73,0x5b,0x6f,0x5d,0x3d,0x6e,0x3f,0x6e,0x28,0x6c,0x29,0x3a,0x6c,0x5b,0x6f,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3d,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6c,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3f,0x6c,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3a,0x21,0x31,0x3d,0x3d,0x3d,0x6c,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x56,0x61,0x6c,0x75,0x65,0x29,0x3f,0x72,0x74,0x3a,0x6c,0x74,0x2c,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x3d,0x6c,0x74,0x2c,0x74,0x68,0x69,0x73,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x44,0x28,0x6e,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2c,0x7b,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3b,0x65,0x26,0x26,0x28,0x65,0x2e,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x3f,0x65,0x2e,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x29,0x3a,0x22,0x75,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x28,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x56,0x61,0x6c,0x75,0x65,0x3d,0x21,0x31,0x29,0x2c,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3d,0x72,0x74,0x29,0x7d,0x2c,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3b,0x65,0x26,0x26,0x28,0x65,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x3f,0x65,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3a,0x22,0x75,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x42,0x75,0x62,0x62,0x6c,0x65,0x26,0x26,0x28,0x65,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x42,0x75,0x62,0x62,0x6c,0x65,0x3d,0x21,0x30,0x29,0x2c,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x3d,0x72,0x74,0x29,0x7d,0x2c,0x70,0x65,0x72,0x73,0x69,0x73,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x69,0x73,0x50,0x65,0x72,0x73,0x69,0x73,0x74,0x65,0x6e,0x74,0x3a,0x72,0x74,0x7d,0x29,0x2c,0x6e,0x7d,0x76,0x61,0x72,0x20,0x6f,0x74,0x2c,0x75,0x74,0x2c,0x69,0x74,0x2c,0x73,0x74,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x50,0x68,0x61,0x73,0x65,0x3a,0x30,0x2c,0x62,0x75,0x62,0x62,0x6c,0x65,0x73,0x3a,0x30,0x2c,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x3a,0x30,0x2c,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x7c,0x7c,0x44,0x61,0x74,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x7d,0x2c,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3a,0x30,0x2c,0x69,0x73,0x54,0x72,0x75,0x73,0x74,0x65,0x64,0x3a,0x30,0x7d,0x2c,0x63,0x74,0x3d,0x61,0x74,0x28,0x73,0x74,0x29,0x2c,0x66,0x74,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x73,0x74,0x2c,0x7b,0x76,0x69,0x65,0x77,0x3a,0x30,0x2c,0x64,0x65,0x74,0x61,0x69,0x6c,0x3a,0x30,0x7d,0x29,0x2c,0x64,0x74,0x3d,0x61,0x74,0x28,0x66,0x74,0x29,0x2c,0x70,0x74,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x66,0x74,0x2c,0x7b,0x73,0x63,0x72,0x65,0x65,0x6e,0x58,0x3a,0x30,0x2c,0x73,0x63,0x72,0x65,0x65,0x6e,0x59,0x3a,0x30,0x2c,0x63,0x6c,0x69,0x65,0x6e,0x74,0x58,0x3a,0x30,0x2c,0x63,0x6c,0x69,0x65,0x6e,0x74,0x59,0x3a,0x30,0x2c,0x70,0x61,0x67,0x65,0x58,0x3a,0x30,0x2c,0x70,0x61,0x67,0x65,0x59,0x3a,0x30,0x2c,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x61,0x6c,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x43,0x74,0x2c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3a,0x30,0x2c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x73,0x3a,0x30,0x2c,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3f,0x65,0x2e,0x66,0x72,0x6f,0x6d,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x3d,0x3d,0x65,0x2e,0x73,0x72,0x63,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3f,0x65,0x2e,0x74,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x65,0x2e,0x66,0x72,0x6f,0x6d,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x65,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x7d,0x2c,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x58,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x58,0x22,0x69,0x6e,0x20,0x65,0x3f,0x65,0x2e,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x58,0x3a,0x28,0x65,0x21,0x3d,0x3d,0x69,0x74,0x26,0x26,0x28,0x69,0x74,0x26,0x26,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6d,0x6f,0x76,0x65,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x28,0x6f,0x74,0x3d,0x65,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x58,0x2d,0x69,0x74,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x58,0x2c,0x75,0x74,0x3d,0x65,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x59,0x2d,0x69,0x74,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x59,0x29,0x3a,0x75,0x74,0x3d,0x6f,0x74,0x3d,0x30,0x2c,0x69,0x74,0x3d,0x65,0x29,0x2c,0x6f,0x74,0x29,0x7d,0x2c,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x59,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x59,0x22,0x69,0x6e,0x20,0x65,0x3f,0x65,0x2e,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x59,0x3a,0x75,0x74,0x7d,0x7d,0x29,0x2c,0x6d,0x74,0x3d,0x61,0x74,0x28,0x70,0x74,0x29,0x2c,0x68,0x74,0x3d,0x61,0x74,0x28,0x44,0x28,0x7b,0x7d,0x2c,0x70,0x74,0x2c,0x7b,0x64,0x61,0x74,0x61,0x54,0x72,0x61,0x6e,0x73,0x66,0x65,0x72,0x3a,0x30,0x7d,0x29,0x29,0x2c,0x76,0x74,0x3d,0x61,0x74,0x28,0x44,0x28,0x7b,0x7d,0x2c,0x66,0x74,0x2c,0x7b,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3a,0x30,0x7d,0x29,0x29,0x2c,0x67,0x74,0x3d,0x61,0x74,0x28,0x44,0x28,0x7b,0x7d,0x2c,0x73,0x74,0x2c,0x7b,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x4e,0x61,0x6d,0x65,0x3a,0x30,0x2c,0x65,0x6c,0x61,0x70,0x73,0x65,0x64,0x54,0x69,0x6d,0x65,0x3a,0x30,0x2c,0x70,0x73,0x65,0x75,0x64,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x30,0x7d,0x29,0x29,0x2c,0x79,0x74,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x73,0x74,0x2c,0x7b,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x22,0x69,0x6e,0x20,0x65,0x3f,0x65,0x2e,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x7d,0x7d,0x29,0x2c,0x62,0x74,0x3d,0x61,0x74,0x28,0x79,0x74,0x29,0x2c,0x6b,0x74,0x3d,0x61,0x74,0x28,0x44,0x28,0x7b,0x7d,0x2c,0x73,0x74,0x2c,0x7b,0x64,0x61,0x74,0x61,0x3a,0x30,0x7d,0x29,0x29,0x2c,0x77,0x74,0x3d,0x7b,0x45,0x73,0x63,0x3a,0x22,0x45,0x73,0x63,0x61,0x70,0x65,0x22,0x2c,0x53,0x70,0x61,0x63,0x65,0x62,0x61,0x72,0x3a,0x22,0x20,0x22,0x2c,0x4c,0x65,0x66,0x74,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x4c,0x65,0x66,0x74,0x22,0x2c,0x55,0x70,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x55,0x70,0x22,0x2c,0x52,0x69,0x67,0x68,0x74,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x52,0x69,0x67,0x68,0x74,0x22,0x2c,0x44,0x6f,0x77,0x6e,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x44,0x6f,0x77,0x6e,0x22,0x2c,0x44,0x65,0x6c,0x3a,0x22,0x44,0x65,0x6c,0x65,0x74,0x65,0x22,0x2c,0x57,0x69,0x6e,0x3a,0x22,0x4f,0x53,0x22,0x2c,0x4d,0x65,0x6e,0x75,0x3a,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x4d,0x65,0x6e,0x75,0x22,0x2c,0x41,0x70,0x70,0x73,0x3a,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x4d,0x65,0x6e,0x75,0x22,0x2c,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x3a,0x22,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x6f,0x63,0x6b,0x22,0x2c,0x4d,0x6f,0x7a,0x50,0x72,0x69,0x6e,0x74,0x61,0x62,0x6c,0x65,0x4b,0x65,0x79,0x3a,0x22,0x55,0x6e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x64,0x22,0x7d,0x2c,0x53,0x74,0x3d,0x7b,0x38,0x3a,0x22,0x42,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x22,0x2c,0x39,0x3a,0x22,0x54,0x61,0x62,0x22,0x2c,0x31,0x32,0x3a,0x22,0x43,0x6c,0x65,0x61,0x72,0x22,0x2c,0x31,0x33,0x3a,0x22,0x45,0x6e,0x74,0x65,0x72,0x22,0x2c,0x31,0x36,0x3a,0x22,0x53,0x68,0x69,0x66,0x74,0x22,0x2c,0x31,0x37,0x3a,0x22,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x22,0x2c,0x31,0x38,0x3a,0x22,0x41,0x6c,0x74,0x22,0x2c,0x31,0x39,0x3a,0x22,0x50,0x61,0x75,0x73,0x65,0x22,0x2c,0x32,0x30,0x3a,0x22,0x43,0x61,0x70,0x73,0x4c,0x6f,0x63,0x6b,0x22,0x2c,0x32,0x37,0x3a,0x22,0x45,0x73,0x63,0x61,0x70,0x65,0x22,0x2c,0x33,0x32,0x3a,0x22,0x20,0x22,0x2c,0x33,0x33,0x3a,0x22,0x50,0x61,0x67,0x65,0x55,0x70,0x22,0x2c,0x33,0x34,0x3a,0x22,0x50,0x61,0x67,0x65,0x44,0x6f,0x77,0x6e,0x22,0x2c,0x33,0x35,0x3a,0x22,0x45,0x6e,0x64,0x22,0x2c,0x33,0x36,0x3a,0x22,0x48,0x6f,0x6d,0x65,0x22,0x2c,0x33,0x37,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x4c,0x65,0x66,0x74,0x22,0x2c,0x33,0x38,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x55,0x70,0x22,0x2c,0x33,0x39,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x52,0x69,0x67,0x68,0x74,0x22,0x2c,0x34,0x30,0x3a,0x22,0x41,0x72,0x72,0x6f,0x77,0x44,0x6f,0x77,0x6e,0x22,0x2c,0x34,0x35,0x3a,0x22,0x49,0x6e,0x73,0x65,0x72,0x74,0x22,0x2c,0x34,0x36,0x3a,0x22,0x44,0x65,0x6c,0x65,0x74,0x65,0x22,0x2c,0x31,0x31,0x32,0x3a,0x22,0x46,0x31,0x22,0x2c,0x31,0x31,0x33,0x3a,0x22,0x46,0x32,0x22,0x2c,0x31,0x31,0x34,0x3a,0x22,0x46,0x33,0x22,0x2c,0x31,0x31,0x35,0x3a,0x22,0x46,0x34,0x22,0x2c,0x31,0x31,0x36,0x3a,0x22,0x46,0x35,0x22,0x2c,0x31,0x31,0x37,0x3a,0x22,0x46,0x36,0x22,0x2c,0x31,0x31,0x38,0x3a,0x22,0x46,0x37,0x22,0x2c,0x31,0x31,0x39,0x3a,0x22,0x46,0x38,0x22,0x2c,0x31,0x32,0x30,0x3a,0x22,0x46,0x39,0x22,0x2c,0x31,0x32,0x31,0x3a,0x22,0x46,0x31,0x30,0x22,0x2c,0x31,0x32,0x32,0x3a,0x22,0x46,0x31,0x31,0x22,0x2c,0x31,0x32,0x33,0x3a,0x22,0x46,0x31,0x32,0x22,0x2c,0x31,0x34,0x34,0x3a,0x22,0x4e,0x75,0x6d,0x4c,0x6f,0x63,0x6b,0x22,0x2c,0x31,0x34,0x35,0x3a,0x22,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x6f,0x63,0x6b,0x22,0x2c,0x32,0x32,0x34,0x3a,0x22,0x4d,0x65,0x74,0x61,0x22,0x7d,0x2c,0x78,0x74,0x3d,0x7b,0x41,0x6c,0x74,0x3a,0x22,0x61,0x6c,0x74,0x4b,0x65,0x79,0x22,0x2c,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x3a,0x22,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x22,0x2c,0x4d,0x65,0x74,0x61,0x3a,0x22,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x22,0x2c,0x53,0x68,0x69,0x66,0x74,0x3a,0x22,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x22,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x74,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3f,0x6e,0x2e,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x28,0x65,0x29,0x3a,0x21,0x21,0x28,0x65,0x3d,0x78,0x74,0x5b,0x65,0x5d,0x29,0x26,0x26,0x21,0x21,0x6e,0x5b,0x65,0x5d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x74,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x45,0x74,0x7d,0x76,0x61,0x72,0x20,0x5f,0x74,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x66,0x74,0x2c,0x7b,0x6b,0x65,0x79,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x2e,0x6b,0x65,0x79,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x77,0x74,0x5b,0x65,0x2e,0x6b,0x65,0x79,0x5d,0x7c,0x7c,0x65,0x2e,0x6b,0x65,0x79,0x3b,0x69,0x66,0x28,0x22,0x55,0x6e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x64,0x22,0x21,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x31,0x33,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x74,0x74,0x28,0x65,0x29,0x29,0x3f,0x22,0x45,0x6e,0x74,0x65,0x72,0x22,0x3a,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x66,0x72,0x6f,0x6d,0x43,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x28,0x65,0x29,0x3a,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x53,0x74,0x5b,0x65,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x5d,0x7c,0x7c,0x22,0x55,0x6e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x64,0x22,0x3a,0x22,0x22,0x7d,0x2c,0x63,0x6f,0x64,0x65,0x3a,0x30,0x2c,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x30,0x2c,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x61,0x6c,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x72,0x65,0x70,0x65,0x61,0x74,0x3a,0x30,0x2c,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x3a,0x30,0x2c,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x43,0x74,0x2c,0x63,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x74,0x74,0x28,0x65,0x29,0x3a,0x30,0x7d,0x2c,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x65,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3a,0x30,0x7d,0x2c,0x77,0x68,0x69,0x63,0x68,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x74,0x74,0x28,0x65,0x29,0x3a,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x65,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3a,0x30,0x7d,0x7d,0x29,0x2c,0x50,0x74,0x3d,0x61,0x74,0x28,0x5f,0x74,0x29,0x2c,0x4e,0x74,0x3d,0x61,0x74,0x28,0x44,0x28,0x7b,0x7d,0x2c,0x70,0x74,0x2c,0x7b,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x3a,0x30,0x2c,0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2c,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x30,0x2c,0x70,0x72,0x65,0x73,0x73,0x75,0x72,0x65,0x3a,0x30,0x2c,0x74,0x61,0x6e,0x67,0x65,0x6e,0x74,0x69,0x61,0x6c,0x50,0x72,0x65,0x73,0x73,0x75,0x72,0x65,0x3a,0x30,0x2c,0x74,0x69,0x6c,0x74,0x58,0x3a,0x30,0x2c,0x74,0x69,0x6c,0x74,0x59,0x3a,0x30,0x2c,0x74,0x77,0x69,0x73,0x74,0x3a,0x30,0x2c,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x54,0x79,0x70,0x65,0x3a,0x30,0x2c,0x69,0x73,0x50,0x72,0x69,0x6d,0x61,0x72,0x79,0x3a,0x30,0x7d,0x29,0x29,0x2c,0x7a,0x74,0x3d,0x61,0x74,0x28,0x44,0x28,0x7b,0x7d,0x2c,0x66,0x74,0x2c,0x7b,0x74,0x6f,0x75,0x63,0x68,0x65,0x73,0x3a,0x30,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x6f,0x75,0x63,0x68,0x65,0x73,0x3a,0x30,0x2c,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x54,0x6f,0x75,0x63,0x68,0x65,0x73,0x3a,0x30,0x2c,0x61,0x6c,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x43,0x74,0x7d,0x29,0x29,0x2c,0x54,0x74,0x3d,0x61,0x74,0x28,0x44,0x28,0x7b,0x7d,0x2c,0x73,0x74,0x2c,0x7b,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x3a,0x30,0x2c,0x65,0x6c,0x61,0x70,0x73,0x65,0x64,0x54,0x69,0x6d,0x65,0x3a,0x30,0x2c,0x70,0x73,0x65,0x75,0x64,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x30,0x7d,0x29,0x29,0x2c,0x4c,0x74,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x70,0x74,0x2c,0x7b,0x64,0x65,0x6c,0x74,0x61,0x58,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x64,0x65,0x6c,0x74,0x61,0x58,0x22,0x69,0x6e,0x20,0x65,0x3f,0x65,0x2e,0x64,0x65,0x6c,0x74,0x61,0x58,0x3a,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x58,0x22,0x69,0x6e,0x20,0x65,0x3f,0x2d,0x65,0x2e,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x58,0x3a,0x30,0x7d,0x2c,0x64,0x65,0x6c,0x74,0x61,0x59,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x64,0x65,0x6c,0x74,0x61,0x59,0x22,0x69,0x6e,0x20,0x65,0x3f,0x65,0x2e,0x64,0x65,0x6c,0x74,0x61,0x59,0x3a,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x59,0x22,0x69,0x6e,0x20,0x65,0x3f,0x2d,0x65,0x2e,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x59,0x3a,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x22,0x69,0x6e,0x20,0x65,0x3f,0x2d,0x65,0x2e,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x3a,0x30,0x7d,0x2c,0x64,0x65,0x6c,0x74,0x61,0x5a,0x3a,0x30,0x2c,0x64,0x65,0x6c,0x74,0x61,0x4d,0x6f,0x64,0x65,0x3a,0x30,0x7d,0x29,0x2c,0x52,0x74,0x3d,0x61,0x74,0x28,0x4c,0x74,0x29,0x2c,0x46,0x74,0x3d,0x5b,0x39,0x2c,0x31,0x33,0x2c,0x32,0x37,0x2c,0x33,0x32,0x5d,0x2c,0x4f,0x74,0x3d,0x63,0x26,0x26,0x22,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x76,0x65,0x6e,0x74,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2c,0x4d,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x26,0x26,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x22,0x69,0x6e,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x28,0x4d,0x74,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x29,0x3b,0x76,0x61,0x72,0x20,0x49,0x74,0x3d,0x63,0x26,0x26,0x22,0x54,0x65,0x78,0x74,0x45,0x76,0x65,0x6e,0x74,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x26,0x26,0x21,0x4d,0x74,0x2c,0x44,0x74,0x3d,0x63,0x26,0x26,0x28,0x21,0x4f,0x74,0x7c,0x7c,0x4d,0x74,0x26,0x26,0x38,0x3c,0x4d,0x74,0x26,0x26,0x31,0x31,0x3e,0x3d,0x4d,0x74,0x29,0x2c,0x55,0x74,0x3d,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x66,0x72,0x6f,0x6d,0x43,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x28,0x33,0x32,0x29,0x2c,0x6a,0x74,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x74,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x2d,0x31,0x21,0x3d,0x3d,0x46,0x74,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x6e,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x29,0x3b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x32,0x39,0x21,0x3d,0x3d,0x6e,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x74,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x65,0x3d,0x65,0x2e,0x64,0x65,0x74,0x61,0x69,0x6c,0x29,0x26,0x26,0x22,0x64,0x61,0x74,0x61,0x22,0x69,0x6e,0x20,0x65,0x3f,0x65,0x2e,0x64,0x61,0x74,0x61,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x24,0x74,0x3d,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x42,0x74,0x3d,0x7b,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x21,0x30,0x2c,0x64,0x61,0x74,0x65,0x3a,0x21,0x30,0x2c,0x64,0x61,0x74,0x65,0x74,0x69,0x6d,0x65,0x3a,0x21,0x30,0x2c,0x22,0x64,0x61,0x74,0x65,0x74,0x69,0x6d,0x65,0x2d,0x6c,0x6f,0x63,0x61,0x6c,0x22,0x3a,0x21,0x30,0x2c,0x65,0x6d,0x61,0x69,0x6c,0x3a,0x21,0x30,0x2c,0x6d,0x6f,0x6e,0x74,0x68,0x3a,0x21,0x30,0x2c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x3a,0x21,0x30,0x2c,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3a,0x21,0x30,0x2c,0x72,0x61,0x6e,0x67,0x65,0x3a,0x21,0x30,0x2c,0x73,0x65,0x61,0x72,0x63,0x68,0x3a,0x21,0x30,0x2c,0x74,0x65,0x6c,0x3a,0x21,0x30,0x2c,0x74,0x65,0x78,0x74,0x3a,0x21,0x30,0x2c,0x74,0x69,0x6d,0x65,0x3a,0x21,0x30,0x2c,0x75,0x72,0x6c,0x3a,0x21,0x30,0x2c,0x77,0x65,0x65,0x6b,0x3a,0x21,0x30,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x74,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x26,0x26,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x26,0x26,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x6e,0x3f,0x21,0x21,0x42,0x74,0x5b,0x65,0x2e,0x74,0x79,0x70,0x65,0x5d,0x3a,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3d,0x3d,0x3d,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x74,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x5f,0x65,0x28,0x72,0x29,0x2c,0x30,0x3c,0x28,0x6e,0x3d,0x51,0x72,0x28,0x6e,0x2c,0x22,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x22,0x29,0x29,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x74,0x3d,0x6e,0x65,0x77,0x20,0x63,0x74,0x28,0x22,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x2c,0x72,0x29,0x2c,0x65,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x74,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x6e,0x7d,0x29,0x29,0x7d,0x76,0x61,0x72,0x20,0x51,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x71,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x74,0x28,0x65,0x29,0x7b,0x55,0x72,0x28,0x65,0x2c,0x30,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x74,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x71,0x28,0x6b,0x6c,0x28,0x65,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x74,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x76,0x61,0x72,0x20,0x47,0x74,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x5a,0x74,0x3b,0x69,0x66,0x28,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x4a,0x74,0x3d,0x22,0x6f,0x6e,0x69,0x6e,0x70,0x75,0x74,0x22,0x69,0x6e,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3b,0x69,0x66,0x28,0x21,0x4a,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x72,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x22,0x64,0x69,0x76,0x22,0x29,0x3b,0x65,0x72,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x22,0x6f,0x6e,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x22,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x22,0x29,0x2c,0x4a,0x74,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x72,0x2e,0x6f,0x6e,0x69,0x6e,0x70,0x75,0x74,0x7d,0x5a,0x74,0x3d,0x4a,0x74,0x7d,0x65,0x6c,0x73,0x65,0x20,0x5a,0x74,0x3d,0x21,0x31,0x3b,0x47,0x74,0x3d,0x5a,0x74,0x26,0x26,0x28,0x21,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x7c,0x7c,0x39,0x3c,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x72,0x28,0x29,0x7b,0x51,0x74,0x26,0x26,0x28,0x51,0x74,0x2e,0x64,0x65,0x74,0x61,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x28,0x22,0x6f,0x6e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x74,0x72,0x29,0x2c,0x71,0x74,0x3d,0x51,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x72,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x26,0x26,0x59,0x74,0x28,0x71,0x74,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x5b,0x5d,0x3b,0x57,0x74,0x28,0x6e,0x2c,0x71,0x74,0x2c,0x65,0x2c,0x77,0x65,0x28,0x65,0x29,0x29,0x2c,0x4c,0x65,0x28,0x4b,0x74,0x2c,0x6e,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x22,0x3d,0x3d,0x3d,0x65,0x3f,0x28,0x6e,0x72,0x28,0x29,0x2c,0x71,0x74,0x3d,0x74,0x2c,0x28,0x51,0x74,0x3d,0x6e,0x29,0x2e,0x61,0x74,0x74,0x61,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x28,0x22,0x6f,0x6e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x74,0x72,0x29,0x29,0x3a,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x72,0x28,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x72,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x59,0x74,0x28,0x71,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x22,0x63,0x6c,0x69,0x63,0x6b,0x22,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x59,0x74,0x28,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x59,0x74,0x28,0x6e,0x29,0x7d,0x76,0x61,0x72,0x20,0x75,0x72,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x69,0x73,0x3f,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x69,0x73,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x65,0x7c,0x7c,0x31,0x2f,0x65,0x3d,0x3d,0x3d,0x31,0x2f,0x6e,0x29,0x7c,0x7c,0x65,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x21,0x3d,0x3d,0x6e,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x75,0x72,0x28,0x65,0x2c,0x6e,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x65,0x29,0x2c,0x72,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x6e,0x29,0x3b,0x69,0x66,0x28,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x21,0x3d,0x3d,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x66,0x6f,0x72,0x28,0x72,0x3d,0x30,0x3b,0x72,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x72,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x5b,0x72,0x5d,0x3b,0x69,0x66,0x28,0x21,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6e,0x2c,0x6c,0x29,0x7c,0x7c,0x21,0x75,0x72,0x28,0x65,0x5b,0x6c,0x5d,0x2c,0x6e,0x5b,0x6c,0x5d,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x72,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x65,0x26,0x26,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x65,0x3d,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x2c,0x72,0x3d,0x73,0x72,0x28,0x65,0x29,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x30,0x3b,0x72,0x3b,0x29,0x7b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x72,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x69,0x66,0x28,0x74,0x3d,0x65,0x2b,0x72,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2c,0x65,0x3c,0x3d,0x6e,0x26,0x26,0x74,0x3e,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x6e,0x6f,0x64,0x65,0x3a,0x72,0x2c,0x6f,0x66,0x66,0x73,0x65,0x74,0x3a,0x6e,0x2d,0x65,0x7d,0x3b,0x65,0x3d,0x74,0x7d,0x65,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x72,0x3b,0x29,0x7b,0x69,0x66,0x28,0x72,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7b,0x72,0x3d,0x72,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x72,0x3d,0x72,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x72,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x72,0x3d,0x73,0x72,0x28,0x72,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x21,0x65,0x7c,0x7c,0x21,0x6e,0x29,0x26,0x26,0x28,0x65,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x28,0x21,0x65,0x7c,0x7c,0x33,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x26,0x26,0x28,0x6e,0x26,0x26,0x33,0x3d,0x3d,0x3d,0x6e,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x66,0x72,0x28,0x65,0x2c,0x6e,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x29,0x3a,0x22,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x73,0x22,0x69,0x6e,0x20,0x65,0x3f,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x73,0x28,0x6e,0x29,0x3a,0x21,0x21,0x65,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x26,0x26,0x21,0x21,0x28,0x31,0x36,0x26,0x65,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x28,0x6e,0x29,0x29,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x72,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x65,0x3d,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2c,0x6e,0x3d,0x4b,0x28,0x29,0x3b,0x6e,0x20,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x6f,0x66,0x20,0x65,0x2e,0x48,0x54,0x4d,0x4c,0x49,0x46,0x72,0x61,0x6d,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3b,0x29,0x7b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x72,0x29,0x7b,0x74,0x3d,0x21,0x31,0x7d,0x69,0x66,0x28,0x21,0x74,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x6e,0x3d,0x4b,0x28,0x28,0x65,0x3d,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x29,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x72,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x26,0x26,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x26,0x26,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x26,0x26,0x28,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x22,0x74,0x65,0x78,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x73,0x65,0x61,0x72,0x63,0x68,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x74,0x65,0x6c,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x75,0x72,0x6c,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x29,0x7c,0x7c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x22,0x74,0x72,0x75,0x65,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x72,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x64,0x72,0x28,0x29,0x2c,0x74,0x3d,0x65,0x2e,0x66,0x6f,0x63,0x75,0x73,0x65,0x64,0x45,0x6c,0x65,0x6d,0x2c,0x72,0x3d,0x65,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x52,0x61,0x6e,0x67,0x65,0x3b,0x69,0x66,0x28,0x6e,0x21,0x3d,0x3d,0x74,0x26,0x26,0x74,0x26,0x26,0x74,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x66,0x72,0x28,0x74,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2c,0x74,0x29,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x70,0x72,0x28,0x74,0x29,0x29,0x69,0x66,0x28,0x6e,0x3d,0x72,0x2e,0x73,0x74,0x61,0x72,0x74,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x72,0x2e,0x65,0x6e,0x64,0x29,0x26,0x26,0x28,0x65,0x3d,0x6e,0x29,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x69,0x6e,0x20,0x74,0x29,0x74,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x3d,0x6e,0x2c,0x74,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x69,0x6e,0x28,0x65,0x2c,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x28,0x65,0x3d,0x28,0x6e,0x3d,0x74,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x26,0x26,0x6e,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x29,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x29,0x7b,0x65,0x3d,0x65,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2c,0x61,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x69,0x6e,0x28,0x72,0x2e,0x73,0x74,0x61,0x72,0x74,0x2c,0x6c,0x29,0x3b,0x72,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x72,0x2e,0x65,0x6e,0x64,0x3f,0x61,0x3a,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x69,0x6e,0x28,0x72,0x2e,0x65,0x6e,0x64,0x2c,0x6c,0x29,0x2c,0x21,0x65,0x2e,0x65,0x78,0x74,0x65,0x6e,0x64,0x26,0x26,0x61,0x3e,0x72,0x26,0x26,0x28,0x6c,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x2c,0x61,0x3d,0x6c,0x29,0x2c,0x6c,0x3d,0x63,0x72,0x28,0x74,0x2c,0x61,0x29,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x63,0x72,0x28,0x74,0x2c,0x72,0x29,0x3b,0x6c,0x26,0x26,0x6f,0x26,0x26,0x28,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x72,0x61,0x6e,0x67,0x65,0x43,0x6f,0x75,0x6e,0x74,0x7c,0x7c,0x65,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x21,0x3d,0x3d,0x6c,0x2e,0x6e,0x6f,0x64,0x65,0x7c,0x7c,0x65,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x21,0x3d,0x3d,0x6c,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x7c,0x7c,0x65,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x21,0x3d,0x3d,0x6f,0x2e,0x6e,0x6f,0x64,0x65,0x7c,0x7c,0x65,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x21,0x3d,0x3d,0x6f,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x26,0x26,0x28,0x28,0x6e,0x3d,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x61,0x6e,0x67,0x65,0x28,0x29,0x29,0x2e,0x73,0x65,0x74,0x53,0x74,0x61,0x72,0x74,0x28,0x6c,0x2e,0x6e,0x6f,0x64,0x65,0x2c,0x6c,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x2c,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x6c,0x6c,0x52,0x61,0x6e,0x67,0x65,0x73,0x28,0x29,0x2c,0x61,0x3e,0x72,0x3f,0x28,0x65,0x2e,0x61,0x64,0x64,0x52,0x61,0x6e,0x67,0x65,0x28,0x6e,0x29,0x2c,0x65,0x2e,0x65,0x78,0x74,0x65,0x6e,0x64,0x28,0x6f,0x2e,0x6e,0x6f,0x64,0x65,0x2c,0x6f,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x29,0x3a,0x28,0x6e,0x2e,0x73,0x65,0x74,0x45,0x6e,0x64,0x28,0x6f,0x2e,0x6e,0x6f,0x64,0x65,0x2c,0x6f,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x2c,0x65,0x2e,0x61,0x64,0x64,0x52,0x61,0x6e,0x67,0x65,0x28,0x6e,0x29,0x29,0x29,0x7d,0x66,0x6f,0x72,0x28,0x6e,0x3d,0x5b,0x5d,0x2c,0x65,0x3d,0x74,0x3b,0x65,0x3d,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x29,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x6e,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x65,0x2c,0x6c,0x65,0x66,0x74,0x3a,0x65,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x65,0x66,0x74,0x2c,0x74,0x6f,0x70,0x3a,0x65,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x54,0x6f,0x70,0x7d,0x29,0x3b,0x66,0x6f,0x72,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x2e,0x66,0x6f,0x63,0x75,0x73,0x26,0x26,0x74,0x2e,0x66,0x6f,0x63,0x75,0x73,0x28,0x29,0x2c,0x74,0x3d,0x30,0x3b,0x74,0x3c,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x28,0x65,0x3d,0x6e,0x5b,0x74,0x5d,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x65,0x66,0x74,0x3d,0x65,0x2e,0x6c,0x65,0x66,0x74,0x2c,0x65,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x54,0x6f,0x70,0x3d,0x65,0x2e,0x74,0x6f,0x70,0x7d,0x7d,0x76,0x61,0x72,0x20,0x68,0x72,0x3d,0x63,0x26,0x26,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x22,0x69,0x6e,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x31,0x31,0x3e,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x2c,0x76,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x67,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x79,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x72,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x2e,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3d,0x3d,0x3d,0x74,0x3f,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3a,0x39,0x3d,0x3d,0x3d,0x74,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x74,0x3a,0x74,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3b,0x62,0x72,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x76,0x72,0x7c,0x7c,0x76,0x72,0x21,0x3d,0x3d,0x4b,0x28,0x72,0x29,0x7c,0x7c,0x28,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x69,0x6e,0x28,0x72,0x3d,0x76,0x72,0x29,0x26,0x26,0x70,0x72,0x28,0x72,0x29,0x3f,0x72,0x3d,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x72,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x2c,0x65,0x6e,0x64,0x3a,0x72,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x7d,0x3a,0x72,0x3d,0x7b,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x3a,0x28,0x72,0x3d,0x28,0x72,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x72,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x29,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x29,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x2c,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x3a,0x72,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x2c,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x3a,0x72,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x2c,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x3a,0x72,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x7d,0x2c,0x79,0x72,0x26,0x26,0x69,0x72,0x28,0x79,0x72,0x2c,0x72,0x29,0x7c,0x7c,0x28,0x79,0x72,0x3d,0x72,0x2c,0x30,0x3c,0x28,0x72,0x3d,0x51,0x72,0x28,0x67,0x72,0x2c,0x22,0x6f,0x6e,0x53,0x65,0x6c,0x65,0x63,0x74,0x22,0x29,0x29,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x6e,0x3d,0x6e,0x65,0x77,0x20,0x63,0x74,0x28,0x22,0x6f,0x6e,0x53,0x65,0x6c,0x65,0x63,0x74,0x22,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x65,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x6e,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x72,0x7d,0x29,0x2c,0x6e,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x76,0x72,0x29,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x7b,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x5b,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x5d,0x3d,0x6e,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x74,0x5b,0x22,0x57,0x65,0x62,0x6b,0x69,0x74,0x22,0x2b,0x65,0x5d,0x3d,0x22,0x77,0x65,0x62,0x6b,0x69,0x74,0x22,0x2b,0x6e,0x2c,0x74,0x5b,0x22,0x4d,0x6f,0x7a,0x22,0x2b,0x65,0x5d,0x3d,0x22,0x6d,0x6f,0x7a,0x22,0x2b,0x6e,0x2c,0x74,0x7d,0x76,0x61,0x72,0x20,0x53,0x72,0x3d,0x7b,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x3a,0x77,0x72,0x28,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x29,0x2c,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x69,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x77,0x72,0x28,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x49,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x22,0x29,0x2c,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x3a,0x77,0x72,0x28,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x29,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x3a,0x77,0x72,0x28,0x22,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x29,0x7d,0x2c,0x78,0x72,0x3d,0x7b,0x7d,0x2c,0x45,0x72,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x72,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x78,0x72,0x5b,0x65,0x5d,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x78,0x72,0x5b,0x65,0x5d,0x3b,0x69,0x66,0x28,0x21,0x53,0x72,0x5b,0x65,0x5d,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x76,0x61,0x72,0x20,0x6e,0x2c,0x74,0x3d,0x53,0x72,0x5b,0x65,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x6e,0x20,0x69,0x6e,0x20,0x74,0x29,0x69,0x66,0x28,0x74,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6e,0x29,0x26,0x26,0x6e,0x20,0x69,0x6e,0x20,0x45,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x78,0x72,0x5b,0x65,0x5d,0x3d,0x74,0x5b,0x6e,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x63,0x26,0x26,0x28,0x45,0x72,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x22,0x64,0x69,0x76,0x22,0x29,0x2e,0x73,0x74,0x79,0x6c,0x65,0x2c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x45,0x76,0x65,0x6e,0x74,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x7c,0x7c,0x28,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x53,0x72,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x53,0x72,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x69,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x53,0x72,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x29,0x2c,0x22,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x76,0x65,0x6e,0x74,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x7c,0x7c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x53,0x72,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,0x3b,0x76,0x61,0x72,0x20,0x5f,0x72,0x3d,0x43,0x72,0x28,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x29,0x2c,0x50,0x72,0x3d,0x43,0x72,0x28,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x69,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x22,0x29,0x2c,0x4e,0x72,0x3d,0x43,0x72,0x28,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x22,0x29,0x2c,0x7a,0x72,0x3d,0x43,0x72,0x28,0x22,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x29,0x2c,0x54,0x72,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x2c,0x4c,0x72,0x3d,0x22,0x61,0x62,0x6f,0x72,0x74,0x20,0x61,0x75,0x78,0x43,0x6c,0x69,0x63,0x6b,0x20,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x63,0x61,0x6e,0x50,0x6c,0x61,0x79,0x20,0x63,0x61,0x6e,0x50,0x6c,0x61,0x79,0x54,0x68,0x72,0x6f,0x75,0x67,0x68,0x20,0x63,0x6c,0x69,0x63,0x6b,0x20,0x63,0x6c,0x6f,0x73,0x65,0x20,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x4d,0x65,0x6e,0x75,0x20,0x63,0x6f,0x70,0x79,0x20,0x63,0x75,0x74,0x20,0x64,0x72,0x61,0x67,0x20,0x64,0x72,0x61,0x67,0x45,0x6e,0x64,0x20,0x64,0x72,0x61,0x67,0x45,0x6e,0x74,0x65,0x72,0x20,0x64,0x72,0x61,0x67,0x45,0x78,0x69,0x74,0x20,0x64,0x72,0x61,0x67,0x4c,0x65,0x61,0x76,0x65,0x20,0x64,0x72,0x61,0x67,0x4f,0x76,0x65,0x72,0x20,0x64,0x72,0x61,0x67,0x53,0x74,0x61,0x72,0x74,0x20,0x64,0x72,0x6f,0x70,0x20,0x64,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x65,0x6d,0x70,0x74,0x69,0x65,0x64,0x20,0x65,0x6e,0x63,0x72,0x79,0x70,0x74,0x65,0x64,0x20,0x65,0x6e,0x64,0x65,0x64,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x67,0x6f,0x74,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x20,0x6b,0x65,0x79,0x44,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x50,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x55,0x70,0x20,0x6c,0x6f,0x61,0x64,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x44,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x53,0x74,0x61,0x72,0x74,0x20,0x6c,0x6f,0x73,0x74,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x20,0x6d,0x6f,0x75,0x73,0x65,0x44,0x6f,0x77,0x6e,0x20,0x6d,0x6f,0x75,0x73,0x65,0x4d,0x6f,0x76,0x65,0x20,0x6d,0x6f,0x75,0x73,0x65,0x4f,0x75,0x74,0x20,0x6d,0x6f,0x75,0x73,0x65,0x4f,0x76,0x65,0x72,0x20,0x6d,0x6f,0x75,0x73,0x65,0x55,0x70,0x20,0x70,0x61,0x73,0x74,0x65,0x20,0x70,0x61,0x75,0x73,0x65,0x20,0x70,0x6c,0x61,0x79,0x20,0x70,0x6c,0x61,0x79,0x69,0x6e,0x67,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x43,0x61,0x6e,0x63,0x65,0x6c,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x44,0x6f,0x77,0x6e,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4d,0x6f,0x76,0x65,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4f,0x75,0x74,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4f,0x76,0x65,0x72,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x55,0x70,0x20,0x70,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x20,0x72,0x61,0x74,0x65,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x72,0x65,0x73,0x65,0x74,0x20,0x72,0x65,0x73,0x69,0x7a,0x65,0x20,0x73,0x65,0x65,0x6b,0x65,0x64,0x20,0x73,0x65,0x65,0x6b,0x69,0x6e,0x67,0x20,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x20,0x73,0x75,0x62,0x6d,0x69,0x74,0x20,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x20,0x74,0x69,0x6d,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x20,0x74,0x6f,0x75,0x63,0x68,0x43,0x61,0x6e,0x63,0x65,0x6c,0x20,0x74,0x6f,0x75,0x63,0x68,0x45,0x6e,0x64,0x20,0x74,0x6f,0x75,0x63,0x68,0x53,0x74,0x61,0x72,0x74,0x20,0x76,0x6f,0x6c,0x75,0x6d,0x65,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x20,0x74,0x6f,0x67,0x67,0x6c,0x65,0x20,0x74,0x6f,0x75,0x63,0x68,0x4d,0x6f,0x76,0x65,0x20,0x77,0x61,0x69,0x74,0x69,0x6e,0x67,0x20,0x77,0x68,0x65,0x65,0x6c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x54,0x72,0x2e,0x73,0x65,0x74,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x69,0x28,0x6e,0x2c,0x5b,0x65,0x5d,0x29,0x7d,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x46,0x72,0x3d,0x30,0x3b,0x46,0x72,0x3c,0x4c,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x46,0x72,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x4f,0x72,0x3d,0x4c,0x72,0x5b,0x46,0x72,0x5d,0x3b,0x52,0x72,0x28,0x4f,0x72,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x22,0x6f,0x6e,0x22,0x2b,0x28,0x4f,0x72,0x5b,0x30,0x5d,0x2e,0x74,0x6f,0x55,0x70,0x70,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2b,0x4f,0x72,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x31,0x29,0x29,0x29,0x7d,0x52,0x72,0x28,0x5f,0x72,0x2c,0x22,0x6f,0x6e,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x29,0x2c,0x52,0x72,0x28,0x50,0x72,0x2c,0x22,0x6f,0x6e,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x49,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x22,0x29,0x2c,0x52,0x72,0x28,0x4e,0x72,0x2c,0x22,0x6f,0x6e,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x29,0x2c,0x52,0x72,0x28,0x22,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x22,0x2c,0x22,0x6f,0x6e,0x44,0x6f,0x75,0x62,0x6c,0x65,0x43,0x6c,0x69,0x63,0x6b,0x22,0x29,0x2c,0x52,0x72,0x28,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x22,0x2c,0x22,0x6f,0x6e,0x46,0x6f,0x63,0x75,0x73,0x22,0x29,0x2c,0x52,0x72,0x28,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x2c,0x22,0x6f,0x6e,0x42,0x6c,0x75,0x72,0x22,0x29,0x2c,0x52,0x72,0x28,0x7a,0x72,0x2c,0x22,0x6f,0x6e,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x29,0x2c,0x73,0x28,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x45,0x6e,0x74,0x65,0x72,0x22,0x2c,0x5b,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x22,0x2c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x22,0x5d,0x29,0x2c,0x73,0x28,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4c,0x65,0x61,0x76,0x65,0x22,0x2c,0x5b,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x22,0x2c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x22,0x5d,0x29,0x2c,0x73,0x28,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x45,0x6e,0x74,0x65,0x72,0x22,0x2c,0x5b,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x22,0x2c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x5d,0x29,0x2c,0x73,0x28,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4c,0x65,0x61,0x76,0x65,0x22,0x2c,0x5b,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x22,0x2c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x5d,0x29,0x2c,0x69,0x28,0x22,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x63,0x6c,0x69,0x63,0x6b,0x20,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x29,0x2c,0x69,0x28,0x22,0x6f,0x6e,0x53,0x65,0x6c,0x65,0x63,0x74,0x22,0x2c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x20,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x20,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x20,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x20,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x29,0x2c,0x69,0x28,0x22,0x6f,0x6e,0x42,0x65,0x66,0x6f,0x72,0x65,0x49,0x6e,0x70,0x75,0x74,0x22,0x2c,0x5b,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x2c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x2c,0x22,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x22,0x2c,0x22,0x70,0x61,0x73,0x74,0x65,0x22,0x5d,0x29,0x2c,0x69,0x28,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x29,0x2c,0x69,0x28,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x29,0x2c,0x69,0x28,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x4d,0x72,0x3d,0x22,0x61,0x62,0x6f,0x72,0x74,0x20,0x63,0x61,0x6e,0x70,0x6c,0x61,0x79,0x20,0x63,0x61,0x6e,0x70,0x6c,0x61,0x79,0x74,0x68,0x72,0x6f,0x75,0x67,0x68,0x20,0x64,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x65,0x6d,0x70,0x74,0x69,0x65,0x64,0x20,0x65,0x6e,0x63,0x72,0x79,0x70,0x74,0x65,0x64,0x20,0x65,0x6e,0x64,0x65,0x64,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x64,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x6d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x73,0x74,0x61,0x72,0x74,0x20,0x70,0x61,0x75,0x73,0x65,0x20,0x70,0x6c,0x61,0x79,0x20,0x70,0x6c,0x61,0x79,0x69,0x6e,0x67,0x20,0x70,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x20,0x72,0x61,0x74,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x72,0x65,0x73,0x69,0x7a,0x65,0x20,0x73,0x65,0x65,0x6b,0x65,0x64,0x20,0x73,0x65,0x65,0x6b,0x69,0x6e,0x67,0x20,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x20,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x20,0x74,0x69,0x6d,0x65,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x76,0x6f,0x6c,0x75,0x6d,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x77,0x61,0x69,0x74,0x69,0x6e,0x67,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x2c,0x49,0x72,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x28,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x63,0x6c,0x6f,0x73,0x65,0x20,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x20,0x6c,0x6f,0x61,0x64,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x20,0x74,0x6f,0x67,0x67,0x6c,0x65,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x22,0x20,0x22,0x29,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x4d,0x72,0x29,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x75,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x2d,0x65,0x76,0x65,0x6e,0x74,0x22,0x3b,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x74,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x6f,0x2c,0x75,0x2c,0x69,0x2c,0x73,0x29,0x7b,0x69,0x66,0x28,0x56,0x65,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x2c,0x49,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x49,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x39,0x38,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x44,0x65,0x3b,0x49,0x65,0x3d,0x21,0x31,0x2c,0x44,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x55,0x65,0x7c,0x7c,0x28,0x55,0x65,0x3d,0x21,0x30,0x2c,0x6a,0x65,0x3d,0x63,0x29,0x7d,0x7d,0x28,0x72,0x2c,0x6e,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x65,0x29,0x2c,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x6e,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x34,0x26,0x6e,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x30,0x3b,0x74,0x3c,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x5b,0x74,0x5d,0x2c,0x6c,0x3d,0x72,0x2e,0x65,0x76,0x65,0x6e,0x74,0x3b,0x72,0x3d,0x72,0x2e,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3b,0x65,0x3a,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x69,0x66,0x28,0x6e,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6f,0x3d,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x3b,0x30,0x3c,0x3d,0x6f,0x3b,0x6f,0x2d,0x2d,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x72,0x5b,0x6f,0x5d,0x2c,0x69,0x3d,0x75,0x2e,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x2c,0x73,0x3d,0x75,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3b,0x69,0x66,0x28,0x75,0x3d,0x75,0x2e,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x2c,0x69,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6c,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x28,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x44,0x72,0x28,0x6c,0x2c,0x75,0x2c,0x73,0x29,0x2c,0x61,0x3d,0x69,0x7d,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x6f,0x3d,0x30,0x3b,0x6f,0x3c,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6f,0x2b,0x2b,0x29,0x7b,0x69,0x66,0x28,0x69,0x3d,0x28,0x75,0x3d,0x72,0x5b,0x6f,0x5d,0x29,0x2e,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x2c,0x73,0x3d,0x75,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x2c,0x75,0x3d,0x75,0x2e,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x2c,0x69,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6c,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x28,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x44,0x72,0x28,0x6c,0x2c,0x75,0x2c,0x73,0x29,0x2c,0x61,0x3d,0x69,0x7d,0x7d,0x7d,0x69,0x66,0x28,0x55,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x65,0x3d,0x6a,0x65,0x2c,0x55,0x65,0x3d,0x21,0x31,0x2c,0x6a,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x5b,0x68,0x6c,0x5d,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x28,0x74,0x3d,0x6e,0x5b,0x68,0x6c,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2b,0x22,0x5f,0x5f,0x62,0x75,0x62,0x62,0x6c,0x65,0x22,0x3b,0x74,0x2e,0x68,0x61,0x73,0x28,0x72,0x29,0x7c,0x7c,0x28,0x42,0x72,0x28,0x6e,0x2c,0x65,0x2c,0x32,0x2c,0x21,0x31,0x29,0x2c,0x74,0x2e,0x61,0x64,0x64,0x28,0x72,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x30,0x3b,0x6e,0x26,0x26,0x28,0x72,0x7c,0x3d,0x34,0x29,0x2c,0x42,0x72,0x28,0x74,0x2c,0x65,0x2c,0x72,0x2c,0x6e,0x29,0x7d,0x76,0x61,0x72,0x20,0x56,0x72,0x3d,0x22,0x5f,0x72,0x65,0x61,0x63,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x69,0x6e,0x67,0x22,0x2b,0x4d,0x61,0x74,0x68,0x2e,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x28,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x36,0x29,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x32,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x72,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x65,0x5b,0x56,0x72,0x5d,0x29,0x7b,0x65,0x5b,0x56,0x72,0x5d,0x3d,0x21,0x30,0x2c,0x6f,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x6e,0x29,0x7b,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x49,0x72,0x2e,0x68,0x61,0x73,0x28,0x6e,0x29,0x7c,0x7c,0x41,0x72,0x28,0x6e,0x2c,0x21,0x31,0x2c,0x65,0x29,0x2c,0x41,0x72,0x28,0x6e,0x2c,0x21,0x30,0x2c,0x65,0x29,0x29,0x7d,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x39,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x65,0x3a,0x65,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x6e,0x5b,0x56,0x72,0x5d,0x7c,0x7c,0x28,0x6e,0x5b,0x56,0x72,0x5d,0x3d,0x21,0x30,0x2c,0x41,0x72,0x28,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x21,0x31,0x2c,0x6e,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x47,0x6e,0x28,0x6e,0x29,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x6c,0x3d,0x51,0x6e,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x6c,0x3d,0x71,0x6e,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x6c,0x3d,0x4b,0x6e,0x7d,0x74,0x3d,0x6c,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x74,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x21,0x46,0x65,0x7c,0x7c,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x22,0x74,0x6f,0x75,0x63,0x68,0x6d,0x6f,0x76,0x65,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x22,0x77,0x68,0x65,0x65,0x6c,0x22,0x21,0x3d,0x3d,0x6e,0x7c,0x7c,0x28,0x6c,0x3d,0x21,0x30,0x29,0x2c,0x72,0x3f,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6c,0x3f,0x65,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x6e,0x2c,0x74,0x2c,0x7b,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x3a,0x21,0x30,0x2c,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x3a,0x6c,0x7d,0x29,0x3a,0x65,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x6e,0x2c,0x74,0x2c,0x21,0x30,0x29,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6c,0x3f,0x65,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x6e,0x2c,0x74,0x2c,0x7b,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x3a,0x6c,0x7d,0x29,0x3a,0x65,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x6e,0x2c,0x74,0x2c,0x21,0x31,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x72,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x26,0x6e,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x65,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x72,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x6f,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x6f,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x72,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x69,0x66,0x28,0x75,0x3d,0x3d,0x3d,0x6c,0x7c,0x7c,0x38,0x3d,0x3d,0x3d,0x75,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x75,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3d,0x3d,0x3d,0x6c,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x69,0x66,0x28,0x34,0x3d,0x3d,0x3d,0x6f,0x29,0x66,0x6f,0x72,0x28,0x6f,0x3d,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3d,0x6f,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x28,0x33,0x3d,0x3d,0x3d,0x69,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x69,0x29,0x26,0x26,0x28,0x28,0x69,0x3d,0x6f,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x3d,0x3d,0x3d,0x6c,0x7c,0x7c,0x38,0x3d,0x3d,0x3d,0x69,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x69,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3d,0x3d,0x3d,0x6c,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6f,0x3d,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6f,0x3d,0x79,0x6c,0x28,0x75,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x28,0x69,0x3d,0x6f,0x2e,0x74,0x61,0x67,0x29,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x69,0x29,0x7b,0x72,0x3d,0x61,0x3d,0x6f,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x20,0x65,0x7d,0x75,0x3d,0x75,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x7d,0x72,0x3d,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x4c,0x65,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x61,0x2c,0x6c,0x3d,0x77,0x65,0x28,0x74,0x29,0x2c,0x6f,0x3d,0x5b,0x5d,0x3b,0x65,0x3a,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x54,0x72,0x2e,0x67,0x65,0x74,0x28,0x65,0x29,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x75,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3d,0x63,0x74,0x2c,0x73,0x3d,0x65,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3a,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x74,0x74,0x28,0x74,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3a,0x69,0x3d,0x50,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x22,0x3a,0x73,0x3d,0x22,0x66,0x6f,0x63,0x75,0x73,0x22,0x2c,0x69,0x3d,0x76,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x3a,0x73,0x3d,0x22,0x62,0x6c,0x75,0x72,0x22,0x2c,0x69,0x3d,0x76,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x62,0x6c,0x75,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x61,0x66,0x74,0x65,0x72,0x62,0x6c,0x75,0x72,0x22,0x3a,0x69,0x3d,0x76,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x63,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x69,0x66,0x28,0x32,0x3d,0x3d,0x3d,0x74,0x2e,0x62,0x75,0x74,0x74,0x6f,0x6e,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x22,0x61,0x75,0x78,0x63,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6d,0x6f,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x22,0x3a,0x69,0x3d,0x6d,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x78,0x69,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x6c,0x65,0x61,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x73,0x74,0x61,0x72,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x6f,0x70,0x22,0x3a,0x69,0x3d,0x68,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x65,0x6e,0x64,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x6d,0x6f,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x22,0x3a,0x69,0x3d,0x7a,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5f,0x72,0x3a,0x63,0x61,0x73,0x65,0x20,0x50,0x72,0x3a,0x63,0x61,0x73,0x65,0x20,0x4e,0x72,0x3a,0x69,0x3d,0x67,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x7a,0x72,0x3a,0x69,0x3d,0x54,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x3a,0x69,0x3d,0x64,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x77,0x68,0x65,0x65,0x6c,0x22,0x3a,0x69,0x3d,0x52,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x70,0x79,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x63,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x61,0x73,0x74,0x65,0x22,0x3a,0x69,0x3d,0x62,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x67,0x6f,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6c,0x6f,0x73,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6d,0x6f,0x76,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x22,0x3a,0x69,0x3d,0x4e,0x74,0x7d,0x76,0x61,0x72,0x20,0x63,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x34,0x26,0x6e,0x29,0x2c,0x66,0x3d,0x21,0x63,0x26,0x26,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x3d,0x3d,0x3d,0x65,0x2c,0x64,0x3d,0x63,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x3f,0x75,0x2b,0x22,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x3a,0x6e,0x75,0x6c,0x6c,0x3a,0x75,0x3b,0x63,0x3d,0x5b,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x70,0x2c,0x6d,0x3d,0x72,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x28,0x70,0x3d,0x6d,0x29,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x70,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x26,0x26,0x28,0x70,0x3d,0x68,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x68,0x3d,0x52,0x65,0x28,0x6d,0x2c,0x64,0x29,0x29,0x26,0x26,0x63,0x2e,0x70,0x75,0x73,0x68,0x28,0x57,0x72,0x28,0x6d,0x2c,0x68,0x2c,0x70,0x29,0x29,0x29,0x29,0x2c,0x66,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x6d,0x3d,0x6d,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x30,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x75,0x3d,0x6e,0x65,0x77,0x20,0x69,0x28,0x75,0x2c,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x2c,0x6c,0x29,0x2c,0x6f,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x75,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x63,0x7d,0x29,0x29,0x7d,0x7d,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x37,0x26,0x6e,0x29,0x29,0x7b,0x69,0x66,0x28,0x69,0x3d,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x2c,0x28,0x21,0x28,0x75,0x3d,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x65,0x29,0x7c,0x7c,0x74,0x3d,0x3d,0x3d,0x6b,0x65,0x7c,0x7c,0x21,0x28,0x73,0x3d,0x74,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x7c,0x7c,0x74,0x2e,0x66,0x72,0x6f,0x6d,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x7c,0x7c,0x21,0x79,0x6c,0x28,0x73,0x29,0x26,0x26,0x21,0x73,0x5b,0x6d,0x6c,0x5d,0x29,0x26,0x26,0x28,0x69,0x7c,0x7c,0x75,0x29,0x26,0x26,0x28,0x75,0x3d,0x6c,0x2e,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3d,0x3d,0x3d,0x6c,0x3f,0x6c,0x3a,0x28,0x75,0x3d,0x6c,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x3f,0x75,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x75,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2c,0x69,0x3f,0x28,0x69,0x3d,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x73,0x3d,0x28,0x73,0x3d,0x74,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x7c,0x7c,0x74,0x2e,0x74,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x3f,0x79,0x6c,0x28,0x73,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x29,0x26,0x26,0x28,0x73,0x21,0x3d,0x3d,0x28,0x66,0x3d,0x24,0x65,0x28,0x73,0x29,0x29,0x7c,0x7c,0x35,0x21,0x3d,0x3d,0x73,0x2e,0x74,0x61,0x67,0x26,0x26,0x36,0x21,0x3d,0x3d,0x73,0x2e,0x74,0x61,0x67,0x29,0x26,0x26,0x28,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x3a,0x28,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x3d,0x72,0x29,0x2c,0x69,0x21,0x3d,0x3d,0x73,0x29,0x29,0x7b,0x69,0x66,0x28,0x63,0x3d,0x6d,0x74,0x2c,0x68,0x3d,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4c,0x65,0x61,0x76,0x65,0x22,0x2c,0x64,0x3d,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x45,0x6e,0x74,0x65,0x72,0x22,0x2c,0x6d,0x3d,0x22,0x6d,0x6f,0x75,0x73,0x65,0x22,0x2c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x22,0x21,0x3d,0x3d,0x65,0x26,0x26,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x22,0x21,0x3d,0x3d,0x65,0x7c,0x7c,0x28,0x63,0x3d,0x4e,0x74,0x2c,0x68,0x3d,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4c,0x65,0x61,0x76,0x65,0x22,0x2c,0x64,0x3d,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x45,0x6e,0x74,0x65,0x72,0x22,0x2c,0x6d,0x3d,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x22,0x29,0x2c,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x69,0x3f,0x75,0x3a,0x6b,0x6c,0x28,0x69,0x29,0x2c,0x70,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x73,0x3f,0x75,0x3a,0x6b,0x6c,0x28,0x73,0x29,0x2c,0x28,0x75,0x3d,0x6e,0x65,0x77,0x20,0x63,0x28,0x68,0x2c,0x6d,0x2b,0x22,0x6c,0x65,0x61,0x76,0x65,0x22,0x2c,0x69,0x2c,0x74,0x2c,0x6c,0x29,0x29,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x66,0x2c,0x75,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x70,0x2c,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x79,0x6c,0x28,0x6c,0x29,0x3d,0x3d,0x3d,0x72,0x26,0x26,0x28,0x28,0x63,0x3d,0x6e,0x65,0x77,0x20,0x63,0x28,0x64,0x2c,0x6d,0x2b,0x22,0x65,0x6e,0x74,0x65,0x72,0x22,0x2c,0x73,0x2c,0x74,0x2c,0x6c,0x29,0x29,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x70,0x2c,0x63,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x66,0x2c,0x68,0x3d,0x63,0x29,0x2c,0x66,0x3d,0x68,0x2c,0x69,0x26,0x26,0x73,0x29,0x65,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x64,0x3d,0x73,0x2c,0x6d,0x3d,0x30,0x2c,0x70,0x3d,0x63,0x3d,0x69,0x3b,0x70,0x3b,0x70,0x3d,0x71,0x72,0x28,0x70,0x29,0x29,0x6d,0x2b,0x2b,0x3b,0x66,0x6f,0x72,0x28,0x70,0x3d,0x30,0x2c,0x68,0x3d,0x64,0x3b,0x68,0x3b,0x68,0x3d,0x71,0x72,0x28,0x68,0x29,0x29,0x70,0x2b,0x2b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x6d,0x2d,0x70,0x3b,0x29,0x63,0x3d,0x71,0x72,0x28,0x63,0x29,0x2c,0x6d,0x2d,0x2d,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x70,0x2d,0x6d,0x3b,0x29,0x64,0x3d,0x71,0x72,0x28,0x64,0x29,0x2c,0x70,0x2d,0x2d,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6d,0x2d,0x2d,0x3b,0x29,0x7b,0x69,0x66,0x28,0x63,0x3d,0x3d,0x3d,0x64,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x63,0x3d,0x3d,0x3d,0x64,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x3d,0x71,0x72,0x28,0x63,0x29,0x2c,0x64,0x3d,0x71,0x72,0x28,0x64,0x29,0x7d,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x26,0x26,0x4b,0x72,0x28,0x6f,0x2c,0x75,0x2c,0x69,0x2c,0x63,0x2c,0x21,0x31,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x4b,0x72,0x28,0x6f,0x2c,0x66,0x2c,0x73,0x2c,0x63,0x2c,0x21,0x30,0x29,0x7d,0x69,0x66,0x28,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x28,0x69,0x3d,0x28,0x75,0x3d,0x72,0x3f,0x6b,0x6c,0x28,0x72,0x29,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x29,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x26,0x26,0x75,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x29,0x7c,0x7c,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x69,0x26,0x26,0x22,0x66,0x69,0x6c,0x65,0x22,0x3d,0x3d,0x3d,0x75,0x2e,0x74,0x79,0x70,0x65,0x29,0x76,0x61,0x72,0x20,0x76,0x3d,0x58,0x74,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x48,0x74,0x28,0x75,0x29,0x29,0x69,0x66,0x28,0x47,0x74,0x29,0x76,0x3d,0x6f,0x72,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x3d,0x6c,0x72,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x72,0x72,0x7d,0x65,0x6c,0x73,0x65,0x28,0x69,0x3d,0x75,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x29,0x26,0x26,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x69,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x26,0x26,0x28,0x22,0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,0x22,0x3d,0x3d,0x3d,0x75,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x22,0x72,0x61,0x64,0x69,0x6f,0x22,0x3d,0x3d,0x3d,0x75,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x28,0x76,0x3d,0x61,0x72,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x76,0x26,0x26,0x28,0x76,0x3d,0x76,0x28,0x65,0x2c,0x72,0x29,0x29,0x3f,0x57,0x74,0x28,0x6f,0x2c,0x76,0x2c,0x74,0x2c,0x6c,0x29,0x3a,0x28,0x67,0x26,0x26,0x67,0x28,0x65,0x2c,0x75,0x2c,0x72,0x29,0x2c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x67,0x3d,0x75,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x67,0x2e,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x64,0x26,0x26,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x75,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x65,0x65,0x28,0x75,0x2c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x2c,0x75,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x29,0x2c,0x67,0x3d,0x72,0x3f,0x6b,0x6c,0x28,0x72,0x29,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2c,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x22,0x3a,0x28,0x48,0x74,0x28,0x67,0x29,0x7c,0x7c,0x22,0x74,0x72,0x75,0x65,0x22,0x3d,0x3d,0x3d,0x67,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x29,0x26,0x26,0x28,0x76,0x72,0x3d,0x67,0x2c,0x67,0x72,0x3d,0x72,0x2c,0x79,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x22,0x3a,0x79,0x72,0x3d,0x67,0x72,0x3d,0x76,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x62,0x72,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x22,0x3a,0x62,0x72,0x3d,0x21,0x31,0x2c,0x6b,0x72,0x28,0x6f,0x2c,0x74,0x2c,0x6c,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3a,0x69,0x66,0x28,0x68,0x72,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x75,0x70,0x22,0x3a,0x6b,0x72,0x28,0x6f,0x2c,0x74,0x2c,0x6c,0x29,0x7d,0x76,0x61,0x72,0x20,0x79,0x3b,0x69,0x66,0x28,0x4f,0x74,0x29,0x65,0x3a,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x22,0x3a,0x76,0x61,0x72,0x20,0x62,0x3d,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x3a,0x62,0x3d,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x75,0x70,0x64,0x61,0x74,0x65,0x22,0x3a,0x62,0x3d,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x62,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x65,0x6c,0x73,0x65,0x20,0x24,0x74,0x3f,0x41,0x74,0x28,0x65,0x2c,0x74,0x29,0x26,0x26,0x28,0x62,0x3d,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x29,0x3a,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x22,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x32,0x32,0x39,0x3d,0x3d,0x3d,0x74,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x26,0x26,0x28,0x62,0x3d,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x29,0x3b,0x62,0x26,0x26,0x28,0x44,0x74,0x26,0x26,0x22,0x6b,0x6f,0x22,0x21,0x3d,0x3d,0x74,0x2e,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x26,0x26,0x28,0x24,0x74,0x7c,0x7c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x21,0x3d,0x3d,0x62,0x3f,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x24,0x74,0x26,0x26,0x28,0x79,0x3d,0x6e,0x74,0x28,0x29,0x29,0x3a,0x28,0x4a,0x6e,0x3d,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x69,0x6e,0x28,0x5a,0x6e,0x3d,0x6c,0x29,0x3f,0x5a,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3a,0x5a,0x6e,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x24,0x74,0x3d,0x21,0x30,0x29,0x29,0x2c,0x30,0x3c,0x28,0x67,0x3d,0x51,0x72,0x28,0x72,0x2c,0x62,0x29,0x29,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x62,0x3d,0x6e,0x65,0x77,0x20,0x6b,0x74,0x28,0x62,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x2c,0x6c,0x29,0x2c,0x6f,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x62,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x67,0x7d,0x29,0x2c,0x79,0x3f,0x62,0x2e,0x64,0x61,0x74,0x61,0x3d,0x79,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x79,0x3d,0x56,0x74,0x28,0x74,0x29,0x29,0x26,0x26,0x28,0x62,0x2e,0x64,0x61,0x74,0x61,0x3d,0x79,0x29,0x29,0x29,0x2c,0x28,0x79,0x3d,0x49,0x74,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x56,0x74,0x28,0x6e,0x29,0x3b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x32,0x21,0x3d,0x3d,0x6e,0x2e,0x77,0x68,0x69,0x63,0x68,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x28,0x6a,0x74,0x3d,0x21,0x30,0x2c,0x55,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x6e,0x2e,0x64,0x61,0x74,0x61,0x29,0x3d,0x3d,0x3d,0x55,0x74,0x26,0x26,0x6a,0x74,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x65,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x28,0x65,0x2c,0x74,0x29,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x24,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x21,0x4f,0x74,0x26,0x26,0x41,0x74,0x28,0x65,0x2c,0x6e,0x29,0x3f,0x28,0x65,0x3d,0x6e,0x74,0x28,0x29,0x2c,0x65,0x74,0x3d,0x4a,0x6e,0x3d,0x5a,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x24,0x74,0x3d,0x21,0x31,0x2c,0x65,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x70,0x61,0x73,0x74,0x65,0x22,0x3a,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x22,0x3a,0x69,0x66,0x28,0x21,0x28,0x6e,0x2e,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x7c,0x7c,0x6e,0x2e,0x61,0x6c,0x74,0x4b,0x65,0x79,0x7c,0x7c,0x6e,0x2e,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x29,0x7c,0x7c,0x6e,0x2e,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x26,0x26,0x6e,0x2e,0x61,0x6c,0x74,0x4b,0x65,0x79,0x29,0x7b,0x69,0x66,0x28,0x6e,0x2e,0x63,0x68,0x61,0x72,0x26,0x26,0x31,0x3c,0x6e,0x2e,0x63,0x68,0x61,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x63,0x68,0x61,0x72,0x3b,0x69,0x66,0x28,0x6e,0x2e,0x77,0x68,0x69,0x63,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x66,0x72,0x6f,0x6d,0x43,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x28,0x6e,0x2e,0x77,0x68,0x69,0x63,0x68,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x44,0x74,0x26,0x26,0x22,0x6b,0x6f,0x22,0x21,0x3d,0x3d,0x6e,0x2e,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x2e,0x64,0x61,0x74,0x61,0x7d,0x7d,0x28,0x65,0x2c,0x74,0x29,0x29,0x26,0x26,0x28,0x30,0x3c,0x28,0x72,0x3d,0x51,0x72,0x28,0x72,0x2c,0x22,0x6f,0x6e,0x42,0x65,0x66,0x6f,0x72,0x65,0x49,0x6e,0x70,0x75,0x74,0x22,0x29,0x29,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x6c,0x3d,0x6e,0x65,0x77,0x20,0x6b,0x74,0x28,0x22,0x6f,0x6e,0x42,0x65,0x66,0x6f,0x72,0x65,0x49,0x6e,0x70,0x75,0x74,0x22,0x2c,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x2c,0x6c,0x29,0x2c,0x6f,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x6c,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x72,0x7d,0x29,0x2c,0x6c,0x2e,0x64,0x61,0x74,0x61,0x3d,0x79,0x29,0x29,0x7d,0x55,0x72,0x28,0x6f,0x2c,0x6e,0x29,0x7d,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x3a,0x65,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x3a,0x6e,0x2c,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3a,0x74,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2b,0x22,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x2c,0x72,0x3d,0x5b,0x5d,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x2c,0x61,0x3d,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x35,0x3d,0x3d,0x3d,0x6c,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x6c,0x3d,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x61,0x3d,0x52,0x65,0x28,0x65,0x2c,0x74,0x29,0x29,0x26,0x26,0x72,0x2e,0x75,0x6e,0x73,0x68,0x69,0x66,0x74,0x28,0x57,0x72,0x28,0x65,0x2c,0x61,0x2c,0x6c,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x61,0x3d,0x52,0x65,0x28,0x65,0x2c,0x6e,0x29,0x29,0x26,0x26,0x72,0x2e,0x70,0x75,0x73,0x68,0x28,0x57,0x72,0x28,0x65,0x2c,0x61,0x2c,0x6c,0x29,0x29,0x29,0x2c,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x72,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x6f,0x7b,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x65,0x26,0x26,0x35,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x61,0x3d,0x6e,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x4e,0x61,0x6d,0x65,0x2c,0x6f,0x3d,0x5b,0x5d,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x74,0x21,0x3d,0x3d,0x72,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x74,0x2c,0x69,0x3d,0x75,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x73,0x3d,0x75,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x26,0x26,0x69,0x3d,0x3d,0x3d,0x72,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x35,0x3d,0x3d,0x3d,0x75,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x26,0x26,0x28,0x75,0x3d,0x73,0x2c,0x6c,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x69,0x3d,0x52,0x65,0x28,0x74,0x2c,0x61,0x29,0x29,0x26,0x26,0x6f,0x2e,0x75,0x6e,0x73,0x68,0x69,0x66,0x74,0x28,0x57,0x72,0x28,0x74,0x2c,0x69,0x2c,0x75,0x29,0x29,0x3a,0x6c,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x69,0x3d,0x52,0x65,0x28,0x74,0x2c,0x61,0x29,0x29,0x26,0x26,0x6f,0x2e,0x70,0x75,0x73,0x68,0x28,0x57,0x72,0x28,0x74,0x2c,0x69,0x2c,0x75,0x29,0x29,0x29,0x2c,0x74,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x30,0x21,0x3d,0x3d,0x6f,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x65,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x6e,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x6f,0x7d,0x29,0x7d,0x76,0x61,0x72,0x20,0x59,0x72,0x3d,0x2f,0x5c,0x72,0x5c,0x6e,0x3f,0x2f,0x67,0x2c,0x58,0x72,0x3d,0x2f,0x5c,0x75,0x30,0x30,0x30,0x30,0x7c,0x5c,0x75,0x46,0x46,0x46,0x44,0x2f,0x67,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x72,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x3f,0x65,0x3a,0x22,0x22,0x2b,0x65,0x29,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x59,0x72,0x2c,0x22,0x5c,0x6e,0x22,0x29,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x58,0x72,0x2c,0x22,0x22,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x3d,0x47,0x72,0x28,0x6e,0x29,0x2c,0x47,0x72,0x28,0x65,0x29,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x32,0x35,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x72,0x28,0x29,0x7b,0x7d,0x76,0x61,0x72,0x20,0x65,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6c,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x6e,0x6f,0x73,0x63,0x72,0x69,0x70,0x74,0x22,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x7d,0x76,0x61,0x72,0x20,0x72,0x6c,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6c,0x6c,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x61,0x6c,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x3f,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6f,0x6c,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x71,0x75,0x65,0x75,0x65,0x4d,0x69,0x63,0x72,0x6f,0x74,0x61,0x73,0x6b,0x3f,0x71,0x75,0x65,0x75,0x65,0x4d,0x69,0x63,0x72,0x6f,0x74,0x61,0x73,0x6b,0x3a,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x6c,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x6c,0x2e,0x72,0x65,0x73,0x6f,0x6c,0x76,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x65,0x29,0x2e,0x63,0x61,0x74,0x63,0x68,0x28,0x75,0x6c,0x29,0x7d,0x3a,0x72,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x6c,0x28,0x65,0x29,0x7b,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x65,0x7d,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x6c,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2c,0x72,0x3d,0x30,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x74,0x29,0x2c,0x6c,0x26,0x26,0x38,0x3d,0x3d,0x3d,0x6c,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x69,0x66,0x28,0x22,0x2f,0x24,0x22,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x6c,0x2e,0x64,0x61,0x74,0x61,0x29,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x6c,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x42,0x6e,0x28,0x6e,0x29,0x3b,0x72,0x2d,0x2d,0x7d,0x65,0x6c,0x73,0x65,0x22,0x24,0x22,0x21,0x3d,0x3d,0x74,0x26,0x26,0x22,0x24,0x3f,0x22,0x21,0x3d,0x3d,0x74,0x26,0x26,0x22,0x24,0x21,0x22,0x21,0x3d,0x3d,0x74,0x7c,0x7c,0x72,0x2b,0x2b,0x3b,0x74,0x3d,0x6c,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x74,0x29,0x3b,0x42,0x6e,0x28,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x6c,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x65,0x3b,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x6e,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x69,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x6e,0x29,0x7b,0x69,0x66,0x28,0x22,0x24,0x22,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x65,0x2e,0x64,0x61,0x74,0x61,0x29,0x7c,0x7c,0x22,0x24,0x21,0x22,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x22,0x24,0x3f,0x22,0x3d,0x3d,0x3d,0x6e,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x69,0x66,0x28,0x22,0x2f,0x24,0x22,0x3d,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x6c,0x28,0x65,0x29,0x7b,0x65,0x3d,0x65,0x2e,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x3d,0x30,0x3b,0x65,0x3b,0x29,0x7b,0x69,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x64,0x61,0x74,0x61,0x3b,0x69,0x66,0x28,0x22,0x24,0x22,0x3d,0x3d,0x3d,0x74,0x7c,0x7c,0x22,0x24,0x21,0x22,0x3d,0x3d,0x3d,0x74,0x7c,0x7c,0x22,0x24,0x3f,0x22,0x3d,0x3d,0x3d,0x74,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x6e,0x2d,0x2d,0x7d,0x65,0x6c,0x73,0x65,0x22,0x2f,0x24,0x22,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x6e,0x2b,0x2b,0x7d,0x65,0x3d,0x65,0x2e,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x66,0x6c,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x28,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x36,0x29,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x32,0x29,0x2c,0x64,0x6c,0x3d,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x46,0x69,0x62,0x65,0x72,0x24,0x22,0x2b,0x66,0x6c,0x2c,0x70,0x6c,0x3d,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x50,0x72,0x6f,0x70,0x73,0x24,0x22,0x2b,0x66,0x6c,0x2c,0x6d,0x6c,0x3d,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x24,0x22,0x2b,0x66,0x6c,0x2c,0x68,0x6c,0x3d,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x45,0x76,0x65,0x6e,0x74,0x73,0x24,0x22,0x2b,0x66,0x6c,0x2c,0x76,0x6c,0x3d,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x24,0x22,0x2b,0x66,0x6c,0x2c,0x67,0x6c,0x3d,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x73,0x24,0x22,0x2b,0x66,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x6c,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x5b,0x64,0x6c,0x5d,0x3b,0x69,0x66,0x28,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x74,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x3d,0x74,0x5b,0x6d,0x6c,0x5d,0x7c,0x7c,0x74,0x5b,0x64,0x6c,0x5d,0x29,0x7b,0x69,0x66,0x28,0x74,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x66,0x6f,0x72,0x28,0x65,0x3d,0x63,0x6c,0x28,0x65,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x69,0x66,0x28,0x74,0x3d,0x65,0x5b,0x64,0x6c,0x5d,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x3b,0x65,0x3d,0x63,0x6c,0x28,0x65,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x74,0x3d,0x28,0x65,0x3d,0x74,0x29,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x6c,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x65,0x3d,0x65,0x5b,0x64,0x6c,0x5d,0x7c,0x7c,0x65,0x5b,0x6d,0x6c,0x5d,0x29,0x7c,0x7c,0x35,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x36,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x31,0x33,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x33,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x6c,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x33,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x6c,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x5b,0x70,0x6c,0x5d,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x53,0x6c,0x3d,0x5b,0x5d,0x2c,0x78,0x6c,0x3d,0x2d,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x6c,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x65,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x6c,0x28,0x65,0x29,0x7b,0x30,0x3e,0x78,0x6c,0x7c,0x7c,0x28,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x53,0x6c,0x5b,0x78,0x6c,0x5d,0x2c,0x53,0x6c,0x5b,0x78,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x78,0x6c,0x2d,0x2d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x6c,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x78,0x6c,0x2b,0x2b,0x2c,0x53,0x6c,0x5b,0x78,0x6c,0x5d,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x7d,0x76,0x61,0x72,0x20,0x50,0x6c,0x3d,0x7b,0x7d,0x2c,0x4e,0x6c,0x3d,0x45,0x6c,0x28,0x50,0x6c,0x29,0x2c,0x7a,0x6c,0x3d,0x45,0x6c,0x28,0x21,0x31,0x29,0x2c,0x54,0x6c,0x3d,0x50,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x6c,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x3b,0x69,0x66,0x28,0x21,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x50,0x6c,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x72,0x26,0x26,0x72,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x55,0x6e,0x6d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x76,0x61,0x72,0x20,0x6c,0x2c,0x61,0x3d,0x7b,0x7d,0x3b,0x66,0x6f,0x72,0x28,0x6c,0x20,0x69,0x6e,0x20,0x74,0x29,0x61,0x5b,0x6c,0x5d,0x3d,0x6e,0x5b,0x6c,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x26,0x26,0x28,0x28,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x55,0x6e,0x6d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x2c,0x65,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x61,0x29,0x2c,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x6c,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x29,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x6c,0x28,0x29,0x7b,0x43,0x6c,0x28,0x7a,0x6c,0x29,0x2c,0x43,0x6c,0x28,0x4e,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x6c,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x50,0x6c,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x38,0x29,0x29,0x3b,0x5f,0x6c,0x28,0x4e,0x6c,0x2c,0x6e,0x29,0x2c,0x5f,0x6c,0x28,0x7a,0x6c,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x6c,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x2e,0x67,0x65,0x74,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6c,0x20,0x69,0x6e,0x20,0x72,0x3d,0x72,0x2e,0x67,0x65,0x74,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x28,0x29,0x29,0x69,0x66,0x28,0x21,0x28,0x6c,0x20,0x69,0x6e,0x20,0x6e,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x30,0x38,0x2c,0x42,0x28,0x65,0x29,0x7c,0x7c,0x22,0x55,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x22,0x2c,0x6c,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x44,0x28,0x7b,0x7d,0x2c,0x74,0x2c,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x6c,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x26,0x26,0x65,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x65,0x72,0x67,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x7c,0x7c,0x50,0x6c,0x2c,0x54,0x6c,0x3d,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x5f,0x6c,0x28,0x4e,0x6c,0x2c,0x65,0x29,0x2c,0x5f,0x6c,0x28,0x7a,0x6c,0x2c,0x7a,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x6c,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x21,0x72,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x39,0x29,0x29,0x3b,0x74,0x3f,0x28,0x65,0x3d,0x4d,0x6c,0x28,0x65,0x2c,0x6e,0x2c,0x54,0x6c,0x29,0x2c,0x72,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x65,0x72,0x67,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x65,0x2c,0x43,0x6c,0x28,0x7a,0x6c,0x29,0x2c,0x43,0x6c,0x28,0x4e,0x6c,0x29,0x2c,0x5f,0x6c,0x28,0x4e,0x6c,0x2c,0x65,0x29,0x29,0x3a,0x43,0x6c,0x28,0x7a,0x6c,0x29,0x2c,0x5f,0x6c,0x28,0x7a,0x6c,0x2c,0x74,0x29,0x7d,0x76,0x61,0x72,0x20,0x55,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6a,0x6c,0x3d,0x21,0x31,0x2c,0x41,0x6c,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x6c,0x28,0x65,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x55,0x6c,0x3f,0x55,0x6c,0x3d,0x5b,0x65,0x5d,0x3a,0x55,0x6c,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x6c,0x28,0x29,0x7b,0x69,0x66,0x28,0x21,0x41,0x6c,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x55,0x6c,0x29,0x7b,0x41,0x6c,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x30,0x2c,0x6e,0x3d,0x6b,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x55,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x6b,0x6e,0x3d,0x31,0x3b,0x65,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x5b,0x65,0x5d,0x3b,0x64,0x6f,0x7b,0x72,0x3d,0x72,0x28,0x21,0x30,0x29,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x7d,0x55,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6a,0x6c,0x3d,0x21,0x31,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x55,0x6c,0x26,0x26,0x28,0x55,0x6c,0x3d,0x55,0x6c,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x65,0x2b,0x31,0x29,0x29,0x2c,0x71,0x65,0x28,0x4a,0x65,0x2c,0x24,0x6c,0x29,0x2c,0x6c,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6b,0x6e,0x3d,0x6e,0x2c,0x41,0x6c,0x3d,0x21,0x31,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x42,0x6c,0x3d,0x5b,0x5d,0x2c,0x48,0x6c,0x3d,0x30,0x2c,0x57,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x51,0x6c,0x3d,0x30,0x2c,0x71,0x6c,0x3d,0x5b,0x5d,0x2c,0x4b,0x6c,0x3d,0x30,0x2c,0x59,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x58,0x6c,0x3d,0x31,0x2c,0x47,0x6c,0x3d,0x22,0x22,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x6c,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x42,0x6c,0x5b,0x48,0x6c,0x2b,0x2b,0x5d,0x3d,0x51,0x6c,0x2c,0x42,0x6c,0x5b,0x48,0x6c,0x2b,0x2b,0x5d,0x3d,0x57,0x6c,0x2c,0x57,0x6c,0x3d,0x65,0x2c,0x51,0x6c,0x3d,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x6c,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x71,0x6c,0x5b,0x4b,0x6c,0x2b,0x2b,0x5d,0x3d,0x58,0x6c,0x2c,0x71,0x6c,0x5b,0x4b,0x6c,0x2b,0x2b,0x5d,0x3d,0x47,0x6c,0x2c,0x71,0x6c,0x5b,0x4b,0x6c,0x2b,0x2b,0x5d,0x3d,0x59,0x6c,0x2c,0x59,0x6c,0x3d,0x65,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x58,0x6c,0x3b,0x65,0x3d,0x47,0x6c,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x33,0x32,0x2d,0x6f,0x6e,0x28,0x72,0x29,0x2d,0x31,0x3b,0x72,0x26,0x3d,0x7e,0x28,0x31,0x3c,0x3c,0x6c,0x29,0x2c,0x74,0x2b,0x3d,0x31,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x33,0x32,0x2d,0x6f,0x6e,0x28,0x6e,0x29,0x2b,0x6c,0x3b,0x69,0x66,0x28,0x33,0x30,0x3c,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6c,0x2d,0x6c,0x25,0x35,0x3b,0x61,0x3d,0x28,0x72,0x26,0x28,0x31,0x3c,0x3c,0x6f,0x29,0x2d,0x31,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x2c,0x72,0x3e,0x3e,0x3d,0x6f,0x2c,0x6c,0x2d,0x3d,0x6f,0x2c,0x58,0x6c,0x3d,0x31,0x3c,0x3c,0x33,0x32,0x2d,0x6f,0x6e,0x28,0x6e,0x29,0x2b,0x6c,0x7c,0x74,0x3c,0x3c,0x6c,0x7c,0x72,0x2c,0x47,0x6c,0x3d,0x61,0x2b,0x65,0x7d,0x65,0x6c,0x73,0x65,0x20,0x58,0x6c,0x3d,0x31,0x3c,0x3c,0x61,0x7c,0x74,0x3c,0x3c,0x6c,0x7c,0x72,0x2c,0x47,0x6c,0x3d,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x61,0x28,0x65,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x26,0x26,0x28,0x5a,0x6c,0x28,0x65,0x2c,0x31,0x29,0x2c,0x4a,0x6c,0x28,0x65,0x2c,0x31,0x2c,0x30,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x61,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x65,0x3d,0x3d,0x3d,0x57,0x6c,0x3b,0x29,0x57,0x6c,0x3d,0x42,0x6c,0x5b,0x2d,0x2d,0x48,0x6c,0x5d,0x2c,0x42,0x6c,0x5b,0x48,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x51,0x6c,0x3d,0x42,0x6c,0x5b,0x2d,0x2d,0x48,0x6c,0x5d,0x2c,0x42,0x6c,0x5b,0x48,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x65,0x3d,0x3d,0x3d,0x59,0x6c,0x3b,0x29,0x59,0x6c,0x3d,0x71,0x6c,0x5b,0x2d,0x2d,0x4b,0x6c,0x5d,0x2c,0x71,0x6c,0x5b,0x4b,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x47,0x6c,0x3d,0x71,0x6c,0x5b,0x2d,0x2d,0x4b,0x6c,0x5d,0x2c,0x71,0x6c,0x5b,0x4b,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x58,0x6c,0x3d,0x71,0x6c,0x5b,0x2d,0x2d,0x4b,0x6c,0x5d,0x2c,0x71,0x6c,0x5b,0x4b,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x74,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x3d,0x21,0x31,0x2c,0x61,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x4c,0x73,0x28,0x35,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x30,0x29,0x3b,0x74,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x22,0x44,0x45,0x4c,0x45,0x54,0x45,0x44,0x22,0x2c,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x2c,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x65,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x29,0x3f,0x28,0x65,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x5b,0x74,0x5d,0x2c,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x29,0x3a,0x6e,0x2e,0x70,0x75,0x73,0x68,0x28,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x31,0x21,0x3d,0x3d,0x6e,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x74,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x21,0x3d,0x3d,0x6e,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x29,0x26,0x26,0x28,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x2c,0x74,0x61,0x3d,0x65,0x2c,0x72,0x61,0x3d,0x73,0x6c,0x28,0x6e,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x2c,0x21,0x30,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x22,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x33,0x21,0x3d,0x3d,0x6e,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x29,0x26,0x26,0x28,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x2c,0x74,0x61,0x3d,0x65,0x2c,0x72,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x30,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x38,0x21,0x3d,0x3d,0x6e,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x29,0x26,0x26,0x28,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x59,0x6c,0x3f,0x7b,0x69,0x64,0x3a,0x58,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x3a,0x47,0x6c,0x7d,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x6e,0x2c,0x74,0x72,0x65,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x74,0x2c,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3a,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x7d,0x2c,0x28,0x74,0x3d,0x4c,0x73,0x28,0x31,0x38,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x30,0x29,0x29,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x2c,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x74,0x2c,0x74,0x61,0x3d,0x65,0x2c,0x72,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x30,0x29,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x61,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x61,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x6c,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x72,0x61,0x3b,0x69,0x66,0x28,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x3b,0x69,0x66,0x28,0x21,0x75,0x61,0x28,0x65,0x2c,0x6e,0x29,0x29,0x7b,0x69,0x66,0x28,0x69,0x61,0x28,0x65,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x31,0x38,0x29,0x29,0x3b,0x6e,0x3d,0x73,0x6c,0x28,0x74,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x61,0x3b,0x6e,0x26,0x26,0x75,0x61,0x28,0x65,0x2c,0x6e,0x29,0x3f,0x6f,0x61,0x28,0x72,0x2c,0x74,0x29,0x3a,0x28,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x2d,0x34,0x30,0x39,0x37,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x32,0x2c,0x6c,0x61,0x3d,0x21,0x31,0x2c,0x74,0x61,0x3d,0x65,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x69,0x61,0x28,0x65,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x31,0x38,0x29,0x29,0x3b,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x2d,0x34,0x30,0x39,0x37,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x32,0x2c,0x6c,0x61,0x3d,0x21,0x31,0x2c,0x74,0x61,0x3d,0x65,0x7d,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x61,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x35,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x33,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x31,0x33,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x3b,0x29,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x61,0x3d,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x61,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x21,0x3d,0x3d,0x74,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x69,0x66,0x28,0x21,0x6c,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x61,0x28,0x65,0x29,0x2c,0x6c,0x61,0x3d,0x21,0x30,0x2c,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3b,0x69,0x66,0x28,0x28,0x6e,0x3d,0x33,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x26,0x26,0x21,0x28,0x6e,0x3d,0x35,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x26,0x26,0x28,0x6e,0x3d,0x22,0x68,0x65,0x61,0x64,0x22,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x22,0x62,0x6f,0x64,0x79,0x22,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x21,0x74,0x6c,0x28,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x29,0x29,0x2c,0x6e,0x26,0x26,0x28,0x6e,0x3d,0x72,0x61,0x29,0x29,0x7b,0x69,0x66,0x28,0x69,0x61,0x28,0x65,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x64,0x61,0x28,0x29,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x31,0x38,0x29,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x3b,0x29,0x6f,0x61,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x6e,0x3d,0x73,0x6c,0x28,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7d,0x69,0x66,0x28,0x63,0x61,0x28,0x65,0x29,0x2c,0x31,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x69,0x66,0x28,0x21,0x28,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x3f,0x65,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x37,0x29,0x29,0x3b,0x65,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x6e,0x3d,0x30,0x3b,0x65,0x3b,0x29,0x7b,0x69,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x64,0x61,0x74,0x61,0x3b,0x69,0x66,0x28,0x22,0x2f,0x24,0x22,0x3d,0x3d,0x3d,0x74,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x6e,0x29,0x7b,0x72,0x61,0x3d,0x73,0x6c,0x28,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x6e,0x2d,0x2d,0x7d,0x65,0x6c,0x73,0x65,0x22,0x24,0x22,0x21,0x3d,0x3d,0x74,0x26,0x26,0x22,0x24,0x21,0x22,0x21,0x3d,0x3d,0x74,0x26,0x26,0x22,0x24,0x3f,0x22,0x21,0x3d,0x3d,0x74,0x7c,0x7c,0x6e,0x2b,0x2b,0x7d,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x72,0x61,0x3d,0x74,0x61,0x3f,0x73,0x6c,0x28,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x61,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x65,0x3d,0x72,0x61,0x3b,0x65,0x3b,0x29,0x65,0x3d,0x73,0x6c,0x28,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x61,0x28,0x29,0x7b,0x72,0x61,0x3d,0x74,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x3d,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x61,0x28,0x65,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x61,0x3f,0x61,0x61,0x3d,0x5b,0x65,0x5d,0x3a,0x61,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x7d,0x76,0x61,0x72,0x20,0x68,0x61,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x74,0x2e,0x72,0x65,0x66,0x29,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x7b,0x69,0x66,0x28,0x74,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x29,0x7b,0x69,0x66,0x28,0x74,0x3d,0x74,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x29,0x7b,0x69,0x66,0x28,0x31,0x21,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x30,0x39,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x69,0x66,0x28,0x21,0x72,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x34,0x37,0x2c,0x65,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x72,0x2c,0x6f,0x3d,0x22,0x22,0x2b,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x72,0x65,0x66,0x26,0x26,0x6e,0x2e,0x72,0x65,0x66,0x2e,0x5f,0x73,0x74,0x72,0x69,0x6e,0x67,0x52,0x65,0x66,0x3d,0x3d,0x3d,0x6f,0x3f,0x6e,0x2e,0x72,0x65,0x66,0x3a,0x28,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x6c,0x2e,0x72,0x65,0x66,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x6e,0x5b,0x6f,0x5d,0x3a,0x6e,0x5b,0x6f,0x5d,0x3d,0x65,0x7d,0x2c,0x6e,0x2e,0x5f,0x73,0x74,0x72,0x69,0x6e,0x67,0x52,0x65,0x66,0x3d,0x6f,0x2c,0x6e,0x29,0x7d,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x38,0x34,0x29,0x29,0x3b,0x69,0x66,0x28,0x21,0x74,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x39,0x30,0x2c,0x65,0x29,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x65,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6e,0x29,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x2c,0x22,0x5b,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x5d,0x22,0x3d,0x3d,0x3d,0x65,0x3f,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x77,0x69,0x74,0x68,0x20,0x6b,0x65,0x79,0x73,0x20,0x7b,0x22,0x2b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x6e,0x29,0x2e,0x6a,0x6f,0x69,0x6e,0x28,0x22,0x2c,0x20,0x22,0x29,0x2b,0x22,0x7d,0x22,0x3a,0x65,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x61,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x30,0x2c,0x65,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x29,0x28,0x65,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x61,0x28,0x65,0x29,0x7b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x28,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x3f,0x28,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x5b,0x74,0x5d,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x29,0x3a,0x72,0x2e,0x70,0x75,0x73,0x68,0x28,0x74,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x28,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x21,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x3b,0x29,0x6e,0x28,0x74,0x2c,0x72,0x29,0x2c,0x72,0x3d,0x72,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x6b,0x65,0x79,0x3f,0x65,0x2e,0x73,0x65,0x74,0x28,0x6e,0x2e,0x6b,0x65,0x79,0x2c,0x6e,0x29,0x3a,0x65,0x2e,0x73,0x65,0x74,0x28,0x6e,0x2e,0x69,0x6e,0x64,0x65,0x78,0x2c,0x6e,0x29,0x2c,0x6e,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x46,0x73,0x28,0x65,0x2c,0x6e,0x29,0x29,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x30,0x2c,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x28,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x72,0x2c,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x3f,0x28,0x72,0x3d,0x72,0x2e,0x69,0x6e,0x64,0x65,0x78,0x29,0x3c,0x74,0x3f,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x2c,0x74,0x29,0x3a,0x72,0x3a,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x2c,0x74,0x29,0x3a,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x28,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x29,0x2c,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x36,0x21,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x3f,0x28,0x28,0x6e,0x3d,0x44,0x73,0x28,0x74,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x72,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x29,0x3a,0x28,0x28,0x6e,0x3d,0x6c,0x28,0x6e,0x2c,0x74,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x74,0x2e,0x74,0x79,0x70,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x3d,0x3d,0x78,0x3f,0x66,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x72,0x2c,0x74,0x2e,0x6b,0x65,0x79,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x61,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3d,0x3d,0x3d,0x52,0x26,0x26,0x79,0x61,0x28,0x61,0x29,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x29,0x3f,0x28,0x28,0x72,0x3d,0x6c,0x28,0x6e,0x2c,0x74,0x2e,0x70,0x72,0x6f,0x70,0x73,0x29,0x29,0x2e,0x72,0x65,0x66,0x3d,0x76,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x72,0x29,0x3a,0x28,0x28,0x72,0x3d,0x4f,0x73,0x28,0x74,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x2e,0x6b,0x65,0x79,0x2c,0x74,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x72,0x29,0x29,0x2e,0x72,0x65,0x66,0x3d,0x76,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x34,0x21,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x21,0x3d,0x3d,0x74,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x7c,0x7c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x21,0x3d,0x3d,0x74,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3f,0x28,0x28,0x6e,0x3d,0x55,0x73,0x28,0x74,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x72,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x29,0x3a,0x28,0x28,0x6e,0x3d,0x6c,0x28,0x6e,0x2c,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x5b,0x5d,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x37,0x21,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x3f,0x28,0x28,0x6e,0x3d,0x4d,0x73,0x28,0x74,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x72,0x2c,0x61,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x29,0x3a,0x28,0x28,0x6e,0x3d,0x6c,0x28,0x6e,0x2c,0x74,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x26,0x26,0x22,0x22,0x21,0x3d,0x3d,0x6e,0x7c,0x7c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x3d,0x44,0x73,0x28,0x22,0x22,0x2b,0x6e,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x74,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x3b,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x77,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x74,0x3d,0x4f,0x73,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6e,0x2e,0x6b,0x65,0x79,0x2c,0x6e,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x74,0x29,0x29,0x2e,0x72,0x65,0x66,0x3d,0x76,0x61,0x28,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x29,0x2c,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x74,0x3b,0x63,0x61,0x73,0x65,0x20,0x53,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x3d,0x55,0x73,0x28,0x6e,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x74,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x52,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x28,0x65,0x2c,0x28,0x30,0x2c,0x6e,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x29,0x28,0x6e,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x74,0x29,0x7d,0x69,0x66,0x28,0x6e,0x65,0x28,0x6e,0x29,0x7c,0x7c,0x4d,0x28,0x6e,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x3d,0x4d,0x73,0x28,0x6e,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6e,0x3b,0x67,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3f,0x6e,0x2e,0x6b,0x65,0x79,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x26,0x26,0x22,0x22,0x21,0x3d,0x3d,0x74,0x7c,0x7c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x22,0x22,0x2b,0x74,0x2c,0x72,0x29,0x3b,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x77,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x6c,0x3f,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x53,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x6c,0x3f,0x63,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x52,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x70,0x28,0x65,0x2c,0x6e,0x2c,0x28,0x6c,0x3d,0x74,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x29,0x28,0x74,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x72,0x29,0x7d,0x69,0x66,0x28,0x6e,0x65,0x28,0x74,0x29,0x7c,0x7c,0x4d,0x28,0x74,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x66,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x67,0x61,0x28,0x65,0x2c,0x74,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x26,0x26,0x22,0x22,0x21,0x3d,0x3d,0x72,0x7c,0x7c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x28,0x6e,0x2c,0x65,0x3d,0x65,0x2e,0x67,0x65,0x74,0x28,0x74,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x22,0x22,0x2b,0x72,0x2c,0x6c,0x29,0x3b,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x72,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x77,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x28,0x6e,0x2c,0x65,0x3d,0x65,0x2e,0x67,0x65,0x74,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x2e,0x6b,0x65,0x79,0x3f,0x74,0x3a,0x72,0x2e,0x6b,0x65,0x79,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x6c,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x53,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x28,0x6e,0x2c,0x65,0x3d,0x65,0x2e,0x67,0x65,0x74,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x2e,0x6b,0x65,0x79,0x3f,0x74,0x3a,0x72,0x2e,0x6b,0x65,0x79,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x6c,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x52,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x28,0x30,0x2c,0x72,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x29,0x28,0x72,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x6c,0x29,0x7d,0x69,0x66,0x28,0x6e,0x65,0x28,0x72,0x29,0x7c,0x7c,0x4d,0x28,0x72,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x28,0x6e,0x2c,0x65,0x3d,0x65,0x2e,0x67,0x65,0x74,0x28,0x74,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x67,0x61,0x28,0x6e,0x2c,0x72,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x28,0x6c,0x2c,0x61,0x2c,0x75,0x2c,0x69,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x3d,0x61,0x2c,0x68,0x3d,0x61,0x3d,0x30,0x2c,0x76,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x68,0x3c,0x75,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x68,0x2b,0x2b,0x29,0x7b,0x66,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3e,0x68,0x3f,0x28,0x76,0x3d,0x66,0x2c,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x76,0x3d,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x70,0x28,0x6c,0x2c,0x66,0x2c,0x75,0x5b,0x68,0x5d,0x2c,0x69,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x26,0x26,0x28,0x66,0x3d,0x76,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x26,0x26,0x66,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x6e,0x28,0x6c,0x2c,0x66,0x29,0x2c,0x61,0x3d,0x6f,0x28,0x67,0x2c,0x61,0x2c,0x68,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x73,0x3d,0x67,0x3a,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x67,0x2c,0x63,0x3d,0x67,0x2c,0x66,0x3d,0x76,0x7d,0x69,0x66,0x28,0x68,0x3d,0x3d,0x3d,0x75,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x28,0x6c,0x2c,0x66,0x29,0x2c,0x6c,0x61,0x26,0x26,0x5a,0x6c,0x28,0x6c,0x2c,0x68,0x29,0x2c,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x68,0x3c,0x75,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x68,0x2b,0x2b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x66,0x3d,0x64,0x28,0x6c,0x2c,0x75,0x5b,0x68,0x5d,0x2c,0x69,0x29,0x29,0x26,0x26,0x28,0x61,0x3d,0x6f,0x28,0x66,0x2c,0x61,0x2c,0x68,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x73,0x3d,0x66,0x3a,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x66,0x2c,0x63,0x3d,0x66,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x61,0x26,0x26,0x5a,0x6c,0x28,0x6c,0x2c,0x68,0x29,0x2c,0x73,0x7d,0x66,0x6f,0x72,0x28,0x66,0x3d,0x72,0x28,0x6c,0x2c,0x66,0x29,0x3b,0x68,0x3c,0x75,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x68,0x2b,0x2b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x76,0x3d,0x6d,0x28,0x66,0x2c,0x6c,0x2c,0x68,0x2c,0x75,0x5b,0x68,0x5d,0x2c,0x69,0x29,0x29,0x26,0x26,0x28,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x76,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x66,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x76,0x2e,0x6b,0x65,0x79,0x3f,0x68,0x3a,0x76,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x61,0x3d,0x6f,0x28,0x76,0x2c,0x61,0x2c,0x68,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x73,0x3d,0x76,0x3a,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x76,0x2c,0x63,0x3d,0x76,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x26,0x26,0x66,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x28,0x6c,0x2c,0x65,0x29,0x7d,0x29,0x29,0x2c,0x6c,0x61,0x26,0x26,0x5a,0x6c,0x28,0x6c,0x2c,0x68,0x29,0x2c,0x73,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x28,0x6c,0x2c,0x75,0x2c,0x69,0x2c,0x73,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x4d,0x28,0x69,0x29,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x35,0x30,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x28,0x69,0x3d,0x63,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x69,0x29,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x35,0x31,0x29,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x66,0x3d,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x68,0x3d,0x75,0x2c,0x76,0x3d,0x75,0x3d,0x30,0x2c,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x79,0x3d,0x69,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x26,0x26,0x21,0x79,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x76,0x2b,0x2b,0x2c,0x79,0x3d,0x69,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x7b,0x68,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3e,0x76,0x3f,0x28,0x67,0x3d,0x68,0x2c,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x67,0x3d,0x68,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x70,0x28,0x6c,0x2c,0x68,0x2c,0x79,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x73,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x68,0x26,0x26,0x28,0x68,0x3d,0x67,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x26,0x26,0x68,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x6e,0x28,0x6c,0x2c,0x68,0x29,0x2c,0x75,0x3d,0x6f,0x28,0x62,0x2c,0x75,0x2c,0x76,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x3f,0x63,0x3d,0x62,0x3a,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x62,0x2c,0x66,0x3d,0x62,0x2c,0x68,0x3d,0x67,0x7d,0x69,0x66,0x28,0x79,0x2e,0x64,0x6f,0x6e,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x28,0x6c,0x2c,0x68,0x29,0x2c,0x6c,0x61,0x26,0x26,0x5a,0x6c,0x28,0x6c,0x2c,0x76,0x29,0x2c,0x63,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x68,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x21,0x79,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x76,0x2b,0x2b,0x2c,0x79,0x3d,0x69,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x79,0x3d,0x64,0x28,0x6c,0x2c,0x79,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x73,0x29,0x29,0x26,0x26,0x28,0x75,0x3d,0x6f,0x28,0x79,0x2c,0x75,0x2c,0x76,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x3f,0x63,0x3d,0x79,0x3a,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x79,0x2c,0x66,0x3d,0x79,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x61,0x26,0x26,0x5a,0x6c,0x28,0x6c,0x2c,0x76,0x29,0x2c,0x63,0x7d,0x66,0x6f,0x72,0x28,0x68,0x3d,0x72,0x28,0x6c,0x2c,0x68,0x29,0x3b,0x21,0x79,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x76,0x2b,0x2b,0x2c,0x79,0x3d,0x69,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x79,0x3d,0x6d,0x28,0x68,0x2c,0x6c,0x2c,0x76,0x2c,0x79,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x73,0x29,0x29,0x26,0x26,0x28,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x79,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x68,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x79,0x2e,0x6b,0x65,0x79,0x3f,0x76,0x3a,0x79,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x75,0x3d,0x6f,0x28,0x79,0x2c,0x75,0x2c,0x76,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x3f,0x63,0x3d,0x79,0x3a,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x79,0x2c,0x66,0x3d,0x79,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x26,0x26,0x68,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x28,0x6c,0x2c,0x65,0x29,0x7d,0x29,0x29,0x2c,0x6c,0x61,0x26,0x26,0x5a,0x6c,0x28,0x6c,0x2c,0x76,0x29,0x2c,0x63,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x28,0x72,0x2c,0x61,0x2c,0x6f,0x2c,0x69,0x29,0x7b,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x6f,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x78,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6f,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x6f,0x3d,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x2c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6f,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x77,0x3a,0x65,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x73,0x3d,0x6f,0x2e,0x6b,0x65,0x79,0x2c,0x63,0x3d,0x61,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x7b,0x69,0x66,0x28,0x63,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x73,0x29,0x7b,0x69,0x66,0x28,0x28,0x73,0x3d,0x6f,0x2e,0x74,0x79,0x70,0x65,0x29,0x3d,0x3d,0x3d,0x78,0x29,0x7b,0x69,0x66,0x28,0x37,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x29,0x7b,0x74,0x28,0x72,0x2c,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x2c,0x28,0x61,0x3d,0x6c,0x28,0x63,0x2c,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x63,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x73,0x7c,0x7c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x26,0x26,0x73,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3d,0x3d,0x3d,0x52,0x26,0x26,0x79,0x61,0x28,0x73,0x29,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x79,0x70,0x65,0x29,0x7b,0x74,0x28,0x72,0x2c,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x2c,0x28,0x61,0x3d,0x6c,0x28,0x63,0x2c,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x29,0x29,0x2e,0x72,0x65,0x66,0x3d,0x76,0x61,0x28,0x72,0x2c,0x63,0x2c,0x6f,0x29,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x74,0x28,0x72,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x6e,0x28,0x72,0x2c,0x63,0x29,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x6f,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x78,0x3f,0x28,0x28,0x61,0x3d,0x4d,0x73,0x28,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x72,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x69,0x2c,0x6f,0x2e,0x6b,0x65,0x79,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x29,0x3a,0x28,0x28,0x69,0x3d,0x4f,0x73,0x28,0x6f,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6f,0x2e,0x6b,0x65,0x79,0x2c,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x69,0x29,0x29,0x2e,0x72,0x65,0x66,0x3d,0x76,0x61,0x28,0x72,0x2c,0x61,0x2c,0x6f,0x29,0x2c,0x69,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x69,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x75,0x28,0x72,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x53,0x3a,0x65,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x63,0x3d,0x6f,0x2e,0x6b,0x65,0x79,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x7b,0x69,0x66,0x28,0x61,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x69,0x66,0x28,0x34,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3d,0x3d,0x3d,0x6f,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x26,0x26,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x3d,0x3d,0x6f,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x29,0x7b,0x74,0x28,0x72,0x2c,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x2c,0x28,0x61,0x3d,0x6c,0x28,0x61,0x2c,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x5b,0x5d,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x74,0x28,0x72,0x2c,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x6e,0x28,0x72,0x2c,0x61,0x29,0x2c,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x28,0x61,0x3d,0x55,0x73,0x28,0x6f,0x2c,0x72,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x69,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x75,0x28,0x72,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x52,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x72,0x2c,0x61,0x2c,0x28,0x63,0x3d,0x6f,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x29,0x28,0x6f,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x69,0x29,0x7d,0x69,0x66,0x28,0x6e,0x65,0x28,0x6f,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x68,0x28,0x72,0x2c,0x61,0x2c,0x6f,0x2c,0x69,0x29,0x3b,0x69,0x66,0x28,0x4d,0x28,0x6f,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x28,0x72,0x2c,0x61,0x2c,0x6f,0x2c,0x69,0x29,0x3b,0x67,0x61,0x28,0x72,0x2c,0x6f,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x26,0x26,0x22,0x22,0x21,0x3d,0x3d,0x6f,0x7c,0x7c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x3f,0x28,0x6f,0x3d,0x22,0x22,0x2b,0x6f,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x36,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x3f,0x28,0x74,0x28,0x72,0x2c,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x2c,0x28,0x61,0x3d,0x6c,0x28,0x61,0x2c,0x6f,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x29,0x3a,0x28,0x74,0x28,0x72,0x2c,0x61,0x29,0x2c,0x28,0x61,0x3d,0x44,0x73,0x28,0x6f,0x2c,0x72,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x69,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x72,0x3d,0x61,0x29,0x2c,0x75,0x28,0x72,0x29,0x29,0x3a,0x74,0x28,0x72,0x2c,0x61,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6b,0x61,0x3d,0x62,0x61,0x28,0x21,0x30,0x29,0x2c,0x77,0x61,0x3d,0x62,0x61,0x28,0x21,0x31,0x29,0x2c,0x53,0x61,0x3d,0x45,0x6c,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x78,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x45,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x43,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x61,0x28,0x29,0x7b,0x43,0x61,0x3d,0x45,0x61,0x3d,0x78,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x61,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x53,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x43,0x6c,0x28,0x53,0x61,0x29,0x2c,0x65,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x28,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x6e,0x29,0x21,0x3d,0x3d,0x6e,0x3f,0x28,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x28,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x29,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x28,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x6e,0x29,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x29,0x2c,0x65,0x3d,0x3d,0x3d,0x74,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x78,0x61,0x3d,0x65,0x2c,0x43,0x61,0x3d,0x45,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x28,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x6e,0x29,0x26,0x26,0x28,0x62,0x75,0x3d,0x21,0x30,0x29,0x2c,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x61,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3b,0x69,0x66,0x28,0x43,0x61,0x21,0x3d,0x3d,0x65,0x29,0x69,0x66,0x28,0x65,0x3d,0x7b,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x2c,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x6e,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x45,0x61,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x78,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x30,0x38,0x29,0x29,0x3b,0x45,0x61,0x3d,0x65,0x2c,0x78,0x61,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x45,0x61,0x3d,0x45,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x76,0x61,0x72,0x20,0x4c,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x61,0x28,0x65,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x4c,0x61,0x3f,0x4c,0x61,0x3d,0x5b,0x65,0x5d,0x3a,0x4c,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6c,0x3f,0x28,0x74,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x74,0x2c,0x52,0x61,0x28,0x6e,0x29,0x29,0x3a,0x28,0x74,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x74,0x29,0x2c,0x6e,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x74,0x2c,0x4f,0x61,0x28,0x65,0x2c,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x66,0x6f,0x72,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x29,0x2c,0x74,0x3d,0x65,0x2c,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x28,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x29,0x2c,0x74,0x3d,0x65,0x2c,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x3d,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x3f,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x4d,0x61,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x61,0x28,0x65,0x29,0x7b,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x68,0x61,0x72,0x65,0x64,0x3a,0x7b,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x7d,0x2c,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x65,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x65,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x73,0x68,0x61,0x72,0x65,0x64,0x3a,0x65,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2c,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3a,0x65,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x65,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x6e,0x2c,0x74,0x61,0x67,0x3a,0x30,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x72,0x3d,0x72,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x32,0x26,0x4e,0x69,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x72,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6c,0x3f,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x3a,0x28,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x29,0x2c,0x72,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x2c,0x4f,0x61,0x28,0x65,0x2c,0x74,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6c,0x3d,0x72,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x29,0x3f,0x28,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x2c,0x52,0x61,0x28,0x72,0x29,0x29,0x3a,0x28,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x29,0x2c,0x72,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x6e,0x2c,0x4f,0x61,0x28,0x65,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x26,0x26,0x28,0x6e,0x3d,0x6e,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x26,0x74,0x29,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3b,0x74,0x7c,0x3d,0x72,0x26,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x62,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x72,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x74,0x3d,0x3d,0x3d,0x28,0x72,0x3d,0x72,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x74,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x29,0x29,0x7b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x74,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x74,0x61,0x67,0x3a,0x74,0x2e,0x74,0x61,0x67,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x74,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x74,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x6c,0x3d,0x61,0x3d,0x6f,0x3a,0x61,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6f,0x2c,0x74,0x3d,0x74,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x6c,0x3d,0x61,0x3d,0x6e,0x3a,0x61,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6c,0x3d,0x61,0x3d,0x6e,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x3d,0x7b,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x72,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x6c,0x2c,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x61,0x2c,0x73,0x68,0x61,0x72,0x65,0x64,0x3a,0x72,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2c,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3a,0x72,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x7d,0x2c,0x76,0x6f,0x69,0x64,0x28,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x74,0x29,0x7d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x74,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x29,0x3f,0x74,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x6e,0x3a,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x2c,0x74,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x4d,0x61,0x3d,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6c,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x6f,0x3d,0x6c,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x75,0x3d,0x6c,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x29,0x7b,0x6c,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x69,0x3d,0x75,0x2c,0x73,0x3d,0x69,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x69,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6f,0x3f,0x61,0x3d,0x73,0x3a,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x73,0x2c,0x6f,0x3d,0x69,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x28,0x75,0x3d,0x28,0x63,0x3d,0x63,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x29,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x3f,0x63,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x73,0x3a,0x75,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x73,0x2c,0x63,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x69,0x29,0x29,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x6c,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3b,0x66,0x6f,0x72,0x28,0x6f,0x3d,0x30,0x2c,0x63,0x3d,0x73,0x3d,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x3d,0x61,0x3b,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x75,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x70,0x3d,0x75,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3b,0x69,0x66,0x28,0x28,0x72,0x26,0x64,0x29,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x70,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x30,0x2c,0x74,0x61,0x67,0x3a,0x75,0x2e,0x74,0x61,0x67,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x75,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x75,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x3b,0x65,0x3a,0x7b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x65,0x2c,0x68,0x3d,0x75,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x64,0x3d,0x6e,0x2c,0x70,0x3d,0x74,0x2c,0x68,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x6d,0x3d,0x68,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x29,0x7b,0x66,0x3d,0x6d,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x70,0x2c,0x66,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x66,0x3d,0x6d,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x6d,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x2d,0x36,0x35,0x35,0x33,0x37,0x26,0x6d,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x31,0x32,0x38,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x64,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x6d,0x3d,0x68,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x3f,0x6d,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x70,0x2c,0x66,0x2c,0x64,0x29,0x3a,0x6d,0x29,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x64,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x66,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x66,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x4d,0x61,0x3d,0x21,0x30,0x7d,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x26,0x26,0x30,0x21,0x3d,0x3d,0x75,0x2e,0x6c,0x61,0x6e,0x65,0x26,0x26,0x28,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x34,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x64,0x3d,0x6c,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x29,0x3f,0x6c,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3d,0x5b,0x75,0x5d,0x3a,0x64,0x2e,0x70,0x75,0x73,0x68,0x28,0x75,0x29,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x70,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x70,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x64,0x2c,0x74,0x61,0x67,0x3a,0x75,0x2e,0x74,0x61,0x67,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x75,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x75,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x28,0x73,0x3d,0x63,0x3d,0x70,0x2c,0x69,0x3d,0x66,0x29,0x3a,0x63,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x70,0x2c,0x6f,0x7c,0x3d,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x75,0x3d,0x75,0x2e,0x6e,0x65,0x78,0x74,0x29,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x75,0x3d,0x6c,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x75,0x3d,0x28,0x64,0x3d,0x75,0x29,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x64,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x64,0x2c,0x6c,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x28,0x69,0x3d,0x66,0x29,0x2c,0x6c,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x69,0x2c,0x6c,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x73,0x2c,0x6c,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x63,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6c,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x29,0x29,0x7b,0x6c,0x3d,0x6e,0x3b,0x64,0x6f,0x7b,0x6f,0x7c,0x3d,0x6c,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x6c,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x6c,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x29,0x3b,0x49,0x69,0x7c,0x3d,0x6f,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6f,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x65,0x3d,0x6e,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x2c,0x6e,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x66,0x6f,0x72,0x28,0x6e,0x3d,0x30,0x3b,0x6e,0x3c,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6e,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x5b,0x6e,0x5d,0x2c,0x6c,0x3d,0x72,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x29,0x7b,0x69,0x66,0x28,0x72,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x3d,0x74,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x39,0x31,0x2c,0x6c,0x29,0x29,0x3b,0x6c,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x72,0x29,0x7d,0x7d,0x7d,0x76,0x61,0x72,0x20,0x48,0x61,0x3d,0x7b,0x7d,0x2c,0x57,0x61,0x3d,0x45,0x6c,0x28,0x48,0x61,0x29,0x2c,0x51,0x61,0x3d,0x45,0x6c,0x28,0x48,0x61,0x29,0x2c,0x71,0x61,0x3d,0x45,0x6c,0x28,0x48,0x61,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x61,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x3d,0x3d,0x3d,0x48,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x37,0x34,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x5f,0x6c,0x28,0x71,0x61,0x2c,0x6e,0x29,0x2c,0x5f,0x6c,0x28,0x51,0x61,0x2c,0x65,0x29,0x2c,0x5f,0x6c,0x28,0x57,0x61,0x2c,0x48,0x61,0x29,0x2c,0x65,0x3d,0x6e,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x6e,0x3d,0x28,0x6e,0x3d,0x6e,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x3f,0x6e,0x2e,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x55,0x52,0x49,0x3a,0x69,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x22,0x22,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x6e,0x3d,0x69,0x65,0x28,0x6e,0x3d,0x28,0x65,0x3d,0x38,0x3d,0x3d,0x3d,0x65,0x3f,0x6e,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x6e,0x29,0x2e,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x55,0x52,0x49,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x3d,0x65,0x2e,0x74,0x61,0x67,0x4e,0x61,0x6d,0x65,0x29,0x7d,0x43,0x6c,0x28,0x57,0x61,0x29,0x2c,0x5f,0x6c,0x28,0x57,0x61,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x61,0x28,0x29,0x7b,0x43,0x6c,0x28,0x57,0x61,0x29,0x2c,0x43,0x6c,0x28,0x51,0x61,0x29,0x2c,0x43,0x6c,0x28,0x71,0x61,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x61,0x28,0x65,0x29,0x7b,0x4b,0x61,0x28,0x71,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x4b,0x61,0x28,0x57,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x74,0x3d,0x69,0x65,0x28,0x6e,0x2c,0x65,0x2e,0x74,0x79,0x70,0x65,0x29,0x3b,0x6e,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x5f,0x6c,0x28,0x51,0x61,0x2c,0x65,0x29,0x2c,0x5f,0x6c,0x28,0x57,0x61,0x2c,0x74,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x61,0x28,0x65,0x29,0x7b,0x51,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x43,0x6c,0x28,0x57,0x61,0x29,0x2c,0x43,0x6c,0x28,0x51,0x61,0x29,0x29,0x7d,0x76,0x61,0x72,0x20,0x4a,0x61,0x3d,0x45,0x6c,0x28,0x30,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x6f,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3b,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x74,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7c,0x7c,0x22,0x24,0x3f,0x22,0x3d,0x3d,0x3d,0x74,0x2e,0x64,0x61,0x74,0x61,0x7c,0x7c,0x22,0x24,0x21,0x22,0x3d,0x3d,0x3d,0x74,0x2e,0x64,0x61,0x74,0x61,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x39,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x72,0x65,0x76,0x65,0x61,0x6c,0x4f,0x72,0x64,0x65,0x72,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6e,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x6e,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x6e,0x6f,0x3d,0x5b,0x5d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6f,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x6e,0x6f,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x6e,0x6f,0x5b,0x65,0x5d,0x2e,0x5f,0x77,0x6f,0x72,0x6b,0x49,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x50,0x72,0x69,0x6d,0x61,0x72,0x79,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x6f,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3d,0x30,0x7d,0x76,0x61,0x72,0x20,0x72,0x6f,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x2c,0x6c,0x6f,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x61,0x6f,0x3d,0x30,0x2c,0x6f,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x6f,0x3d,0x21,0x31,0x2c,0x63,0x6f,0x3d,0x21,0x31,0x2c,0x66,0x6f,0x3d,0x30,0x2c,0x70,0x6f,0x3d,0x30,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x6f,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x32,0x31,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x30,0x3b,0x74,0x3c,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x74,0x3c,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x69,0x66,0x28,0x21,0x75,0x72,0x28,0x65,0x5b,0x74,0x5d,0x2c,0x6e,0x5b,0x74,0x5d,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x6f,0x29,0x7b,0x69,0x66,0x28,0x61,0x6f,0x3d,0x6f,0x2c,0x6f,0x6f,0x3d,0x6e,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x72,0x6f,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3f,0x4a,0x6f,0x3a,0x65,0x75,0x2c,0x65,0x3d,0x74,0x28,0x72,0x2c,0x6c,0x29,0x2c,0x63,0x6f,0x29,0x7b,0x6f,0x3d,0x30,0x3b,0x64,0x6f,0x7b,0x69,0x66,0x28,0x63,0x6f,0x3d,0x21,0x31,0x2c,0x66,0x6f,0x3d,0x30,0x2c,0x32,0x35,0x3c,0x3d,0x6f,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x30,0x31,0x29,0x29,0x3b,0x6f,0x2b,0x3d,0x31,0x2c,0x69,0x6f,0x3d,0x75,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x6f,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x2c,0x65,0x3d,0x74,0x28,0x72,0x2c,0x6c,0x29,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x63,0x6f,0x29,0x7d,0x69,0x66,0x28,0x72,0x6f,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x5a,0x6f,0x2c,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x6f,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x61,0x6f,0x3d,0x30,0x2c,0x69,0x6f,0x3d,0x75,0x6f,0x3d,0x6f,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x6f,0x3d,0x21,0x31,0x2c,0x6e,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x6f,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x30,0x21,0x3d,0x3d,0x66,0x6f,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x6f,0x3d,0x30,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x6f,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x7b,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x71,0x75,0x65,0x75,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x69,0x6f,0x3f,0x6f,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x69,0x6f,0x3d,0x65,0x3a,0x69,0x6f,0x3d,0x69,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x2c,0x69,0x6f,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x6f,0x28,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x6f,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x6f,0x6f,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3f,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x65,0x3d,0x75,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x69,0x6f,0x3f,0x6f,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x69,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x69,0x6f,0x3d,0x6e,0x2c,0x75,0x6f,0x3d,0x65,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x30,0x29,0x29,0x3b,0x65,0x3d,0x7b,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x28,0x75,0x6f,0x3d,0x65,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x75,0x6f,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x2c,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3a,0x75,0x6f,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x71,0x75,0x65,0x75,0x65,0x3a,0x75,0x6f,0x2e,0x71,0x75,0x65,0x75,0x65,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x69,0x6f,0x3f,0x6f,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x69,0x6f,0x3d,0x65,0x3a,0x69,0x6f,0x3d,0x69,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x6f,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x3f,0x6e,0x28,0x65,0x29,0x3a,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x6f,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x62,0x6f,0x28,0x29,0x2c,0x74,0x3d,0x6e,0x2e,0x71,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x31,0x29,0x29,0x3b,0x74,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3d,0x65,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x75,0x6f,0x2c,0x6c,0x3d,0x72,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6f,0x3d,0x74,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x6f,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x75,0x7d,0x72,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6c,0x3d,0x6f,0x2c,0x74,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x29,0x7b,0x6f,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x72,0x3d,0x72,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3b,0x76,0x61,0x72,0x20,0x69,0x3d,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x3d,0x6f,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x63,0x2e,0x6c,0x61,0x6e,0x65,0x3b,0x69,0x66,0x28,0x28,0x61,0x6f,0x26,0x66,0x29,0x3d,0x3d,0x3d,0x66,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x26,0x26,0x28,0x73,0x3d,0x73,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x30,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x63,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x63,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x63,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x2c,0x72,0x3d,0x63,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3f,0x63,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x65,0x28,0x72,0x2c,0x63,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x66,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x63,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x63,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x63,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x73,0x3f,0x28,0x69,0x3d,0x73,0x3d,0x64,0x2c,0x75,0x3d,0x72,0x29,0x3a,0x73,0x3d,0x73,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x64,0x2c,0x6f,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x66,0x2c,0x49,0x69,0x7c,0x3d,0x66,0x7d,0x63,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x63,0x21,0x3d,0x3d,0x6f,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x73,0x3f,0x75,0x3d,0x72,0x3a,0x73,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x69,0x2c,0x75,0x72,0x28,0x72,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7c,0x7c,0x28,0x62,0x75,0x3d,0x21,0x30,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x72,0x2c,0x6e,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x75,0x2c,0x6e,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x73,0x2c,0x74,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x72,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x74,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x29,0x29,0x7b,0x6c,0x3d,0x65,0x3b,0x64,0x6f,0x7b,0x6f,0x3d,0x6c,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x6f,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6f,0x2c,0x49,0x69,0x7c,0x3d,0x6f,0x2c,0x6c,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x74,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x5d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x6f,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x62,0x6f,0x28,0x29,0x2c,0x74,0x3d,0x6e,0x2e,0x71,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x31,0x29,0x29,0x3b,0x74,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3d,0x65,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x2c,0x6c,0x3d,0x74,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x2c,0x6f,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x29,0x7b,0x74,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6c,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x7b,0x6f,0x3d,0x65,0x28,0x6f,0x2c,0x75,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x29,0x2c,0x75,0x3d,0x75,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x75,0x21,0x3d,0x3d,0x6c,0x29,0x3b,0x75,0x72,0x28,0x6f,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7c,0x7c,0x28,0x62,0x75,0x3d,0x21,0x30,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6f,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x26,0x26,0x28,0x6e,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x6f,0x29,0x2c,0x74,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6f,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x6f,0x2c,0x72,0x5d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x6f,0x28,0x29,0x7b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6f,0x6f,0x2c,0x72,0x3d,0x62,0x6f,0x28,0x29,0x2c,0x6c,0x3d,0x6e,0x28,0x29,0x2c,0x6f,0x3d,0x21,0x75,0x72,0x28,0x72,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6c,0x29,0x3b,0x69,0x66,0x28,0x6f,0x26,0x26,0x28,0x72,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6c,0x2c,0x62,0x75,0x3d,0x21,0x30,0x29,0x2c,0x72,0x3d,0x72,0x2e,0x71,0x75,0x65,0x75,0x65,0x2c,0x49,0x6f,0x28,0x50,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x2c,0x72,0x2c,0x65,0x29,0x2c,0x5b,0x65,0x5d,0x29,0x2c,0x72,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x21,0x3d,0x3d,0x6e,0x7c,0x7c,0x6f,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x6f,0x26,0x26,0x31,0x26,0x69,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x69,0x66,0x28,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x34,0x38,0x2c,0x4c,0x6f,0x28,0x39,0x2c,0x5f,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x6e,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x7a,0x69,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x34,0x39,0x29,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x33,0x30,0x26,0x61,0x6f,0x29,0x7c,0x7c,0x43,0x6f,0x28,0x74,0x2c,0x6e,0x2c,0x6c,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x33,0x38,0x34,0x2c,0x65,0x3d,0x7b,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3a,0x6e,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x74,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x6f,0x6f,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x3f,0x28,0x6e,0x3d,0x7b,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x74,0x6f,0x72,0x65,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6f,0x6f,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x2c,0x6e,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x3d,0x5b,0x65,0x5d,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x6e,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x29,0x3f,0x6e,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x3d,0x5b,0x65,0x5d,0x3a,0x74,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x74,0x2c,0x6e,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3d,0x72,0x2c,0x4e,0x6f,0x28,0x6e,0x29,0x26,0x26,0x7a,0x6f,0x28,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x4e,0x6f,0x28,0x6e,0x29,0x26,0x26,0x7a,0x6f,0x28,0x65,0x29,0x7d,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x6f,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3b,0x65,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x75,0x72,0x28,0x65,0x2c,0x74,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x6f,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x4f,0x61,0x28,0x65,0x2c,0x31,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x74,0x73,0x28,0x6e,0x2c,0x65,0x2c,0x31,0x2c,0x2d,0x31,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x6f,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x79,0x6f,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x28,0x65,0x3d,0x65,0x28,0x29,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x65,0x2c,0x65,0x3d,0x7b,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x6b,0x6f,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x65,0x7d,0x2c,0x6e,0x2e,0x71,0x75,0x65,0x75,0x65,0x3d,0x65,0x2c,0x65,0x3d,0x65,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3d,0x4b,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x6f,0x2c,0x65,0x29,0x2c,0x5b,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x5d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x7b,0x74,0x61,0x67,0x3a,0x65,0x2c,0x63,0x72,0x65,0x61,0x74,0x65,0x3a,0x6e,0x2c,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3a,0x74,0x2c,0x64,0x65,0x70,0x73,0x3a,0x72,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x6f,0x6f,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x3f,0x28,0x6e,0x3d,0x7b,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x74,0x6f,0x72,0x65,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6f,0x6f,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x2c,0x6e,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x6e,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x29,0x3f,0x6e,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x3a,0x28,0x72,0x3d,0x74,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x74,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x2c,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x72,0x2c,0x6e,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x65,0x29,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x6f,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x79,0x6f,0x28,0x29,0x3b,0x6f,0x6f,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x65,0x2c,0x6c,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4c,0x6f,0x28,0x31,0x7c,0x6e,0x2c,0x74,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x72,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x62,0x6f,0x28,0x29,0x3b,0x72,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x72,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x72,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x6f,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x75,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x61,0x3d,0x6f,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x68,0x6f,0x28,0x72,0x2c,0x6f,0x2e,0x64,0x65,0x70,0x73,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x28,0x6c,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4c,0x6f,0x28,0x6e,0x2c,0x74,0x2c,0x61,0x2c,0x72,0x29,0x29,0x7d,0x6f,0x6f,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x65,0x2c,0x6c,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4c,0x6f,0x28,0x31,0x7c,0x6e,0x2c,0x74,0x2c,0x61,0x2c,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x46,0x6f,0x28,0x38,0x33,0x39,0x30,0x36,0x35,0x36,0x2c,0x38,0x2c,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4f,0x6f,0x28,0x32,0x30,0x34,0x38,0x2c,0x38,0x2c,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4f,0x6f,0x28,0x34,0x2c,0x32,0x2c,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4f,0x6f,0x28,0x34,0x2c,0x34,0x2c,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x3f,0x28,0x65,0x3d,0x65,0x28,0x29,0x2c,0x6e,0x28,0x65,0x29,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6e,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x3f,0x28,0x65,0x3d,0x65,0x28,0x29,0x2c,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x65,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x3f,0x74,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x5b,0x65,0x5d,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x4f,0x6f,0x28,0x34,0x2c,0x34,0x2c,0x6a,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x65,0x29,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x6f,0x28,0x29,0x7b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x62,0x6f,0x28,0x29,0x3b,0x6e,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x68,0x6f,0x28,0x6e,0x2c,0x72,0x5b,0x31,0x5d,0x29,0x3f,0x72,0x5b,0x30,0x5d,0x3a,0x28,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x65,0x2c,0x6e,0x5d,0x2c,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x62,0x6f,0x28,0x29,0x3b,0x6e,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x68,0x6f,0x28,0x6e,0x2c,0x72,0x5b,0x31,0x5d,0x29,0x3f,0x72,0x5b,0x30,0x5d,0x3a,0x28,0x65,0x3d,0x65,0x28,0x29,0x2c,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x65,0x2c,0x6e,0x5d,0x2c,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x31,0x26,0x61,0x6f,0x29,0x3f,0x28,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x26,0x26,0x28,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x21,0x31,0x2c,0x62,0x75,0x3d,0x21,0x30,0x29,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x74,0x29,0x3a,0x28,0x75,0x72,0x28,0x74,0x2c,0x6e,0x29,0x7c,0x7c,0x28,0x74,0x3d,0x76,0x6e,0x28,0x29,0x2c,0x6f,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x74,0x2c,0x49,0x69,0x7c,0x3d,0x74,0x2c,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x21,0x30,0x29,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6b,0x6e,0x3b,0x6b,0x6e,0x3d,0x30,0x21,0x3d,0x3d,0x74,0x26,0x26,0x34,0x3e,0x74,0x3f,0x74,0x3a,0x34,0x2c,0x65,0x28,0x21,0x30,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6c,0x6f,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x6c,0x6f,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x7b,0x7d,0x3b,0x74,0x72,0x79,0x7b,0x65,0x28,0x21,0x31,0x29,0x2c,0x6e,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6b,0x6e,0x3d,0x74,0x2c,0x6c,0x6f,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x72,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x6f,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x73,0x28,0x65,0x29,0x3b,0x69,0x66,0x28,0x74,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x72,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x74,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x21,0x31,0x2c,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x59,0x6f,0x28,0x65,0x29,0x29,0x58,0x6f,0x28,0x6e,0x2c,0x74,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x46,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x29,0x29,0x7b,0x74,0x73,0x28,0x74,0x2c,0x65,0x2c,0x72,0x2c,0x65,0x73,0x28,0x29,0x29,0x2c,0x47,0x6f,0x28,0x74,0x2c,0x6e,0x2c,0x72,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x73,0x28,0x65,0x29,0x2c,0x6c,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x72,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x74,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x21,0x31,0x2c,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x69,0x66,0x28,0x59,0x6f,0x28,0x65,0x29,0x29,0x58,0x6f,0x28,0x6e,0x2c,0x6c,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x61,0x3d,0x6e,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x29,0x29,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x75,0x3d,0x61,0x28,0x6f,0x2c,0x74,0x29,0x3b,0x69,0x66,0x28,0x6c,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x21,0x30,0x2c,0x6c,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x75,0x2c,0x75,0x72,0x28,0x75,0x2c,0x6f,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3d,0x6e,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x69,0x3f,0x28,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x2c,0x52,0x61,0x28,0x6e,0x29,0x29,0x3a,0x28,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x69,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x69,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x29,0x2c,0x76,0x6f,0x69,0x64,0x28,0x6e,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x6c,0x29,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x73,0x29,0x7b,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x46,0x61,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x2c,0x72,0x29,0x29,0x26,0x26,0x28,0x74,0x73,0x28,0x74,0x2c,0x65,0x2c,0x72,0x2c,0x6c,0x3d,0x65,0x73,0x28,0x29,0x29,0x2c,0x47,0x6f,0x28,0x74,0x2c,0x6e,0x2c,0x72,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x6f,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x3d,0x3d,0x6f,0x6f,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x3d,0x3d,0x3d,0x6f,0x6f,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x63,0x6f,0x3d,0x73,0x6f,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x3f,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x3a,0x28,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x74,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x74,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x29,0x2c,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x26,0x74,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3b,0x74,0x7c,0x3d,0x72,0x26,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x62,0x6e,0x28,0x65,0x2c,0x74,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x5a,0x6f,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x54,0x61,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x6d,0x6f,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x6d,0x6f,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x2c,0x4a,0x6f,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x54,0x61,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x79,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x65,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x5d,0x2c,0x65,0x7d,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x54,0x61,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x4d,0x6f,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x3f,0x74,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x5b,0x65,0x5d,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x46,0x6f,0x28,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x2c,0x34,0x2c,0x6a,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x65,0x29,0x2c,0x74,0x29,0x7d,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x46,0x6f,0x28,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x2c,0x34,0x2c,0x65,0x2c,0x6e,0x29,0x7d,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x46,0x6f,0x28,0x34,0x2c,0x32,0x2c,0x65,0x2c,0x6e,0x29,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x79,0x6f,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x2c,0x65,0x3d,0x65,0x28,0x29,0x2c,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x65,0x2c,0x6e,0x5d,0x2c,0x65,0x7d,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x79,0x6f,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x3f,0x74,0x28,0x6e,0x29,0x3a,0x6e,0x2c,0x72,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x72,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x2c,0x65,0x3d,0x7b,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x65,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x7d,0x2c,0x72,0x2e,0x71,0x75,0x65,0x75,0x65,0x3d,0x65,0x2c,0x65,0x3d,0x65,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3d,0x71,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x6f,0x2c,0x65,0x29,0x2c,0x5b,0x72,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x65,0x7d,0x2c,0x79,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x65,0x7d,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x54,0x6f,0x2c,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x56,0x6f,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x79,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x65,0x7d,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x54,0x6f,0x28,0x21,0x31,0x29,0x2c,0x6e,0x3d,0x65,0x5b,0x30,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x57,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x5b,0x31,0x5d,0x29,0x2c,0x79,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x65,0x2c,0x5b,0x6e,0x2c,0x65,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6f,0x6f,0x2c,0x6c,0x3d,0x79,0x6f,0x28,0x29,0x3b,0x69,0x66,0x28,0x6c,0x61,0x29,0x7b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x30,0x37,0x29,0x29,0x3b,0x74,0x3d,0x74,0x28,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x74,0x3d,0x6e,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x7a,0x69,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x34,0x39,0x29,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x33,0x30,0x26,0x61,0x6f,0x29,0x7c,0x7c,0x43,0x6f,0x28,0x72,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x6c,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x74,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x74,0x2c,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3a,0x6e,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x2e,0x71,0x75,0x65,0x75,0x65,0x3d,0x6f,0x2c,0x4d,0x6f,0x28,0x50,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x6f,0x2c,0x65,0x29,0x2c,0x5b,0x65,0x5d,0x29,0x2c,0x72,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x34,0x38,0x2c,0x4c,0x6f,0x28,0x39,0x2c,0x5f,0x6f,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x6f,0x2c,0x74,0x2c,0x6e,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x74,0x7d,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x79,0x6f,0x28,0x29,0x2c,0x6e,0x3d,0x7a,0x69,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x3b,0x69,0x66,0x28,0x6c,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x47,0x6c,0x3b,0x6e,0x3d,0x22,0x3a,0x22,0x2b,0x6e,0x2b,0x22,0x52,0x22,0x2b,0x28,0x74,0x3d,0x28,0x58,0x6c,0x26,0x7e,0x28,0x31,0x3c,0x3c,0x33,0x32,0x2d,0x6f,0x6e,0x28,0x58,0x6c,0x29,0x2d,0x31,0x29,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x2b,0x74,0x29,0x2c,0x30,0x3c,0x28,0x74,0x3d,0x66,0x6f,0x2b,0x2b,0x29,0x26,0x26,0x28,0x6e,0x2b,0x3d,0x22,0x48,0x22,0x2b,0x74,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x29,0x2c,0x6e,0x2b,0x3d,0x22,0x3a,0x22,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x3d,0x22,0x3a,0x22,0x2b,0x6e,0x2b,0x22,0x72,0x22,0x2b,0x28,0x74,0x3d,0x70,0x6f,0x2b,0x2b,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x2b,0x22,0x3a,0x22,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x7d,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x2c,0x65,0x75,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x54,0x61,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x24,0x6f,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x54,0x61,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x49,0x6f,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x41,0x6f,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x44,0x6f,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x55,0x6f,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x42,0x6f,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x77,0x6f,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x52,0x6f,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x77,0x6f,0x28,0x6b,0x6f,0x29,0x7d,0x2c,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x56,0x6f,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x6f,0x28,0x62,0x6f,0x28,0x29,0x2c,0x75,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x29,0x7d,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x77,0x6f,0x28,0x6b,0x6f,0x29,0x5b,0x30,0x5d,0x2c,0x62,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x78,0x6f,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x45,0x6f,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x51,0x6f,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x2c,0x6e,0x75,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x54,0x61,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x24,0x6f,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x54,0x61,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x49,0x6f,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x41,0x6f,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x44,0x6f,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x55,0x6f,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x42,0x6f,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x53,0x6f,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x52,0x6f,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x6f,0x28,0x6b,0x6f,0x29,0x7d,0x2c,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x56,0x6f,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x62,0x6f,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x6f,0x3f,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x65,0x3a,0x48,0x6f,0x28,0x6e,0x2c,0x75,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x29,0x7d,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x53,0x6f,0x28,0x6b,0x6f,0x29,0x5b,0x30,0x5d,0x2c,0x62,0x6f,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x78,0x6f,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x45,0x6f,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x51,0x6f,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x65,0x26,0x26,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x20,0x69,0x6e,0x20,0x6e,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x6e,0x29,0x2c,0x65,0x3d,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x5b,0x74,0x5d,0x26,0x26,0x28,0x6e,0x5b,0x74,0x5d,0x3d,0x65,0x5b,0x74,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x74,0x28,0x72,0x2c,0x6e,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x29,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x74,0x3f,0x6e,0x3a,0x44,0x28,0x7b,0x7d,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x74,0x2c,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x26,0x28,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x74,0x29,0x7d,0x76,0x61,0x72,0x20,0x6c,0x75,0x3d,0x7b,0x69,0x73,0x4d,0x6f,0x75,0x6e,0x74,0x65,0x64,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x21,0x28,0x65,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x29,0x26,0x26,0x24,0x65,0x28,0x65,0x29,0x3d,0x3d,0x3d,0x65,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x53,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x65,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x73,0x28,0x29,0x2c,0x6c,0x3d,0x6e,0x73,0x28,0x65,0x29,0x2c,0x61,0x3d,0x55,0x61,0x28,0x72,0x2c,0x6c,0x29,0x3b,0x61,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x6e,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6a,0x61,0x28,0x65,0x2c,0x61,0x2c,0x6c,0x29,0x29,0x26,0x26,0x28,0x74,0x73,0x28,0x6e,0x2c,0x65,0x2c,0x6c,0x2c,0x72,0x29,0x2c,0x41,0x61,0x28,0x6e,0x2c,0x65,0x2c,0x6c,0x29,0x29,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x65,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x73,0x28,0x29,0x2c,0x6c,0x3d,0x6e,0x73,0x28,0x65,0x29,0x2c,0x61,0x3d,0x55,0x61,0x28,0x72,0x2c,0x6c,0x29,0x3b,0x61,0x2e,0x74,0x61,0x67,0x3d,0x31,0x2c,0x61,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x6e,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6a,0x61,0x28,0x65,0x2c,0x61,0x2c,0x6c,0x29,0x29,0x26,0x26,0x28,0x74,0x73,0x28,0x6e,0x2c,0x65,0x2c,0x6c,0x2c,0x72,0x29,0x2c,0x41,0x61,0x28,0x6e,0x2c,0x65,0x2c,0x6c,0x29,0x29,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x46,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x65,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x73,0x28,0x29,0x2c,0x72,0x3d,0x6e,0x73,0x28,0x65,0x29,0x2c,0x6c,0x3d,0x55,0x61,0x28,0x74,0x2c,0x72,0x29,0x3b,0x6c,0x2e,0x74,0x61,0x67,0x3d,0x32,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x6c,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6a,0x61,0x28,0x65,0x2c,0x6c,0x2c,0x72,0x29,0x29,0x26,0x26,0x28,0x74,0x73,0x28,0x6e,0x2c,0x65,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x41,0x61,0x28,0x6e,0x2c,0x65,0x2c,0x72,0x29,0x29,0x7d,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x2e,0x73,0x68,0x6f,0x75,0x6c,0x64,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x55,0x70,0x64,0x61,0x74,0x65,0x3f,0x65,0x2e,0x73,0x68,0x6f,0x75,0x6c,0x64,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x72,0x2c,0x61,0x2c,0x6f,0x29,0x3a,0x21,0x6e,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x7c,0x7c,0x21,0x6e,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x69,0x73,0x50,0x75,0x72,0x65,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x7c,0x7c,0x28,0x21,0x69,0x72,0x28,0x74,0x2c,0x72,0x29,0x7c,0x7c,0x21,0x69,0x72,0x28,0x6c,0x2c,0x61,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x21,0x31,0x2c,0x6c,0x3d,0x50,0x6c,0x2c,0x61,0x3d,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x3d,0x54,0x61,0x28,0x61,0x29,0x3a,0x28,0x6c,0x3d,0x52,0x6c,0x28,0x6e,0x29,0x3f,0x54,0x6c,0x3a,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x61,0x3d,0x28,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x29,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x72,0x29,0x3f,0x4c,0x6c,0x28,0x65,0x2c,0x6c,0x29,0x3a,0x50,0x6c,0x29,0x2c,0x6e,0x3d,0x6e,0x65,0x77,0x20,0x6e,0x28,0x74,0x2c,0x61,0x29,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x3f,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x6c,0x75,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x2c,0x6e,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3d,0x65,0x2c,0x72,0x26,0x26,0x28,0x28,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x55,0x6e,0x6d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6c,0x2c,0x65,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x61,0x29,0x2c,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x65,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x6e,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x28,0x74,0x2c,0x72,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x6e,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x28,0x74,0x2c,0x72,0x29,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6c,0x75,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x6e,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x6c,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x74,0x2c,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6c,0x2e,0x72,0x65,0x66,0x73,0x3d,0x7b,0x7d,0x2c,0x49,0x61,0x28,0x65,0x29,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x3b,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x6c,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x54,0x61,0x28,0x61,0x29,0x3a,0x28,0x61,0x3d,0x52,0x6c,0x28,0x6e,0x29,0x3f,0x54,0x6c,0x3a,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x6c,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x4c,0x6c,0x28,0x65,0x2c,0x61,0x29,0x29,0x2c,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x61,0x3d,0x6e,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x29,0x26,0x26,0x28,0x72,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x61,0x2c,0x74,0x29,0x2c,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x7c,0x7c,0x28,0x6e,0x3d,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x6c,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x6c,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x2c,0x6e,0x21,0x3d,0x3d,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x26,0x26,0x6c,0x75,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x6c,0x2c,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x24,0x61,0x28,0x65,0x2c,0x74,0x2c,0x6c,0x2c,0x72,0x29,0x2c,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x22,0x22,0x2c,0x72,0x3d,0x6e,0x3b,0x64,0x6f,0x7b,0x74,0x2b,0x3d,0x56,0x28,0x72,0x29,0x2c,0x72,0x3d,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x72,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x6c,0x3d,0x22,0x5c,0x6e,0x45,0x72,0x72,0x6f,0x72,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x69,0x6e,0x67,0x20,0x73,0x74,0x61,0x63,0x6b,0x3a,0x20,0x22,0x2b,0x61,0x2e,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x2b,0x22,0x5c,0x6e,0x22,0x2b,0x61,0x2e,0x73,0x74,0x61,0x63,0x6b,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x65,0x2c,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x6e,0x2c,0x73,0x74,0x61,0x63,0x6b,0x3a,0x6c,0x2c,0x64,0x69,0x67,0x65,0x73,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x65,0x2c,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x74,0x61,0x63,0x6b,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x3f,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x69,0x67,0x65,0x73,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x3f,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x74,0x72,0x79,0x7b,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x74,0x7d,0x29,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x64,0x75,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x57,0x65,0x61,0x6b,0x4d,0x61,0x70,0x3f,0x57,0x65,0x61,0x6b,0x4d,0x61,0x70,0x3a,0x4d,0x61,0x70,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x28,0x74,0x3d,0x55,0x61,0x28,0x2d,0x31,0x2c,0x74,0x29,0x29,0x2e,0x74,0x61,0x67,0x3d,0x33,0x2c,0x74,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x48,0x69,0x7c,0x7c,0x28,0x48,0x69,0x3d,0x21,0x30,0x2c,0x57,0x69,0x3d,0x72,0x29,0x2c,0x66,0x75,0x28,0x30,0x2c,0x6e,0x29,0x7d,0x2c,0x74,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x28,0x74,0x3d,0x55,0x61,0x28,0x2d,0x31,0x2c,0x74,0x29,0x29,0x2e,0x74,0x61,0x67,0x3d,0x33,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x74,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x28,0x6c,0x29,0x7d,0x2c,0x74,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x66,0x75,0x28,0x30,0x2c,0x6e,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x61,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x26,0x26,0x28,0x74,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x66,0x75,0x28,0x30,0x2c,0x6e,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x51,0x69,0x3f,0x51,0x69,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x28,0x5b,0x74,0x68,0x69,0x73,0x5d,0x29,0x3a,0x51,0x69,0x2e,0x61,0x64,0x64,0x28,0x74,0x68,0x69,0x73,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x63,0x6b,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x28,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x7b,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x53,0x74,0x61,0x63,0x6b,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3f,0x65,0x3a,0x22,0x22,0x7d,0x29,0x7d,0x29,0x2c,0x74,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x29,0x7b,0x72,0x3d,0x65,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3d,0x6e,0x65,0x77,0x20,0x64,0x75,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x3b,0x72,0x2e,0x73,0x65,0x74,0x28,0x6e,0x2c,0x6c,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x6c,0x3d,0x72,0x2e,0x67,0x65,0x74,0x28,0x6e,0x29,0x29,0x26,0x26,0x28,0x6c,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x2c,0x72,0x2e,0x73,0x65,0x74,0x28,0x6e,0x2c,0x6c,0x29,0x29,0x3b,0x6c,0x2e,0x68,0x61,0x73,0x28,0x74,0x29,0x7c,0x7c,0x28,0x6c,0x2e,0x61,0x64,0x64,0x28,0x74,0x29,0x2c,0x65,0x3d,0x43,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x74,0x68,0x65,0x6e,0x28,0x65,0x2c,0x65,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x75,0x28,0x65,0x29,0x7b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3b,0x69,0x66,0x28,0x28,0x6e,0x3d,0x31,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x26,0x26,0x28,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x2c,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x3f,0x28,0x65,0x3d,0x3d,0x3d,0x6e,0x3f,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x3a,0x28,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x33,0x31,0x30,0x37,0x32,0x2c,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x35,0x32,0x38,0x30,0x35,0x2c,0x31,0x3d,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3f,0x74,0x2e,0x74,0x61,0x67,0x3d,0x31,0x37,0x3a,0x28,0x28,0x6e,0x3d,0x55,0x61,0x28,0x2d,0x31,0x2c,0x31,0x29,0x29,0x2e,0x74,0x61,0x67,0x3d,0x32,0x2c,0x6a,0x61,0x28,0x74,0x2c,0x6e,0x2c,0x31,0x29,0x29,0x29,0x2c,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x31,0x29,0x2c,0x65,0x29,0x3a,0x28,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6c,0x2c,0x65,0x29,0x7d,0x76,0x61,0x72,0x20,0x79,0x75,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x2c,0x62,0x75,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x77,0x61,0x28,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x2c,0x72,0x29,0x3a,0x6b,0x61,0x28,0x6e,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x74,0x2c,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x74,0x3d,0x74,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x7a,0x61,0x28,0x6e,0x2c,0x6c,0x29,0x2c,0x72,0x3d,0x76,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x61,0x2c,0x6c,0x29,0x2c,0x74,0x3d,0x67,0x6f,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x62,0x75,0x3f,0x28,0x6c,0x61,0x26,0x26,0x74,0x26,0x26,0x65,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x2c,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x3a,0x28,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x30,0x35,0x33,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x7e,0x6c,0x2c,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x74,0x2e,0x74,0x79,0x70,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x7c,0x7c,0x52,0x73,0x28,0x61,0x29,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x3f,0x28,0x28,0x65,0x3d,0x4f,0x73,0x28,0x74,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x6e,0x2c,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x6c,0x29,0x29,0x2e,0x72,0x65,0x66,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x65,0x29,0x3a,0x28,0x6e,0x2e,0x74,0x61,0x67,0x3d,0x31,0x35,0x2c,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3d,0x61,0x2c,0x78,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x61,0x2c,0x72,0x2c,0x6c,0x29,0x29,0x7d,0x69,0x66,0x28,0x61,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x6c,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x69,0x66,0x28,0x28,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x74,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x29,0x3f,0x74,0x3a,0x69,0x72,0x29,0x28,0x6f,0x2c,0x72,0x29,0x26,0x26,0x65,0x2e,0x72,0x65,0x66,0x3d,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x2c,0x28,0x65,0x3d,0x46,0x73,0x28,0x61,0x2c,0x72,0x29,0x29,0x2e,0x72,0x65,0x66,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x69,0x66,0x28,0x69,0x72,0x28,0x61,0x2c,0x72,0x29,0x26,0x26,0x65,0x2e,0x72,0x65,0x66,0x3d,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x29,0x7b,0x69,0x66,0x28,0x62,0x75,0x3d,0x21,0x31,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x72,0x3d,0x61,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x6c,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x31,0x33,0x31,0x30,0x37,0x32,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x28,0x62,0x75,0x3d,0x21,0x30,0x29,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5f,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6c,0x3d,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3f,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x3d,0x3d,0x3d,0x72,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x29,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x5f,0x6c,0x28,0x46,0x69,0x2c,0x52,0x69,0x29,0x2c,0x52,0x69,0x7c,0x3d,0x74,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x26,0x74,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x74,0x3a,0x74,0x2c,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x65,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x5f,0x6c,0x28,0x46,0x69,0x2c,0x52,0x69,0x29,0x2c,0x52,0x69,0x7c,0x3d,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x74,0x2c,0x5f,0x6c,0x28,0x46,0x69,0x2c,0x52,0x69,0x29,0x2c,0x52,0x69,0x7c,0x3d,0x72,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x28,0x72,0x3d,0x61,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x74,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x72,0x3d,0x74,0x2c,0x5f,0x6c,0x28,0x46,0x69,0x2c,0x52,0x69,0x29,0x2c,0x52,0x69,0x7c,0x3d,0x72,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x3b,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x65,0x2e,0x72,0x65,0x66,0x21,0x3d,0x3d,0x74,0x29,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x35,0x31,0x32,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x52,0x6c,0x28,0x74,0x29,0x3f,0x54,0x6c,0x3a,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x4c,0x6c,0x28,0x6e,0x2c,0x61,0x29,0x2c,0x7a,0x61,0x28,0x6e,0x2c,0x6c,0x29,0x2c,0x74,0x3d,0x76,0x6f,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x61,0x2c,0x6c,0x29,0x2c,0x72,0x3d,0x67,0x6f,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x62,0x75,0x3f,0x28,0x6c,0x61,0x26,0x26,0x72,0x26,0x26,0x65,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x2c,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x6c,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x3a,0x28,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x30,0x35,0x33,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x7e,0x6c,0x2c,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x69,0x66,0x28,0x52,0x6c,0x28,0x74,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x21,0x30,0x3b,0x49,0x6c,0x28,0x6e,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x61,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x7a,0x61,0x28,0x6e,0x2c,0x6c,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x42,0x75,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x6f,0x75,0x28,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x2c,0x69,0x75,0x28,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x72,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x75,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x75,0x3b,0x76,0x61,0x72,0x20,0x69,0x3d,0x6f,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x73,0x3d,0x74,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x3b,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x3f,0x73,0x3d,0x54,0x61,0x28,0x73,0x29,0x3a,0x73,0x3d,0x4c,0x6c,0x28,0x6e,0x2c,0x73,0x3d,0x52,0x6c,0x28,0x74,0x29,0x3f,0x54,0x6c,0x3a,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x74,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x2c,0x66,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3b,0x66,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x28,0x75,0x21,0x3d,0x3d,0x72,0x7c,0x7c,0x69,0x21,0x3d,0x3d,0x73,0x29,0x26,0x26,0x75,0x75,0x28,0x6e,0x2c,0x6f,0x2c,0x72,0x2c,0x73,0x29,0x2c,0x4d,0x61,0x3d,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6f,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x64,0x2c,0x24,0x61,0x28,0x6e,0x2c,0x72,0x2c,0x6f,0x2c,0x6c,0x29,0x2c,0x69,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x75,0x21,0x3d,0x3d,0x72,0x7c,0x7c,0x64,0x21,0x3d,0x3d,0x69,0x7c,0x7c,0x7a,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7c,0x7c,0x4d,0x61,0x3f,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x26,0x26,0x28,0x72,0x75,0x28,0x6e,0x2c,0x74,0x2c,0x63,0x2c,0x72,0x29,0x2c,0x69,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x2c,0x28,0x75,0x3d,0x4d,0x61,0x7c,0x7c,0x61,0x75,0x28,0x6e,0x2c,0x74,0x2c,0x75,0x2c,0x72,0x2c,0x64,0x2c,0x69,0x2c,0x73,0x29,0x29,0x3f,0x28,0x66,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x7c,0x7c,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x29,0x3a,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x72,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x69,0x29,0x2c,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x72,0x2c,0x6f,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x69,0x2c,0x6f,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x73,0x2c,0x72,0x3d,0x75,0x29,0x3a,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x2c,0x72,0x3d,0x21,0x31,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x6f,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x44,0x61,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x75,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x73,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3f,0x75,0x3a,0x74,0x75,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x75,0x29,0x2c,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x73,0x2c,0x66,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x64,0x3d,0x6f,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x69,0x3d,0x74,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x3f,0x69,0x3d,0x54,0x61,0x28,0x69,0x29,0x3a,0x69,0x3d,0x4c,0x6c,0x28,0x6e,0x2c,0x69,0x3d,0x52,0x6c,0x28,0x74,0x29,0x3f,0x54,0x6c,0x3a,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x70,0x3d,0x74,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x3b,0x28,0x63,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x70,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x29,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x28,0x75,0x21,0x3d,0x3d,0x66,0x7c,0x7c,0x64,0x21,0x3d,0x3d,0x69,0x29,0x26,0x26,0x75,0x75,0x28,0x6e,0x2c,0x6f,0x2c,0x72,0x2c,0x69,0x29,0x2c,0x4d,0x61,0x3d,0x21,0x31,0x2c,0x64,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6f,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x64,0x2c,0x24,0x61,0x28,0x6e,0x2c,0x72,0x2c,0x6f,0x2c,0x6c,0x29,0x3b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x75,0x21,0x3d,0x3d,0x66,0x7c,0x7c,0x64,0x21,0x3d,0x3d,0x6d,0x7c,0x7c,0x7a,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7c,0x7c,0x4d,0x61,0x3f,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x70,0x26,0x26,0x28,0x72,0x75,0x28,0x6e,0x2c,0x74,0x2c,0x70,0x2c,0x72,0x29,0x2c,0x6d,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x2c,0x28,0x73,0x3d,0x4d,0x61,0x7c,0x7c,0x61,0x75,0x28,0x6e,0x2c,0x74,0x2c,0x73,0x2c,0x72,0x2c,0x64,0x2c,0x6d,0x2c,0x69,0x29,0x7c,0x7c,0x21,0x31,0x29,0x3f,0x28,0x63,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x72,0x2c,0x6d,0x2c,0x69,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x6f,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x72,0x2c,0x6d,0x2c,0x69,0x29,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x29,0x29,0x3a,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x75,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x64,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x75,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x64,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x72,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6d,0x29,0x2c,0x6f,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x72,0x2c,0x6f,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x6d,0x2c,0x6f,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x69,0x2c,0x72,0x3d,0x73,0x29,0x3a,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x75,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x64,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x75,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x64,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x29,0x2c,0x72,0x3d,0x21,0x31,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4e,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x61,0x2c,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x29,0x7b,0x43,0x75,0x28,0x65,0x2c,0x6e,0x29,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x3b,0x69,0x66,0x28,0x21,0x72,0x26,0x26,0x21,0x6f,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x26,0x26,0x44,0x6c,0x28,0x6e,0x2c,0x74,0x2c,0x21,0x31,0x29,0x2c,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x61,0x29,0x3b,0x72,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x79,0x75,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x3b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6f,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x72,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6f,0x3f,0x28,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6b,0x61,0x28,0x6e,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6b,0x61,0x28,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x2c,0x61,0x29,0x29,0x3a,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x75,0x2c,0x61,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x72,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x6c,0x26,0x26,0x44,0x6c,0x28,0x6e,0x2c,0x74,0x2c,0x21,0x30,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x75,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3f,0x4f,0x6c,0x28,0x30,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x21,0x3d,0x3d,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x3a,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x26,0x26,0x4f,0x6c,0x28,0x30,0x2c,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x21,0x31,0x29,0x2c,0x59,0x61,0x28,0x65,0x2c,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x70,0x61,0x28,0x29,0x2c,0x6d,0x61,0x28,0x6c,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x35,0x36,0x2c,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x76,0x61,0x72,0x20,0x4c,0x75,0x2c,0x52,0x75,0x2c,0x46,0x75,0x2c,0x4f,0x75,0x2c,0x4d,0x75,0x3d,0x7b,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x65,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3a,0x30,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x75,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x65,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x2c,0x6c,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6f,0x3d,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x75,0x3d,0x21,0x31,0x2c,0x69,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x3b,0x69,0x66,0x28,0x28,0x72,0x3d,0x69,0x29,0x7c,0x7c,0x28,0x72,0x3d,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x32,0x26,0x6f,0x29,0x29,0x2c,0x72,0x3f,0x28,0x75,0x3d,0x21,0x30,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x31,0x32,0x39,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x6f,0x7c,0x3d,0x31,0x29,0x2c,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x31,0x26,0x6f,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x3f,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x3f,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x31,0x3a,0x22,0x24,0x21,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x64,0x61,0x74,0x61,0x3f,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x38,0x3a,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x69,0x3d,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x65,0x3d,0x6c,0x2e,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x75,0x3f,0x28,0x6c,0x3d,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x75,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x69,0x3d,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x69,0x7d,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6c,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x3f,0x28,0x75,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x75,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x69,0x29,0x3a,0x75,0x3d,0x49,0x73,0x28,0x69,0x2c,0x6c,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x65,0x3d,0x4d,0x73,0x28,0x65,0x2c,0x6c,0x2c,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x75,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x65,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x75,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x49,0x75,0x28,0x74,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4d,0x75,0x2c,0x65,0x29,0x3a,0x55,0x75,0x28,0x6e,0x2c,0x69,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6f,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x6f,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x6f,0x2c,0x75,0x29,0x7b,0x69,0x66,0x28,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x35,0x36,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3f,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x35,0x37,0x2c,0x6a,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x75,0x2c,0x72,0x3d,0x63,0x75,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x32,0x32,0x29,0x29,0x29,0x29,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3f,0x28,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x6f,0x3d,0x72,0x2e,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x6c,0x3d,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x72,0x3d,0x49,0x73,0x28,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x22,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7d,0x2c,0x6c,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x28,0x6f,0x3d,0x4d,0x73,0x28,0x6f,0x2c,0x6c,0x2c,0x75,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x2c,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x72,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6f,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x72,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x6b,0x61,0x28,0x6e,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x49,0x75,0x28,0x75,0x29,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4d,0x75,0x2c,0x6f,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6a,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x75,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x69,0x66,0x28,0x22,0x24,0x21,0x22,0x3d,0x3d,0x3d,0x6c,0x2e,0x64,0x61,0x74,0x61,0x29,0x7b,0x69,0x66,0x28,0x72,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x26,0x26,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x64,0x61,0x74,0x61,0x73,0x65,0x74,0x29,0x76,0x61,0x72,0x20,0x69,0x3d,0x72,0x2e,0x64,0x67,0x73,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x3d,0x69,0x2c,0x6a,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x75,0x2c,0x72,0x3d,0x63,0x75,0x28,0x6f,0x3d,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x31,0x39,0x29,0x29,0x2c,0x72,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x29,0x7d,0x69,0x66,0x28,0x69,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x75,0x26,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x2c,0x62,0x75,0x7c,0x7c,0x69,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x7a,0x69,0x29,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x75,0x26,0x2d,0x75,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x6c,0x3d,0x32,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x6c,0x3d,0x38,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x32,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x34,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x30,0x39,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x31,0x39,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x33,0x38,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x37,0x36,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x35,0x35,0x33,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x31,0x30,0x37,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x32,0x31,0x34,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x32,0x34,0x32,0x38,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x33,0x38,0x38,0x36,0x30,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x37,0x37,0x37,0x32,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x33,0x35,0x35,0x34,0x34,0x33,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x37,0x31,0x30,0x38,0x38,0x36,0x34,0x3a,0x6c,0x3d,0x33,0x32,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x6c,0x3d,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x36,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x6c,0x3d,0x30,0x7d,0x30,0x21,0x3d,0x3d,0x28,0x6c,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x6c,0x26,0x28,0x72,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x75,0x29,0x29,0x3f,0x30,0x3a,0x6c,0x29,0x26,0x26,0x6c,0x21,0x3d,0x3d,0x6f,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x26,0x26,0x28,0x6f,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3d,0x6c,0x2c,0x4f,0x61,0x28,0x65,0x2c,0x6c,0x29,0x2c,0x74,0x73,0x28,0x72,0x2c,0x65,0x2c,0x6c,0x2c,0x2d,0x31,0x29,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x68,0x73,0x28,0x29,0x2c,0x6a,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x75,0x2c,0x72,0x3d,0x63,0x75,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x32,0x31,0x29,0x29,0x29,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x24,0x3f,0x22,0x3d,0x3d,0x3d,0x6c,0x2e,0x64,0x61,0x74,0x61,0x3f,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x3d,0x50,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x29,0x2c,0x6c,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x65,0x74,0x72,0x79,0x3d,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x65,0x3d,0x6f,0x2e,0x74,0x72,0x65,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x72,0x61,0x3d,0x73,0x6c,0x28,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x2c,0x74,0x61,0x3d,0x6e,0x2c,0x6c,0x61,0x3d,0x21,0x30,0x2c,0x61,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x71,0x6c,0x5b,0x4b,0x6c,0x2b,0x2b,0x5d,0x3d,0x58,0x6c,0x2c,0x71,0x6c,0x5b,0x4b,0x6c,0x2b,0x2b,0x5d,0x3d,0x47,0x6c,0x2c,0x71,0x6c,0x5b,0x4b,0x6c,0x2b,0x2b,0x5d,0x3d,0x59,0x6c,0x2c,0x58,0x6c,0x3d,0x65,0x2e,0x69,0x64,0x2c,0x47,0x6c,0x3d,0x65,0x2e,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x2c,0x59,0x6c,0x3d,0x6e,0x29,0x2c,0x6e,0x3d,0x55,0x75,0x28,0x6e,0x2c,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x30,0x39,0x36,0x2c,0x6e,0x29,0x7d,0x28,0x65,0x2c,0x6e,0x2c,0x69,0x2c,0x6c,0x2c,0x72,0x2c,0x6f,0x2c,0x74,0x29,0x3b,0x69,0x66,0x28,0x75,0x29,0x7b,0x75,0x3d,0x6c,0x2e,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x69,0x3d,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x72,0x3d,0x28,0x6f,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x76,0x61,0x72,0x20,0x73,0x3d,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x69,0x29,0x26,0x26,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x21,0x3d,0x3d,0x6f,0x3f,0x28,0x28,0x6c,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x6c,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x73,0x2c,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x6c,0x3d,0x46,0x73,0x28,0x6f,0x2c,0x73,0x29,0x29,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x26,0x6f,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x3f,0x75,0x3d,0x46,0x73,0x28,0x72,0x2c,0x75,0x29,0x3a,0x28,0x75,0x3d,0x4d,0x73,0x28,0x75,0x2c,0x69,0x2c,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x2c,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6c,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x75,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6c,0x2c,0x6c,0x3d,0x75,0x2c,0x75,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x69,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x3f,0x49,0x75,0x28,0x74,0x29,0x3a,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x69,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x74,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x7d,0x2c,0x75,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x69,0x2c,0x75,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x7e,0x74,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4d,0x75,0x2c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x28,0x75,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x6c,0x3d,0x46,0x73,0x28,0x75,0x2c,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x22,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7d,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x28,0x6c,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x29,0x2c,0x6c,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x29,0x3f,0x28,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x5b,0x65,0x5d,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x29,0x3a,0x74,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6c,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x3d,0x49,0x73,0x28,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x22,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x6e,0x7d,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x6d,0x61,0x28,0x72,0x29,0x2c,0x6b,0x61,0x28,0x6e,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x29,0x2c,0x28,0x65,0x3d,0x55,0x75,0x28,0x6e,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x28,0x72,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x29,0x2c,0x4e,0x61,0x28,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x69,0x73,0x42,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x3a,0x6e,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x30,0x2c,0x6c,0x61,0x73,0x74,0x3a,0x72,0x2c,0x74,0x61,0x69,0x6c,0x3a,0x74,0x2c,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x3a,0x6c,0x7d,0x3a,0x28,0x61,0x2e,0x69,0x73,0x42,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x3d,0x6e,0x2c,0x61,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3d,0x30,0x2c,0x61,0x2e,0x6c,0x61,0x73,0x74,0x3d,0x72,0x2c,0x61,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x74,0x2c,0x61,0x2e,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x3d,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6c,0x3d,0x72,0x2e,0x72,0x65,0x76,0x65,0x61,0x6c,0x4f,0x72,0x64,0x65,0x72,0x2c,0x61,0x3d,0x72,0x2e,0x74,0x61,0x69,0x6c,0x3b,0x69,0x66,0x28,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x74,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x32,0x26,0x28,0x72,0x3d,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x29,0x29,0x72,0x3d,0x31,0x26,0x72,0x7c,0x32,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x65,0x3a,0x66,0x6f,0x72,0x28,0x65,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x26,0x26,0x41,0x75,0x28,0x65,0x2c,0x74,0x2c,0x6e,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x39,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x41,0x75,0x28,0x65,0x2c,0x74,0x2c,0x6e,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x65,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x65,0x3d,0x3d,0x3d,0x6e,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x6e,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x26,0x3d,0x31,0x7d,0x69,0x66,0x28,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x72,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x29,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x6c,0x73,0x65,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x73,0x22,0x3a,0x66,0x6f,0x72,0x28,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x6f,0x28,0x65,0x29,0x26,0x26,0x28,0x6c,0x3d,0x74,0x29,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x74,0x3d,0x6c,0x29,0x3f,0x28,0x6c,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x6c,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x56,0x75,0x28,0x6e,0x2c,0x21,0x31,0x2c,0x6c,0x2c,0x74,0x2c,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x62,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x22,0x3a,0x66,0x6f,0x72,0x28,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x6c,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x6f,0x28,0x65,0x29,0x29,0x7b,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x3d,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x74,0x2c,0x74,0x3d,0x6c,0x2c,0x6c,0x3d,0x65,0x7d,0x56,0x75,0x28,0x6e,0x2c,0x21,0x30,0x2c,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x6f,0x67,0x65,0x74,0x68,0x65,0x72,0x22,0x3a,0x56,0x75,0x28,0x6e,0x2c,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x6e,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x65,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x29,0x2c,0x49,0x69,0x7c,0x3d,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x74,0x26,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x21,0x3d,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x35,0x33,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x66,0x6f,0x72,0x28,0x74,0x3d,0x46,0x73,0x28,0x65,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x74,0x2c,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x28,0x74,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x46,0x73,0x28,0x65,0x2c,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x29,0x29,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x3b,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x21,0x6c,0x61,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x3a,0x6e,0x3d,0x65,0x2e,0x74,0x61,0x69,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x28,0x74,0x3d,0x6e,0x29,0x2c,0x6e,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x3f,0x65,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x64,0x22,0x3a,0x74,0x3d,0x65,0x2e,0x74,0x61,0x69,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x28,0x72,0x3d,0x74,0x29,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x3f,0x6e,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x69,0x6c,0x3f,0x65,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x65,0x2e,0x74,0x61,0x69,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x72,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x75,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x3d,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x74,0x3d,0x30,0x2c,0x72,0x3d,0x30,0x3b,0x69,0x66,0x28,0x6e,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3b,0x29,0x74,0x7c,0x3d,0x6c,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x72,0x7c,0x3d,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x26,0x6c,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x2c,0x72,0x7c,0x3d,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x26,0x6c,0x2e,0x66,0x6c,0x61,0x67,0x73,0x2c,0x6c,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6c,0x3d,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x6c,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3b,0x29,0x74,0x7c,0x3d,0x6c,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x72,0x7c,0x3d,0x6c,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x2c,0x72,0x7c,0x3d,0x6c,0x2e,0x66,0x6c,0x61,0x67,0x73,0x2c,0x6c,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x6c,0x3d,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x72,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x37,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x6c,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x46,0x6c,0x28,0x29,0x2c,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x58,0x61,0x28,0x29,0x2c,0x43,0x6c,0x28,0x7a,0x6c,0x29,0x2c,0x43,0x6c,0x28,0x4e,0x6c,0x29,0x2c,0x74,0x6f,0x28,0x29,0x2c,0x72,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x26,0x26,0x28,0x72,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x72,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x72,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7c,0x7c,0x28,0x66,0x61,0x28,0x6e,0x29,0x3f,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x3a,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x35,0x36,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7c,0x7c,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x61,0x26,0x26,0x28,0x6f,0x73,0x28,0x61,0x61,0x29,0x2c,0x61,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x29,0x2c,0x52,0x75,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x5a,0x61,0x28,0x6e,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x4b,0x61,0x28,0x71,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x69,0x66,0x28,0x74,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x46,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x65,0x2e,0x72,0x65,0x66,0x21,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x35,0x31,0x32,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x21,0x72,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x36,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x7d,0x69,0x66,0x28,0x65,0x3d,0x4b,0x61,0x28,0x57,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x66,0x61,0x28,0x6e,0x29,0x29,0x7b,0x72,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x74,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x72,0x5b,0x64,0x6c,0x5d,0x3d,0x6e,0x2c,0x72,0x5b,0x70,0x6c,0x5d,0x3d,0x6f,0x2c,0x65,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x2c,0x74,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x64,0x69,0x61,0x6c,0x6f,0x67,0x22,0x3a,0x6a,0x72,0x28,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x2c,0x72,0x29,0x2c,0x6a,0x72,0x28,0x22,0x63,0x6c,0x6f,0x73,0x65,0x22,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x66,0x72,0x61,0x6d,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x65,0x6d,0x62,0x65,0x64,0x22,0x3a,0x6a,0x72,0x28,0x22,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x76,0x69,0x64,0x65,0x6f,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x61,0x75,0x64,0x69,0x6f,0x22,0x3a,0x66,0x6f,0x72,0x28,0x6c,0x3d,0x30,0x3b,0x6c,0x3c,0x4d,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6c,0x2b,0x2b,0x29,0x6a,0x72,0x28,0x4d,0x72,0x5b,0x6c,0x5d,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3a,0x6a,0x72,0x28,0x22,0x65,0x72,0x72,0x6f,0x72,0x22,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x6d,0x67,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x69,0x6d,0x61,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6c,0x69,0x6e,0x6b,0x22,0x3a,0x6a,0x72,0x28,0x22,0x65,0x72,0x72,0x6f,0x72,0x22,0x2c,0x72,0x29,0x2c,0x6a,0x72,0x28,0x22,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x22,0x3a,0x6a,0x72,0x28,0x22,0x74,0x6f,0x67,0x67,0x6c,0x65,0x22,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x58,0x28,0x72,0x2c,0x6f,0x29,0x2c,0x6a,0x72,0x28,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x22,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x72,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3a,0x21,0x21,0x6f,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x7d,0x2c,0x6a,0x72,0x28,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x22,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x6c,0x65,0x28,0x72,0x2c,0x6f,0x29,0x2c,0x6a,0x72,0x28,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x22,0x2c,0x72,0x29,0x7d,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x69,0x20,0x69,0x6e,0x20,0x79,0x65,0x28,0x74,0x2c,0x6f,0x29,0x2c,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x29,0x69,0x66,0x28,0x6f,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x69,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x73,0x3d,0x6f,0x5b,0x69,0x5d,0x3b,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x3d,0x3d,0x3d,0x69,0x3f,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x3f,0x72,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x73,0x26,0x26,0x28,0x21,0x30,0x21,0x3d,0x3d,0x6f,0x2e,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x26,0x26,0x5a,0x72,0x28,0x72,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x73,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x5b,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x2c,0x73,0x5d,0x29,0x3a,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x26,0x26,0x72,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x22,0x22,0x2b,0x73,0x26,0x26,0x28,0x21,0x30,0x21,0x3d,0x3d,0x6f,0x2e,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x26,0x26,0x5a,0x72,0x28,0x72,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x73,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x5b,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x2c,0x22,0x22,0x2b,0x73,0x5d,0x29,0x3a,0x75,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x69,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x73,0x26,0x26,0x22,0x6f,0x6e,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x3d,0x3d,0x3d,0x69,0x26,0x26,0x6a,0x72,0x28,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x2c,0x72,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x51,0x28,0x72,0x29,0x2c,0x4a,0x28,0x72,0x2c,0x6f,0x2c,0x21,0x30,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x51,0x28,0x72,0x29,0x2c,0x6f,0x65,0x28,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x22,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x28,0x72,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x4a,0x72,0x29,0x7d,0x72,0x3d,0x6c,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x3d,0x39,0x3d,0x3d,0x3d,0x6c,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x6c,0x3a,0x6c,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x22,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x65,0x3d,0x75,0x65,0x28,0x74,0x29,0x29,0x2c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x22,0x3d,0x3d,0x3d,0x65,0x3f,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x3f,0x28,0x28,0x65,0x3d,0x69,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x22,0x64,0x69,0x76,0x22,0x29,0x29,0x2e,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x3d,0x22,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x3c,0x5c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x22,0x2c,0x65,0x3d,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x29,0x3a,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x2e,0x69,0x73,0x3f,0x65,0x3d,0x69,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x74,0x2c,0x7b,0x69,0x73,0x3a,0x72,0x2e,0x69,0x73,0x7d,0x29,0x3a,0x28,0x65,0x3d,0x69,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x74,0x29,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x28,0x69,0x3d,0x65,0x2c,0x72,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3f,0x69,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3d,0x21,0x30,0x3a,0x72,0x2e,0x73,0x69,0x7a,0x65,0x26,0x26,0x28,0x69,0x2e,0x73,0x69,0x7a,0x65,0x3d,0x72,0x2e,0x73,0x69,0x7a,0x65,0x29,0x29,0x29,0x3a,0x65,0x3d,0x69,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x4e,0x53,0x28,0x65,0x2c,0x74,0x29,0x2c,0x65,0x5b,0x64,0x6c,0x5d,0x3d,0x6e,0x2c,0x65,0x5b,0x70,0x6c,0x5d,0x3d,0x72,0x2c,0x4c,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x65,0x3b,0x65,0x3a,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x69,0x3d,0x62,0x65,0x28,0x74,0x2c,0x72,0x29,0x2c,0x74,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x64,0x69,0x61,0x6c,0x6f,0x67,0x22,0x3a,0x6a,0x72,0x28,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x22,0x2c,0x65,0x29,0x2c,0x6a,0x72,0x28,0x22,0x63,0x6c,0x6f,0x73,0x65,0x22,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x66,0x72,0x61,0x6d,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x65,0x6d,0x62,0x65,0x64,0x22,0x3a,0x6a,0x72,0x28,0x22,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x76,0x69,0x64,0x65,0x6f,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x61,0x75,0x64,0x69,0x6f,0x22,0x3a,0x66,0x6f,0x72,0x28,0x6c,0x3d,0x30,0x3b,0x6c,0x3c,0x4d,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6c,0x2b,0x2b,0x29,0x6a,0x72,0x28,0x4d,0x72,0x5b,0x6c,0x5d,0x2c,0x65,0x29,0x3b,0x6c,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3a,0x6a,0x72,0x28,0x22,0x65,0x72,0x72,0x6f,0x72,0x22,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x6d,0x67,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x69,0x6d,0x61,0x67,0x65,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6c,0x69,0x6e,0x6b,0x22,0x3a,0x6a,0x72,0x28,0x22,0x65,0x72,0x72,0x6f,0x72,0x22,0x2c,0x65,0x29,0x2c,0x6a,0x72,0x28,0x22,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x22,0x3a,0x6a,0x72,0x28,0x22,0x74,0x6f,0x67,0x67,0x6c,0x65,0x22,0x2c,0x65,0x29,0x2c,0x6c,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x58,0x28,0x65,0x2c,0x72,0x29,0x2c,0x6c,0x3d,0x59,0x28,0x65,0x2c,0x72,0x29,0x2c,0x6a,0x72,0x28,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x22,0x2c,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x22,0x3a,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x6c,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3a,0x21,0x21,0x72,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x7d,0x2c,0x6c,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x72,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x29,0x2c,0x6a,0x72,0x28,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x22,0x2c,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x6c,0x65,0x28,0x65,0x2c,0x72,0x29,0x2c,0x6c,0x3d,0x72,0x65,0x28,0x65,0x2c,0x72,0x29,0x2c,0x6a,0x72,0x28,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x22,0x2c,0x65,0x29,0x7d,0x66,0x6f,0x72,0x28,0x6f,0x20,0x69,0x6e,0x20,0x79,0x65,0x28,0x74,0x2c,0x6c,0x29,0x2c,0x73,0x3d,0x6c,0x29,0x69,0x66,0x28,0x73,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6f,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x73,0x5b,0x6f,0x5d,0x3b,0x22,0x73,0x74,0x79,0x6c,0x65,0x22,0x3d,0x3d,0x3d,0x6f,0x3f,0x76,0x65,0x28,0x65,0x2c,0x63,0x29,0x3a,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x22,0x3d,0x3d,0x3d,0x6f,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x63,0x3d,0x63,0x3f,0x63,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x26,0x26,0x66,0x65,0x28,0x65,0x2c,0x63,0x29,0x3a,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x3d,0x3d,0x3d,0x6f,0x3f,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x3f,0x28,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x21,0x3d,0x3d,0x74,0x7c,0x7c,0x22,0x22,0x21,0x3d,0x3d,0x63,0x29,0x26,0x26,0x64,0x65,0x28,0x65,0x2c,0x63,0x29,0x3a,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x26,0x26,0x64,0x65,0x28,0x65,0x2c,0x22,0x22,0x2b,0x63,0x29,0x3a,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x22,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x22,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x28,0x75,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6f,0x29,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x26,0x26,0x22,0x6f,0x6e,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x3d,0x3d,0x3d,0x6f,0x26,0x26,0x6a,0x72,0x28,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x2c,0x65,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x26,0x26,0x62,0x28,0x65,0x2c,0x6f,0x2c,0x63,0x2c,0x69,0x29,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x51,0x28,0x65,0x29,0x2c,0x4a,0x28,0x65,0x2c,0x72,0x2c,0x21,0x31,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x51,0x28,0x65,0x29,0x2c,0x6f,0x65,0x28,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x22,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x65,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x22,0x2b,0x48,0x28,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x65,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3d,0x21,0x21,0x72,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x6f,0x3d,0x72,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x3f,0x74,0x65,0x28,0x65,0x2c,0x21,0x21,0x72,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x6f,0x2c,0x21,0x31,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x72,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x74,0x65,0x28,0x65,0x2c,0x21,0x21,0x72,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x72,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x2c,0x21,0x30,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x28,0x65,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x4a,0x72,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x72,0x3d,0x21,0x21,0x72,0x2e,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x6d,0x67,0x22,0x3a,0x72,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x3d,0x21,0x31,0x7d,0x7d,0x72,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x35,0x31,0x32,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x69,0x66,0x28,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x4f,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x72,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x36,0x29,0x29,0x3b,0x69,0x66,0x28,0x74,0x3d,0x4b,0x61,0x28,0x71,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x4b,0x61,0x28,0x57,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x66,0x61,0x28,0x6e,0x29,0x29,0x7b,0x69,0x66,0x28,0x72,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x74,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x72,0x5b,0x64,0x6c,0x5d,0x3d,0x6e,0x2c,0x28,0x6f,0x3d,0x72,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x74,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x74,0x61,0x29,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x5a,0x72,0x28,0x72,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x2c,0x74,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x21,0x30,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x26,0x26,0x5a,0x72,0x28,0x72,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x2c,0x74,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x29,0x7d,0x6f,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x65,0x6c,0x73,0x65,0x28,0x72,0x3d,0x28,0x39,0x3d,0x3d,0x3d,0x74,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x74,0x3a,0x74,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x54,0x65,0x78,0x74,0x4e,0x6f,0x64,0x65,0x28,0x72,0x29,0x29,0x5b,0x64,0x6c,0x5d,0x3d,0x6e,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x72,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x69,0x66,0x28,0x43,0x6c,0x28,0x4a,0x61,0x29,0x2c,0x72,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x69,0x66,0x28,0x6c,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x61,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x64,0x61,0x28,0x29,0x2c,0x70,0x61,0x28,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x39,0x38,0x35,0x36,0x30,0x2c,0x6f,0x3d,0x21,0x31,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6f,0x3d,0x66,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x6f,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x38,0x29,0x29,0x3b,0x69,0x66,0x28,0x21,0x28,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6f,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x3f,0x6f,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x37,0x29,0x29,0x3b,0x6f,0x5b,0x64,0x6c,0x5d,0x3d,0x6e,0x7d,0x65,0x6c,0x73,0x65,0x20,0x70,0x61,0x28,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x28,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x3b,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6f,0x3d,0x21,0x31,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x61,0x26,0x26,0x28,0x6f,0x73,0x28,0x61,0x61,0x29,0x2c,0x61,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x6f,0x3d,0x21,0x30,0x3b,0x69,0x66,0x28,0x21,0x6f,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x36,0x35,0x35,0x33,0x36,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3f,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x3f,0x28,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x6e,0x29,0x3a,0x28,0x28,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x21,0x3d,0x3d,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x72,0x26,0x26,0x28,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x38,0x31,0x39,0x32,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3f,0x30,0x3d,0x3d,0x3d,0x4f,0x69,0x26,0x26,0x28,0x4f,0x69,0x3d,0x33,0x29,0x3a,0x68,0x73,0x28,0x29,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x61,0x28,0x29,0x2c,0x52,0x75,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x24,0x72,0x28,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x2c,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x50,0x61,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x2c,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x69,0x66,0x28,0x43,0x6c,0x28,0x4a,0x61,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x6f,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x72,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x69,0x3d,0x6f,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x29,0x29,0x69,0x66,0x28,0x72,0x29,0x57,0x75,0x28,0x6f,0x2c,0x21,0x31,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x4f,0x69,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x66,0x6f,0x72,0x28,0x65,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x69,0x3d,0x65,0x6f,0x28,0x65,0x29,0x29,0x29,0x7b,0x66,0x6f,0x72,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x57,0x75,0x28,0x6f,0x2c,0x21,0x31,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x69,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x26,0x26,0x28,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x72,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x6e,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x72,0x3d,0x74,0x2c,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3b,0x29,0x65,0x3d,0x72,0x2c,0x28,0x6f,0x3d,0x74,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x36,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x69,0x3d,0x6f,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x3f,0x28,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x65,0x2c,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x69,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x69,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x69,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6f,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x6f,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x69,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x69,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6f,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x69,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6f,0x2e,0x74,0x79,0x70,0x65,0x3d,0x69,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x3d,0x69,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x2c,0x6f,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x7b,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x7d,0x29,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x31,0x26,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7c,0x32,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x69,0x6c,0x26,0x26,0x47,0x65,0x28,0x29,0x3e,0x24,0x69,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x72,0x3d,0x21,0x30,0x2c,0x57,0x75,0x28,0x6f,0x2c,0x21,0x31,0x29,0x2c,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x21,0x72,0x29,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x6f,0x28,0x69,0x29,0x29,0x29,0x7b,0x69,0x66,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x72,0x3d,0x21,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x26,0x26,0x28,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x74,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x57,0x75,0x28,0x6f,0x2c,0x21,0x30,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x69,0x6c,0x26,0x26,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x22,0x3d,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x26,0x26,0x21,0x69,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x21,0x6c,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x32,0x2a,0x47,0x65,0x28,0x29,0x2d,0x6f,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3e,0x24,0x69,0x26,0x26,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x72,0x3d,0x21,0x30,0x2c,0x57,0x75,0x28,0x6f,0x2c,0x21,0x31,0x29,0x2c,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x29,0x3b,0x6f,0x2e,0x69,0x73,0x42,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x3f,0x28,0x69,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x69,0x29,0x3a,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x6f,0x2e,0x6c,0x61,0x73,0x74,0x29,0x3f,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x69,0x3a,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x69,0x2c,0x6f,0x2e,0x6c,0x61,0x73,0x74,0x3d,0x69,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x69,0x6c,0x3f,0x28,0x6e,0x3d,0x6f,0x2e,0x74,0x61,0x69,0x6c,0x2c,0x6f,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3d,0x6e,0x2c,0x6f,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x6f,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3d,0x47,0x65,0x28,0x29,0x2c,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x3d,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x72,0x3f,0x31,0x26,0x74,0x7c,0x32,0x3a,0x31,0x26,0x74,0x29,0x2c,0x6e,0x29,0x3a,0x28,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x73,0x28,0x29,0x2c,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x21,0x3d,0x3d,0x72,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x38,0x31,0x39,0x32,0x29,0x2c,0x72,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x3f,0x30,0x21,0x3d,0x3d,0x28,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x26,0x52,0x69,0x29,0x26,0x26,0x28,0x51,0x75,0x28,0x6e,0x29,0x2c,0x36,0x26,0x6e,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x38,0x31,0x39,0x32,0x29,0x29,0x3a,0x51,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x35,0x36,0x2c,0x6e,0x2e,0x74,0x61,0x67,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x6c,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x46,0x6c,0x28,0x29,0x2c,0x36,0x35,0x35,0x33,0x36,0x26,0x28,0x65,0x3d,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x3f,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x2d,0x36,0x35,0x35,0x33,0x37,0x26,0x65,0x7c,0x31,0x32,0x38,0x2c,0x6e,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x61,0x28,0x29,0x2c,0x43,0x6c,0x28,0x7a,0x6c,0x29,0x2c,0x43,0x6c,0x28,0x4e,0x6c,0x29,0x2c,0x74,0x6f,0x28,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x36,0x35,0x35,0x33,0x36,0x26,0x28,0x65,0x3d,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x65,0x29,0x3f,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x2d,0x36,0x35,0x35,0x33,0x37,0x26,0x65,0x7c,0x31,0x32,0x38,0x2c,0x6e,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5a,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x69,0x66,0x28,0x43,0x6c,0x28,0x4a,0x61,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x34,0x30,0x29,0x29,0x3b,0x70,0x61,0x28,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x36,0x35,0x35,0x33,0x36,0x26,0x28,0x65,0x3d,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x3f,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x2d,0x36,0x35,0x35,0x33,0x37,0x26,0x65,0x7c,0x31,0x32,0x38,0x2c,0x6e,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x43,0x6c,0x28,0x4a,0x61,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x61,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x50,0x61,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x73,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x4c,0x75,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3b,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x29,0x65,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x34,0x21,0x3d,0x3d,0x74,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x74,0x2c,0x74,0x3d,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x74,0x3d,0x3d,0x3d,0x6e,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x7d,0x2c,0x52,0x75,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x46,0x75,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x69,0x66,0x28,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x7b,0x65,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x4b,0x61,0x28,0x57,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x61,0x2c,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x6c,0x3d,0x59,0x28,0x65,0x2c,0x6c,0x29,0x2c,0x72,0x3d,0x59,0x28,0x65,0x2c,0x72,0x29,0x2c,0x6f,0x3d,0x5b,0x5d,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x6c,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x6c,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x29,0x2c,0x72,0x3d,0x44,0x28,0x7b,0x7d,0x2c,0x72,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x29,0x2c,0x6f,0x3d,0x5b,0x5d,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x6c,0x3d,0x72,0x65,0x28,0x65,0x2c,0x6c,0x29,0x2c,0x72,0x3d,0x72,0x65,0x28,0x65,0x2c,0x72,0x29,0x2c,0x6f,0x3d,0x5b,0x5d,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x28,0x65,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x4a,0x72,0x29,0x7d,0x66,0x6f,0x72,0x28,0x63,0x20,0x69,0x6e,0x20,0x79,0x65,0x28,0x74,0x2c,0x72,0x29,0x2c,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x29,0x69,0x66,0x28,0x21,0x72,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x26,0x26,0x6c,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6c,0x5b,0x63,0x5d,0x29,0x69,0x66,0x28,0x22,0x73,0x74,0x79,0x6c,0x65,0x22,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3d,0x6c,0x5b,0x63,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x61,0x20,0x69,0x6e,0x20,0x69,0x29,0x69,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x61,0x29,0x26,0x26,0x28,0x74,0x7c,0x7c,0x28,0x74,0x3d,0x7b,0x7d,0x29,0x2c,0x74,0x5b,0x61,0x5d,0x3d,0x22,0x22,0x29,0x7d,0x65,0x6c,0x73,0x65,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x22,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x75,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x3f,0x6f,0x7c,0x7c,0x28,0x6f,0x3d,0x5b,0x5d,0x29,0x3a,0x28,0x6f,0x3d,0x6f,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x3b,0x66,0x6f,0x72,0x28,0x63,0x20,0x69,0x6e,0x20,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x73,0x3d,0x72,0x5b,0x63,0x5d,0x3b,0x69,0x66,0x28,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6c,0x3f,0x6c,0x5b,0x63,0x5d,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x72,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x26,0x26,0x73,0x21,0x3d,0x3d,0x69,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x73,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x69,0x29,0x29,0x69,0x66,0x28,0x22,0x73,0x74,0x79,0x6c,0x65,0x22,0x3d,0x3d,0x3d,0x63,0x29,0x69,0x66,0x28,0x69,0x29,0x7b,0x66,0x6f,0x72,0x28,0x61,0x20,0x69,0x6e,0x20,0x69,0x29,0x21,0x69,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x61,0x29,0x7c,0x7c,0x73,0x26,0x26,0x73,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x61,0x29,0x7c,0x7c,0x28,0x74,0x7c,0x7c,0x28,0x74,0x3d,0x7b,0x7d,0x29,0x2c,0x74,0x5b,0x61,0x5d,0x3d,0x22,0x22,0x29,0x3b,0x66,0x6f,0x72,0x28,0x61,0x20,0x69,0x6e,0x20,0x73,0x29,0x73,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x61,0x29,0x26,0x26,0x69,0x5b,0x61,0x5d,0x21,0x3d,0x3d,0x73,0x5b,0x61,0x5d,0x26,0x26,0x28,0x74,0x7c,0x7c,0x28,0x74,0x3d,0x7b,0x7d,0x29,0x2c,0x74,0x5b,0x61,0x5d,0x3d,0x73,0x5b,0x61,0x5d,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x74,0x7c,0x7c,0x28,0x6f,0x7c,0x7c,0x28,0x6f,0x3d,0x5b,0x5d,0x29,0x2c,0x6f,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x2c,0x74,0x29,0x29,0x2c,0x74,0x3d,0x73,0x3b,0x65,0x6c,0x73,0x65,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x22,0x3d,0x3d,0x3d,0x63,0x3f,0x28,0x73,0x3d,0x73,0x3f,0x73,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x69,0x3d,0x69,0x3f,0x69,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x73,0x26,0x26,0x69,0x21,0x3d,0x3d,0x73,0x26,0x26,0x28,0x6f,0x3d,0x6f,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x2c,0x73,0x29,0x29,0x3a,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x3d,0x3d,0x3d,0x63,0x3f,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x26,0x26,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x7c,0x7c,0x28,0x6f,0x3d,0x6f,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x2c,0x22,0x22,0x2b,0x73,0x29,0x3a,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x75,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x3f,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x73,0x26,0x26,0x22,0x6f,0x6e,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x6a,0x72,0x28,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x2c,0x65,0x29,0x2c,0x6f,0x7c,0x7c,0x69,0x3d,0x3d,0x3d,0x73,0x7c,0x7c,0x28,0x6f,0x3d,0x5b,0x5d,0x29,0x29,0x3a,0x28,0x6f,0x3d,0x6f,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x2c,0x73,0x29,0x29,0x7d,0x74,0x26,0x26,0x28,0x6f,0x3d,0x6f,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x22,0x73,0x74,0x79,0x6c,0x65,0x22,0x2c,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x6f,0x3b,0x28,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x63,0x29,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x7d,0x2c,0x4f,0x75,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x74,0x21,0x3d,0x3d,0x72,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x3b,0x76,0x61,0x72,0x20,0x59,0x75,0x3d,0x21,0x31,0x2c,0x58,0x75,0x3d,0x21,0x31,0x2c,0x47,0x75,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x57,0x65,0x61,0x6b,0x53,0x65,0x74,0x3f,0x57,0x65,0x61,0x6b,0x53,0x65,0x74,0x3a,0x53,0x65,0x74,0x2c,0x5a,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x75,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x72,0x65,0x66,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x74,0x29,0x74,0x72,0x79,0x7b,0x74,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x72,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x74,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x74,0x72,0x79,0x7b,0x74,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x72,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6e,0x69,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x3f,0x72,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x72,0x3d,0x72,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x7b,0x69,0x66,0x28,0x28,0x6c,0x2e,0x74,0x61,0x67,0x26,0x65,0x29,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6c,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3b,0x6c,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x26,0x26,0x65,0x69,0x28,0x6e,0x2c,0x74,0x2c,0x61,0x29,0x7d,0x6c,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x69,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x3f,0x6e,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x3d,0x6e,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x7b,0x69,0x66,0x28,0x28,0x74,0x2e,0x74,0x61,0x67,0x26,0x65,0x29,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x3b,0x74,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3d,0x72,0x28,0x29,0x7d,0x74,0x3d,0x74,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x74,0x21,0x3d,0x3d,0x6e,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x69,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x72,0x65,0x66,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x65,0x2e,0x74,0x61,0x67,0x2c,0x65,0x3d,0x74,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x3f,0x6e,0x28,0x65,0x29,0x3a,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x65,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x69,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x69,0x28,0x6e,0x29,0x29,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x35,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x26,0x26,0x28,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x6e,0x5b,0x64,0x6c,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x6e,0x5b,0x70,0x6c,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x6e,0x5b,0x68,0x6c,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x6e,0x5b,0x76,0x6c,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x6e,0x5b,0x67,0x6c,0x5d,0x29,0x29,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x69,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x35,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x69,0x28,0x65,0x29,0x7b,0x65,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x6f,0x69,0x28,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x66,0x6f,0x72,0x28,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x35,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x36,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x31,0x38,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x32,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x20,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x20,0x65,0x3b,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x65,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x69,0x66,0x28,0x21,0x28,0x32,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x72,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x72,0x29,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6e,0x3f,0x38,0x3d,0x3d,0x3d,0x74,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x74,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x65,0x2c,0x6e,0x29,0x3a,0x74,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x65,0x2c,0x6e,0x29,0x3a,0x28,0x38,0x3d,0x3d,0x3d,0x74,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x28,0x6e,0x3d,0x74,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x29,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x65,0x2c,0x74,0x29,0x3a,0x28,0x6e,0x3d,0x74,0x29,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x65,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x74,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x29,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x7c,0x7c,0x28,0x6e,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x4a,0x72,0x29,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x34,0x21,0x3d,0x3d,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x29,0x66,0x6f,0x72,0x28,0x69,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x69,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x72,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x72,0x29,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6e,0x3f,0x74,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x65,0x2c,0x6e,0x29,0x3a,0x74,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x65,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x34,0x21,0x3d,0x3d,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x29,0x66,0x6f,0x72,0x28,0x73,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x73,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x76,0x61,0x72,0x20,0x63,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x69,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x66,0x6f,0x72,0x28,0x74,0x3d,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3b,0x29,0x70,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x61,0x6e,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x6e,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x29,0x74,0x72,0x79,0x7b,0x61,0x6e,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x28,0x6c,0x6e,0x2c,0x74,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x75,0x29,0x7b,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x58,0x75,0x7c,0x7c,0x4a,0x75,0x28,0x74,0x2c,0x6e,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x76,0x61,0x72,0x20,0x72,0x3d,0x63,0x69,0x2c,0x6c,0x3d,0x66,0x69,0x3b,0x63,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x66,0x69,0x3d,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x63,0x69,0x3d,0x72,0x29,0x26,0x26,0x28,0x66,0x69,0x3f,0x28,0x65,0x3d,0x63,0x69,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x74,0x29,0x3a,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x74,0x29,0x29,0x3a,0x63,0x69,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x38,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x69,0x26,0x26,0x28,0x66,0x69,0x3f,0x28,0x65,0x3d,0x63,0x69,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x69,0x6c,0x28,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2c,0x74,0x29,0x3a,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x69,0x6c,0x28,0x65,0x2c,0x74,0x29,0x2c,0x42,0x6e,0x28,0x65,0x29,0x29,0x3a,0x69,0x6c,0x28,0x63,0x69,0x2c,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x3d,0x63,0x69,0x2c,0x6c,0x3d,0x66,0x69,0x2c,0x63,0x69,0x3d,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2c,0x66,0x69,0x3d,0x21,0x30,0x2c,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x63,0x69,0x3d,0x72,0x2c,0x66,0x69,0x3d,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x69,0x66,0x28,0x21,0x58,0x75,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x74,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x72,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x29,0x29,0x29,0x7b,0x6c,0x3d,0x72,0x3d,0x72,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6c,0x2c,0x6f,0x3d,0x61,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3b,0x61,0x3d,0x61,0x2e,0x74,0x61,0x67,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x28,0x32,0x26,0x61,0x29,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x28,0x34,0x26,0x61,0x29,0x29,0x26,0x26,0x65,0x69,0x28,0x74,0x2c,0x6e,0x2c,0x6f,0x29,0x2c,0x6c,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x7d,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x66,0x28,0x21,0x58,0x75,0x26,0x26,0x28,0x4a,0x75,0x28,0x74,0x2c,0x6e,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x72,0x3d,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x29,0x29,0x74,0x72,0x79,0x7b,0x72,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x72,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x75,0x29,0x7b,0x45,0x73,0x28,0x74,0x2c,0x6e,0x2c,0x75,0x29,0x7d,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x31,0x26,0x74,0x2e,0x6d,0x6f,0x64,0x65,0x3f,0x28,0x58,0x75,0x3d,0x28,0x72,0x3d,0x58,0x75,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x58,0x75,0x3d,0x72,0x29,0x3a,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x64,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x69,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x28,0x74,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x65,0x77,0x20,0x47,0x75,0x29,0x2c,0x6e,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x4e,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x6e,0x29,0x3b,0x74,0x2e,0x68,0x61,0x73,0x28,0x6e,0x29,0x7c,0x7c,0x28,0x74,0x2e,0x61,0x64,0x64,0x28,0x6e,0x29,0x2c,0x6e,0x2e,0x74,0x68,0x65,0x6e,0x28,0x72,0x2c,0x72,0x29,0x29,0x7d,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x69,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x72,0x3d,0x30,0x3b,0x72,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x72,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x5b,0x72,0x5d,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x65,0x2c,0x75,0x3d,0x6e,0x2c,0x69,0x3d,0x75,0x3b,0x65,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x3b,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x69,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x63,0x69,0x3d,0x69,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x66,0x69,0x3d,0x21,0x31,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x69,0x3d,0x69,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2c,0x66,0x69,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x69,0x3d,0x69,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x69,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x30,0x29,0x29,0x3b,0x70,0x69,0x28,0x6f,0x2c,0x75,0x2c,0x6c,0x29,0x2c,0x63,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x69,0x3d,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x73,0x3d,0x6c,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x26,0x26,0x28,0x73,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x6c,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x45,0x73,0x28,0x6c,0x2c,0x6e,0x2c,0x63,0x29,0x7d,0x7d,0x69,0x66,0x28,0x31,0x32,0x38,0x35,0x34,0x26,0x6e,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x29,0x66,0x6f,0x72,0x28,0x6e,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3b,0x29,0x76,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x6e,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x69,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x72,0x3d,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x69,0x66,0x28,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x34,0x26,0x72,0x29,0x7b,0x74,0x72,0x79,0x7b,0x74,0x69,0x28,0x33,0x2c,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x2c,0x72,0x69,0x28,0x33,0x2c,0x65,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x74,0x72,0x79,0x7b,0x74,0x69,0x28,0x35,0x2c,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x35,0x31,0x32,0x26,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x4a,0x75,0x28,0x74,0x2c,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x69,0x66,0x28,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x35,0x31,0x32,0x26,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x4a,0x75,0x28,0x74,0x2c,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x2c,0x33,0x32,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x74,0x72,0x79,0x7b,0x64,0x65,0x28,0x6c,0x2c,0x22,0x22,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x7d,0x69,0x66,0x28,0x34,0x26,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x6c,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3f,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3a,0x6f,0x2c,0x69,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x73,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x29,0x74,0x72,0x79,0x7b,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3d,0x3d,0x3d,0x69,0x26,0x26,0x22,0x72,0x61,0x64,0x69,0x6f,0x22,0x3d,0x3d,0x3d,0x6f,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6f,0x2e,0x6e,0x61,0x6d,0x65,0x26,0x26,0x47,0x28,0x6c,0x2c,0x6f,0x29,0x2c,0x62,0x65,0x28,0x69,0x2c,0x75,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x65,0x28,0x69,0x2c,0x6f,0x29,0x3b,0x66,0x6f,0x72,0x28,0x75,0x3d,0x30,0x3b,0x75,0x3c,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x75,0x2b,0x3d,0x32,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x73,0x5b,0x75,0x5d,0x2c,0x64,0x3d,0x73,0x5b,0x75,0x2b,0x31,0x5d,0x3b,0x22,0x73,0x74,0x79,0x6c,0x65,0x22,0x3d,0x3d,0x3d,0x66,0x3f,0x76,0x65,0x28,0x6c,0x2c,0x64,0x29,0x3a,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x22,0x3d,0x3d,0x3d,0x66,0x3f,0x66,0x65,0x28,0x6c,0x2c,0x64,0x29,0x3a,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x3d,0x3d,0x3d,0x66,0x3f,0x64,0x65,0x28,0x6c,0x2c,0x64,0x29,0x3a,0x62,0x28,0x6c,0x2c,0x66,0x2c,0x64,0x2c,0x63,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x69,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x5a,0x28,0x6c,0x2c,0x6f,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x61,0x65,0x28,0x6c,0x2c,0x6f,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x76,0x61,0x72,0x20,0x70,0x3d,0x6c,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3b,0x6c,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3d,0x21,0x21,0x6f,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x6f,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6d,0x3f,0x74,0x65,0x28,0x6c,0x2c,0x21,0x21,0x6f,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x6d,0x2c,0x21,0x31,0x29,0x3a,0x70,0x21,0x3d,0x3d,0x21,0x21,0x6f,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6f,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3f,0x74,0x65,0x28,0x6c,0x2c,0x21,0x21,0x6f,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x6f,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x2c,0x21,0x30,0x29,0x3a,0x74,0x65,0x28,0x6c,0x2c,0x21,0x21,0x6f,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x6f,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3f,0x5b,0x5d,0x3a,0x22,0x22,0x2c,0x21,0x31,0x29,0x29,0x7d,0x6c,0x5b,0x70,0x6c,0x5d,0x3d,0x6f,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x69,0x66,0x28,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x34,0x26,0x72,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x32,0x29,0x29,0x3b,0x6c,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6f,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x74,0x72,0x79,0x7b,0x6c,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x3d,0x6f,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x69,0x66,0x28,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x34,0x26,0x72,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x74,0x72,0x79,0x7b,0x42,0x6e,0x28,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x38,0x31,0x39,0x32,0x26,0x28,0x6c,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x26,0x28,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x73,0x48,0x69,0x64,0x64,0x65,0x6e,0x3d,0x6f,0x2c,0x21,0x6f,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x56,0x69,0x3d,0x47,0x65,0x28,0x29,0x29,0x29,0x2c,0x34,0x26,0x72,0x26,0x26,0x6d,0x69,0x28,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x69,0x66,0x28,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x3f,0x28,0x58,0x75,0x3d,0x28,0x63,0x3d,0x58,0x75,0x29,0x7c,0x7c,0x66,0x2c,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x58,0x75,0x3d,0x63,0x29,0x3a,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x38,0x31,0x39,0x32,0x26,0x72,0x29,0x7b,0x69,0x66,0x28,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x28,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x73,0x48,0x69,0x64,0x64,0x65,0x6e,0x3d,0x63,0x29,0x26,0x26,0x21,0x66,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x29,0x66,0x6f,0x72,0x28,0x5a,0x75,0x3d,0x65,0x2c,0x66,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x64,0x3d,0x5a,0x75,0x3d,0x66,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6d,0x3d,0x28,0x70,0x3d,0x5a,0x75,0x29,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x70,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x74,0x69,0x28,0x34,0x2c,0x70,0x2c,0x70,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x4a,0x75,0x28,0x70,0x2c,0x70,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x76,0x61,0x72,0x20,0x68,0x3d,0x70,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x68,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x29,0x7b,0x72,0x3d,0x70,0x2c,0x74,0x3d,0x70,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x6e,0x3d,0x72,0x2c,0x68,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x68,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x68,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x72,0x2c,0x74,0x2c,0x76,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x4a,0x75,0x28,0x70,0x2c,0x70,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x70,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7b,0x77,0x69,0x28,0x64,0x29,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x3f,0x28,0x6d,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x70,0x2c,0x5a,0x75,0x3d,0x6d,0x29,0x3a,0x77,0x69,0x28,0x64,0x29,0x7d,0x66,0x3d,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x65,0x3a,0x66,0x6f,0x72,0x28,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x3d,0x65,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x64,0x2e,0x74,0x61,0x67,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x29,0x7b,0x66,0x3d,0x64,0x3b,0x74,0x72,0x79,0x7b,0x6c,0x3d,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x63,0x3f,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x6f,0x3d,0x6c,0x2e,0x73,0x74,0x79,0x6c,0x65,0x29,0x2e,0x73,0x65,0x74,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x3f,0x6f,0x2e,0x73,0x65,0x74,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x22,0x2c,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x2c,0x22,0x69,0x6d,0x70,0x6f,0x72,0x74,0x61,0x6e,0x74,0x22,0x29,0x3a,0x6f,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3d,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x3a,0x28,0x69,0x3d,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x75,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x28,0x73,0x3d,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x73,0x74,0x79,0x6c,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x26,0x26,0x73,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x22,0x29,0x3f,0x73,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x2e,0x73,0x74,0x79,0x6c,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3d,0x68,0x65,0x28,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x22,0x2c,0x75,0x29,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x36,0x3d,0x3d,0x3d,0x64,0x2e,0x74,0x61,0x67,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x29,0x74,0x72,0x79,0x7b,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x3d,0x63,0x3f,0x22,0x22,0x3a,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x76,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x76,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x28,0x32,0x32,0x21,0x3d,0x3d,0x64,0x2e,0x74,0x61,0x67,0x26,0x26,0x32,0x33,0x21,0x3d,0x3d,0x64,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x64,0x3d,0x3d,0x3d,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x64,0x2c,0x64,0x3d,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x64,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x66,0x3d,0x3d,0x3d,0x64,0x26,0x26,0x28,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x64,0x3d,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x66,0x3d,0x3d,0x3d,0x64,0x26,0x26,0x28,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x64,0x3d,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x68,0x69,0x28,0x6e,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x65,0x29,0x2c,0x34,0x26,0x72,0x26,0x26,0x6d,0x69,0x28,0x65,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x69,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3b,0x69,0x66,0x28,0x32,0x26,0x6e,0x29,0x7b,0x74,0x72,0x79,0x7b,0x65,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6f,0x69,0x28,0x74,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x74,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x30,0x29,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x72,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x6c,0x3d,0x72,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x33,0x32,0x26,0x72,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x26,0x28,0x64,0x65,0x28,0x6c,0x2c,0x22,0x22,0x29,0x2c,0x72,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x33,0x33,0x29,0x2c,0x73,0x69,0x28,0x65,0x2c,0x75,0x69,0x28,0x65,0x29,0x2c,0x6c,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x76,0x61,0x72,0x20,0x6f,0x3d,0x72,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x69,0x69,0x28,0x65,0x2c,0x75,0x69,0x28,0x65,0x29,0x2c,0x6f,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x31,0x29,0x29,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x75,0x29,0x7b,0x45,0x73,0x28,0x65,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x75,0x29,0x7d,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x33,0x7d,0x34,0x30,0x39,0x36,0x26,0x6e,0x26,0x26,0x28,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x34,0x30,0x39,0x37,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x5a,0x75,0x3d,0x65,0x2c,0x62,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x69,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x72,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x5a,0x75,0x2c,0x61,0x3d,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x32,0x32,0x3d,0x3d,0x3d,0x6c,0x2e,0x74,0x61,0x67,0x26,0x26,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x59,0x75,0x3b,0x69,0x66,0x28,0x21,0x6f,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6c,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x58,0x75,0x3b,0x75,0x3d,0x59,0x75,0x3b,0x76,0x61,0x72,0x20,0x73,0x3d,0x58,0x75,0x3b,0x69,0x66,0x28,0x59,0x75,0x3d,0x6f,0x2c,0x28,0x58,0x75,0x3d,0x69,0x29,0x26,0x26,0x21,0x73,0x29,0x66,0x6f,0x72,0x28,0x5a,0x75,0x3d,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x69,0x3d,0x28,0x6f,0x3d,0x5a,0x75,0x29,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x32,0x32,0x3d,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3f,0x53,0x69,0x28,0x6c,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x3f,0x28,0x69,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6f,0x2c,0x5a,0x75,0x3d,0x69,0x29,0x3a,0x53,0x69,0x28,0x6c,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x5a,0x75,0x3d,0x61,0x2c,0x62,0x69,0x28,0x61,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x5a,0x75,0x3d,0x6c,0x2c,0x59,0x75,0x3d,0x75,0x2c,0x58,0x75,0x3d,0x73,0x7d,0x6b,0x69,0x28,0x65,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x30,0x21,0x3d,0x3d,0x28,0x38,0x37,0x37,0x32,0x26,0x6c,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x28,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6c,0x2c,0x5a,0x75,0x3d,0x61,0x29,0x3a,0x6b,0x69,0x28,0x65,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x69,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x5a,0x75,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x38,0x37,0x37,0x32,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x38,0x37,0x37,0x32,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x58,0x75,0x7c,0x7c,0x72,0x69,0x28,0x35,0x2c,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x34,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x26,0x21,0x58,0x75,0x29,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x29,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3f,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3a,0x74,0x75,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x29,0x3b,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x6c,0x2c,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x72,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x29,0x7d,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x42,0x61,0x28,0x6e,0x2c,0x6f,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x75,0x3d,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x29,0x7b,0x69,0x66,0x28,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x42,0x61,0x28,0x6e,0x2c,0x75,0x2c,0x74,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x69,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x34,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7b,0x74,0x3d,0x69,0x3b,0x76,0x61,0x72,0x20,0x73,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x73,0x2e,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x26,0x26,0x74,0x2e,0x66,0x6f,0x63,0x75,0x73,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x69,0x6d,0x67,0x22,0x3a,0x73,0x2e,0x73,0x72,0x63,0x26,0x26,0x28,0x74,0x2e,0x73,0x72,0x63,0x3d,0x73,0x2e,0x73,0x72,0x63,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x66,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x42,0x6e,0x28,0x64,0x29,0x7d,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x33,0x29,0x29,0x7d,0x58,0x75,0x7c,0x7c,0x35,0x31,0x32,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x26,0x6c,0x69,0x28,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x70,0x29,0x7b,0x45,0x73,0x28,0x6e,0x2c,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x70,0x29,0x7d,0x7d,0x69,0x66,0x28,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x5a,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x29,0x7b,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x5a,0x75,0x3d,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x5a,0x75,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x69,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x5a,0x75,0x3b,0x69,0x66,0x28,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x5a,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x7b,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x5a,0x75,0x3d,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x5a,0x75,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x69,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x5a,0x75,0x3b,0x74,0x72,0x79,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x72,0x69,0x28,0x34,0x2c,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x69,0x29,0x7b,0x45,0x73,0x28,0x6e,0x2c,0x74,0x2c,0x69,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x69,0x29,0x7b,0x45,0x73,0x28,0x6e,0x2c,0x6c,0x2c,0x69,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x61,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x6c,0x69,0x28,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x69,0x29,0x7b,0x45,0x73,0x28,0x6e,0x2c,0x61,0x2c,0x69,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x6c,0x69,0x28,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x69,0x29,0x7b,0x45,0x73,0x28,0x6e,0x2c,0x6f,0x2c,0x69,0x29,0x7d,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x69,0x29,0x7b,0x45,0x73,0x28,0x6e,0x2c,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x69,0x29,0x7d,0x69,0x66,0x28,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x5a,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x76,0x61,0x72,0x20,0x75,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x29,0x7b,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x5a,0x75,0x3d,0x75,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x5a,0x75,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x76,0x61,0x72,0x20,0x78,0x69,0x2c,0x45,0x69,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x63,0x65,0x69,0x6c,0x2c,0x43,0x69,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x2c,0x5f,0x69,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x2c,0x50,0x69,0x3d,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x4e,0x69,0x3d,0x30,0x2c,0x7a,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x54,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4c,0x69,0x3d,0x30,0x2c,0x52,0x69,0x3d,0x30,0x2c,0x46,0x69,0x3d,0x45,0x6c,0x28,0x30,0x29,0x2c,0x4f,0x69,0x3d,0x30,0x2c,0x4d,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x49,0x69,0x3d,0x30,0x2c,0x44,0x69,0x3d,0x30,0x2c,0x55,0x69,0x3d,0x30,0x2c,0x6a,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x41,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x56,0x69,0x3d,0x30,0x2c,0x24,0x69,0x3d,0x31,0x2f,0x30,0x2c,0x42,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x48,0x69,0x3d,0x21,0x31,0x2c,0x57,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x51,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x71,0x69,0x3d,0x21,0x31,0x2c,0x4b,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x59,0x69,0x3d,0x30,0x2c,0x58,0x69,0x3d,0x30,0x2c,0x47,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x5a,0x69,0x3d,0x2d,0x31,0x2c,0x4a,0x69,0x3d,0x30,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x73,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x3f,0x47,0x65,0x28,0x29,0x3a,0x2d,0x31,0x21,0x3d,0x3d,0x5a,0x69,0x3f,0x5a,0x69,0x3a,0x5a,0x69,0x3d,0x47,0x65,0x28,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x73,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x3f,0x31,0x3a,0x30,0x21,0x3d,0x3d,0x28,0x32,0x26,0x4e,0x69,0x29,0x26,0x26,0x30,0x21,0x3d,0x3d,0x4c,0x69,0x3f,0x4c,0x69,0x26,0x2d,0x4c,0x69,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x61,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3f,0x28,0x30,0x3d,0x3d,0x3d,0x4a,0x69,0x26,0x26,0x28,0x4a,0x69,0x3d,0x76,0x6e,0x28,0x29,0x29,0x2c,0x4a,0x69,0x29,0x3a,0x30,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x6b,0x6e,0x29,0x3f,0x65,0x3a,0x65,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x65,0x76,0x65,0x6e,0x74,0x29,0x3f,0x31,0x36,0x3a,0x47,0x6e,0x28,0x65,0x2e,0x74,0x79,0x70,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x35,0x30,0x3c,0x58,0x69,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x58,0x69,0x3d,0x30,0x2c,0x47,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x38,0x35,0x29,0x29,0x3b,0x79,0x6e,0x28,0x65,0x2c,0x74,0x2c,0x72,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x32,0x26,0x4e,0x69,0x29,0x26,0x26,0x65,0x3d,0x3d,0x3d,0x7a,0x69,0x7c,0x7c,0x28,0x65,0x3d,0x3d,0x3d,0x7a,0x69,0x26,0x26,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x26,0x4e,0x69,0x29,0x26,0x26,0x28,0x44,0x69,0x7c,0x3d,0x74,0x29,0x2c,0x34,0x3d,0x3d,0x3d,0x4f,0x69,0x26,0x26,0x75,0x73,0x28,0x65,0x2c,0x4c,0x69,0x29,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x72,0x29,0x2c,0x31,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x4e,0x69,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x28,0x24,0x69,0x3d,0x47,0x65,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x6a,0x6c,0x26,0x26,0x24,0x6c,0x28,0x29,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3b,0x21,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x72,0x3d,0x65,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x6c,0x3d,0x65,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x2c,0x61,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x30,0x3c,0x61,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x33,0x31,0x2d,0x6f,0x6e,0x28,0x61,0x29,0x2c,0x75,0x3d,0x31,0x3c,0x3c,0x6f,0x2c,0x69,0x3d,0x6c,0x5b,0x6f,0x5d,0x3b,0x2d,0x31,0x3d,0x3d,0x3d,0x69,0x3f,0x30,0x21,0x3d,0x3d,0x28,0x75,0x26,0x74,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x75,0x26,0x72,0x29,0x7c,0x7c,0x28,0x6c,0x5b,0x6f,0x5d,0x3d,0x6d,0x6e,0x28,0x75,0x2c,0x6e,0x29,0x29,0x3a,0x69,0x3c,0x3d,0x6e,0x26,0x26,0x28,0x65,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x75,0x29,0x2c,0x61,0x26,0x3d,0x7e,0x75,0x7d,0x7d,0x28,0x65,0x2c,0x6e,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x70,0x6e,0x28,0x65,0x2c,0x65,0x3d,0x3d,0x3d,0x7a,0x69,0x3f,0x4c,0x69,0x3a,0x30,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x72,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x4b,0x65,0x28,0x74,0x29,0x2c,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x30,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x3d,0x72,0x26,0x2d,0x72,0x2c,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x26,0x26,0x4b,0x65,0x28,0x74,0x29,0x2c,0x31,0x3d,0x3d,0x3d,0x6e,0x29,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x6a,0x6c,0x3d,0x21,0x30,0x2c,0x56,0x6c,0x28,0x65,0x29,0x7d,0x28,0x69,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x29,0x29,0x3a,0x56,0x6c,0x28,0x69,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x29,0x29,0x2c,0x6f,0x6c,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x26,0x26,0x24,0x6c,0x28,0x29,0x7d,0x29,0x29,0x2c,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x77,0x6e,0x28,0x72,0x29,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x74,0x3d,0x4a,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x74,0x3d,0x65,0x6e,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x3d,0x6e,0x6e,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x74,0x3d,0x72,0x6e,0x7d,0x74,0x3d,0x7a,0x73,0x28,0x74,0x2c,0x6c,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x29,0x29,0x7d,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x6e,0x2c,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x74,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x5a,0x69,0x3d,0x2d,0x31,0x2c,0x4a,0x69,0x3d,0x30,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x32,0x37,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x53,0x73,0x28,0x29,0x26,0x26,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x21,0x3d,0x3d,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x70,0x6e,0x28,0x65,0x2c,0x65,0x3d,0x3d,0x3d,0x7a,0x69,0x3f,0x4c,0x69,0x3a,0x30,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x33,0x30,0x26,0x72,0x29,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x28,0x72,0x26,0x65,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x7c,0x7c,0x6e,0x29,0x6e,0x3d,0x76,0x73,0x28,0x65,0x2c,0x72,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x6e,0x3d,0x72,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x4e,0x69,0x3b,0x4e,0x69,0x7c,0x3d,0x32,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6d,0x73,0x28,0x29,0x3b,0x66,0x6f,0x72,0x28,0x7a,0x69,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x4c,0x69,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x28,0x42,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x24,0x69,0x3d,0x47,0x65,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x64,0x73,0x28,0x65,0x2c,0x6e,0x29,0x29,0x3b,0x3b,0x29,0x74,0x72,0x79,0x7b,0x79,0x73,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x69,0x29,0x7b,0x70,0x73,0x28,0x65,0x2c,0x69,0x29,0x7d,0x5f,0x61,0x28,0x29,0x2c,0x43,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6f,0x2c,0x4e,0x69,0x3d,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x54,0x69,0x3f,0x6e,0x3d,0x30,0x3a,0x28,0x7a,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4c,0x69,0x3d,0x30,0x2c,0x6e,0x3d,0x4f,0x69,0x29,0x7d,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x69,0x66,0x28,0x32,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x28,0x6c,0x3d,0x68,0x6e,0x28,0x65,0x29,0x29,0x26,0x26,0x28,0x72,0x3d,0x6c,0x2c,0x6e,0x3d,0x61,0x73,0x28,0x65,0x2c,0x6c,0x29,0x29,0x29,0x2c,0x31,0x3d,0x3d,0x3d,0x6e,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x74,0x3d,0x4d,0x69,0x2c,0x64,0x73,0x28,0x65,0x2c,0x30,0x29,0x2c,0x75,0x73,0x28,0x65,0x2c,0x72,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x74,0x3b,0x69,0x66,0x28,0x36,0x3d,0x3d,0x3d,0x6e,0x29,0x75,0x73,0x28,0x65,0x2c,0x72,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x6c,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x33,0x30,0x26,0x72,0x29,0x26,0x26,0x21,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x31,0x36,0x33,0x38,0x34,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x74,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x29,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x72,0x3d,0x30,0x3b,0x72,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x72,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x5b,0x72,0x5d,0x2c,0x61,0x3d,0x6c,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3b,0x6c,0x3d,0x6c,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x21,0x75,0x72,0x28,0x61,0x28,0x29,0x2c,0x6c,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x75,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x7d,0x69,0x66,0x28,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x31,0x36,0x33,0x38,0x34,0x26,0x6e,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x6e,0x3d,0x74,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x6e,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x28,0x6c,0x29,0x26,0x26,0x28,0x32,0x3d,0x3d,0x3d,0x28,0x6e,0x3d,0x76,0x73,0x28,0x65,0x2c,0x72,0x29,0x29,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x28,0x6f,0x3d,0x68,0x6e,0x28,0x65,0x29,0x29,0x26,0x26,0x28,0x72,0x3d,0x6f,0x2c,0x6e,0x3d,0x61,0x73,0x28,0x65,0x2c,0x6f,0x29,0x29,0x29,0x2c,0x31,0x3d,0x3d,0x3d,0x6e,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x74,0x3d,0x4d,0x69,0x2c,0x64,0x73,0x28,0x65,0x2c,0x30,0x29,0x2c,0x75,0x73,0x28,0x65,0x2c,0x72,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x74,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x6c,0x2c,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x72,0x2c,0x6e,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x34,0x35,0x29,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x77,0x73,0x28,0x65,0x2c,0x41,0x69,0x2c,0x42,0x69,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x69,0x66,0x28,0x75,0x73,0x28,0x65,0x2c,0x72,0x29,0x2c,0x28,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x26,0x72,0x29,0x3d,0x3d,0x3d,0x72,0x26,0x26,0x31,0x30,0x3c,0x28,0x6e,0x3d,0x56,0x69,0x2b,0x35,0x30,0x30,0x2d,0x47,0x65,0x28,0x29,0x29,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x70,0x6e,0x28,0x65,0x2c,0x30,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x69,0x66,0x28,0x28,0x28,0x6c,0x3d,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x26,0x72,0x29,0x21,0x3d,0x3d,0x72,0x29,0x7b,0x65,0x73,0x28,0x29,0x2c,0x65,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x72,0x6c,0x28,0x77,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x41,0x69,0x2c,0x42,0x69,0x29,0x2c,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x77,0x73,0x28,0x65,0x2c,0x41,0x69,0x2c,0x42,0x69,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x69,0x66,0x28,0x75,0x73,0x28,0x65,0x2c,0x72,0x29,0x2c,0x28,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x26,0x72,0x29,0x3d,0x3d,0x3d,0x72,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x66,0x6f,0x72,0x28,0x6e,0x3d,0x65,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x2c,0x6c,0x3d,0x2d,0x31,0x3b,0x30,0x3c,0x72,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x33,0x31,0x2d,0x6f,0x6e,0x28,0x72,0x29,0x3b,0x6f,0x3d,0x31,0x3c,0x3c,0x75,0x2c,0x28,0x75,0x3d,0x6e,0x5b,0x75,0x5d,0x29,0x3e,0x6c,0x26,0x26,0x28,0x6c,0x3d,0x75,0x29,0x2c,0x72,0x26,0x3d,0x7e,0x6f,0x7d,0x69,0x66,0x28,0x72,0x3d,0x6c,0x2c,0x31,0x30,0x3c,0x28,0x72,0x3d,0x28,0x31,0x32,0x30,0x3e,0x28,0x72,0x3d,0x47,0x65,0x28,0x29,0x2d,0x72,0x29,0x3f,0x31,0x32,0x30,0x3a,0x34,0x38,0x30,0x3e,0x72,0x3f,0x34,0x38,0x30,0x3a,0x31,0x30,0x38,0x30,0x3e,0x72,0x3f,0x31,0x30,0x38,0x30,0x3a,0x31,0x39,0x32,0x30,0x3e,0x72,0x3f,0x31,0x39,0x32,0x30,0x3a,0x33,0x65,0x33,0x3e,0x72,0x3f,0x33,0x65,0x33,0x3a,0x34,0x33,0x32,0x30,0x3e,0x72,0x3f,0x34,0x33,0x32,0x30,0x3a,0x31,0x39,0x36,0x30,0x2a,0x45,0x69,0x28,0x72,0x2f,0x31,0x39,0x36,0x30,0x29,0x29,0x2d,0x72,0x29,0x29,0x7b,0x65,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x72,0x6c,0x28,0x77,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x41,0x69,0x2c,0x42,0x69,0x29,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x77,0x73,0x28,0x65,0x2c,0x41,0x69,0x2c,0x42,0x69,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x32,0x39,0x29,0x29,0x7d,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x73,0x28,0x65,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x3d,0x3d,0x74,0x3f,0x6c,0x73,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6a,0x69,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x26,0x26,0x28,0x64,0x73,0x28,0x65,0x2c,0x6e,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x35,0x36,0x29,0x2c,0x32,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x76,0x73,0x28,0x65,0x2c,0x6e,0x29,0x29,0x26,0x26,0x28,0x6e,0x3d,0x41,0x69,0x2c,0x41,0x69,0x3d,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6f,0x73,0x28,0x6e,0x29,0x29,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x73,0x28,0x65,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x41,0x69,0x3f,0x41,0x69,0x3d,0x65,0x3a,0x41,0x69,0x2e,0x70,0x75,0x73,0x68,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x41,0x69,0x2c,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x6e,0x26,0x3d,0x7e,0x55,0x69,0x2c,0x6e,0x26,0x3d,0x7e,0x44,0x69,0x2c,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x2c,0x65,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x7e,0x6e,0x2c,0x65,0x3d,0x65,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x3b,0x30,0x3c,0x6e,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x33,0x31,0x2d,0x6f,0x6e,0x28,0x6e,0x29,0x2c,0x72,0x3d,0x31,0x3c,0x3c,0x74,0x3b,0x65,0x5b,0x74,0x5d,0x3d,0x2d,0x31,0x2c,0x6e,0x26,0x3d,0x7e,0x72,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x32,0x37,0x29,0x29,0x3b,0x53,0x73,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x70,0x6e,0x28,0x65,0x2c,0x30,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x73,0x28,0x65,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x76,0x73,0x28,0x65,0x2c,0x6e,0x29,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x32,0x3d,0x3d,0x3d,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x68,0x6e,0x28,0x65,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x72,0x26,0x26,0x28,0x6e,0x3d,0x72,0x2c,0x74,0x3d,0x61,0x73,0x28,0x65,0x2c,0x72,0x29,0x29,0x7d,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x74,0x3d,0x4d,0x69,0x2c,0x64,0x73,0x28,0x65,0x2c,0x30,0x29,0x2c,0x75,0x73,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x74,0x3b,0x69,0x66,0x28,0x36,0x3d,0x3d,0x3d,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x34,0x35,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x6e,0x2c,0x77,0x73,0x28,0x65,0x2c,0x41,0x69,0x2c,0x42,0x69,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x4e,0x69,0x3b,0x4e,0x69,0x7c,0x3d,0x31,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x6e,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x30,0x3d,0x3d,0x3d,0x28,0x4e,0x69,0x3d,0x74,0x29,0x26,0x26,0x28,0x24,0x69,0x3d,0x47,0x65,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x6a,0x6c,0x26,0x26,0x24,0x6c,0x28,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x73,0x28,0x65,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4b,0x69,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x4b,0x69,0x2e,0x74,0x61,0x67,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x26,0x26,0x53,0x73,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x4e,0x69,0x3b,0x4e,0x69,0x7c,0x3d,0x31,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x72,0x3d,0x6b,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6b,0x6e,0x3d,0x31,0x2c,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6b,0x6e,0x3d,0x72,0x2c,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x74,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x36,0x26,0x28,0x4e,0x69,0x3d,0x6e,0x29,0x29,0x26,0x26,0x24,0x6c,0x28,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x73,0x28,0x29,0x7b,0x52,0x69,0x3d,0x46,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x43,0x6c,0x28,0x46,0x69,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3b,0x69,0x66,0x28,0x2d,0x31,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x65,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x2d,0x31,0x2c,0x6c,0x6c,0x28,0x74,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x54,0x69,0x29,0x66,0x6f,0x72,0x28,0x74,0x3d,0x54,0x69,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x61,0x28,0x72,0x29,0x2c,0x72,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x72,0x2e,0x74,0x79,0x70,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x29,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x72,0x26,0x26,0x46,0x6c,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x58,0x61,0x28,0x29,0x2c,0x43,0x6c,0x28,0x7a,0x6c,0x29,0x2c,0x43,0x6c,0x28,0x4e,0x6c,0x29,0x2c,0x74,0x6f,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x5a,0x61,0x28,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x58,0x61,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x43,0x6c,0x28,0x4a,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x50,0x61,0x28,0x72,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x66,0x73,0x28,0x29,0x7d,0x74,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x69,0x66,0x28,0x7a,0x69,0x3d,0x65,0x2c,0x54,0x69,0x3d,0x65,0x3d,0x46,0x73,0x28,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x4c,0x69,0x3d,0x52,0x69,0x3d,0x6e,0x2c,0x4f,0x69,0x3d,0x30,0x2c,0x4d,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x55,0x69,0x3d,0x44,0x69,0x3d,0x49,0x69,0x3d,0x30,0x2c,0x41,0x69,0x3d,0x6a,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4c,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x6e,0x3d,0x30,0x3b,0x6e,0x3c,0x4c,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6e,0x2b,0x2b,0x29,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x28,0x74,0x3d,0x4c,0x61,0x5b,0x6e,0x5d,0x29,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x29,0x29,0x7b,0x74,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x72,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x61,0x3d,0x74,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x2c,0x72,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6f,0x7d,0x74,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x72,0x7d,0x4c,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x54,0x69,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x5f,0x61,0x28,0x29,0x2c,0x72,0x6f,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x5a,0x6f,0x2c,0x73,0x6f,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x72,0x3d,0x6f,0x6f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x72,0x2e,0x71,0x75,0x65,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x6c,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x72,0x3d,0x72,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x73,0x6f,0x3d,0x21,0x31,0x7d,0x69,0x66,0x28,0x61,0x6f,0x3d,0x30,0x2c,0x69,0x6f,0x3d,0x75,0x6f,0x3d,0x6f,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x6f,0x3d,0x21,0x31,0x2c,0x66,0x6f,0x3d,0x30,0x2c,0x5f,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x7b,0x4f,0x69,0x3d,0x31,0x2c,0x4d,0x69,0x3d,0x6e,0x2c,0x54,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x3a,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x65,0x2c,0x75,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x69,0x3d,0x74,0x2c,0x73,0x3d,0x6e,0x3b,0x69,0x66,0x28,0x6e,0x3d,0x4c,0x69,0x2c,0x69,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x33,0x32,0x37,0x36,0x38,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x26,0x26,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x2e,0x74,0x68,0x65,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x73,0x2c,0x66,0x3d,0x69,0x2c,0x64,0x3d,0x66,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x66,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x26,0x26,0x28,0x30,0x3d,0x3d,0x3d,0x64,0x7c,0x7c,0x31,0x31,0x3d,0x3d,0x3d,0x64,0x7c,0x7c,0x31,0x35,0x3d,0x3d,0x3d,0x64,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x70,0x3d,0x66,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x70,0x3f,0x28,0x66,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x70,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x70,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x70,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x29,0x3a,0x28,0x66,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x76,0x61,0x72,0x20,0x6d,0x3d,0x76,0x75,0x28,0x75,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x29,0x7b,0x6d,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x35,0x37,0x2c,0x67,0x75,0x28,0x6d,0x2c,0x75,0x2c,0x69,0x2c,0x30,0x2c,0x6e,0x29,0x2c,0x31,0x26,0x6d,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x26,0x68,0x75,0x28,0x6f,0x2c,0x63,0x2c,0x6e,0x29,0x2c,0x73,0x3d,0x63,0x3b,0x76,0x61,0x72,0x20,0x68,0x3d,0x28,0x6e,0x3d,0x6d,0x29,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x68,0x29,0x7b,0x76,0x61,0x72,0x20,0x76,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x3b,0x76,0x2e,0x61,0x64,0x64,0x28,0x73,0x29,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x76,0x7d,0x65,0x6c,0x73,0x65,0x20,0x68,0x2e,0x61,0x64,0x64,0x28,0x73,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x6e,0x29,0x29,0x7b,0x68,0x75,0x28,0x6f,0x2c,0x63,0x2c,0x6e,0x29,0x2c,0x68,0x73,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x73,0x3d,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x32,0x36,0x29,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6c,0x61,0x26,0x26,0x31,0x26,0x69,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x76,0x75,0x28,0x75,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x28,0x36,0x35,0x35,0x33,0x36,0x26,0x67,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x28,0x67,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x35,0x36,0x29,0x2c,0x67,0x75,0x28,0x67,0x2c,0x75,0x2c,0x69,0x2c,0x30,0x2c,0x6e,0x29,0x2c,0x6d,0x61,0x28,0x73,0x75,0x28,0x73,0x2c,0x69,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x7d,0x6f,0x3d,0x73,0x3d,0x73,0x75,0x28,0x73,0x2c,0x69,0x29,0x2c,0x34,0x21,0x3d,0x3d,0x4f,0x69,0x26,0x26,0x28,0x4f,0x69,0x3d,0x32,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6a,0x69,0x3f,0x6a,0x69,0x3d,0x5b,0x6f,0x5d,0x3a,0x6a,0x69,0x2e,0x70,0x75,0x73,0x68,0x28,0x6f,0x29,0x2c,0x6f,0x3d,0x75,0x3b,0x64,0x6f,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6f,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x6f,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x2c,0x6e,0x26,0x3d,0x2d,0x6e,0x2c,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x2c,0x56,0x61,0x28,0x6f,0x2c,0x70,0x75,0x28,0x30,0x2c,0x73,0x2c,0x6e,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x3d,0x73,0x3b,0x76,0x61,0x72,0x20,0x79,0x3d,0x6f,0x2e,0x74,0x79,0x70,0x65,0x2c,0x62,0x3d,0x6f,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6f,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x79,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x51,0x69,0x7c,0x7c,0x21,0x51,0x69,0x2e,0x68,0x61,0x73,0x28,0x62,0x29,0x29,0x29,0x29,0x7b,0x6f,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x2c,0x6e,0x26,0x3d,0x2d,0x6e,0x2c,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6e,0x2c,0x56,0x61,0x28,0x6f,0x2c,0x6d,0x75,0x28,0x6f,0x2c,0x69,0x2c,0x6e,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x7d,0x6f,0x3d,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x29,0x7d,0x6b,0x73,0x28,0x74,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x6e,0x3d,0x6b,0x2c,0x54,0x69,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x54,0x69,0x3d,0x74,0x3d,0x74,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x62,0x72,0x65,0x61,0x6b,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x73,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x43,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x43,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x5a,0x6f,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x5a,0x6f,0x3a,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x73,0x28,0x29,0x7b,0x30,0x21,0x3d,0x3d,0x4f,0x69,0x26,0x26,0x33,0x21,0x3d,0x3d,0x4f,0x69,0x26,0x26,0x32,0x21,0x3d,0x3d,0x4f,0x69,0x7c,0x7c,0x28,0x4f,0x69,0x3d,0x34,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x7a,0x69,0x7c,0x7c,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x26,0x49,0x69,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x26,0x44,0x69,0x29,0x7c,0x7c,0x75,0x73,0x28,0x7a,0x69,0x2c,0x4c,0x69,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x4e,0x69,0x3b,0x4e,0x69,0x7c,0x3d,0x32,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6d,0x73,0x28,0x29,0x3b,0x66,0x6f,0x72,0x28,0x7a,0x69,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x4c,0x69,0x3d,0x3d,0x3d,0x6e,0x7c,0x7c,0x28,0x42,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x73,0x28,0x65,0x2c,0x6e,0x29,0x29,0x3b,0x3b,0x29,0x74,0x72,0x79,0x7b,0x67,0x73,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x70,0x73,0x28,0x65,0x2c,0x6c,0x29,0x7d,0x69,0x66,0x28,0x5f,0x61,0x28,0x29,0x2c,0x4e,0x69,0x3d,0x74,0x2c,0x43,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x54,0x69,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x36,0x31,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x7a,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4c,0x69,0x3d,0x30,0x2c,0x4f,0x69,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x73,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x54,0x69,0x3b,0x29,0x62,0x73,0x28,0x54,0x69,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x73,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x54,0x69,0x26,0x26,0x21,0x59,0x65,0x28,0x29,0x3b,0x29,0x62,0x73,0x28,0x54,0x69,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x73,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x78,0x69,0x28,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x65,0x2c,0x52,0x69,0x29,0x3b,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x3f,0x6b,0x73,0x28,0x65,0x29,0x3a,0x54,0x69,0x3d,0x6e,0x2c,0x5f,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x73,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x65,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x33,0x32,0x37,0x36,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x71,0x75,0x28,0x74,0x2c,0x6e,0x2c,0x52,0x69,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x28,0x54,0x69,0x3d,0x74,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x74,0x3d,0x4b,0x75,0x28,0x74,0x2c,0x6e,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x33,0x32,0x37,0x36,0x37,0x2c,0x76,0x6f,0x69,0x64,0x28,0x54,0x69,0x3d,0x74,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4f,0x69,0x3d,0x36,0x2c,0x76,0x6f,0x69,0x64,0x28,0x54,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x33,0x32,0x37,0x36,0x38,0x2c,0x65,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x65,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6e,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x28,0x54,0x69,0x3d,0x6e,0x29,0x3b,0x54,0x69,0x3d,0x6e,0x3d,0x65,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x3b,0x30,0x3d,0x3d,0x3d,0x4f,0x69,0x26,0x26,0x28,0x4f,0x69,0x3d,0x35,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6b,0x6e,0x2c,0x6c,0x3d,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6b,0x6e,0x3d,0x31,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x64,0x6f,0x7b,0x53,0x73,0x28,0x29,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4b,0x69,0x29,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x32,0x37,0x29,0x29,0x3b,0x74,0x3d,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x74,0x3d,0x3d,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x37,0x37,0x29,0x29,0x3b,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x30,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x26,0x7e,0x6e,0x3b,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x6e,0x2c,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x65,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x65,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x6e,0x2c,0x65,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x52,0x65,0x61,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x6e,0x2c,0x65,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x6e,0x2c,0x6e,0x3d,0x65,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x65,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x3b,0x30,0x3c,0x74,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x33,0x31,0x2d,0x6f,0x6e,0x28,0x74,0x29,0x2c,0x61,0x3d,0x31,0x3c,0x3c,0x6c,0x3b,0x6e,0x5b,0x6c,0x5d,0x3d,0x30,0x2c,0x72,0x5b,0x6c,0x5d,0x3d,0x2d,0x31,0x2c,0x65,0x5b,0x6c,0x5d,0x3d,0x2d,0x31,0x2c,0x74,0x26,0x3d,0x7e,0x61,0x7d,0x7d,0x28,0x65,0x2c,0x6f,0x29,0x2c,0x65,0x3d,0x3d,0x3d,0x7a,0x69,0x26,0x26,0x28,0x54,0x69,0x3d,0x7a,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4c,0x69,0x3d,0x30,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x30,0x36,0x34,0x26,0x74,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x32,0x30,0x36,0x34,0x26,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7c,0x7c,0x71,0x69,0x7c,0x7c,0x28,0x71,0x69,0x3d,0x21,0x30,0x2c,0x7a,0x73,0x28,0x6e,0x6e,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x73,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x29,0x29,0x2c,0x6f,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x31,0x35,0x39,0x39,0x30,0x26,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x35,0x39,0x39,0x30,0x26,0x74,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x29,0x7c,0x7c,0x6f,0x29,0x7b,0x6f,0x3d,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6b,0x6e,0x3b,0x6b,0x6e,0x3d,0x31,0x3b,0x76,0x61,0x72,0x20,0x69,0x3d,0x4e,0x69,0x3b,0x4e,0x69,0x7c,0x3d,0x34,0x2c,0x5f,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x65,0x6c,0x3d,0x57,0x6e,0x2c,0x70,0x72,0x28,0x65,0x3d,0x64,0x72,0x28,0x29,0x29,0x29,0x7b,0x69,0x66,0x28,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x69,0x6e,0x20,0x65,0x29,0x76,0x61,0x72,0x20,0x74,0x3d,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x65,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x2c,0x65,0x6e,0x64,0x3a,0x65,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x7d,0x3b,0x65,0x6c,0x73,0x65,0x20,0x65,0x3a,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x28,0x74,0x3d,0x28,0x74,0x3d,0x65,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x26,0x26,0x74,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x29,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x26,0x26,0x74,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3b,0x69,0x66,0x28,0x72,0x26,0x26,0x30,0x21,0x3d,0x3d,0x72,0x2e,0x72,0x61,0x6e,0x67,0x65,0x43,0x6f,0x75,0x6e,0x74,0x29,0x7b,0x74,0x3d,0x72,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x72,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x2c,0x6f,0x3d,0x72,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x3b,0x72,0x3d,0x72,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x3b,0x74,0x72,0x79,0x7b,0x74,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x2c,0x6f,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x77,0x29,0x7b,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x76,0x61,0x72,0x20,0x75,0x3d,0x30,0x2c,0x69,0x3d,0x2d,0x31,0x2c,0x73,0x3d,0x2d,0x31,0x2c,0x63,0x3d,0x30,0x2c,0x66,0x3d,0x30,0x2c,0x64,0x3d,0x65,0x2c,0x70,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6d,0x3b,0x64,0x21,0x3d,0x3d,0x74,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x33,0x21,0x3d,0x3d,0x64,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x28,0x69,0x3d,0x75,0x2b,0x6c,0x29,0x2c,0x64,0x21,0x3d,0x3d,0x6f,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x72,0x26,0x26,0x33,0x21,0x3d,0x3d,0x64,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x28,0x73,0x3d,0x75,0x2b,0x72,0x29,0x2c,0x33,0x3d,0x3d,0x3d,0x64,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x28,0x75,0x2b,0x3d,0x64,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6d,0x3d,0x64,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x3b,0x29,0x70,0x3d,0x64,0x2c,0x64,0x3d,0x6d,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x64,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x6e,0x3b,0x69,0x66,0x28,0x70,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x2b,0x2b,0x63,0x3d,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x69,0x3d,0x75,0x29,0x2c,0x70,0x3d,0x3d,0x3d,0x6f,0x26,0x26,0x2b,0x2b,0x66,0x3d,0x3d,0x3d,0x72,0x26,0x26,0x28,0x73,0x3d,0x75,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6d,0x3d,0x64,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x70,0x3d,0x28,0x64,0x3d,0x70,0x29,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x64,0x3d,0x6d,0x7d,0x74,0x3d,0x2d,0x31,0x3d,0x3d,0x3d,0x69,0x7c,0x7c,0x2d,0x31,0x3d,0x3d,0x3d,0x73,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x69,0x2c,0x65,0x6e,0x64,0x3a,0x73,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x74,0x3d,0x74,0x7c,0x7c,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x30,0x2c,0x65,0x6e,0x64,0x3a,0x30,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x6e,0x6c,0x3d,0x7b,0x66,0x6f,0x63,0x75,0x73,0x65,0x64,0x45,0x6c,0x65,0x6d,0x3a,0x65,0x2c,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x52,0x61,0x6e,0x67,0x65,0x3a,0x74,0x7d,0x2c,0x57,0x6e,0x3d,0x21,0x31,0x2c,0x5a,0x75,0x3d,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x69,0x66,0x28,0x65,0x3d,0x28,0x6e,0x3d,0x5a,0x75,0x29,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x30,0x32,0x38,0x26,0x6e,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2c,0x5a,0x75,0x3d,0x65,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x6e,0x3d,0x5a,0x75,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x31,0x30,0x32,0x34,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x76,0x61,0x72,0x20,0x76,0x3d,0x68,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x67,0x3d,0x68,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x79,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x62,0x3d,0x79,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3f,0x76,0x3a,0x74,0x75,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x76,0x29,0x2c,0x67,0x29,0x3b,0x79,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x62,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x6b,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x31,0x3d,0x3d,0x3d,0x6b,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x6b,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x22,0x3a,0x39,0x3d,0x3d,0x3d,0x6b,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x6b,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x26,0x26,0x6b,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x6b,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x36,0x33,0x29,0x29,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x77,0x29,0x7b,0x45,0x73,0x28,0x6e,0x2c,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x77,0x29,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x6e,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x29,0x7b,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x5a,0x75,0x3d,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x5a,0x75,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x68,0x3d,0x6e,0x69,0x2c,0x6e,0x69,0x3d,0x21,0x31,0x7d,0x28,0x65,0x2c,0x74,0x29,0x2c,0x76,0x69,0x28,0x74,0x2c,0x65,0x29,0x2c,0x6d,0x72,0x28,0x6e,0x6c,0x29,0x2c,0x57,0x6e,0x3d,0x21,0x21,0x65,0x6c,0x2c,0x6e,0x6c,0x3d,0x65,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x74,0x2c,0x79,0x69,0x28,0x74,0x2c,0x65,0x2c,0x6c,0x29,0x2c,0x58,0x65,0x28,0x29,0x2c,0x4e,0x69,0x3d,0x69,0x2c,0x6b,0x6e,0x3d,0x75,0x2c,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6f,0x7d,0x65,0x6c,0x73,0x65,0x20,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x74,0x3b,0x69,0x66,0x28,0x71,0x69,0x26,0x26,0x28,0x71,0x69,0x3d,0x21,0x31,0x2c,0x4b,0x69,0x3d,0x65,0x2c,0x59,0x69,0x3d,0x6c,0x29,0x2c,0x6f,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x30,0x3d,0x3d,0x3d,0x6f,0x26,0x26,0x28,0x51,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x61,0x6e,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x6e,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x29,0x74,0x72,0x79,0x7b,0x61,0x6e,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x28,0x6c,0x6e,0x2c,0x65,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x31,0x32,0x38,0x3d,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6e,0x29,0x7b,0x7d,0x7d,0x28,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x66,0x6f,0x72,0x28,0x72,0x3d,0x65,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x2c,0x74,0x3d,0x30,0x3b,0x74,0x3c,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x74,0x2b,0x2b,0x29,0x6c,0x3d,0x6e,0x5b,0x74,0x5d,0x2c,0x72,0x28,0x6c,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x7b,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x53,0x74,0x61,0x63,0x6b,0x3a,0x6c,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2c,0x64,0x69,0x67,0x65,0x73,0x74,0x3a,0x6c,0x2e,0x64,0x69,0x67,0x65,0x73,0x74,0x7d,0x29,0x3b,0x69,0x66,0x28,0x48,0x69,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x48,0x69,0x3d,0x21,0x31,0x2c,0x65,0x3d,0x57,0x69,0x2c,0x57,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x59,0x69,0x29,0x26,0x26,0x30,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x53,0x73,0x28,0x29,0x2c,0x6f,0x3d,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x26,0x6f,0x29,0x3f,0x65,0x3d,0x3d,0x3d,0x47,0x69,0x3f,0x58,0x69,0x2b,0x2b,0x3a,0x28,0x58,0x69,0x3d,0x30,0x2c,0x47,0x69,0x3d,0x65,0x29,0x3a,0x58,0x69,0x3d,0x30,0x2c,0x24,0x6c,0x28,0x29,0x7d,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6c,0x2c,0x6b,0x6e,0x3d,0x72,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x73,0x28,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4b,0x69,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x77,0x6e,0x28,0x59,0x69,0x29,0x2c,0x6e,0x3d,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x74,0x3d,0x6b,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6b,0x6e,0x3d,0x31,0x36,0x3e,0x65,0x3f,0x31,0x36,0x3a,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x4b,0x69,0x29,0x76,0x61,0x72,0x20,0x72,0x3d,0x21,0x31,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x65,0x3d,0x4b,0x69,0x2c,0x4b,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x59,0x69,0x3d,0x30,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x33,0x31,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x4e,0x69,0x3b,0x66,0x6f,0x72,0x28,0x4e,0x69,0x7c,0x3d,0x34,0x2c,0x5a,0x75,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x5a,0x75,0x2c,0x75,0x3d,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x31,0x36,0x26,0x5a,0x75,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3d,0x6f,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x73,0x3d,0x30,0x3b,0x73,0x3c,0x69,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x73,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x69,0x5b,0x73,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x5a,0x75,0x3d,0x63,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x5a,0x75,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x66,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x74,0x69,0x28,0x38,0x2c,0x66,0x2c,0x6f,0x29,0x7d,0x76,0x61,0x72,0x20,0x64,0x3d,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x66,0x2c,0x5a,0x75,0x3d,0x64,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x70,0x3d,0x28,0x66,0x3d,0x5a,0x75,0x29,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x6d,0x3d,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x69,0x66,0x28,0x61,0x69,0x28,0x66,0x29,0x2c,0x66,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x5a,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x70,0x29,0x7b,0x70,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6d,0x2c,0x5a,0x75,0x3d,0x70,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x5a,0x75,0x3d,0x6d,0x7d,0x7d,0x7d,0x76,0x61,0x72,0x20,0x68,0x3d,0x6f,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x76,0x61,0x72,0x20,0x76,0x3d,0x68,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x76,0x29,0x7b,0x68,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x76,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x76,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x76,0x3d,0x67,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x76,0x29,0x7d,0x7d,0x5a,0x75,0x3d,0x6f,0x7d,0x7d,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x32,0x30,0x36,0x34,0x26,0x6f,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x29,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6f,0x2c,0x5a,0x75,0x3d,0x75,0x3b,0x65,0x6c,0x73,0x65,0x20,0x65,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x32,0x30,0x34,0x38,0x26,0x28,0x6f,0x3d,0x5a,0x75,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6f,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x74,0x69,0x28,0x39,0x2c,0x6f,0x2c,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x7d,0x76,0x61,0x72,0x20,0x79,0x3d,0x6f,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x79,0x29,0x7b,0x79,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x5a,0x75,0x3d,0x79,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x5a,0x75,0x3d,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x76,0x61,0x72,0x20,0x62,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x66,0x6f,0x72,0x28,0x5a,0x75,0x3d,0x62,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x28,0x75,0x3d,0x5a,0x75,0x29,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x32,0x30,0x36,0x34,0x26,0x75,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x29,0x6b,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x75,0x2c,0x5a,0x75,0x3d,0x6b,0x3b,0x65,0x6c,0x73,0x65,0x20,0x65,0x3a,0x66,0x6f,0x72,0x28,0x75,0x3d,0x62,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5a,0x75,0x3b,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x32,0x30,0x34,0x38,0x26,0x28,0x69,0x3d,0x5a,0x75,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x74,0x72,0x79,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x69,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x72,0x69,0x28,0x39,0x2c,0x69,0x29,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x53,0x29,0x7b,0x45,0x73,0x28,0x69,0x2c,0x69,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x53,0x29,0x7d,0x69,0x66,0x28,0x69,0x3d,0x3d,0x3d,0x75,0x29,0x7b,0x5a,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x76,0x61,0x72,0x20,0x77,0x3d,0x69,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x77,0x29,0x7b,0x77,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x69,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x5a,0x75,0x3d,0x77,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x5a,0x75,0x3d,0x69,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x69,0x66,0x28,0x4e,0x69,0x3d,0x6c,0x2c,0x24,0x6c,0x28,0x29,0x2c,0x61,0x6e,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x6e,0x2e,0x6f,0x6e,0x50,0x6f,0x73,0x74,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x29,0x74,0x72,0x79,0x7b,0x61,0x6e,0x2e,0x6f,0x6e,0x50,0x6f,0x73,0x74,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x28,0x6c,0x6e,0x2c,0x65,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x53,0x29,0x7b,0x7d,0x72,0x3d,0x21,0x30,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6b,0x6e,0x3d,0x74,0x2c,0x50,0x69,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x65,0x3d,0x6a,0x61,0x28,0x65,0x2c,0x6e,0x3d,0x70,0x75,0x28,0x30,0x2c,0x6e,0x3d,0x73,0x75,0x28,0x74,0x2c,0x6e,0x29,0x2c,0x31,0x29,0x2c,0x31,0x29,0x2c,0x6e,0x3d,0x65,0x73,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x79,0x6e,0x28,0x65,0x2c,0x31,0x2c,0x6e,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x6e,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x78,0x73,0x28,0x65,0x2c,0x65,0x2c,0x74,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3b,0x29,0x7b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x78,0x73,0x28,0x6e,0x2c,0x65,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x7c,0x7c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x51,0x69,0x7c,0x7c,0x21,0x51,0x69,0x2e,0x68,0x61,0x73,0x28,0x72,0x29,0x29,0x29,0x7b,0x6e,0x3d,0x6a,0x61,0x28,0x6e,0x2c,0x65,0x3d,0x6d,0x75,0x28,0x6e,0x2c,0x65,0x3d,0x73,0x75,0x28,0x74,0x2c,0x65,0x29,0x2c,0x31,0x29,0x2c,0x31,0x29,0x2c,0x65,0x3d,0x65,0x73,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x79,0x6e,0x28,0x6e,0x2c,0x31,0x2c,0x65,0x29,0x2c,0x72,0x73,0x28,0x6e,0x2c,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x7d,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x72,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x29,0x2c,0x6e,0x3d,0x65,0x73,0x28,0x29,0x2c,0x65,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x65,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x74,0x2c,0x7a,0x69,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x4c,0x69,0x26,0x74,0x29,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x28,0x34,0x3d,0x3d,0x3d,0x4f,0x69,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x4f,0x69,0x26,0x26,0x28,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x26,0x4c,0x69,0x29,0x3d,0x3d,0x3d,0x4c,0x69,0x26,0x26,0x35,0x30,0x30,0x3e,0x47,0x65,0x28,0x29,0x2d,0x56,0x69,0x3f,0x64,0x73,0x28,0x65,0x2c,0x30,0x29,0x3a,0x55,0x69,0x7c,0x3d,0x74,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x26,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x3f,0x6e,0x3d,0x31,0x3a,0x28,0x6e,0x3d,0x66,0x6e,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x26,0x28,0x66,0x6e,0x3c,0x3c,0x3d,0x31,0x29,0x29,0x26,0x26,0x28,0x66,0x6e,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x29,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x73,0x28,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x4f,0x61,0x28,0x65,0x2c,0x6e,0x29,0x29,0x26,0x26,0x28,0x79,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x74,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x73,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x74,0x3d,0x30,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x74,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x29,0x2c,0x5f,0x73,0x28,0x65,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x30,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6c,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x74,0x3d,0x6c,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x31,0x34,0x29,0x29,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x26,0x26,0x72,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x29,0x2c,0x5f,0x73,0x28,0x65,0x2c,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x71,0x65,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x74,0x61,0x67,0x3d,0x65,0x2c,0x74,0x68,0x69,0x73,0x2e,0x6b,0x65,0x79,0x3d,0x74,0x2c,0x74,0x68,0x69,0x73,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x74,0x68,0x69,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x74,0x68,0x69,0x73,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x74,0x79,0x70,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x30,0x2c,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x2c,0x74,0x68,0x69,0x73,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x6d,0x6f,0x64,0x65,0x3d,0x72,0x2c,0x74,0x68,0x69,0x73,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x74,0x68,0x69,0x73,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x74,0x68,0x69,0x73,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x65,0x77,0x20,0x54,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x73,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x21,0x28,0x65,0x3d,0x65,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x29,0x7c,0x7c,0x21,0x65,0x2e,0x69,0x73,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x3f,0x28,0x28,0x74,0x3d,0x4c,0x73,0x28,0x65,0x2e,0x74,0x61,0x67,0x2c,0x6e,0x2c,0x65,0x2e,0x6b,0x65,0x79,0x2c,0x65,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x65,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x2c,0x74,0x2e,0x74,0x79,0x70,0x65,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x65,0x2c,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x74,0x29,0x3a,0x28,0x74,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x2c,0x74,0x2e,0x74,0x79,0x70,0x65,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x74,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x74,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x2c,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x74,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6e,0x3d,0x65,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x2c,0x74,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x7b,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x6e,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x7d,0x2c,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x74,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x65,0x2e,0x69,0x6e,0x64,0x65,0x78,0x2c,0x74,0x2e,0x72,0x65,0x66,0x3d,0x65,0x2e,0x72,0x65,0x66,0x2c,0x74,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x6f,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x32,0x3b,0x69,0x66,0x28,0x72,0x3d,0x65,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x52,0x73,0x28,0x65,0x29,0x26,0x26,0x28,0x75,0x3d,0x31,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x75,0x3d,0x35,0x3b,0x65,0x6c,0x73,0x65,0x20,0x65,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x78,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4d,0x73,0x28,0x74,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x6c,0x2c,0x6f,0x2c,0x6e,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x45,0x3a,0x75,0x3d,0x38,0x2c,0x6c,0x7c,0x3d,0x38,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x43,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x4c,0x73,0x28,0x31,0x32,0x2c,0x74,0x2c,0x6e,0x2c,0x32,0x7c,0x6c,0x29,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x43,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6f,0x2c,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x7a,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x4c,0x73,0x28,0x31,0x33,0x2c,0x74,0x2c,0x6e,0x2c,0x6c,0x29,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x7a,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6f,0x2c,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x54,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x4c,0x73,0x28,0x31,0x39,0x2c,0x74,0x2c,0x6e,0x2c,0x6c,0x29,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x54,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6f,0x2c,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x46,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x49,0x73,0x28,0x74,0x2c,0x6c,0x2c,0x6f,0x2c,0x6e,0x29,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5f,0x3a,0x75,0x3d,0x31,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x50,0x3a,0x75,0x3d,0x39,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x4e,0x3a,0x75,0x3d,0x31,0x31,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x4c,0x3a,0x75,0x3d,0x31,0x34,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x52,0x3a,0x75,0x3d,0x31,0x36,0x2c,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x33,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x65,0x3f,0x65,0x3a,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2c,0x22,0x22,0x29,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x3d,0x4c,0x73,0x28,0x75,0x2c,0x74,0x2c,0x6e,0x2c,0x6c,0x29,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x65,0x2c,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3d,0x72,0x2c,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6f,0x2c,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x4c,0x73,0x28,0x37,0x2c,0x65,0x2c,0x72,0x2c,0x6e,0x29,0x29,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x4c,0x73,0x28,0x32,0x32,0x2c,0x65,0x2c,0x72,0x2c,0x6e,0x29,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x46,0x2c,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x7b,0x69,0x73,0x48,0x69,0x64,0x64,0x65,0x6e,0x3a,0x21,0x31,0x7d,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x4c,0x73,0x28,0x36,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x29,0x29,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x6e,0x3d,0x4c,0x73,0x28,0x34,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3f,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x5b,0x5d,0x2c,0x65,0x2e,0x6b,0x65,0x79,0x2c,0x6e,0x29,0x29,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x7b,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2c,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x65,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x7d,0x2c,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x74,0x61,0x67,0x3d,0x6e,0x2c,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3d,0x65,0x2c,0x74,0x68,0x69,0x73,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x2d,0x31,0x2c,0x74,0x68,0x69,0x73,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x30,0x2c,0x74,0x68,0x69,0x73,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x3d,0x67,0x6e,0x28,0x30,0x29,0x2c,0x74,0x68,0x69,0x73,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x3d,0x67,0x6e,0x28,0x2d,0x31,0x29,0x2c,0x74,0x68,0x69,0x73,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x52,0x65,0x61,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x74,0x68,0x69,0x73,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x3d,0x67,0x6e,0x28,0x30,0x29,0x2c,0x74,0x68,0x69,0x73,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x3d,0x72,0x2c,0x74,0x68,0x69,0x73,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x3d,0x6c,0x2c,0x74,0x68,0x69,0x73,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x2c,0x75,0x2c,0x69,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x6e,0x65,0x77,0x20,0x6a,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x75,0x2c,0x69,0x29,0x2c,0x31,0x3d,0x3d,0x3d,0x6e,0x3f,0x28,0x6e,0x3d,0x31,0x2c,0x21,0x30,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x6e,0x7c,0x3d,0x38,0x29,0x29,0x3a,0x6e,0x3d,0x30,0x2c,0x61,0x3d,0x4c,0x73,0x28,0x33,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x29,0x2c,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x61,0x2c,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x65,0x2c,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x72,0x2c,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x74,0x2c,0x63,0x61,0x63,0x68,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x42,0x6f,0x75,0x6e,0x64,0x61,0x72,0x69,0x65,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x49,0x61,0x28,0x61,0x29,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x73,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x50,0x6c,0x3b,0x65,0x3a,0x7b,0x69,0x66,0x28,0x24,0x65,0x28,0x65,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x29,0x21,0x3d,0x3d,0x65,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x37,0x30,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x3b,0x64,0x6f,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x6e,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x66,0x28,0x52,0x6c,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x29,0x29,0x7b,0x6e,0x3d,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x65,0x72,0x67,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x7d,0x6e,0x3d,0x6e,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x37,0x31,0x29,0x29,0x7d,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x52,0x6c,0x28,0x74,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4d,0x6c,0x28,0x65,0x2c,0x74,0x2c,0x6e,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x2c,0x75,0x2c,0x69,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x41,0x73,0x28,0x74,0x2c,0x72,0x2c,0x21,0x30,0x2c,0x65,0x2c,0x30,0x2c,0x61,0x2c,0x30,0x2c,0x75,0x2c,0x69,0x29,0x29,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x56,0x73,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x74,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x28,0x61,0x3d,0x55,0x61,0x28,0x72,0x3d,0x65,0x73,0x28,0x29,0x2c,0x6c,0x3d,0x6e,0x73,0x28,0x74,0x29,0x29,0x29,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3f,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6a,0x61,0x28,0x74,0x2c,0x61,0x2c,0x6c,0x29,0x2c,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x6c,0x2c,0x79,0x6e,0x28,0x65,0x2c,0x6c,0x2c,0x72,0x29,0x2c,0x72,0x73,0x28,0x65,0x2c,0x72,0x29,0x2c,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x61,0x3d,0x65,0x73,0x28,0x29,0x2c,0x6f,0x3d,0x6e,0x73,0x28,0x6c,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x3d,0x56,0x73,0x28,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3f,0x6e,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x74,0x3a,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x74,0x2c,0x28,0x6e,0x3d,0x55,0x61,0x28,0x61,0x2c,0x6f,0x29,0x29,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x65,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x72,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x72,0x29,0x26,0x26,0x28,0x6e,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x72,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x6a,0x61,0x28,0x6c,0x2c,0x6e,0x2c,0x6f,0x29,0x29,0x26,0x26,0x28,0x74,0x73,0x28,0x65,0x2c,0x6c,0x2c,0x6f,0x2c,0x61,0x29,0x2c,0x41,0x61,0x28,0x65,0x2c,0x6c,0x2c,0x6f,0x29,0x29,0x2c,0x6f,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x73,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3f,0x28,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x74,0x61,0x67,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3b,0x65,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3d,0x30,0x21,0x3d,0x3d,0x74,0x26,0x26,0x74,0x3c,0x6e,0x3f,0x74,0x3a,0x6e,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x57,0x73,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x28,0x65,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x57,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x78,0x69,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x69,0x66,0x28,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x21,0x3d,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x7a,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x62,0x75,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x74,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x75,0x3d,0x21,0x31,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x7a,0x75,0x28,0x6e,0x29,0x2c,0x70,0x61,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x47,0x61,0x28,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x52,0x6c,0x28,0x6e,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x49,0x6c,0x28,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x59,0x61,0x28,0x6e,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x6c,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x5f,0x6c,0x28,0x53,0x61,0x2c,0x72,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x2c,0x72,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x72,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3f,0x28,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x31,0x26,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x30,0x21,0x3d,0x3d,0x28,0x74,0x26,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x3f,0x44,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3a,0x28,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x31,0x26,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x65,0x3d,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x29,0x3f,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x31,0x26,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x69,0x66,0x28,0x72,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x74,0x26,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x31,0x32,0x38,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x29,0x7b,0x69,0x66,0x28,0x72,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x24,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6c,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x28,0x6c,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x5f,0x6c,0x28,0x4a,0x61,0x2c,0x4a,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x72,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x45,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x62,0x75,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x31,0x33,0x31,0x30,0x37,0x32,0x26,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x62,0x75,0x3d,0x21,0x31,0x2c,0x6c,0x61,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x26,0x26,0x4a,0x6c,0x28,0x6e,0x2c,0x51,0x6c,0x2c,0x6e,0x2e,0x69,0x6e,0x64,0x65,0x78,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x6e,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3b,0x42,0x75,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x65,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x4c,0x6c,0x28,0x6e,0x2c,0x4e,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x7a,0x61,0x28,0x6e,0x2c,0x74,0x29,0x2c,0x6c,0x3d,0x76,0x6f,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x72,0x2c,0x65,0x2c,0x6c,0x2c,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x67,0x6f,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x2c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6c,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3f,0x28,0x6e,0x2e,0x74,0x61,0x67,0x3d,0x31,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x52,0x6c,0x28,0x72,0x29,0x3f,0x28,0x6f,0x3d,0x21,0x30,0x2c,0x49,0x6c,0x28,0x6e,0x29,0x29,0x3a,0x6f,0x3d,0x21,0x31,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x3f,0x6c,0x2e,0x73,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x49,0x61,0x28,0x6e,0x29,0x2c,0x6c,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x6c,0x75,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6c,0x2c,0x6c,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3d,0x6e,0x2c,0x69,0x75,0x28,0x6e,0x2c,0x72,0x2c,0x65,0x2c,0x74,0x29,0x2c,0x6e,0x3d,0x4e,0x75,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x72,0x2c,0x21,0x30,0x2c,0x6f,0x2c,0x74,0x29,0x29,0x3a,0x28,0x6e,0x2e,0x74,0x61,0x67,0x3d,0x30,0x2c,0x6c,0x61,0x26,0x26,0x6f,0x26,0x26,0x65,0x61,0x28,0x6e,0x29,0x2c,0x6b,0x75,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x6c,0x2c,0x74,0x29,0x2c,0x6e,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x2c,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x72,0x3d,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3b,0x65,0x3a,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x42,0x75,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x65,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x72,0x3d,0x28,0x6c,0x3d,0x72,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x29,0x28,0x72,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3d,0x72,0x2c,0x6c,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x73,0x28,0x65,0x29,0x3f,0x31,0x3a,0x30,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x69,0x66,0x28,0x28,0x65,0x3d,0x65,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x3d,0x3d,0x3d,0x4e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x31,0x3b,0x69,0x66,0x28,0x65,0x3d,0x3d,0x3d,0x4c,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x34,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x7d,0x28,0x72,0x29,0x2c,0x65,0x3d,0x74,0x75,0x28,0x72,0x2c,0x65,0x29,0x2c,0x6c,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x6e,0x3d,0x5f,0x75,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x72,0x2c,0x65,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x6e,0x3d,0x50,0x75,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x72,0x2c,0x65,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x6e,0x3d,0x77,0x75,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x72,0x2c,0x65,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x6e,0x3d,0x53,0x75,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x72,0x2c,0x74,0x75,0x28,0x72,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x29,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x30,0x36,0x2c,0x72,0x2c,0x22,0x22,0x29,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6c,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x5f,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x6c,0x3d,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x72,0x3f,0x6c,0x3a,0x74,0x75,0x28,0x72,0x2c,0x6c,0x29,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6c,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x50,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x6c,0x3d,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x72,0x3f,0x6c,0x3a,0x74,0x75,0x28,0x72,0x2c,0x6c,0x29,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x65,0x3a,0x7b,0x69,0x66,0x28,0x7a,0x75,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x38,0x37,0x29,0x29,0x3b,0x72,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6c,0x3d,0x28,0x6f,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2c,0x44,0x61,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x24,0x61,0x28,0x6e,0x2c,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x72,0x3d,0x75,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2c,0x6f,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x69,0x66,0x28,0x6f,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x72,0x2c,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x21,0x31,0x2c,0x63,0x61,0x63,0x68,0x65,0x3a,0x75,0x2e,0x63,0x61,0x63,0x68,0x65,0x2c,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x42,0x6f,0x75,0x6e,0x64,0x61,0x72,0x69,0x65,0x73,0x3a,0x75,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x42,0x6f,0x75,0x6e,0x64,0x61,0x72,0x69,0x65,0x73,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x75,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x7d,0x2c,0x6e,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x6f,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6f,0x2c,0x32,0x35,0x36,0x26,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x29,0x7b,0x6e,0x3d,0x54,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x74,0x2c,0x6c,0x3d,0x73,0x75,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x32,0x33,0x29,0x29,0x2c,0x6e,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x69,0x66,0x28,0x72,0x21,0x3d,0x3d,0x6c,0x29,0x7b,0x6e,0x3d,0x54,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x74,0x2c,0x6c,0x3d,0x73,0x75,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x32,0x34,0x29,0x29,0x2c,0x6e,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x66,0x6f,0x72,0x28,0x72,0x61,0x3d,0x73,0x6c,0x28,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x2c,0x74,0x61,0x3d,0x6e,0x2c,0x6c,0x61,0x3d,0x21,0x30,0x2c,0x61,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x3d,0x77,0x61,0x28,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x74,0x3b,0x74,0x3b,0x29,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x2d,0x33,0x26,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x34,0x30,0x39,0x36,0x2c,0x74,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x70,0x61,0x28,0x29,0x2c,0x72,0x3d,0x3d,0x3d,0x6c,0x29,0x7b,0x6e,0x3d,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x74,0x29,0x7d,0x6e,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x47,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x73,0x61,0x28,0x6e,0x29,0x2c,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6c,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3f,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x3d,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x74,0x6c,0x28,0x72,0x2c,0x6c,0x29,0x3f,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x26,0x26,0x74,0x6c,0x28,0x72,0x2c,0x6f,0x29,0x26,0x26,0x28,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x33,0x32,0x29,0x2c,0x43,0x75,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x75,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x73,0x61,0x28,0x6e,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x44,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x59,0x61,0x28,0x6e,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x2c,0x72,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6b,0x61,0x28,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2c,0x74,0x29,0x3a,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6c,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x77,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x6c,0x3d,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x72,0x3f,0x6c,0x3a,0x74,0x75,0x28,0x72,0x2c,0x6c,0x29,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x65,0x3a,0x7b,0x69,0x66,0x28,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x6c,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6f,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x75,0x3d,0x6c,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x5f,0x6c,0x28,0x53,0x61,0x2c,0x72,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x2c,0x72,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x75,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x29,0x69,0x66,0x28,0x75,0x72,0x28,0x6f,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x75,0x29,0x29,0x7b,0x69,0x66,0x28,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x3d,0x3d,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x26,0x26,0x21,0x7a,0x6c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x7b,0x6e,0x3d,0x48,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6f,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x26,0x26,0x28,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x69,0x3d,0x6f,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x69,0x29,0x7b,0x75,0x3d,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x73,0x3d,0x69,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x73,0x3b,0x29,0x7b,0x69,0x66,0x28,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x3d,0x3d,0x72,0x29,0x7b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x67,0x29,0x7b,0x28,0x73,0x3d,0x55,0x61,0x28,0x2d,0x31,0x2c,0x74,0x26,0x2d,0x74,0x29,0x29,0x2e,0x74,0x61,0x67,0x3d,0x32,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x6f,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x28,0x63,0x3d,0x63,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x29,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x3f,0x73,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x73,0x3a,0x28,0x73,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x66,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x66,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x73,0x29,0x2c,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x73,0x7d,0x7d,0x6f,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x73,0x3d,0x6f,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x28,0x73,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x74,0x29,0x2c,0x4e,0x61,0x28,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x2c,0x6e,0x29,0x2c,0x69,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x73,0x3d,0x73,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x30,0x3d,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x67,0x29,0x75,0x3d,0x6f,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x38,0x3d,0x3d,0x3d,0x6f,0x2e,0x74,0x61,0x67,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x75,0x3d,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x34,0x31,0x29,0x29,0x3b,0x75,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x69,0x3d,0x75,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x28,0x69,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x74,0x29,0x2c,0x4e,0x61,0x28,0x75,0x2c,0x74,0x2c,0x6e,0x29,0x2c,0x75,0x3d,0x6f,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x65,0x6c,0x73,0x65,0x20,0x75,0x3d,0x6f,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x29,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6f,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x75,0x3d,0x6f,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x3b,0x29,0x7b,0x69,0x66,0x28,0x75,0x3d,0x3d,0x3d,0x6e,0x29,0x7b,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x6f,0x3d,0x75,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x29,0x7b,0x6f,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x75,0x3d,0x6f,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x75,0x3d,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x6f,0x3d,0x75,0x7d,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x74,0x29,0x2c,0x6e,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x3b,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x72,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x7a,0x61,0x28,0x6e,0x2c,0x74,0x29,0x2c,0x72,0x3d,0x72,0x28,0x6c,0x3d,0x54,0x61,0x28,0x6c,0x29,0x29,0x2c,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x2c,0x6b,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x74,0x29,0x2c,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x3d,0x74,0x75,0x28,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x29,0x2c,0x53,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x2c,0x6c,0x3d,0x74,0x75,0x28,0x72,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6c,0x29,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x78,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x3d,0x6e,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6c,0x3d,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6c,0x3d,0x6e,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x72,0x3f,0x6c,0x3a,0x74,0x75,0x28,0x72,0x2c,0x6c,0x29,0x2c,0x42,0x75,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x6e,0x2e,0x74,0x61,0x67,0x3d,0x31,0x2c,0x52,0x6c,0x28,0x72,0x29,0x3f,0x28,0x65,0x3d,0x21,0x30,0x2c,0x49,0x6c,0x28,0x6e,0x29,0x29,0x3a,0x65,0x3d,0x21,0x31,0x2c,0x7a,0x61,0x28,0x6e,0x2c,0x74,0x29,0x2c,0x6f,0x75,0x28,0x6e,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x69,0x75,0x28,0x6e,0x2c,0x72,0x2c,0x6c,0x2c,0x74,0x29,0x2c,0x4e,0x75,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2c,0x72,0x2c,0x21,0x30,0x2c,0x65,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x24,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x45,0x75,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x35,0x36,0x2c,0x6e,0x2e,0x74,0x61,0x67,0x29,0x29,0x7d,0x3b,0x76,0x61,0x72,0x20,0x71,0x73,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x45,0x72,0x72,0x6f,0x72,0x3f,0x72,0x65,0x70,0x6f,0x72,0x74,0x45,0x72,0x72,0x6f,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x65,0x29,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x73,0x28,0x65,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3d,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x73,0x28,0x65,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3d,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x73,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x21,0x65,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x39,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x31,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x73,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x21,0x65,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x39,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x31,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x28,0x38,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x22,0x20,0x72,0x65,0x61,0x63,0x74,0x2d,0x6d,0x6f,0x75,0x6e,0x74,0x2d,0x70,0x6f,0x69,0x6e,0x74,0x2d,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x20,0x22,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x73,0x28,0x29,0x7b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x74,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3b,0x69,0x66,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x61,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6c,0x3b,0x6c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x48,0x73,0x28,0x6f,0x29,0x3b,0x75,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x65,0x29,0x7d,0x7d,0x42,0x73,0x28,0x6e,0x2c,0x6f,0x2c,0x65,0x2c,0x6c,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6f,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x2c,0x6c,0x29,0x7b,0x69,0x66,0x28,0x6c,0x29,0x7b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x72,0x3b,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x48,0x73,0x28,0x6f,0x29,0x3b,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x65,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6f,0x3d,0x24,0x73,0x28,0x6e,0x2c,0x72,0x2c,0x65,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x30,0x2c,0x22,0x22,0x2c,0x5a,0x73,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x6f,0x2c,0x65,0x5b,0x6d,0x6c,0x5d,0x3d,0x6f,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x24,0x72,0x28,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x65,0x29,0x2c,0x63,0x73,0x28,0x29,0x2c,0x6f,0x7d,0x66,0x6f,0x72,0x28,0x3b,0x6c,0x3d,0x65,0x2e,0x6c,0x61,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x6c,0x29,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x72,0x3b,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x48,0x73,0x28,0x69,0x29,0x3b,0x75,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x65,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x69,0x3d,0x41,0x73,0x28,0x65,0x2c,0x30,0x2c,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x30,0x2c,0x21,0x31,0x2c,0x30,0x2c,0x22,0x22,0x2c,0x5a,0x73,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x69,0x2c,0x65,0x5b,0x6d,0x6c,0x5d,0x3d,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x24,0x72,0x28,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x65,0x29,0x2c,0x63,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x42,0x73,0x28,0x6e,0x2c,0x69,0x2c,0x74,0x2c,0x72,0x29,0x7d,0x29,0x29,0x2c,0x69,0x7d,0x28,0x74,0x2c,0x6e,0x2c,0x65,0x2c,0x6c,0x2c,0x72,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x73,0x28,0x6f,0x29,0x7d,0x59,0x73,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3d,0x4b,0x73,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x30,0x39,0x29,0x29,0x3b,0x42,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x2c,0x59,0x73,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x3d,0x4b,0x73,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x63,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x42,0x73,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x29,0x29,0x2c,0x6e,0x5b,0x6d,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x2c,0x59,0x73,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x43,0x6e,0x28,0x29,0x3b,0x65,0x3d,0x7b,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x3a,0x65,0x2c,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3a,0x6e,0x7d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x74,0x3d,0x30,0x3b,0x74,0x3c,0x4f,0x6e,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x30,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x3c,0x4f,0x6e,0x5b,0x74,0x5d,0x2e,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3b,0x74,0x2b,0x2b,0x29,0x3b,0x4f,0x6e,0x2e,0x73,0x70,0x6c,0x69,0x63,0x65,0x28,0x74,0x2c,0x30,0x2c,0x65,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x74,0x26,0x26,0x55,0x6e,0x28,0x65,0x29,0x7d,0x7d,0x2c,0x53,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x64,0x6e,0x28,0x6e,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x62,0x6e,0x28,0x6e,0x2c,0x31,0x7c,0x74,0x29,0x2c,0x72,0x73,0x28,0x6e,0x2c,0x47,0x65,0x28,0x29,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x36,0x26,0x4e,0x69,0x29,0x26,0x26,0x28,0x24,0x69,0x3d,0x47,0x65,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x24,0x6c,0x28,0x29,0x29,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x63,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x4f,0x61,0x28,0x65,0x2c,0x31,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x73,0x28,0x29,0x3b,0x74,0x73,0x28,0x6e,0x2c,0x65,0x2c,0x31,0x2c,0x74,0x29,0x7d,0x7d,0x29,0x29,0x2c,0x51,0x73,0x28,0x65,0x2c,0x31,0x29,0x7d,0x7d,0x2c,0x78,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x4f,0x61,0x28,0x65,0x2c,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x74,0x73,0x28,0x6e,0x2c,0x65,0x2c,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x2c,0x65,0x73,0x28,0x29,0x29,0x3b,0x51,0x73,0x28,0x65,0x2c,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x29,0x7d,0x7d,0x2c,0x45,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x6e,0x73,0x28,0x65,0x29,0x2c,0x74,0x3d,0x4f,0x61,0x28,0x65,0x2c,0x6e,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x74,0x73,0x28,0x74,0x2c,0x65,0x2c,0x6e,0x2c,0x65,0x73,0x28,0x29,0x29,0x3b,0x51,0x73,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x7d,0x2c,0x43,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x6e,0x7d,0x2c,0x5f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6b,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x6e,0x3d,0x65,0x2c,0x6e,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6b,0x6e,0x3d,0x74,0x7d,0x7d,0x2c,0x53,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6e,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x3a,0x69,0x66,0x28,0x5a,0x28,0x65,0x2c,0x74,0x29,0x2c,0x6e,0x3d,0x74,0x2e,0x6e,0x61,0x6d,0x65,0x2c,0x22,0x72,0x61,0x64,0x69,0x6f,0x22,0x3d,0x3d,0x3d,0x74,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x29,0x7b,0x66,0x6f,0x72,0x28,0x74,0x3d,0x65,0x3b,0x74,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x29,0x74,0x3d,0x74,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x66,0x6f,0x72,0x28,0x74,0x3d,0x74,0x2e,0x71,0x75,0x65,0x72,0x79,0x53,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x41,0x6c,0x6c,0x28,0x22,0x69,0x6e,0x70,0x75,0x74,0x5b,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x2b,0x4a,0x53,0x4f,0x4e,0x2e,0x73,0x74,0x72,0x69,0x6e,0x67,0x69,0x66,0x79,0x28,0x22,0x22,0x2b,0x6e,0x29,0x2b,0x27,0x5d,0x5b,0x74,0x79,0x70,0x65,0x3d,0x22,0x72,0x61,0x64,0x69,0x6f,0x22,0x5d,0x27,0x29,0x2c,0x6e,0x3d,0x30,0x3b,0x6e,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6e,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x5b,0x6e,0x5d,0x3b,0x69,0x66,0x28,0x72,0x21,0x3d,0x3d,0x65,0x26,0x26,0x72,0x2e,0x66,0x6f,0x72,0x6d,0x3d,0x3d,0x3d,0x65,0x2e,0x66,0x6f,0x72,0x6d,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x77,0x6c,0x28,0x72,0x29,0x3b,0x69,0x66,0x28,0x21,0x6c,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x39,0x30,0x29,0x29,0x3b,0x71,0x28,0x72,0x29,0x2c,0x5a,0x28,0x72,0x2c,0x6c,0x29,0x7d,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x22,0x3a,0x61,0x65,0x28,0x65,0x2c,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x22,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x28,0x6e,0x3d,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x26,0x26,0x74,0x65,0x28,0x65,0x2c,0x21,0x21,0x74,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x6e,0x2c,0x21,0x31,0x29,0x7d,0x7d,0x2c,0x4e,0x65,0x3d,0x73,0x73,0x2c,0x7a,0x65,0x3d,0x63,0x73,0x3b,0x76,0x61,0x72,0x20,0x65,0x63,0x3d,0x7b,0x75,0x73,0x69,0x6e,0x67,0x43,0x6c,0x69,0x65,0x6e,0x74,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x3a,0x21,0x31,0x2c,0x45,0x76,0x65,0x6e,0x74,0x73,0x3a,0x5b,0x62,0x6c,0x2c,0x6b,0x6c,0x2c,0x77,0x6c,0x2c,0x5f,0x65,0x2c,0x50,0x65,0x2c,0x73,0x73,0x5d,0x7d,0x2c,0x6e,0x63,0x3d,0x7b,0x66,0x69,0x6e,0x64,0x46,0x69,0x62,0x65,0x72,0x42,0x79,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x3a,0x79,0x6c,0x2c,0x62,0x75,0x6e,0x64,0x6c,0x65,0x54,0x79,0x70,0x65,0x3a,0x30,0x2c,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3a,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x22,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x4e,0x61,0x6d,0x65,0x3a,0x22,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x22,0x7d,0x2c,0x74,0x63,0x3d,0x7b,0x62,0x75,0x6e,0x64,0x6c,0x65,0x54,0x79,0x70,0x65,0x3a,0x6e,0x63,0x2e,0x62,0x75,0x6e,0x64,0x6c,0x65,0x54,0x79,0x70,0x65,0x2c,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3a,0x6e,0x63,0x2e,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x4e,0x61,0x6d,0x65,0x3a,0x6e,0x63,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x4e,0x61,0x6d,0x65,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x43,0x6f,0x6e,0x66,0x69,0x67,0x3a,0x6e,0x63,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x44,0x65,0x6c,0x65,0x74,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x52,0x65,0x6e,0x61,0x6d,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x44,0x65,0x6c,0x65,0x74,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x52,0x65,0x6e,0x61,0x6d,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x65,0x74,0x45,0x72,0x72,0x6f,0x72,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x65,0x74,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x52,0x65,0x66,0x3a,0x6b,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x2c,0x66,0x69,0x6e,0x64,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x42,0x79,0x46,0x69,0x62,0x65,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x57,0x65,0x28,0x65,0x29,0x29,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x2c,0x66,0x69,0x6e,0x64,0x46,0x69,0x62,0x65,0x72,0x42,0x79,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x3a,0x6e,0x63,0x2e,0x66,0x69,0x6e,0x64,0x46,0x69,0x62,0x65,0x72,0x42,0x79,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x7c,0x7c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x66,0x69,0x6e,0x64,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x73,0x46,0x6f,0x72,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x52,0x6f,0x6f,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x65,0x74,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x46,0x69,0x62,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3a,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x2d,0x6e,0x65,0x78,0x74,0x2d,0x66,0x31,0x33,0x33,0x38,0x66,0x38,0x30,0x38,0x30,0x2d,0x32,0x30,0x32,0x34,0x30,0x34,0x32,0x36,0x22,0x7d,0x3b,0x69,0x66,0x28,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x63,0x3d,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x3b,0x69,0x66,0x28,0x21,0x72,0x63,0x2e,0x69,0x73,0x44,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x26,0x26,0x72,0x63,0x2e,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x73,0x46,0x69,0x62,0x65,0x72,0x29,0x74,0x72,0x79,0x7b,0x6c,0x6e,0x3d,0x72,0x63,0x2e,0x69,0x6e,0x6a,0x65,0x63,0x74,0x28,0x74,0x63,0x29,0x2c,0x61,0x6e,0x3d,0x72,0x63,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x63,0x65,0x29,0x7b,0x7d,0x7d,0x6e,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x3d,0x65,0x63,0x2c,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x50,0x6f,0x72,0x74,0x61,0x6c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x32,0x3c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x32,0x5d,0x3f,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x32,0x5d,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x21,0x58,0x73,0x28,0x6e,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x33,0x3c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x33,0x5d,0x3f,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x33,0x5d,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x53,0x2c,0x6b,0x65,0x79,0x3a,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x72,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x22,0x22,0x2b,0x72,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x65,0x2c,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x6e,0x2c,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x74,0x7d,0x7d,0x28,0x65,0x2c,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x29,0x7d,0x2c,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x21,0x58,0x73,0x28,0x65,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x39,0x39,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x21,0x31,0x2c,0x72,0x3d,0x22,0x22,0x2c,0x6c,0x3d,0x71,0x73,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x21,0x30,0x3d,0x3d,0x3d,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x26,0x26,0x28,0x74,0x3d,0x21,0x30,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x26,0x26,0x28,0x72,0x3d,0x6e,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x26,0x26,0x28,0x6c,0x3d,0x6e,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x29,0x29,0x2c,0x6e,0x3d,0x41,0x73,0x28,0x65,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x30,0x2c,0x74,0x2c,0x30,0x2c,0x72,0x2c,0x6c,0x29,0x2c,0x65,0x5b,0x6d,0x6c,0x5d,0x3d,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x24,0x72,0x28,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x65,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x65,0x29,0x2c,0x6e,0x65,0x77,0x20,0x4b,0x73,0x28,0x6e,0x29,0x7d,0x2c,0x6e,0x2e,0x66,0x69,0x6e,0x64,0x44,0x4f,0x4d,0x4e,0x6f,0x64,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x29,0x7b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x65,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x65,0x29,0x2e,0x6a,0x6f,0x69,0x6e,0x28,0x22,0x2c,0x22,0x29,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x36,0x38,0x2c,0x65,0x29,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x65,0x3d,0x57,0x65,0x28,0x6e,0x29,0x29,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x2c,0x6e,0x2e,0x66,0x6c,0x75,0x73,0x68,0x53,0x79,0x6e,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x73,0x28,0x65,0x29,0x7d,0x2c,0x6e,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x21,0x47,0x73,0x28,0x6e,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4a,0x73,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x6e,0x2c,0x21,0x30,0x2c,0x74,0x29,0x7d,0x2c,0x6e,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x21,0x58,0x73,0x28,0x65,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x30,0x35,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x26,0x26,0x74,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x53,0x6f,0x75,0x72,0x63,0x65,0x73,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x3d,0x21,0x31,0x2c,0x6f,0x3d,0x22,0x22,0x2c,0x75,0x3d,0x71,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x21,0x30,0x3d,0x3d,0x3d,0x74,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x26,0x26,0x28,0x6c,0x3d,0x21,0x30,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x26,0x26,0x28,0x6f,0x3d,0x74,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x26,0x26,0x28,0x75,0x3d,0x74,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x29,0x29,0x2c,0x6e,0x3d,0x24,0x73,0x28,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x74,0x3f,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x2c,0x30,0x2c,0x6f,0x2c,0x75,0x29,0x2c,0x65,0x5b,0x6d,0x6c,0x5d,0x3d,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x24,0x72,0x28,0x65,0x29,0x2c,0x72,0x29,0x66,0x6f,0x72,0x28,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x6c,0x3d,0x28,0x6c,0x3d,0x28,0x74,0x3d,0x72,0x5b,0x65,0x5d,0x29,0x2e,0x5f,0x67,0x65,0x74,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x29,0x28,0x74,0x2e,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6e,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x3f,0x6e,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x3d,0x5b,0x74,0x2c,0x6c,0x5d,0x3a,0x6e,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x74,0x2c,0x6c,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x65,0x77,0x20,0x59,0x73,0x28,0x6e,0x29,0x7d,0x2c,0x6e,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x21,0x47,0x73,0x28,0x6e,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4a,0x73,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x6e,0x2c,0x21,0x31,0x2c,0x74,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x41,0x74,0x4e,0x6f,0x64,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x47,0x73,0x28,0x65,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x34,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x21,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x26,0x26,0x28,0x63,0x73,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x4a,0x73,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x21,0x31,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x5b,0x6d,0x6c,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x29,0x7d,0x29,0x29,0x2c,0x21,0x30,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x62,0x61,0x74,0x63,0x68,0x65,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x73,0x3d,0x73,0x73,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x6e,0x64,0x65,0x72,0x53,0x75,0x62,0x74,0x72,0x65,0x65,0x49,0x6e,0x74,0x6f,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x21,0x47,0x73,0x28,0x74,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x65,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x61,0x28,0x33,0x38,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4a,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x2c,0x21,0x31,0x2c,0x72,0x29,0x7d,0x2c,0x6e,0x2e,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x2d,0x6e,0x65,0x78,0x74,0x2d,0x66,0x31,0x33,0x33,0x38,0x66,0x38,0x30,0x38,0x30,0x2d,0x32,0x30,0x32,0x34,0x30,0x34,0x32,0x36,0x22,0x7d,0x2c,0x33,0x39,0x31,0x3a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x28,0x39,0x35,0x30,0x29,0x3b,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3d,0x72,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x2c,0x6e,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3d,0x72,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x7d,0x2c,0x39,0x35,0x30,0x3a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x21,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x28,0x29,0x7b,0x69,0x66,0x28,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x2e,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x29,0x74,0x72,0x79,0x7b,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x2e,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x28,0x65,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6e,0x29,0x7b,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x6e,0x29,0x7d,0x7d,0x28,0x29,0x2c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3d,0x74,0x28,0x37,0x33,0x30,0x29,0x7d,0x2c,0x31,0x35,0x33,0x3a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x28,0x34,0x33,0x29,0x2c,0x6c,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x29,0x2c,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x22,0x29,0x2c,0x6f,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2c,0x75,0x3d,0x72,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x2c,0x69,0x3d,0x7b,0x6b,0x65,0x79,0x3a,0x21,0x30,0x2c,0x72,0x65,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x65,0x6c,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x21,0x30,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x2c,0x61,0x3d,0x7b,0x7d,0x2c,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x72,0x20,0x69,0x6e,0x20,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x74,0x26,0x26,0x28,0x73,0x3d,0x22,0x22,0x2b,0x74,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x73,0x3d,0x22,0x22,0x2b,0x6e,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x63,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x29,0x2c,0x6e,0x29,0x6f,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6e,0x2c,0x72,0x29,0x26,0x26,0x21,0x69,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x72,0x29,0x26,0x26,0x28,0x61,0x5b,0x72,0x5d,0x3d,0x6e,0x5b,0x72,0x5d,0x29,0x3b,0x69,0x66,0x28,0x65,0x26,0x26,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x66,0x6f,0x72,0x28,0x72,0x20,0x69,0x6e,0x20,0x6e,0x3d,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x5b,0x72,0x5d,0x26,0x26,0x28,0x61,0x5b,0x72,0x5d,0x3d,0x6e,0x5b,0x72,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x6c,0x2c,0x74,0x79,0x70,0x65,0x3a,0x65,0x2c,0x6b,0x65,0x79,0x3a,0x73,0x2c,0x72,0x65,0x66,0x3a,0x63,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x61,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x75,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7d,0x7d,0x6e,0x2e,0x6a,0x73,0x78,0x3d,0x73,0x2c,0x6e,0x2e,0x6a,0x73,0x78,0x73,0x3d,0x73,0x7d,0x2c,0x32,0x30,0x32,0x3a,0x28,0x65,0x2c,0x6e,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x29,0x2c,0x72,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x6f,0x72,0x74,0x61,0x6c,0x22,0x29,0x2c,0x6c,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x22,0x29,0x2c,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x74,0x72,0x69,0x63,0x74,0x5f,0x6d,0x6f,0x64,0x65,0x22,0x29,0x2c,0x6f,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x22,0x29,0x2c,0x75,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x22,0x29,0x2c,0x69,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x29,0x2c,0x73,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x5f,0x72,0x65,0x66,0x22,0x29,0x2c,0x63,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x22,0x29,0x2c,0x66,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x22,0x29,0x2c,0x64,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6c,0x61,0x7a,0x79,0x22,0x29,0x2c,0x70,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x3b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x7b,0x69,0x73,0x4d,0x6f,0x75,0x6e,0x74,0x65,0x64,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x46,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x53,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x7d,0x2c,0x68,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x61,0x73,0x73,0x69,0x67,0x6e,0x2c,0x76,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x65,0x2c,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x2c,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x66,0x73,0x3d,0x76,0x2c,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x74,0x7c,0x7c,0x6d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x28,0x29,0x7b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x65,0x2c,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x2c,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x66,0x73,0x3d,0x76,0x2c,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x74,0x7c,0x7c,0x6d,0x7d,0x67,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x69,0x73,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x7b,0x7d,0x2c,0x67,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x73,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x22,0x73,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x28,0x2e,0x2e,0x2e,0x29,0x3a,0x20,0x74,0x61,0x6b,0x65,0x73,0x20,0x61,0x6e,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6f,0x66,0x20,0x73,0x74,0x61,0x74,0x65,0x20,0x76,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x73,0x20,0x74,0x6f,0x20,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x6f,0x72,0x20,0x61,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x73,0x20,0x61,0x6e,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6f,0x66,0x20,0x73,0x74,0x61,0x74,0x65,0x20,0x76,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x73,0x2e,0x22,0x29,0x3b,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x53,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x28,0x74,0x68,0x69,0x73,0x2c,0x65,0x2c,0x6e,0x2c,0x22,0x73,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x22,0x29,0x7d,0x2c,0x67,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x66,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x46,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x74,0x68,0x69,0x73,0x2c,0x65,0x2c,0x22,0x66,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x29,0x7d,0x2c,0x79,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x3d,0x67,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x3b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x62,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x3d,0x6e,0x65,0x77,0x20,0x79,0x3b,0x6b,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x6f,0x72,0x3d,0x62,0x2c,0x68,0x28,0x6b,0x2c,0x67,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x29,0x2c,0x6b,0x2e,0x69,0x73,0x50,0x75,0x72,0x65,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x77,0x3d,0x41,0x72,0x72,0x61,0x79,0x2e,0x69,0x73,0x41,0x72,0x72,0x61,0x79,0x2c,0x53,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2c,0x78,0x3d,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x45,0x3d,0x7b,0x6b,0x65,0x79,0x3a,0x21,0x30,0x2c,0x72,0x65,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x65,0x6c,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x21,0x30,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x2c,0x61,0x3d,0x7b,0x7d,0x2c,0x6f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x29,0x66,0x6f,0x72,0x28,0x6c,0x20,0x69,0x6e,0x20,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x75,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x6f,0x3d,0x22,0x22,0x2b,0x6e,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x6e,0x29,0x53,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6e,0x2c,0x6c,0x29,0x26,0x26,0x21,0x45,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6c,0x29,0x26,0x26,0x28,0x61,0x5b,0x6c,0x5d,0x3d,0x6e,0x5b,0x6c,0x5d,0x29,0x3b,0x76,0x61,0x72,0x20,0x69,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x32,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x69,0x29,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x72,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x3c,0x69,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x73,0x3d,0x41,0x72,0x72,0x61,0x79,0x28,0x69,0x29,0x2c,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x69,0x3b,0x63,0x2b,0x2b,0x29,0x73,0x5b,0x63,0x5d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x63,0x2b,0x32,0x5d,0x3b,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x73,0x7d,0x69,0x66,0x28,0x65,0x26,0x26,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x66,0x6f,0x72,0x28,0x6c,0x20,0x69,0x6e,0x20,0x69,0x3d,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x5b,0x6c,0x5d,0x26,0x26,0x28,0x61,0x5b,0x6c,0x5d,0x3d,0x69,0x5b,0x6c,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x74,0x2c,0x74,0x79,0x70,0x65,0x3a,0x65,0x2c,0x6b,0x65,0x79,0x3a,0x6f,0x2c,0x72,0x65,0x66,0x3a,0x75,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x61,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x78,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x65,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3d,0x3d,0x3d,0x74,0x7d,0x76,0x61,0x72,0x20,0x50,0x3d,0x2f,0x5c,0x2f,0x2b,0x2f,0x67,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x65,0x2e,0x6b,0x65,0x79,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x7b,0x22,0x3d,0x22,0x3a,0x22,0x3d,0x30,0x22,0x2c,0x22,0x3a,0x22,0x3a,0x22,0x3d,0x32,0x22,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x24,0x22,0x2b,0x65,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x2f,0x5b,0x3d,0x3a,0x5d,0x2f,0x67,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x5b,0x65,0x5d,0x7d,0x29,0x29,0x7d,0x28,0x22,0x22,0x2b,0x65,0x2e,0x6b,0x65,0x79,0x29,0x3a,0x6e,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x36,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x28,0x65,0x2c,0x6e,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x3b,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x75,0x26,0x26,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x22,0x21,0x3d,0x3d,0x75,0x7c,0x7c,0x28,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x76,0x61,0x72,0x20,0x69,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x69,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x75,0x29,0x7b,0x63,0x61,0x73,0x65,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x3a,0x63,0x61,0x73,0x65,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3a,0x69,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x74,0x3a,0x63,0x61,0x73,0x65,0x20,0x72,0x3a,0x69,0x3d,0x21,0x30,0x7d,0x7d,0x69,0x66,0x28,0x69,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x3d,0x6f,0x28,0x69,0x3d,0x65,0x29,0x2c,0x65,0x3d,0x22,0x22,0x3d,0x3d,0x3d,0x61,0x3f,0x22,0x2e,0x22,0x2b,0x4e,0x28,0x69,0x2c,0x30,0x29,0x3a,0x61,0x2c,0x77,0x28,0x6f,0x29,0x3f,0x28,0x6c,0x3d,0x22,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x65,0x26,0x26,0x28,0x6c,0x3d,0x65,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x50,0x2c,0x22,0x24,0x26,0x2f,0x22,0x29,0x2b,0x22,0x2f,0x22,0x29,0x2c,0x7a,0x28,0x6f,0x2c,0x6e,0x2c,0x6c,0x2c,0x22,0x22,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x29,0x29,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6f,0x26,0x26,0x28,0x5f,0x28,0x6f,0x29,0x26,0x26,0x28,0x6f,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x74,0x2c,0x74,0x79,0x70,0x65,0x3a,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6b,0x65,0x79,0x3a,0x6e,0x2c,0x72,0x65,0x66,0x3a,0x65,0x2e,0x72,0x65,0x66,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x65,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x65,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x7d,0x7d,0x28,0x6f,0x2c,0x6c,0x2b,0x28,0x21,0x6f,0x2e,0x6b,0x65,0x79,0x7c,0x7c,0x69,0x26,0x26,0x69,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x6f,0x2e,0x6b,0x65,0x79,0x3f,0x22,0x22,0x3a,0x28,0x22,0x22,0x2b,0x6f,0x2e,0x6b,0x65,0x79,0x29,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x50,0x2c,0x22,0x24,0x26,0x2f,0x22,0x29,0x2b,0x22,0x2f,0x22,0x29,0x2b,0x65,0x29,0x29,0x2c,0x6e,0x2e,0x70,0x75,0x73,0x68,0x28,0x6f,0x29,0x29,0x2c,0x31,0x3b,0x69,0x66,0x28,0x69,0x3d,0x30,0x2c,0x61,0x3d,0x22,0x22,0x3d,0x3d,0x3d,0x61,0x3f,0x22,0x2e,0x22,0x3a,0x61,0x2b,0x22,0x3a,0x22,0x2c,0x77,0x28,0x65,0x29,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x73,0x3d,0x30,0x3b,0x73,0x3c,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x73,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2b,0x4e,0x28,0x75,0x3d,0x65,0x5b,0x73,0x5d,0x2c,0x73,0x29,0x3b,0x69,0x2b,0x3d,0x7a,0x28,0x75,0x2c,0x6e,0x2c,0x6c,0x2c,0x63,0x2c,0x6f,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x65,0x3d,0x70,0x26,0x26,0x65,0x5b,0x70,0x5d,0x7c,0x7c,0x65,0x5b,0x22,0x40,0x40,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x22,0x5d,0x29,0x3f,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x28,0x65,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x29,0x66,0x6f,0x72,0x28,0x65,0x3d,0x63,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x65,0x29,0x2c,0x73,0x3d,0x30,0x3b,0x21,0x28,0x75,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x29,0x69,0x2b,0x3d,0x7a,0x28,0x75,0x3d,0x75,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6e,0x2c,0x6c,0x2c,0x63,0x3d,0x61,0x2b,0x4e,0x28,0x75,0x2c,0x73,0x2b,0x2b,0x29,0x2c,0x6f,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x75,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x6e,0x3d,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x65,0x29,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x22,0x4f,0x62,0x6a,0x65,0x63,0x74,0x73,0x20,0x61,0x72,0x65,0x20,0x6e,0x6f,0x74,0x20,0x76,0x61,0x6c,0x69,0x64,0x20,0x61,0x73,0x20,0x61,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x63,0x68,0x69,0x6c,0x64,0x20,0x28,0x66,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x22,0x2b,0x28,0x22,0x5b,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x5d,0x22,0x3d,0x3d,0x3d,0x6e,0x3f,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x77,0x69,0x74,0x68,0x20,0x6b,0x65,0x79,0x73,0x20,0x7b,0x22,0x2b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x65,0x29,0x2e,0x6a,0x6f,0x69,0x6e,0x28,0x22,0x2c,0x20,0x22,0x29,0x2b,0x22,0x7d,0x22,0x3a,0x6e,0x29,0x2b,0x22,0x29,0x2e,0x20,0x49,0x66,0x20,0x79,0x6f,0x75,0x20,0x6d,0x65,0x61,0x6e,0x74,0x20,0x74,0x6f,0x20,0x72,0x65,0x6e,0x64,0x65,0x72,0x20,0x61,0x20,0x63,0x6f,0x6c,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x66,0x20,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x20,0x75,0x73,0x65,0x20,0x61,0x6e,0x20,0x61,0x72,0x72,0x61,0x79,0x20,0x69,0x6e,0x73,0x74,0x65,0x61,0x64,0x2e,0x22,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x5b,0x5d,0x2c,0x6c,0x3d,0x30,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x7a,0x28,0x65,0x2c,0x72,0x2c,0x22,0x22,0x2c,0x22,0x22,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x74,0x2c,0x65,0x2c,0x6c,0x2b,0x2b,0x29,0x7d,0x29,0x29,0x2c,0x72,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x2d,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3b,0x28,0x6e,0x3d,0x6e,0x28,0x29,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x6e,0x29,0x7b,0x30,0x21,0x3d,0x3d,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x26,0x26,0x2d,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x7c,0x7c,0x28,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3d,0x31,0x2c,0x65,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3d,0x6e,0x29,0x7d,0x29,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x6e,0x29,0x7b,0x30,0x21,0x3d,0x3d,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x26,0x26,0x2d,0x31,0x21,0x3d,0x3d,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x7c,0x7c,0x28,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3d,0x32,0x2c,0x65,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3d,0x6e,0x29,0x7d,0x29,0x29,0x2c,0x2d,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x26,0x26,0x28,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3d,0x30,0x2c,0x65,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3d,0x6e,0x29,0x7d,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x65,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x65,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x7d,0x76,0x61,0x72,0x20,0x52,0x3d,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x46,0x3d,0x7b,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x4f,0x3d,0x7b,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x3a,0x52,0x2c,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x3a,0x46,0x2c,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x3a,0x78,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x22,0x61,0x63,0x74,0x28,0x2e,0x2e,0x2e,0x29,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x20,0x69,0x6e,0x20,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x75,0x69,0x6c,0x64,0x73,0x20,0x6f,0x66,0x20,0x52,0x65,0x61,0x63,0x74,0x2e,0x22,0x29,0x7d,0x6e,0x2e,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x7b,0x6d,0x61,0x70,0x3a,0x54,0x2c,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x54,0x28,0x65,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6e,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x7d,0x29,0x2c,0x74,0x29,0x7d,0x2c,0x63,0x6f,0x75,0x6e,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x30,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x54,0x28,0x65,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x6e,0x2b,0x2b,0x7d,0x29,0x29,0x2c,0x6e,0x7d,0x2c,0x74,0x6f,0x41,0x72,0x72,0x61,0x79,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x54,0x28,0x65,0x2c,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x29,0x29,0x7c,0x7c,0x5b,0x5d,0x7d,0x2c,0x6f,0x6e,0x6c,0x79,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x21,0x5f,0x28,0x65,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x22,0x52,0x65,0x61,0x63,0x74,0x2e,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2e,0x6f,0x6e,0x6c,0x79,0x20,0x65,0x78,0x70,0x65,0x63,0x74,0x65,0x64,0x20,0x74,0x6f,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x20,0x61,0x20,0x73,0x69,0x6e,0x67,0x6c,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x20,0x63,0x68,0x69,0x6c,0x64,0x2e,0x22,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x7d,0x2c,0x6e,0x2e,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x67,0x2c,0x6e,0x2e,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x3d,0x6c,0x2c,0x6e,0x2e,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x3d,0x6f,0x2c,0x6e,0x2e,0x50,0x75,0x72,0x65,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x62,0x2c,0x6e,0x2e,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x3d,0x61,0x2c,0x6e,0x2e,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x3d,0x63,0x2c,0x6e,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x3d,0x4f,0x2c,0x6e,0x2e,0x61,0x63,0x74,0x3d,0x4d,0x2c,0x6e,0x2e,0x63,0x6c,0x6f,0x6e,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x72,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x22,0x52,0x65,0x61,0x63,0x74,0x2e,0x63,0x6c,0x6f,0x6e,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x2e,0x2e,0x2e,0x29,0x3a,0x20,0x54,0x68,0x65,0x20,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x20,0x6d,0x75,0x73,0x74,0x20,0x62,0x65,0x20,0x61,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2c,0x20,0x62,0x75,0x74,0x20,0x79,0x6f,0x75,0x20,0x70,0x61,0x73,0x73,0x65,0x64,0x20,0x22,0x2b,0x65,0x2b,0x22,0x2e,0x22,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x68,0x28,0x7b,0x7d,0x2c,0x65,0x2e,0x70,0x72,0x6f,0x70,0x73,0x29,0x2c,0x61,0x3d,0x65,0x2e,0x6b,0x65,0x79,0x2c,0x6f,0x3d,0x65,0x2e,0x72,0x65,0x66,0x2c,0x75,0x3d,0x65,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6e,0x29,0x7b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x6f,0x3d,0x6e,0x2e,0x72,0x65,0x66,0x2c,0x75,0x3d,0x78,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x61,0x3d,0x22,0x22,0x2b,0x6e,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x65,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x65,0x2e,0x74,0x79,0x70,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x76,0x61,0x72,0x20,0x69,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x3b,0x66,0x6f,0x72,0x28,0x73,0x20,0x69,0x6e,0x20,0x6e,0x29,0x53,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6e,0x2c,0x73,0x29,0x26,0x26,0x21,0x45,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x73,0x29,0x26,0x26,0x28,0x6c,0x5b,0x73,0x5d,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x5b,0x73,0x5d,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x69,0x3f,0x69,0x5b,0x73,0x5d,0x3a,0x6e,0x5b,0x73,0x5d,0x29,0x7d,0x76,0x61,0x72,0x20,0x73,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x32,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x73,0x29,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x72,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x3c,0x73,0x29,0x7b,0x69,0x3d,0x41,0x72,0x72,0x61,0x79,0x28,0x73,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x73,0x3b,0x63,0x2b,0x2b,0x29,0x69,0x5b,0x63,0x5d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x63,0x2b,0x32,0x5d,0x3b,0x6c,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x69,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x74,0x2c,0x74,0x79,0x70,0x65,0x3a,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6b,0x65,0x79,0x3a,0x61,0x2c,0x72,0x65,0x66,0x3a,0x6f,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x6c,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x75,0x7d,0x7d,0x2c,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x65,0x3d,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x69,0x2c,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x65,0x2c,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x32,0x3a,0x65,0x2c,0x5f,0x74,0x68,0x72,0x65,0x61,0x64,0x43,0x6f,0x75,0x6e,0x74,0x3a,0x30,0x2c,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x4e,0x61,0x6d,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x2e,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x3d,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x75,0x2c,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x7d,0x2c,0x65,0x2e,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x3d,0x65,0x7d,0x2c,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x43,0x2c,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x46,0x61,0x63,0x74,0x6f,0x72,0x79,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x43,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x2e,0x74,0x79,0x70,0x65,0x3d,0x65,0x2c,0x6e,0x7d,0x2c,0x6e,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x65,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x2c,0x6e,0x2e,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x73,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x3a,0x65,0x7d,0x7d,0x2c,0x6e,0x2e,0x69,0x73,0x56,0x61,0x6c,0x69,0x64,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x5f,0x2c,0x6e,0x2e,0x6c,0x61,0x7a,0x79,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x64,0x2c,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x7b,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3a,0x2d,0x31,0x2c,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3a,0x65,0x7d,0x2c,0x5f,0x69,0x6e,0x69,0x74,0x3a,0x4c,0x7d,0x7d,0x2c,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x66,0x2c,0x74,0x79,0x70,0x65,0x3a,0x65,0x2c,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x6e,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x7d,0x7d,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x46,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x46,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x7b,0x7d,0x3b,0x74,0x72,0x79,0x7b,0x65,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x46,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x7d,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x61,0x63,0x74,0x3d,0x4d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x28,0x65,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x28,0x65,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x49,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x49,0x64,0x28,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x52,0x65,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x52,0x65,0x66,0x28,0x65,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x65,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7d,0x2c,0x6e,0x2e,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x22,0x7d,0x2c,0x34,0x33,0x3a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3d,0x74,0x28,0x32,0x30,0x32,0x29,0x7d,0x2c,0x35,0x37,0x39,0x3a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3d,0x74,0x28,0x31,0x35,0x33,0x29,0x7d,0x2c,0x32,0x33,0x34,0x3a,0x28,0x65,0x2c,0x6e,0x29,0x3d,0x3e,0x7b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2e,0x70,0x75,0x73,0x68,0x28,0x6e,0x29,0x3b,0x65,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x74,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x2d,0x31,0x3e,0x3e,0x3e,0x31,0x2c,0x6c,0x3d,0x65,0x5b,0x72,0x5d,0x3b,0x69,0x66,0x28,0x21,0x28,0x30,0x3c,0x61,0x28,0x6c,0x2c,0x6e,0x29,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x65,0x5b,0x72,0x5d,0x3d,0x6e,0x2c,0x65,0x5b,0x74,0x5d,0x3d,0x6c,0x2c,0x74,0x3d,0x72,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x28,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x65,0x5b,0x30,0x5d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x65,0x5b,0x30,0x5d,0x2c,0x74,0x3d,0x65,0x2e,0x70,0x6f,0x70,0x28,0x29,0x3b,0x69,0x66,0x28,0x74,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x65,0x5b,0x30,0x5d,0x3d,0x74,0x3b,0x65,0x3a,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x72,0x3d,0x30,0x2c,0x6c,0x3d,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2c,0x6f,0x3d,0x6c,0x3e,0x3e,0x3e,0x31,0x3b,0x72,0x3c,0x6f,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x32,0x2a,0x28,0x72,0x2b,0x31,0x29,0x2d,0x31,0x2c,0x69,0x3d,0x65,0x5b,0x75,0x5d,0x2c,0x73,0x3d,0x75,0x2b,0x31,0x2c,0x63,0x3d,0x65,0x5b,0x73,0x5d,0x3b,0x69,0x66,0x28,0x30,0x3e,0x61,0x28,0x69,0x2c,0x74,0x29,0x29,0x73,0x3c,0x6c,0x26,0x26,0x30,0x3e,0x61,0x28,0x63,0x2c,0x69,0x29,0x3f,0x28,0x65,0x5b,0x72,0x5d,0x3d,0x63,0x2c,0x65,0x5b,0x73,0x5d,0x3d,0x74,0x2c,0x72,0x3d,0x73,0x29,0x3a,0x28,0x65,0x5b,0x72,0x5d,0x3d,0x69,0x2c,0x65,0x5b,0x75,0x5d,0x3d,0x74,0x2c,0x72,0x3d,0x75,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x21,0x28,0x73,0x3c,0x6c,0x26,0x26,0x30,0x3e,0x61,0x28,0x63,0x2c,0x74,0x29,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x65,0x3b,0x65,0x5b,0x72,0x5d,0x3d,0x63,0x2c,0x65,0x5b,0x73,0x5d,0x3d,0x74,0x2c,0x72,0x3d,0x73,0x7d,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x65,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x2d,0x6e,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x74,0x3f,0x74,0x3a,0x65,0x2e,0x69,0x64,0x2d,0x6e,0x2e,0x69,0x64,0x7d,0x69,0x66,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x26,0x26,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x3b,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x75,0x3d,0x44,0x61,0x74,0x65,0x2c,0x69,0x3d,0x75,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x3b,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x75,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x69,0x7d,0x7d,0x76,0x61,0x72,0x20,0x73,0x3d,0x5b,0x5d,0x2c,0x63,0x3d,0x5b,0x5d,0x2c,0x66,0x3d,0x31,0x2c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x70,0x3d,0x33,0x2c,0x6d,0x3d,0x21,0x31,0x2c,0x68,0x3d,0x21,0x31,0x2c,0x76,0x3d,0x21,0x31,0x2c,0x67,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x79,0x3d,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x3d,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x65,0x74,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x3f,0x73,0x65,0x74,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x28,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6e,0x3d,0x72,0x28,0x63,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x29,0x6c,0x28,0x63,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x21,0x28,0x6e,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x3d,0x65,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x6c,0x28,0x63,0x29,0x2c,0x6e,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3d,0x6e,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x2c,0x74,0x28,0x73,0x2c,0x6e,0x29,0x7d,0x6e,0x3d,0x72,0x28,0x63,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x76,0x3d,0x21,0x31,0x2c,0x6b,0x28,0x65,0x29,0x2c,0x21,0x68,0x29,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x28,0x73,0x29,0x29,0x68,0x3d,0x21,0x30,0x2c,0x46,0x28,0x53,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x72,0x28,0x63,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x4f,0x28,0x77,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x65,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x28,0x65,0x2c,0x74,0x29,0x7b,0x68,0x3d,0x21,0x31,0x2c,0x76,0x26,0x26,0x28,0x76,0x3d,0x21,0x31,0x2c,0x79,0x28,0x5f,0x29,0x2c,0x5f,0x3d,0x2d,0x31,0x29,0x2c,0x6d,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x70,0x3b,0x74,0x72,0x79,0x7b,0x66,0x6f,0x72,0x28,0x6b,0x28,0x74,0x29,0x2c,0x64,0x3d,0x72,0x28,0x73,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x21,0x28,0x64,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x3e,0x74,0x29,0x7c,0x7c,0x65,0x26,0x26,0x21,0x7a,0x28,0x29,0x29,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x64,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3b,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6f,0x29,0x7b,0x64,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x70,0x3d,0x64,0x2e,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x3b,0x76,0x61,0x72,0x20,0x75,0x3d,0x6f,0x28,0x64,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x3c,0x3d,0x74,0x29,0x3b,0x74,0x3d,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x2c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x75,0x3f,0x64,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x75,0x3a,0x64,0x3d,0x3d,0x3d,0x72,0x28,0x73,0x29,0x26,0x26,0x6c,0x28,0x73,0x29,0x2c,0x6b,0x28,0x74,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6c,0x28,0x73,0x29,0x3b,0x64,0x3d,0x72,0x28,0x73,0x29,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x76,0x61,0x72,0x20,0x69,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x72,0x28,0x63,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x4f,0x28,0x77,0x2c,0x66,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x74,0x29,0x2c,0x69,0x3d,0x21,0x31,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x70,0x3d,0x61,0x2c,0x6d,0x3d,0x21,0x31,0x7d,0x7d,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x2e,0x69,0x73,0x49,0x6e,0x70,0x75,0x74,0x50,0x65,0x6e,0x64,0x69,0x6e,0x67,0x26,0x26,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x2e,0x69,0x73,0x49,0x6e,0x70,0x75,0x74,0x50,0x65,0x6e,0x64,0x69,0x6e,0x67,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x76,0x61,0x72,0x20,0x78,0x2c,0x45,0x3d,0x21,0x31,0x2c,0x43,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x5f,0x3d,0x2d,0x31,0x2c,0x50,0x3d,0x35,0x2c,0x4e,0x3d,0x2d,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x4e,0x3c,0x50,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x28,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x43,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x3b,0x4e,0x3d,0x65,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x21,0x30,0x3b,0x74,0x72,0x79,0x7b,0x74,0x3d,0x43,0x28,0x21,0x30,0x2c,0x65,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x74,0x3f,0x78,0x28,0x29,0x3a,0x28,0x45,0x3d,0x21,0x31,0x2c,0x43,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x45,0x3d,0x21,0x31,0x7d,0x69,0x66,0x28,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x29,0x78,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x62,0x28,0x54,0x29,0x7d,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x4c,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x2c,0x52,0x3d,0x4c,0x2e,0x70,0x6f,0x72,0x74,0x32,0x3b,0x4c,0x2e,0x70,0x6f,0x72,0x74,0x31,0x2e,0x6f,0x6e,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x3d,0x54,0x2c,0x78,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x52,0x2e,0x70,0x6f,0x73,0x74,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x78,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x67,0x28,0x54,0x2c,0x30,0x29,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x28,0x65,0x29,0x7b,0x43,0x3d,0x65,0x2c,0x45,0x7c,0x7c,0x28,0x45,0x3d,0x21,0x30,0x2c,0x78,0x28,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x28,0x65,0x2c,0x74,0x29,0x7b,0x5f,0x3d,0x67,0x28,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x65,0x28,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x29,0x7d,0x29,0x2c,0x74,0x29,0x7d,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x64,0x6c,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x35,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x31,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4c,0x6f,0x77,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x34,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x33,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x50,0x72,0x6f,0x66,0x69,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x55,0x73,0x65,0x72,0x42,0x6c,0x6f,0x63,0x6b,0x69,0x6e,0x67,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x32,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x61,0x6e,0x63,0x65,0x6c,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x45,0x78,0x65,0x63,0x75,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x68,0x7c,0x7c,0x6d,0x7c,0x7c,0x28,0x68,0x3d,0x21,0x30,0x2c,0x46,0x28,0x53,0x29,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x66,0x6f,0x72,0x63,0x65,0x46,0x72,0x61,0x6d,0x65,0x52,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x30,0x3e,0x65,0x7c,0x7c,0x31,0x32,0x35,0x3c,0x65,0x3f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x22,0x66,0x6f,0x72,0x63,0x65,0x46,0x72,0x61,0x6d,0x65,0x52,0x61,0x74,0x65,0x20,0x74,0x61,0x6b,0x65,0x73,0x20,0x61,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x76,0x65,0x20,0x69,0x6e,0x74,0x20,0x62,0x65,0x74,0x77,0x65,0x65,0x6e,0x20,0x30,0x20,0x61,0x6e,0x64,0x20,0x31,0x32,0x35,0x2c,0x20,0x66,0x6f,0x72,0x63,0x69,0x6e,0x67,0x20,0x66,0x72,0x61,0x6d,0x65,0x20,0x72,0x61,0x74,0x65,0x73,0x20,0x68,0x69,0x67,0x68,0x65,0x72,0x20,0x74,0x68,0x61,0x6e,0x20,0x31,0x32,0x35,0x20,0x66,0x70,0x73,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x22,0x29,0x3a,0x50,0x3d,0x30,0x3c,0x65,0x3f,0x4d,0x61,0x74,0x68,0x2e,0x66,0x6c,0x6f,0x6f,0x72,0x28,0x31,0x65,0x33,0x2f,0x65,0x29,0x3a,0x35,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x70,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x46,0x69,0x72,0x73,0x74,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x28,0x73,0x29,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x65,0x78,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x70,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x6e,0x3d,0x33,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x6e,0x3d,0x70,0x7d,0x76,0x61,0x72,0x20,0x74,0x3d,0x70,0x3b,0x70,0x3d,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x70,0x3d,0x74,0x7d,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x70,0x61,0x75,0x73,0x65,0x45,0x78,0x65,0x63,0x75,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x50,0x61,0x69,0x6e,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x75,0x6e,0x57,0x69,0x74,0x68,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6e,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x65,0x3d,0x33,0x7d,0x76,0x61,0x72,0x20,0x74,0x3d,0x70,0x3b,0x70,0x3d,0x65,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x70,0x3d,0x74,0x7d,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x2c,0x6c,0x2c,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x3d,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x28,0x61,0x3d,0x61,0x2e,0x64,0x65,0x6c,0x61,0x79,0x29,0x26,0x26,0x30,0x3c,0x61,0x3f,0x6f,0x2b,0x61,0x3a,0x6f,0x3a,0x61,0x3d,0x6f,0x2c,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x75,0x3d,0x2d,0x31,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x75,0x3d,0x32,0x35,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x75,0x3d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x33,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x75,0x3d,0x31,0x65,0x34,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x75,0x3d,0x35,0x65,0x33,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x7b,0x69,0x64,0x3a,0x66,0x2b,0x2b,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x6c,0x2c,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x3a,0x65,0x2c,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x61,0x2c,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x3a,0x75,0x3d,0x61,0x2b,0x75,0x2c,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3a,0x2d,0x31,0x7d,0x2c,0x61,0x3e,0x6f,0x3f,0x28,0x65,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3d,0x61,0x2c,0x74,0x28,0x63,0x2c,0x65,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x28,0x73,0x29,0x26,0x26,0x65,0x3d,0x3d,0x3d,0x72,0x28,0x63,0x29,0x26,0x26,0x28,0x76,0x3f,0x28,0x79,0x28,0x5f,0x29,0x2c,0x5f,0x3d,0x2d,0x31,0x29,0x3a,0x76,0x3d,0x21,0x30,0x2c,0x4f,0x28,0x77,0x2c,0x61,0x2d,0x6f,0x29,0x29,0x29,0x3a,0x28,0x65,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3d,0x75,0x2c,0x74,0x28,0x73,0x2c,0x65,0x29,0x2c,0x68,0x7c,0x7c,0x6d,0x7c,0x7c,0x28,0x68,0x3d,0x21,0x30,0x2c,0x46,0x28,0x53,0x29,0x29,0x29,0x2c,0x65,0x7d,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x68,0x6f,0x75,0x6c,0x64,0x59,0x69,0x65,0x6c,0x64,0x3d,0x7a,0x2c,0x6e,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x77,0x72,0x61,0x70,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x70,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x70,0x3b,0x70,0x3d,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x70,0x3d,0x74,0x7d,0x7d,0x7d,0x7d,0x2c,0x38,0x35,0x33,0x3a,0x28,0x65,0x2c,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3d,0x74,0x28,0x32,0x33,0x34,0x29,0x7d,0x7d,0x2c,0x6e,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x28,0x72,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x5b,0x72,0x5d,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6c,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6e,0x5b,0x72,0x5d,0x3d,0x7b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3a,0x7b,0x7d,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x5b,0x72,0x5d,0x28,0x61,0x2c,0x61,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2c,0x74,0x29,0x2c,0x61,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x7d,0x74,0x2e,0x6d,0x3d,0x65,0x2c,0x74,0x2e,0x64,0x3d,0x28,0x65,0x2c,0x6e,0x29,0x3d,0x3e,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x72,0x20,0x69,0x6e,0x20,0x6e,0x29,0x74,0x2e,0x6f,0x28,0x6e,0x2c,0x72,0x29,0x26,0x26,0x21,0x74,0x2e,0x6f,0x28,0x65,0x2c,0x72,0x29,0x26,0x26,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x2c,0x72,0x2c,0x7b,0x65,0x6e,0x75,0x6d,0x65,0x72,0x61,0x62,0x6c,0x65,0x3a,0x21,0x30,0x2c,0x67,0x65,0x74,0x3a,0x6e,0x5b,0x72,0x5d,0x7d,0x29,0x7d,0x2c,0x74,0x2e,0x66,0x3d,0x7b,0x7d,0x2c,0x74,0x2e,0x65,0x3d,0x65,0x3d,0x3e,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x2e,0x61,0x6c,0x6c,0x28,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x74,0x2e,0x66,0x29,0x2e,0x72,0x65,0x64,0x75,0x63,0x65,0x28,0x28,0x28,0x6e,0x2c,0x72,0x29,0x3d,0x3e,0x28,0x74,0x2e,0x66,0x5b,0x72,0x5d,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x6e,0x29,0x29,0x2c,0x5b,0x5d,0x29,0x29,0x2c,0x74,0x2e,0x75,0x3d,0x65,0x3d,0x3e,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x22,0x2b,0x65,0x2b,0x22,0x2e,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x22,0x2c,0x74,0x2e,0x6d,0x69,0x6e,0x69,0x43,0x73,0x73,0x46,0x3d,0x65,0x3d,0x3e,0x7b,0x7d,0x2c,0x74,0x2e,0x6f,0x3d,0x28,0x65,0x2c,0x6e,0x29,0x3d,0x3e,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x65,0x2c,0x6e,0x29,0x2c,0x28,0x28,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x7b,0x7d,0x2c,0x6e,0x3d,0x22,0x77,0x65,0x62,0x75,0x69,0x2d,0x72,0x65,0x61,0x63,0x74,0x2d,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3a,0x22,0x3b,0x74,0x2e,0x6c,0x3d,0x28,0x72,0x2c,0x6c,0x2c,0x61,0x2c,0x6f,0x29,0x3d,0x3e,0x7b,0x69,0x66,0x28,0x65,0x5b,0x72,0x5d,0x29,0x65,0x5b,0x72,0x5d,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x75,0x2c,0x69,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x73,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x42,0x79,0x54,0x61,0x67,0x4e,0x61,0x6d,0x65,0x28,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x22,0x29,0x2c,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x73,0x5b,0x63,0x5d,0x3b,0x69,0x66,0x28,0x66,0x2e,0x67,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x22,0x73,0x72,0x63,0x22,0x29,0x3d,0x3d,0x72,0x7c,0x7c,0x66,0x2e,0x67,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x22,0x64,0x61,0x74,0x61,0x2d,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x22,0x29,0x3d,0x3d,0x6e,0x2b,0x61,0x29,0x7b,0x75,0x3d,0x66,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x7d,0x75,0x7c,0x7c,0x28,0x69,0x3d,0x21,0x30,0x2c,0x28,0x75,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x22,0x29,0x29,0x2e,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x2c,0x75,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3d,0x31,0x32,0x30,0x2c,0x74,0x2e,0x6e,0x63,0x26,0x26,0x75,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x22,0x6e,0x6f,0x6e,0x63,0x65,0x22,0x2c,0x74,0x2e,0x6e,0x63,0x29,0x2c,0x75,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x22,0x64,0x61,0x74,0x61,0x2d,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x22,0x2c,0x6e,0x2b,0x61,0x29,0x2c,0x75,0x2e,0x73,0x72,0x63,0x3d,0x72,0x29,0x2c,0x65,0x5b,0x72,0x5d,0x3d,0x5b,0x6c,0x5d,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x28,0x6e,0x2c,0x74,0x29,0x3d,0x3e,0x7b,0x75,0x2e,0x6f,0x6e,0x65,0x72,0x72,0x6f,0x72,0x3d,0x75,0x2e,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x70,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x65,0x5b,0x72,0x5d,0x3b,0x69,0x66,0x28,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x65,0x5b,0x72,0x5d,0x2c,0x75,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x26,0x26,0x75,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x75,0x29,0x2c,0x6c,0x26,0x26,0x6c,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x65,0x3d,0x3e,0x65,0x28,0x74,0x29,0x29,0x29,0x2c,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x28,0x74,0x29,0x7d,0x2c,0x70,0x3d,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x64,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x7b,0x74,0x79,0x70,0x65,0x3a,0x22,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x22,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x3a,0x75,0x7d,0x29,0x2c,0x31,0x32,0x65,0x34,0x29,0x3b,0x75,0x2e,0x6f,0x6e,0x65,0x72,0x72,0x6f,0x72,0x3d,0x64,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x2e,0x6f,0x6e,0x65,0x72,0x72,0x6f,0x72,0x29,0x2c,0x75,0x2e,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x3d,0x64,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x2e,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x69,0x26,0x26,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x68,0x65,0x61,0x64,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x75,0x29,0x7d,0x7d,0x7d,0x29,0x28,0x29,0x2c,0x74,0x2e,0x72,0x3d,0x65,0x3d,0x3e,0x7b,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x26,0x26,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x54,0x61,0x67,0x26,0x26,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x2c,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x54,0x61,0x67,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x22,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x22,0x7d,0x29,0x2c,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x2c,0x22,0x5f,0x5f,0x65,0x73,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x22,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x21,0x30,0x7d,0x29,0x7d,0x2c,0x74,0x2e,0x70,0x3d,0x22,0x2f,0x22,0x2c,0x28,0x28,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x7b,0x37,0x39,0x32,0x3a,0x30,0x7d,0x3b,0x74,0x2e,0x66,0x2e,0x6a,0x3d,0x28,0x6e,0x2c,0x72,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x74,0x2e,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x3f,0x65,0x5b,0x6e,0x5d,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x6c,0x29,0x69,0x66,0x28,0x6c,0x29,0x72,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x5b,0x32,0x5d,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6e,0x65,0x77,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x28,0x28,0x28,0x74,0x2c,0x72,0x29,0x3d,0x3e,0x6c,0x3d,0x65,0x5b,0x6e,0x5d,0x3d,0x5b,0x74,0x2c,0x72,0x5d,0x29,0x29,0x3b,0x72,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x5b,0x32,0x5d,0x3d,0x61,0x29,0x3b,0x76,0x61,0x72,0x20,0x6f,0x3d,0x74,0x2e,0x70,0x2b,0x74,0x2e,0x75,0x28,0x6e,0x29,0x2c,0x75,0x3d,0x6e,0x65,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x3b,0x74,0x2e,0x6c,0x28,0x6f,0x2c,0x28,0x72,0x3d,0x3e,0x7b,0x69,0x66,0x28,0x74,0x2e,0x6f,0x28,0x65,0x2c,0x6e,0x29,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x28,0x6c,0x3d,0x65,0x5b,0x6e,0x5d,0x29,0x26,0x26,0x28,0x65,0x5b,0x6e,0x5d,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x2c,0x6c,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x72,0x26,0x26,0x28,0x22,0x6c,0x6f,0x61,0x64,0x22,0x3d,0x3d,0x3d,0x72,0x2e,0x74,0x79,0x70,0x65,0x3f,0x22,0x6d,0x69,0x73,0x73,0x69,0x6e,0x67,0x22,0x3a,0x72,0x2e,0x74,0x79,0x70,0x65,0x29,0x2c,0x6f,0x3d,0x72,0x26,0x26,0x72,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x26,0x26,0x72,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x73,0x72,0x63,0x3b,0x75,0x2e,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x3d,0x22,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x22,0x2b,0x6e,0x2b,0x22,0x20,0x66,0x61,0x69,0x6c,0x65,0x64,0x2e,0x5c,0x6e,0x28,0x22,0x2b,0x61,0x2b,0x22,0x3a,0x20,0x22,0x2b,0x6f,0x2b,0x22,0x29,0x22,0x2c,0x75,0x2e,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x43,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x45,0x72,0x72,0x6f,0x72,0x22,0x2c,0x75,0x2e,0x74,0x79,0x70,0x65,0x3d,0x61,0x2c,0x75,0x2e,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x3d,0x6f,0x2c,0x6c,0x5b,0x31,0x5d,0x28,0x75,0x29,0x7d,0x7d,0x29,0x2c,0x22,0x63,0x68,0x75,0x6e,0x6b,0x2d,0x22,0x2b,0x6e,0x2c,0x6e,0x29,0x7d,0x7d,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x28,0x6e,0x2c,0x72,0x29,0x3d,0x3e,0x7b,0x76,0x61,0x72,0x20,0x6c,0x2c,0x61,0x2c,0x6f,0x3d,0x72,0x5b,0x30,0x5d,0x2c,0x75,0x3d,0x72,0x5b,0x31,0x5d,0x2c,0x69,0x3d,0x72,0x5b,0x32,0x5d,0x2c,0x73,0x3d,0x30,0x3b,0x69,0x66,0x28,0x6f,0x2e,0x73,0x6f,0x6d,0x65,0x28,0x28,0x6e,0x3d,0x3e,0x30,0x21,0x3d,0x3d,0x65,0x5b,0x6e,0x5d,0x29,0x29,0x29,0x7b,0x66,0x6f,0x72,0x28,0x6c,0x20,0x69,0x6e,0x20,0x75,0x29,0x74,0x2e,0x6f,0x28,0x75,0x2c,0x6c,0x29,0x26,0x26,0x28,0x74,0x2e,0x6d,0x5b,0x6c,0x5d,0x3d,0x75,0x5b,0x6c,0x5d,0x29,0x3b,0x69,0x66,0x28,0x69,0x29,0x69,0x28,0x74,0x29,0x7d,0x66,0x6f,0x72,0x28,0x6e,0x26,0x26,0x6e,0x28,0x72,0x29,0x3b,0x73,0x3c,0x6f,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x73,0x2b,0x2b,0x29,0x61,0x3d,0x6f,0x5b,0x73,0x5d,0x2c,0x74,0x2e,0x6f,0x28,0x65,0x2c,0x61,0x29,0x26,0x26,0x65,0x5b,0x61,0x5d,0x26,0x26,0x65,0x5b,0x61,0x5d,0x5b,0x30,0x5d,0x28,0x29,0x2c,0x65,0x5b,0x61,0x5d,0x3d,0x30,0x7d,0x2c,0x72,0x3d,0x73,0x65,0x6c,0x66,0x2e,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x43,0x68,0x75,0x6e,0x6b,0x77,0x65,0x62,0x75,0x69,0x5f,0x72,0x65,0x61,0x63,0x74,0x5f,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3d,0x73,0x65,0x6c,0x66,0x2e,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x43,0x68,0x75,0x6e,0x6b,0x77,0x65,0x62,0x75,0x69,0x5f,0x72,0x65,0x61,0x63,0x74,0x5f,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x7c,0x7c,0x5b,0x5d,0x3b,0x72,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x6e,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x30,0x29,0x29,0x2c,0x72,0x2e,0x70,0x75,0x73,0x68,0x3d,0x6e,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x2e,0x70,0x75,0x73,0x68,0x2e,0x62,0x69,0x6e,0x64,0x28,0x72,0x29,0x29,0x7d,0x29,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x74,0x28,0x34,0x33,0x29,0x2c,0x6c,0x3d,0x74,0x28,0x33,0x39,0x31,0x29,0x2c,0x61,0x3d,0x74,0x28,0x35,0x37,0x39,0x29,0x3b,0x63,0x6f,0x6e,0x73,0x74,0x20,0x6f,0x3d,0x28,0x29,0x3d,0x3e,0x7b,0x63,0x6f,0x6e,0x73,0x74,0x5b,0x65,0x2c,0x6e,0x5d,0x3d,0x28,0x30,0x2c,0x72,0x2e,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x29,0x28,0x22,0x22,0x29,0x2c,0x5b,0x74,0x2c,0x6c,0x5d,0x3d,0x28,0x30,0x2c,0x72,0x2e,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x29,0x28,0x22,0x22,0x29,0x2c,0x5b,0x6f,0x2c,0x75,0x5d,0x3d,0x28,0x30,0x2c,0x72,0x2e,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x29,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x73,0x29,0x28,0x22,0x64,0x69,0x76,0x22,0x2c,0x7b,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x22,0x32,0x30,0x70,0x78,0x22,0x2c,0x66,0x6f,0x6e,0x74,0x46,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x22,0x41,0x72,0x69,0x61,0x6c,0x2c,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x22,0x7d,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x5b,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x69,0x6d,0x67,0x22,0x2c,0x7b,0x73,0x72,0x63,0x3a,0x22,0x6c,0x6f,0x67,0x6f,0x31,0x39,0x32,0x2e,0x70,0x6e,0x67,0x22,0x2c,0x77,0x69,0x64,0x74,0x68,0x3a,0x22,0x36,0x34,0x22,0x2c,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x22,0x36,0x34,0x22,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x68,0x32,0x22,0x2c,0x7b,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x22,0x57,0x65,0x62,0x55,0x49,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x45,0x78,0x61,0x6d,0x70,0x6c,0x65,0x22,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x73,0x29,0x28,0x22,0x64,0x69,0x76,0x22,0x2c,0x7b,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x6d,0x61,0x72,0x67,0x69,0x6e,0x42,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x22,0x31,0x30,0x70,0x78,0x22,0x7d,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x5b,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x6c,0x61,0x62,0x65,0x6c,0x22,0x2c,0x7b,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x73,0x74,0x72,0x6f,0x6e,0x67,0x22,0x2c,0x7b,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x22,0x49,0x6e,0x70,0x75,0x74,0x20,0x31,0x3a,0x22,0x7d,0x29,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x7b,0x74,0x79,0x70,0x65,0x3a,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x65,0x2c,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x3a,0x65,0x3d,0x3e,0x6e,0x28,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x6d,0x61,0x72,0x67,0x69,0x6e,0x4c,0x65,0x66,0x74,0x3a,0x22,0x31,0x30,0x70,0x78,0x22,0x2c,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x22,0x35,0x70,0x78,0x22,0x2c,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x22,0x31,0x36,0x70,0x78,0x22,0x7d,0x7d,0x29,0x5d,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x73,0x29,0x28,0x22,0x64,0x69,0x76,0x22,0x2c,0x7b,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x6d,0x61,0x72,0x67,0x69,0x6e,0x42,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x22,0x31,0x30,0x70,0x78,0x22,0x7d,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x5b,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x6c,0x61,0x62,0x65,0x6c,0x22,0x2c,0x7b,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x73,0x74,0x72,0x6f,0x6e,0x67,0x22,0x2c,0x7b,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x22,0x49,0x6e,0x70,0x75,0x74,0x20,0x32,0x3a,0x22,0x7d,0x29,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x7b,0x74,0x79,0x70,0x65,0x3a,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x74,0x2c,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x3a,0x65,0x3d,0x3e,0x6c,0x28,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x6d,0x61,0x72,0x67,0x69,0x6e,0x4c,0x65,0x66,0x74,0x3a,0x22,0x31,0x30,0x70,0x78,0x22,0x2c,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x22,0x35,0x70,0x78,0x22,0x2c,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x22,0x31,0x36,0x70,0x78,0x22,0x7d,0x7d,0x29,0x5d,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x2c,0x7b,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x3a,0x28,0x29,0x3d,0x3e,0x7b,0x63,0x6f,0x6e,0x73,0x74,0x20,0x6e,0x3d,0x70,0x61,0x72,0x73,0x65,0x46,0x6c,0x6f,0x61,0x74,0x28,0x65,0x7c,0x7c,0x30,0x29,0x2b,0x70,0x61,0x72,0x73,0x65,0x46,0x6c,0x6f,0x61,0x74,0x28,0x74,0x7c,0x7c,0x30,0x29,0x3b,0x75,0x28,0x6e,0x29,0x7d,0x2c,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x22,0x31,0x30,0x70,0x78,0x20,0x32,0x30,0x70,0x78,0x22,0x2c,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x3a,0x22,0x23,0x34,0x43,0x41,0x46,0x35,0x30,0x22,0x2c,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x2c,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x22,0x31,0x36,0x70,0x78,0x22,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x3a,0x22,0x35,0x70,0x78,0x22,0x2c,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x22,0x2c,0x6d,0x61,0x72,0x67,0x69,0x6e,0x52,0x69,0x67,0x68,0x74,0x3a,0x22,0x31,0x30,0x70,0x78,0x22,0x7d,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x22,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x65,0x20,0x28,0x52,0x65,0x61,0x63,0x74,0x20,0x46,0x72,0x6f,0x6e,0x74,0x65,0x6e,0x64,0x29,0x22,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x2c,0x7b,0x69,0x64,0x3a,0x22,0x45,0x78,0x69,0x74,0x22,0x2c,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x22,0x31,0x30,0x70,0x78,0x20,0x32,0x30,0x70,0x78,0x22,0x2c,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x3a,0x22,0x23,0x66,0x34,0x34,0x33,0x33,0x36,0x22,0x2c,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x2c,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x22,0x31,0x36,0x70,0x78,0x22,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x3a,0x22,0x35,0x70,0x78,0x22,0x2c,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x22,0x7d,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x22,0x45,0x78,0x69,0x74,0x20,0x28,0x57,0x65,0x62,0x55,0x49,0x20,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x29,0x22,0x7d,0x29,0x2c,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x73,0x29,0x28,0x22,0x64,0x69,0x76,0x22,0x2c,0x7b,0x73,0x74,0x79,0x6c,0x65,0x3a,0x7b,0x6d,0x61,0x72,0x67,0x69,0x6e,0x54,0x6f,0x70,0x3a,0x22,0x32,0x30,0x70,0x78,0x22,0x2c,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x22,0x31,0x38,0x70,0x78,0x22,0x7d,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x5b,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x22,0x73,0x74,0x72,0x6f,0x6e,0x67,0x22,0x2c,0x7b,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x22,0x52,0x65,0x73,0x75,0x6c,0x74,0x3a,0x22,0x7d,0x29,0x2c,0x22,0x20,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6f,0x3f,0x6f,0x3a,0x22,0x4e,0x2f,0x41,0x22,0x5d,0x7d,0x29,0x5d,0x7d,0x29,0x7d,0x2c,0x75,0x3d,0x65,0x3d,0x3e,0x7b,0x65,0x26,0x26,0x65,0x20,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x6f,0x66,0x20,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x26,0x26,0x74,0x2e,0x65,0x28,0x34,0x35,0x33,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x74,0x2e,0x62,0x69,0x6e,0x64,0x28,0x74,0x2c,0x34,0x35,0x33,0x29,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x6e,0x3d,0x3e,0x7b,0x6c,0x65,0x74,0x7b,0x67,0x65,0x74,0x43,0x4c,0x53,0x3a,0x74,0x2c,0x67,0x65,0x74,0x46,0x49,0x44,0x3a,0x72,0x2c,0x67,0x65,0x74,0x46,0x43,0x50,0x3a,0x6c,0x2c,0x67,0x65,0x74,0x4c,0x43,0x50,0x3a,0x61,0x2c,0x67,0x65,0x74,0x54,0x54,0x46,0x42,0x3a,0x6f,0x7d,0x3d,0x6e,0x3b,0x74,0x28,0x65,0x29,0x2c,0x72,0x28,0x65,0x29,0x2c,0x6c,0x28,0x65,0x29,0x2c,0x61,0x28,0x65,0x29,0x2c,0x6f,0x28,0x65,0x29,0x7d,0x29,0x29,0x7d,0x3b,0x6c,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x28,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x22,0x72,0x6f,0x6f,0x74,0x22,0x29,0x29,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x28,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x72,0x2e,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x2c,0x7b,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x28,0x30,0x2c,0x61,0x2e,0x6a,0x73,0x78,0x29,0x28,0x6f,0x2c,0x7b,0x7d,0x29,0x7d,0x29,0x29,0x2c,0x75,0x28,0x29,0x7d,0x29,0x28,0x29,0x3b,0x0a,0x2f,0x2f,0x23,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x4d,0x61,0x70,0x70,0x69,0x6e,0x67,0x55,0x52,0x4c,0x3d,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x2e,0x6d,0x61,0x70}; + +static const unsigned char FILE_12[] = {0x2f,0x2a,0x2a,0x0a,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x0a,0x20,0x2a,0x20,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x0a,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x0a,0x20,0x2a,0x2f,0x0a,0x0a,0x2f,0x2a,0x2a,0x0a,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x0a,0x20,0x2a,0x20,0x72,0x65,0x61,0x63,0x74,0x2d,0x6a,0x73,0x78,0x2d,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x0a,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x0a,0x20,0x2a,0x2f,0x0a,0x0a,0x2f,0x2a,0x2a,0x0a,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x0a,0x20,0x2a,0x20,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x0a,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x0a,0x20,0x2a,0x2f,0x0a,0x0a,0x2f,0x2a,0x2a,0x0a,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x0a,0x20,0x2a,0x20,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x0a,0x20,0x2a,0x0a,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x0a,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x0a,0x20,0x2a,0x2f,0x0a}; + +static const unsigned char FILE_13[] = {0x7b,0x22,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x22,0x3a,0x33,0x2c,0x22,0x66,0x69,0x6c,0x65,0x22,0x3a,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x35,0x63,0x37,0x64,0x61,0x33,0x37,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0x73,0x22,0x3a,0x22,0x3b,0x77,0x43,0x41,0x59,0x61,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x53,0x41,0x41,0x53,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x79,0x44,0x41,0x41,0x79,0x44,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x49,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x46,0x2c,0x55,0x41,0x41,0x55,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x67,0x48,0x41,0x41,0x67,0x48,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x4b,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x54,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x53,0x2c,0x45,0x41,0x41,0x47,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x53,0x2c,0x45,0x41,0x41,0x47,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x78,0x62,0x2c,0x53,0x41,0x41,0x53,0x53,0x2c,0x45,0x41,0x41,0x47,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x52,0x4f,0x2c,0x45,0x41,0x41,0x47,0x52,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x49,0x41,0x41,0x49,0x4d,0x2c,0x45,0x41,0x41,0x47,0x4b,0x2c,0x49,0x41,0x41,0x49,0x56,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x35,0x44,0x2c,0x49,0x41,0x41,0x49,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x41,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x65,0x41,0x41,0x65,0x43,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x65,0x41,0x41,0x65,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x38,0x56,0x41,0x41,0x38,0x56,0x43,0x2c,0x45,0x41,0x43,0x70,0x67,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x69,0x4e,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x63,0x41,0x41,0x63,0x4e,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x4e,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x49,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x4b,0x2c,0x61,0x41,0x41,0x61,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x4f,0x2c,0x59,0x41,0x41,0x59,0x54,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x51,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x54,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x70,0x62,0x2c,0x75,0x49,0x41,0x41,0x75,0x49,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x65,0x41,0x41,0x65,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x61,0x41,0x41,0x61,0x2c,0x53,0x41,0x41,0x53,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x43,0x31,0x65,0x2c,0x43,0x41,0x41,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x44,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x38,0x4f,0x41,0x41,0x38,0x4f,0x73,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x43,0x78,0x62,0x2c,0x43,0x41,0x41,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x57,0x41,0x41,0x57,0x2c,0x51,0x41,0x41,0x51,0x2c,0x59,0x41,0x41,0x59,0x44,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x59,0x41,0x41,0x59,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x31,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x32,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x49,0x78,0x5a,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x35,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x59,0x2c,0x45,0x41,0x41,0x45,0x6c,0x42,0x2c,0x65,0x41,0x41,0x65,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x56,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x50,0x39,0x49,0x2c,0x53,0x41,0x41,0x59,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x41,0x2c,0x47,0x41,0x44,0x71,0x45,0x2c,0x53,0x41,0x41,0x59,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x63,0x41,0x41,0x63,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x47,0x75,0x42,0x2c,0x49,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x67,0x42,0x41,0x41,0x6d,0x44,0x2c,0x57,0x41,0x41,0x6e,0x43,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x63,0x41,0x41,0x63,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x73,0x42,0x2c,0x55,0x41,0x41,0x55,0x37,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x2f,0x54,0x38,0x43,0x2c,0x43,0x41,0x41,0x47,0x39,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x4f,0x74,0x45,0x2b,0x43,0x2c,0x43,0x41,0x41,0x47,0x2f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x52,0x78,0x4b,0x2c,0x53,0x41,0x41,0x59,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x47,0x67,0x42,0x2c,0x45,0x41,0x41,0x47,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x42,0x2c,0x45,0x41,0x41,0x47,0x74,0x42,0x2c,0x4b,0x41,0x41,0x65,0x67,0x42,0x2c,0x45,0x41,0x41,0x47,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x42,0x2c,0x45,0x41,0x41,0x47,0x72,0x42,0x2c,0x4b,0x41,0x41,0x65,0x6f,0x42,0x2c,0x45,0x41,0x41,0x47,0x38,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x44,0x2c,0x47,0x41,0x41,0x55,0x73,0x42,0x2c,0x45,0x41,0x41,0x47,0x74,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x71,0x42,0x2c,0x45,0x41,0x41,0x47,0x72,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x51,0x77,0x44,0x6d,0x44,0x2c,0x43,0x41,0x41,0x47,0x6c,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6e,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x44,0x2c,0x61,0x41,0x41,0x61,0x70,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x4f,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x63,0x41,0x41,0x63,0x4e,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6e,0x44,0x2c,0x49,0x41,0x41,0x61,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x58,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x4f,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x54,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x44,0x2c,0x65,0x41,0x41,0x65,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x71,0x44,0x2c,0x61,0x41,0x41,0x61,0x70,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x43,0x41,0x48,0x6a,0x64,0x2c,0x30,0x6a,0x43,0x41,0x41,0x30,0x6a,0x43,0x6f,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x44,0x2c,0x51,0x41,0x41,0x51,0x64,0x2c,0x45,0x41,0x43,0x7a,0x6d,0x43,0x43,0x2c,0x47,0x41,0x41,0x49,0x4c,0x2c,0x45,0x41,0x41,0x45,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x32,0x45,0x41,0x41,0x32,0x45,0x73,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x44,0x2c,0x51,0x41,0x41,0x51,0x64,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x49,0x4c,0x2c,0x45,0x41,0x41,0x45,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x67,0x43,0x41,0x41,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x57,0x41,0x41,0x57,0x2c,0x61,0x41,0x41,0x61,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x44,0x2c,0x51,0x41,0x41,0x51,0x64,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x49,0x4c,0x2c,0x45,0x41,0x41,0x45,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x77,0x43,0x41,0x41,0x75,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x65,0x41,0x41,0x65,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x43,0x6c,0x64,0x48,0x2c,0x45,0x41,0x41,0x45,0x6d,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x2c,0x67,0x43,0x41,0x41,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x2c,0x63,0x41,0x41,0x63,0x67,0x42,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x45,0x35,0x4c,0x2c,0x49,0x41,0x41,0x49,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x37,0x44,0x2c,0x45,0x41,0x41,0x47,0x38,0x44,0x2c,0x6d,0x44,0x41,0x41,0x6d,0x44,0x43,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x43,0x2c,0x45,0x41,0x41,0x47,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x45,0x2c,0x45,0x41,0x41,0x47,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x47,0x2c,0x45,0x41,0x41,0x47,0x4a,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x49,0x2c,0x45,0x41,0x41,0x47,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4b,0x2c,0x45,0x41,0x41,0x47,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4d,0x2c,0x45,0x41,0x41,0x47,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x4f,0x2c,0x45,0x41,0x41,0x47,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x51,0x2c,0x45,0x41,0x41,0x47,0x54,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x53,0x2c,0x45,0x41,0x41,0x47,0x56,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x55,0x2c,0x45,0x41,0x41,0x47,0x58,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x57,0x2c,0x45,0x41,0x41,0x47,0x5a,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x65,0x41,0x41,0x65,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x30,0x42,0x41,0x43,0x6a,0x65,0x2c,0x49,0x41,0x41,0x49,0x59,0x2c,0x45,0x41,0x41,0x47,0x62,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x65,0x41,0x41,0x65,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x61,0x2c,0x45,0x41,0x41,0x47,0x64,0x2c,0x4f,0x41,0x41,0x4f,0x65,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x35,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x77,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6e,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x45,0x2c,0x47,0x41,0x41,0x49,0x31,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x45,0x2c,0x49,0x41,0x41,0x4b,0x31,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x65,0x41,0x41,0x30,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x6f,0x42,0x36,0x45,0x2c,0x45,0x41,0x41,0x68,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x44,0x2c,0x4f,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x68,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x36,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x49,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x50,0x2c,0x45,0x41,0x41,0x47,0x35,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x45,0x2c,0x45,0x41,0x41,0x47,0x37,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x71,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x7a,0x62,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x74,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x71,0x46,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4e,0x2c,0x4d,0x41,0x41,0x4d,0x4d,0x2c,0x75,0x42,0x41,0x41,0x6b,0x42,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x74,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x68,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x45,0x2c,0x65,0x41,0x41,0x65,0x76,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x75,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x52,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x53,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x55,0x41,0x41,0x55,0x31,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x46,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x55,0x41,0x41,0x55,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x44,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x57,0x2c,0x47,0x41,0x41,0x47,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x35,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x34,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x70,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x56,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x7a,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x56,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x43,0x6e,0x66,0x5a,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x58,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x72,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x79,0x46,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6b,0x45,0x2c,0x47,0x41,0x41,0x47,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x45,0x2c,0x49,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4a,0x6b,0x45,0x2c,0x47,0x41,0x41,0x53,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x51,0x41,0x41,0x36,0x46,0x2c,0x4f,0x41,0x41,0x72,0x46,0x76,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x61,0x41,0x41,0x61,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x53,0x41,0x41,0x53,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x63,0x41,0x41,0x63,0x76,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x63,0x41,0x41,0x71,0x42,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x4a,0x2c,0x4d,0x41,0x41,0x4d,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x72,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x61,0x41,0x41,0x61,0x2f,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6a,0x42,0x2c,0x45,0x41,0x41,0x47,0x68,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x39,0x5a,0x2c,0x53,0x41,0x41,0x53,0x6b,0x47,0x2c,0x45,0x41,0x41,0x47,0x6c,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x42,0x2c,0x45,0x41,0x41,0x47,0x68,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x46,0x2c,0x45,0x41,0x41,0x47,0x74,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x46,0x2c,0x45,0x41,0x41,0x47,0x74,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x45,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x47,0x2c,0x45,0x41,0x41,0x45,0x73,0x46,0x2c,0x45,0x41,0x41,0x47,0x74,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x78,0x52,0x2c,0x53,0x41,0x41,0x53,0x6d,0x45,0x2c,0x45,0x41,0x41,0x47,0x72,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x61,0x41,0x41,0x61,0x2f,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x4b,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x65,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x61,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x47,0x2c,0x53,0x41,0x41,0x53,0x52,0x2c,0x61,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x47,0x2c,0x4f,0x41,0x43,0x37,0x5a,0x2c,0x4f,0x41,0x44,0x6f,0x61,0x70,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x65,0x41,0x43,0x6e,0x64,0x2f,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x44,0x69,0x65,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x61,0x41,0x43,0x6c,0x66,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x59,0x2c,0x63,0x41,0x41,0x63,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x71,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x36,0x42,0x2c,0x51,0x41,0x41,0x74,0x42,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x63,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x47,0x2c,0x45,0x41,0x41,0x47,0x72,0x47,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x43,0x2c,0x45,0x41,0x41,0x47,0x76,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x47,0x2c,0x53,0x41,0x41,0x53,0x78,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x45,0x41,0x41,0x47,0x72,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x33,0x4d,0x2c,0x53,0x41,0x41,0x53,0x77,0x47,0x2c,0x45,0x41,0x41,0x47,0x31,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x61,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x53,0x41,0x41,0x53,0x52,0x2c,0x61,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x6b,0x42,0x2f,0x46,0x2c,0x47,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x51,0x41,0x41,0x57,0x4c,0x2c,0x61,0x41,0x41,0x61,0x2f,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x68,0x47,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x47,0x2c,0x45,0x41,0x41,0x47,0x70,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x49,0x41,0x41,0x49,0x2b,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x59,0x41,0x43,0x74,0x66,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x61,0x41,0x41,0x61,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x68,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x47,0x2c,0x45,0x41,0x41,0x47,0x33,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x71,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x72,0x61,0x2c,0x53,0x41,0x41,0x53,0x34,0x47,0x2c,0x45,0x41,0x41,0x47,0x35,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x55,0x41,0x41,0x55,0x37,0x47,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x61,0x41,0x41,0x61,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x45,0x74,0x46,0x2c,0x53,0x41,0x41,0x53,0x36,0x47,0x2c,0x45,0x41,0x41,0x47,0x39,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2f,0x47,0x2c,0x45,0x41,0x41,0x45,0x2b,0x47,0x2c,0x63,0x41,0x44,0x76,0x44,0x2c,0x53,0x41,0x41,0x59,0x2f,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x47,0x2c,0x45,0x41,0x41,0x47,0x35,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x51,0x41,0x41,0x51,0x45,0x2c,0x45,0x41,0x41,0x45,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x46,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x68,0x48,0x2c,0x45,0x41,0x41,0x45,0x69,0x48,0x2c,0x59,0x41,0x41,0x59,0x2f,0x46,0x2c,0x55,0x41,0x41,0x55,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x42,0x2c,0x65,0x41,0x41,0x65,0x6c,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x48,0x2c,0x45,0x41,0x41,0x45,0x75,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x68,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x48,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x46,0x2c,0x49,0x41,0x41,0x69,0x4c,0x2c,0x4f,0x41,0x41,0x37,0x4b,0x78,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x45,0x2c,0x65,0x41,0x41,0x65,0x78,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6b,0x48,0x2c,0x63,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x36,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x7a,0x46,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x45,0x2c,0x65,0x41,0x41,0x65,0x78,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x48,0x2c,0x57,0x41,0x41,0x57,0x6c,0x48,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x61,0x41,0x41,0x6d,0x42,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x74,0x48,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x48,0x2c,0x61,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x76,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x47,0x2c,0x63,0x41,0x43,0x78,0x66,0x2c,0x59,0x41,0x41,0x59,0x2f,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x6b,0x44,0x75,0x48,0x2c,0x43,0x41,0x41,0x47,0x78,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x48,0x2c,0x45,0x41,0x41,0x47,0x7a,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x47,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x39,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x48,0x2c,0x57,0x41,0x41,0x65,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x71,0x44,0x2c,0x4f,0x41,0x41,0x6c,0x44,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x46,0x2c,0x45,0x41,0x41,0x47,0x35,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x31,0x48,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x51,0x41,0x41,0x4f,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x61,0x74,0x42,0x2c,0x49,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x48,0x2c,0x53,0x41,0x41,0x53,0x74,0x48,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x48,0x2c,0x45,0x41,0x41,0x47,0x35,0x48,0x2c,0x47,0x41,0x41,0x77,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x71,0x42,0x41,0x41,0x78,0x44,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x63,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x63,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x6b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x64,0x2c,0x45,0x41,0x41,0x45,0x36,0x48,0x2c,0x65,0x41,0x41,0x65,0x37,0x48,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x70,0x61,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2b,0x48,0x2c,0x6f,0x42,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x4f,0x43,0x2c,0x6b,0x42,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x4f,0x4e,0x2c,0x57,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x4f,0x44,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x48,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x47,0x70,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x61,0x41,0x41,0x61,0x7a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x51,0x41,0x41,0x51,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x51,0x41,0x41,0x51,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x48,0x2c,0x65,0x41,0x41,0x65,0x39,0x48,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x48,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x65,0x41,0x41,0x65,0x33,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x47,0x2c,0x61,0x41,0x41,0x61,0x6e,0x49,0x2c,0x45,0x41,0x41,0x45,0x6f,0x49,0x2c,0x57,0x41,0x41,0x57,0x2c,0x61,0x41,0x41,0x61,0x72,0x49,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x55,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x59,0x2c,0x45,0x41,0x41,0x47,0x76,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x5a,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x55,0x41,0x41,0x69,0x42,0x39,0x45,0x2c,0x45,0x41,0x41,0x47,0x35,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x39,0x64,0x2c,0x53,0x41,0x41,0x53,0x75,0x49,0x2c,0x45,0x41,0x41,0x47,0x78,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x49,0x2c,0x45,0x41,0x41,0x47,0x76,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x45,0x41,0x41,0x47,0x31,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x43,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x73,0x42,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x48,0x2c,0x4b,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x7a,0x48,0x2c,0x47,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x7a,0x48,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x7a,0x48,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x38,0x42,0x2c,0x59,0x41,0x41,0x33,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x53,0x41,0x41,0x67,0x42,0x6e,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x53,0x41,0x41,0x53,0x73,0x48,0x2c,0x47,0x41,0x41,0x47,0x7a,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x73,0x48,0x2c,0x47,0x41,0x41,0x47,0x7a,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x45,0x2c,0x45,0x41,0x41,0x47,0x31,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x48,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x48,0x2c,0x65,0x41,0x41,0x65,0x2c,0x43,0x41,0x43,0x6c,0x61,0x2c,0x53,0x41,0x41,0x53,0x55,0x2c,0x45,0x41,0x41,0x47,0x31,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x55,0x41,0x41,0x55,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x4b,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x48,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x47,0x2c,0x61,0x41,0x41,0x61,0x6e,0x49,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x51,0x41,0x41,0x51,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x48,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x61,0x41,0x41,0x61,0x68,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x54,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x51,0x41,0x41,0x63,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x49,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x7a,0x56,0x2c,0x53,0x41,0x41,0x53,0x75,0x49,0x2c,0x47,0x41,0x41,0x47,0x7a,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x44,0x2c,0x47,0x41,0x41,0x47,0x32,0x48,0x2c,0x45,0x41,0x41,0x47,0x35,0x48,0x2c,0x45,0x41,0x41,0x45,0x32,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x33,0x49,0x2c,0x49,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x6a,0x49,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x47,0x2c,0x61,0x41,0x41,0x61,0x72,0x49,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x65,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x47,0x2f,0x48,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2f,0x48,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x49,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x51,0x41,0x43,0x37,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x5a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x4a,0x2c,0x51,0x41,0x41,0x57,0x2f,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x49,0x41,0x41,0x49,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2b,0x49,0x2c,0x57,0x41,0x41,0x57,0x78,0x48,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2b,0x49,0x2c,0x53,0x41,0x41,0x53,0x78,0x48,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x67,0x4a,0x2c,0x69,0x42,0x41,0x41,0x67,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x6c,0x42,0x68,0x4a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x47,0x2c,0x45,0x41,0x41,0x47,0x7a,0x47,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x53,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x47,0x2c,0x51,0x41,0x41,0x51,0x7a,0x48,0x2c,0x45,0x41,0x41,0x69,0x44,0x2c,0x4f,0x41,0x41,0x39,0x43,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x48,0x2c,0x55,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x47,0x7a,0x48,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x48,0x2c,0x69,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x4a,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x48,0x2c,0x57,0x41,0x41,0x57,0x6c,0x4a,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x4a,0x2c,0x55,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x78,0x59,0x2c,0x53,0x41,0x41,0x53,0x47,0x2c,0x47,0x41,0x41,0x47,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x30,0x48,0x2c,0x57,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x4f,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x4f,0x71,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x47,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x4a,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x2b,0x42,0x2c,0x47,0x41,0x41,0x39,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x4a,0x2c,0x53,0x41,0x41,0x53,0x72,0x4a,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x61,0x41,0x41,0x67,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x36,0x49,0x2c,0x47,0x41,0x41,0x47,0x31,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x47,0x2c,0x61,0x41,0x41,0x61,0x31,0x42,0x2c,0x45,0x41,0x41,0x47,0x7a,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x6e,0x59,0x2c,0x53,0x41,0x41,0x53,0x73,0x4a,0x2c,0x47,0x41,0x41,0x47,0x78,0x4a,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x45,0x41,0x41,0x47,0x31,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x46,0x2c,0x45,0x41,0x41,0x47,0x31,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x48,0x2c,0x4b,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x4b,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x51,0x41,0x41,0x51,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x49,0x2c,0x63,0x41,0x41,0x63,0x6a,0x49,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x65,0x41,0x41,0x65,0x2f,0x48,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x61,0x41,0x41,0x61,0x2f,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x7a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x49,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x4a,0x2c,0x59,0x41,0x41,0x59,0x7a,0x4a,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x47,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x4a,0x2c,0x47,0x41,0x41,0x47,0x33,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x36,0x42,0x41,0x41,0x36,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x71,0x43,0x41,0x41,0x71,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x2c,0x43,0x41,0x43,0x37,0x63,0x2c,0x53,0x41,0x41,0x53,0x34,0x4a,0x2c,0x47,0x41,0x41,0x47,0x35,0x4a,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x69,0x43,0x41,0x41,0x69,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x4a,0x2c,0x47,0x41,0x41,0x47,0x31,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x68,0x4b,0x2c,0x49,0x41,0x41,0x49,0x36,0x4a,0x2c,0x47,0x41,0x41,0x65,0x37,0x4a,0x2c,0x47,0x41,0x41,0x5a,0x38,0x4a,0x2c,0x49,0x41,0x41,0x59,0x39,0x4a,0x2c,0x47,0x41,0x41,0x73,0x4a,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x4a,0x2c,0x63,0x41,0x41,0x63,0x2c,0x63,0x41,0x41,0x63,0x2f,0x4a,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2f,0x4a,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x32,0x46,0x2c,0x4b,0x41,0x41,0x31,0x46,0x34,0x4a,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x2f,0x49,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x55,0x69,0x4a,0x2c,0x55,0x41,0x41,0x55,0x2c,0x51,0x41,0x41,0x51,0x2f,0x4a,0x2c,0x45,0x41,0x41,0x45,0x67,0x4b,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x61,0x6a,0x4b,0x2c,0x45,0x41,0x41,0x45,0x34,0x4a,0x2c,0x47,0x41,0x41,0x47,0x4d,0x2c,0x57,0x41,0x41,0x57,0x6e,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x59,0x41,0x41,0x59,0x6e,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4b,0x2c,0x59,0x41,0x41,0x59,0x70,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6b,0x4b,0x2c,0x59,0x41,0x41,0x59,0x6e,0x4b,0x2c,0x45,0x41,0x41,0x45,0x71,0x4b,0x2c,0x59,0x41,0x41,0x59,0x70,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6b,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x76,0x62,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x4b,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x36,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x79,0x42,0x41,0x41,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x4b,0x2c,0x47,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x49,0x41,0x43,0x74,0x4b,0x2c,0x53,0x41,0x41,0x53,0x77,0x4b,0x2c,0x47,0x41,0x41,0x47,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x6a,0x4b,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x76,0x4b,0x2c,0x45,0x41,0x41,0x45,0x77,0x4b,0x2c,0x53,0x41,0x41,0x77,0x42,0x2c,0x59,0x41,0x41,0x64,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x55,0x41,0x41,0x55,0x31,0x4b,0x2c,0x45,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x4a,0x2c,0x59,0x41,0x41,0x59,0x7a,0x4a,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x74,0x48,0x2c,0x49,0x41,0x41,0x49,0x32,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x79,0x42,0x41,0x41,0x77,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x61,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x6d,0x42,0x41,0x41,0x6b,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x63,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x69,0x42,0x41,0x41,0x67,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x61,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x55,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x63,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x59,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x63,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x57,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x55,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x59,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x61,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x63,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x59,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x65,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x67,0x42,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x69,0x42,0x41,0x41,0x67,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x59,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x57,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x59,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x43,0x6c,0x66,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x61,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x63,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x61,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x69,0x42,0x41,0x41,0x67,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x65,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x61,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x36,0x48,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4e,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x32,0x4b,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4a,0x2c,0x65,0x41,0x41,0x65,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x34,0x4b,0x2c,0x47,0x41,0x41,0x47,0x35,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x7a,0x62,0x2c,0x53,0x41,0x41,0x53,0x79,0x4e,0x2c,0x47,0x41,0x41,0x47,0x31,0x4e,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x4b,0x41,0x41,0x6c,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x4e,0x2c,0x4d,0x41,0x41,0x6d,0x42,0x31,0x4e,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x4e,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x4d,0x2c,0x45,0x41,0x41,0x45,0x67,0x4d,0x2c,0x47,0x41,0x41,0x47,0x76,0x4e,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x59,0x41,0x41,0x59,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x4e,0x2c,0x59,0x41,0x41,0x59,0x33,0x4e,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x44,0x59,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x44,0x2c,0x49,0x41,0x41,0x49,0x72,0x49,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x77,0x4e,0x2c,0x47,0x41,0x41,0x47,0x6a,0x4c,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x74,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x70,0x4c,0x2c,0x63,0x41,0x41,0x63,0x33,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x70,0x44,0x2c,0x47,0x41,0x41,0x47,0x33,0x4b,0x2c,0x47,0x41,0x41,0x47,0x32,0x4b,0x2c,0x47,0x41,0x41,0x47,0x35,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x43,0x68,0x49,0x2c,0x49,0x41,0x41,0x49,0x69,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6e,0x4a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6f,0x4a,0x2c,0x55,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x43,0x6c,0x54,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x67,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6a,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x4a,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x71,0x4a,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x2c,0x57,0x41,0x41,0x57,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x31,0x4e,0x2c,0x45,0x41,0x41,0x45,0x30,0x4e,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6c,0x57,0x2c,0x53,0x41,0x41,0x53,0x6f,0x50,0x2c,0x47,0x41,0x41,0x47,0x6e,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x4e,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x33,0x4e,0x2c,0x45,0x41,0x41,0x45,0x6d,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x71,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x50,0x2c,0x47,0x41,0x41,0x36,0x46,0x2c,0x4f,0x41,0x41,0x31,0x46,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x50,0x2c,0x51,0x41,0x41,0x51,0x76,0x50,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x59,0x41,0x41,0x59,0x33,0x4f,0x2c,0x51,0x41,0x41,0x53,0x34,0x4f,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x7a,0x50,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x50,0x2c,0x79,0x42,0x41,0x41,0x67,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x50,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x57,0x41,0x41,0x57,0x31,0x50,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x32,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x43,0x70,0x63,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x47,0x41,0x41,0x47,0x2f,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x32,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x47,0x41,0x41,0x47,0x68,0x51,0x2c,0x47,0x41,0x41,0x47,0x30,0x50,0x2c,0x47,0x41,0x41,0x47,0x33,0x50,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x51,0x2c,0x47,0x41,0x41,0x47,0x6c,0x51,0x2c,0x47,0x41,0x41,0x47,0x34,0x50,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x47,0x41,0x41,0x47,0x36,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x37,0x50,0x2c,0x47,0x41,0x41,0x47,0x34,0x50,0x2c,0x47,0x41,0x41,0x47,0x35,0x50,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x35,0x50,0x2c,0x45,0x41,0x41,0x45,0x34,0x50,0x2c,0x47,0x41,0x41,0x47,0x33,0x50,0x2c,0x45,0x41,0x41,0x45,0x34,0x50,0x2c,0x47,0x41,0x41,0x6f,0x42,0x2c,0x47,0x41,0x41,0x6a,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x39,0x50,0x2c,0x47,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x49,0x41,0x41,0x49,0x38,0x50,0x2c,0x47,0x41,0x41,0x47,0x37,0x50,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x71,0x51,0x2c,0x47,0x41,0x41,0x47,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x71,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x71,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x51,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x47,0x41,0x41,0x47,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x57,0x71,0x51,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x58,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x4d,0x41,0x41,0x47,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x68,0x62,0x2c,0x53,0x41,0x41,0x53,0x4b,0x2c,0x47,0x41,0x41,0x47,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2f,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x59,0x41,0x41,0x71,0x42,0x33,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x59,0x41,0x41,0x62,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4f,0x41,0x41,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x43,0x6c,0x65,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x51,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x39,0x50,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2b,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x45,0x2c,0x65,0x41,0x41,0x65,0x6d,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x7a,0x4a,0x2c,0x49,0x41,0x41,0x49,0x2c,0x57,0x41,0x41,0x57,0x77,0x4a,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x37,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x50,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x39,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x51,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x51,0x2c,0x49,0x41,0x41,0x47,0x30,0x51,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x49,0x2c,0x47,0x41,0x41,0x47,0x39,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x48,0x2c,0x55,0x41,0x41,0x55,0x32,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6f,0x4c,0x2c,0x47,0x41,0x41,0x47,0x70,0x50,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x50,0x2c,0x51,0x41,0x41,0x51,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x4c,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x6a,0x52,0x2c,0x47,0x41,0x41,0x47,0x6b,0x52,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x75,0x52,0x2c,0x47,0x41,0x41,0x47,0x76,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6f,0x4c,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x4c,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6e,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x43,0x6a,0x57,0x2c,0x53,0x41,0x41,0x53,0x71,0x52,0x2c,0x47,0x41,0x41,0x47,0x78,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x51,0x41,0x41,0x51,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x6a,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x53,0x32,0x52,0x2c,0x53,0x41,0x41,0x63,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x51,0x41,0x41,0x51,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x61,0x41,0x41,0x61,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x52,0x2c,0x47,0x41,0x41,0x47,0x35,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x73,0x45,0x2c,0x47,0x41,0x41,0x78,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x52,0x2c,0x49,0x41,0x41,0x6b,0x42,0x2c,0x51,0x41,0x41,0x64,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x61,0x41,0x41,0x71,0x42,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x6d,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x77,0x52,0x2c,0x47,0x41,0x41,0x47,0x78,0x52,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x45,0x31,0x53,0x2c,0x53,0x41,0x41,0x53,0x69,0x53,0x2c,0x47,0x41,0x41,0x47,0x68,0x53,0x2c,0x47,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x66,0x41,0x2c,0x45,0x41,0x44,0x74,0x4e,0x2c,0x53,0x41,0x41,0x59,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x52,0x2c,0x47,0x41,0x41,0x47,0x78,0x52,0x2c,0x49,0x41,0x41,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x64,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x51,0x41,0x41,0x6d,0x42,0x2c,0x43,0x41,0x41,0x43,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x51,0x41,0x41,0x51,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x52,0x2c,0x47,0x41,0x41,0x47,0x74,0x51,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x51,0x2c,0x47,0x41,0x41,0x47,0x74,0x51,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x4e,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x53,0x41,0x41,0x53,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x6d,0x45,0x2c,0x49,0x41,0x41,0x49,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x47,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x48,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x43,0x35,0x66,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x6f,0x45,0x2c,0x49,0x41,0x41,0x49,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x47,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x48,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x45,0x41,0x41,0x45,0x75,0x52,0x2c,0x59,0x41,0x41,0x59,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x47,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x43,0x2c,0x55,0x41,0x41,0x55,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x6b,0x42,0x6d,0x53,0x2c,0x43,0x41,0x41,0x47,0x70,0x53,0x2c,0x49,0x41,0x41,0x6d,0x42,0x71,0x53,0x2c,0x47,0x41,0x41,0x47,0x72,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x71,0x53,0x2c,0x47,0x41,0x41,0x47,0x72,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x53,0x2c,0x47,0x41,0x41,0x47,0x72,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x31,0x58,0x2c,0x49,0x41,0x41,0x49,0x49,0x2c,0x47,0x41,0x41,0x47,0x78,0x53,0x2c,0x45,0x41,0x41,0x47,0x79,0x53,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x53,0x2c,0x45,0x41,0x41,0x47,0x32,0x53,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x53,0x2c,0x45,0x41,0x41,0x47,0x36,0x53,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x53,0x2c,0x45,0x41,0x41,0x47,0x2b,0x53,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x43,0x2c,0x47,0x41,0x41,0x45,0x68,0x54,0x2c,0x45,0x41,0x41,0x47,0x69,0x54,0x2c,0x61,0x41,0x41,0x61,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x54,0x2c,0x45,0x41,0x41,0x47,0x6d,0x54,0x2c,0x69,0x43,0x41,0x41,0x69,0x43,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x54,0x2c,0x45,0x41,0x41,0x47,0x71,0x54,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x54,0x2c,0x45,0x41,0x41,0x47,0x75,0x54,0x2c,0x38,0x42,0x41,0x41,0x38,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x54,0x2c,0x45,0x41,0x41,0x47,0x79,0x54,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x54,0x2c,0x45,0x41,0x41,0x47,0x32,0x54,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x54,0x2c,0x45,0x41,0x41,0x47,0x36,0x54,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x43,0x76,0x56,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4d,0x41,0x41,0x69,0x43,0x2c,0x53,0x41,0x41,0x59,0x68,0x55,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x50,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x69,0x55,0x2c,0x47,0x41,0x41,0x47,0x6a,0x55,0x2c,0x47,0x41,0x41,0x47,0x6b,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x2f,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x49,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x4b,0x2c,0x49,0x41,0x41,0x34,0x44,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x43,0x37,0x48,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x51,0x41,0x41,0x46,0x41,0x2c,0x45,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x55,0x41,0x41,0x46,0x41,0x2c,0x45,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x57,0x41,0x43,0x7a,0x67,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x55,0x2c,0x47,0x41,0x41,0x47,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x76,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x65,0x41,0x41,0x65,0x68,0x54,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x55,0x2c,0x59,0x41,0x41,0x59,0x68,0x54,0x2c,0x45,0x41,0x41,0x49,0x2c,0x55,0x41,0x41,0x46,0x7a,0x42,0x2c,0x45,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x53,0x2c,0x47,0x41,0x41,0x47,0x31,0x4f,0x2c,0x47,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4c,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x55,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x53,0x2c,0x47,0x41,0x41,0x47,0x37,0x53,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x50,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x47,0x41,0x41,0x51,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x53,0x2c,0x47,0x41,0x41,0x47,0x35,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x53,0x2c,0x47,0x41,0x41,0x47,0x37,0x53,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x4b,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x46,0x43,0x2c,0x49,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x30,0x43,0x2c,0x47,0x41,0x41,0x78,0x43,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x46,0x74,0x42,0x2c,0x47,0x41,0x41,0x34,0x42,0x2c,0x4b,0x41,0x41,0x74,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x55,0x2c,0x67,0x42,0x41,0x41,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x35,0x55,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x55,0x2c,0x63,0x41,0x41,0x63,0x35,0x55,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x63,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x62,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x34,0x54,0x2c,0x47,0x41,0x41,0x47,0x37,0x54,0x2c,0x49,0x41,0x41,0x55,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x76,0x63,0x2c,0x53,0x41,0x41,0x53,0x73,0x54,0x2c,0x47,0x41,0x41,0x47,0x39,0x55,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x75,0x4a,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x72,0x4e,0x2c,0x53,0x41,0x41,0x53,0x38,0x55,0x2c,0x47,0x41,0x41,0x47,0x2f,0x55,0x2c,0x47,0x41,0x41,0x67,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x70,0x43,0x41,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x57,0x41,0x41,0x68,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x63,0x41,0x41,0x73,0x43,0x7a,0x55,0x2c,0x45,0x41,0x41,0x49,0x2c,0x57,0x41,0x41,0x46,0x41,0x2c,0x45,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x56,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x68,0x56,0x2c,0x45,0x41,0x41,0x45,0x71,0x55,0x2c,0x47,0x41,0x41,0x6f,0x43,0x2c,0x4f,0x41,0x41,0x31,0x42,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x66,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x71,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x57,0x72,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x56,0x2c,0x47,0x41,0x41,0x47,0x6a,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x33,0x61,0x2c,0x53,0x41,0x41,0x53,0x69,0x56,0x2c,0x47,0x41,0x41,0x47,0x6c,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x63,0x41,0x41,0x63,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x59,0x41,0x41,0x59,0x41,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x65,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x45,0x31,0x55,0x2c,0x45,0x41,0x41,0x45,0x32,0x55,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x47,0x33,0x55,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x59,0x41,0x41,0x57,0x6c,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x36,0x54,0x2c,0x47,0x41,0x41,0x47,0x37,0x54,0x2c,0x49,0x41,0x41,0x51,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x7a,0x48,0x2c,0x53,0x41,0x41,0x53,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x70,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x55,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x33,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x55,0x2c,0x63,0x41,0x41,0x63,0x33,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x35,0x54,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x34,0x54,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x56,0x2c,0x47,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x62,0x41,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x55,0x41,0x41,0x46,0x41,0x2c,0x47,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x56,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x36,0x50,0x41,0x41,0x36,0x50,0x2f,0x54,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x43,0x68,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x67,0x55,0x2c,0x47,0x41,0x41,0x47,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x38,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x43,0x2c,0x47,0x41,0x41,0x47,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x75,0x57,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x4c,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x75,0x57,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x43,0x6e,0x54,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x57,0x2c,0x63,0x41,0x41,0x63,0x68,0x56,0x2c,0x47,0x41,0x41,0x53,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x31,0x57,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x61,0x41,0x41,0x61,0x31,0x57,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x59,0x41,0x41,0x59,0x68,0x56,0x2c,0x45,0x41,0x41,0x45,0x6f,0x56,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x41,0x43,0x72,0x56,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x49,0x41,0x41,0x59,0x2c,0x51,0x41,0x41,0x52,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x47,0x41,0x41,0x47,0x39,0x50,0x2c,0x4b,0x41,0x41,0x61,0x75,0x56,0x2c,0x47,0x41,0x41,0x47,0x76,0x56,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x49,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x57,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x57,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x56,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x4e,0x2c,0x51,0x41,0x41,0x51,0x6e,0x4d,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x4f,0x2c,0x47,0x41,0x41,0x55,0x7a,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x45,0x70,0x52,0x2c,0x53,0x41,0x41,0x53,0x2b,0x57,0x2c,0x47,0x41,0x41,0x47,0x2f,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x57,0x2c,0x47,0x41,0x41,0x47,0x68,0x58,0x2c,0x45,0x41,0x41,0x45,0x75,0x50,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x52,0x2c,0x47,0x41,0x41,0x47,0x76,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4d,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x57,0x2c,0x51,0x41,0x41,0x52,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x47,0x41,0x41,0x47,0x31,0x52,0x2c,0x49,0x41,0x41,0x34,0x44,0x2c,0x4f,0x41,0x41,0x2f,0x43,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x31,0x57,0x2c,0x4f,0x41,0x41,0x45,0x30,0x56,0x2c,0x47,0x41,0x41,0x47,0x33,0x56,0x2c,0x45,0x41,0x41,0x45,0x69,0x58,0x2c,0x55,0x41,0x41,0x53,0x2c,0x57,0x41,0x41,0x57,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x43,0x2c,0x51,0x41,0x41,0x51,0x4e,0x2c,0x63,0x41,0x41,0x63,0x71,0x46,0x2c,0x61,0x41,0x41,0x6d,0x45,0x2c,0x59,0x41,0x41,0x72,0x44,0x6c,0x58,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x7a,0x57,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x6e,0x58,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x6c,0x54,0x2c,0x53,0x41,0x41,0x53,0x53,0x2c,0x47,0x41,0x41,0x47,0x70,0x58,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x31,0x57,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x57,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x57,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x58,0x2c,0x47,0x41,0x41,0x47,0x72,0x58,0x2c,0x45,0x41,0x41,0x45,0x34,0x57,0x2c,0x61,0x41,0x41,0x61,0x35,0x57,0x2c,0x45,0x41,0x41,0x45,0x36,0x57,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x35,0x57,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x57,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x57,0x2c,0x45,0x41,0x41,0x69,0x47,0x2c,0x4f,0x41,0x41,0x65,0x2c,0x51,0x41,0x41,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x47,0x41,0x41,0x47,0x37,0x50,0x2c,0x4b,0x41,0x41,0x61,0x73,0x56,0x2c,0x47,0x41,0x41,0x47,0x76,0x56,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x7a,0x57,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x33,0x48,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x74,0x42,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x57,0x2c,0x61,0x41,0x41,0x77,0x42,0x7a,0x50,0x2c,0x59,0x41,0x41,0x59,0x2f,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x6d,0x50,0x2c,0x47,0x41,0x41,0x47,0x37,0x4e,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x48,0x2c,0x63,0x41,0x41,0x63,0x39,0x56,0x2c,0x47,0x41,0x41,0x47,0x36,0x4e,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x30,0x44,0x70,0x50,0x2c,0x45,0x41,0x41,0x45,0x73,0x58,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x58,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x58,0x2c,0x47,0x41,0x41,0x47,0x70,0x58,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x58,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x54,0x2c,0x51,0x41,0x41,0x51,0x69,0x56,0x2c,0x49,0x41,0x41,0x49,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x54,0x2c,0x51,0x41,0x41,0x51,0x69,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x6e,0x66,0x2c,0x53,0x41,0x41,0x53,0x45,0x2c,0x47,0x41,0x41,0x47,0x31,0x58,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x59,0x41,0x41,0x59,0x31,0x57,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x66,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x39,0x56,0x2c,0x45,0x41,0x41,0x47,0x79,0x53,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x7a,0x53,0x2c,0x45,0x41,0x41,0x47,0x79,0x54,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x6b,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x35,0x48,0x2c,0x53,0x41,0x41,0x53,0x45,0x2c,0x47,0x41,0x41,0x47,0x33,0x58,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x58,0x2c,0x47,0x41,0x41,0x47,0x7a,0x58,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x56,0x2c,0x47,0x41,0x41,0x47,0x7a,0x56,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x73,0x58,0x2c,0x47,0x41,0x41,0x47,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x37,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x56,0x2c,0x47,0x41,0x41,0x47,0x7a,0x56,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x55,0x2c,0x47,0x41,0x41,0x47,0x33,0x56,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x59,0x41,0x41,0x59,0x33,0x57,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x79,0x46,0x2c,0x49,0x41,0x41,0x78,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x62,0x2c,0x49,0x41,0x41,0x49,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x56,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x57,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x57,0x2c,0x47,0x41,0x41,0x47,0x69,0x57,0x2c,0x47,0x41,0x41,0x47,0x31,0x54,0x2c,0x51,0x41,0x41,0x51,0x74,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x35,0x54,0x2c,0x51,0x41,0x41,0x51,0x74,0x43,0x2c,0x47,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x68,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x4b,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x55,0x2c,0x47,0x41,0x41,0x47,0x6c,0x57,0x2c,0x49,0x41,0x41,0x4b,0x79,0x57,0x2c,0x59,0x41,0x41,0x59,0x33,0x57,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x50,0x2c,0x47,0x41,0x41,0x47,0x68,0x57,0x2c,0x51,0x41,0x41,0x69,0x42,0x2c,0x51,0x41,0x41,0x52,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x59,0x4f,0x2c,0x57,0x41,0x41,0x59,0x49,0x2c,0x47,0x41,0x41,0x47,0x37,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x57,0x2c,0x57,0x41,0x41,0x57,0x50,0x2c,0x47,0x41,0x41,0x47,0x6d,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x4b,0x2c,0x47,0x41,0x41,0x47,0x6e,0x55,0x2c,0x45,0x41,0x41,0x47,0x6f,0x55,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x35,0x61,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x58,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x54,0x2c,0x47,0x41,0x41,0x45,0x33,0x54,0x2c,0x45,0x41,0x41,0x45,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x57,0x41,0x41,0x57,0x4a,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x33,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x36,0x54,0x2c,0x47,0x41,0x41,0x45,0x35,0x54,0x2c,0x45,0x41,0x41,0x45,0x6d,0x57,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x57,0x41,0x41,0x57,0x74,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x57,0x2c,0x47,0x41,0x41,0x47,0x6c,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x54,0x2c,0x47,0x41,0x41,0x45,0x33,0x54,0x2c,0x45,0x41,0x41,0x45,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x57,0x41,0x41,0x57,0x4a,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x33,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x36,0x54,0x2c,0x47,0x41,0x41,0x45,0x35,0x54,0x2c,0x45,0x41,0x41,0x45,0x6d,0x57,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x57,0x41,0x41,0x57,0x74,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6a,0x4f,0x2c,0x53,0x41,0x41,0x53,0x75,0x57,0x2c,0x47,0x41,0x41,0x47,0x6a,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x73,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x72,0x57,0x2c,0x45,0x41,0x41,0x45,0x34,0x56,0x2c,0x47,0x41,0x41,0x47,0x72,0x58,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x57,0x2c,0x47,0x41,0x41,0x47,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x57,0x2c,0x47,0x41,0x41,0x47,0x6c,0x59,0x2c,0x47,0x41,0x41,0x47,0x6f,0x57,0x2c,0x47,0x41,0x41,0x47,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x4e,0x74,0x46,0x2c,0x53,0x41,0x41,0x59,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x56,0x2c,0x47,0x41,0x41,0x47,0x57,0x2c,0x47,0x41,0x41,0x47,0x58,0x2c,0x47,0x41,0x41,0x47,0x39,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x55,0x2c,0x47,0x41,0x41,0x47,0x55,0x2c,0x47,0x41,0x41,0x47,0x56,0x2c,0x47,0x41,0x41,0x47,0x2f,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x55,0x2c,0x47,0x41,0x41,0x47,0x53,0x2c,0x47,0x41,0x41,0x47,0x54,0x2c,0x47,0x41,0x41,0x47,0x68,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x55,0x2c,0x55,0x41,0x41,0x6b,0x44,0x2c,0x4f,0x41,0x41,0x78,0x43,0x50,0x2c,0x47,0x41,0x41,0x47,0x78,0x51,0x2c,0x49,0x41,0x41,0x49,0x2f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x55,0x2c,0x47,0x41,0x41,0x47,0x52,0x2c,0x47,0x41,0x41,0x47,0x2f,0x4f,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x55,0x2c,0x55,0x41,0x41,0x55,0x4c,0x2c,0x47,0x41,0x41,0x47,0x31,0x51,0x2c,0x49,0x41,0x41,0x49,0x2f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x55,0x2c,0x47,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x6a,0x50,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x4d,0x31,0x51,0x34,0x57,0x2c,0x43,0x41,0x41,0x47,0x35,0x57,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x57,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x46,0x76,0x42,0x2c,0x49,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x6f,0x57,0x2c,0x47,0x41,0x41,0x47,0x7a,0x49,0x2c,0x51,0x41,0x41,0x51,0x35,0x4e,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x4f,0x2c,0x47,0x41,0x41,0x47,0x74,0x4f,0x2c,0x47,0x41,0x41,0x30,0x44,0x2c,0x47,0x41,0x41,0x76,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x36,0x54,0x2c,0x47,0x41,0x41,0x47,0x37,0x54,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x51,0x41,0x41,0x64,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x56,0x2c,0x47,0x41,0x41,0x47,0x72,0x58,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x4b,0x41,0x41,0x61,0x32,0x57,0x2c,0x47,0x41,0x41,0x47,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x57,0x2c,0x47,0x41,0x41,0x47,0x6c,0x59,0x2c,0x47,0x41,0x41,0x4d,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x57,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x48,0x2c,0x47,0x41,0x41,0x47,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x43,0x70,0x55,0x2c,0x53,0x41,0x41,0x53,0x66,0x2c,0x47,0x41,0x41,0x47,0x72,0x58,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x32,0x42,0x2c,0x47,0x41,0x41,0x78,0x42,0x34,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x77,0x42,0x2c,0x51,0x41,0x41,0x58,0x70,0x59,0x2c,0x45,0x41,0x41,0x45,0x67,0x58,0x2c,0x47,0x41,0x41,0x56,0x68,0x58,0x2c,0x45,0x41,0x41,0x45,0x73,0x50,0x2c,0x47,0x41,0x41,0x47,0x39,0x4e,0x2c,0x4b,0x41,0x41,0x75,0x42,0x2c,0x47,0x41,0x41,0x57,0x2c,0x51,0x41,0x41,0x52,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x52,0x2c,0x47,0x41,0x41,0x47,0x78,0x52,0x2c,0x49,0x41,0x41,0x59,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x52,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x58,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x47,0x41,0x41,0x47,0x33,0x52,0x2c,0x49,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x43,0x2c,0x51,0x41,0x41,0x51,0x4e,0x2c,0x63,0x41,0x41,0x63,0x71,0x46,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6a,0x58,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4c,0x6f,0x59,0x2c,0x47,0x41,0x41,0x47,0x70,0x59,0x2c,0x45,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x37,0x53,0x2c,0x53,0x41,0x41,0x53,0x75,0x59,0x2c,0x47,0x41,0x41,0x47,0x76,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x65,0x41,0x41,0x65,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x65,0x41,0x41,0x65,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x43,0x70,0x71,0x43,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x54,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x38,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x31,0x59,0x2c,0x45,0x41,0x41,0x6b,0x42,0x77,0x42,0x2c,0x45,0x41,0x41,0x68,0x42,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x59,0x2c,0x47,0x41,0x41,0x47,0x76,0x59,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4f,0x41,0x41,0x53,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x2b,0x57,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x37,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x51,0x2c,0x47,0x41,0x41,0x47,0x39,0x4f,0x2c,0x59,0x41,0x41,0x59,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x72,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x4a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x58,0x2c,0x47,0x41,0x41,0x47,0x6a,0x58,0x2c,0x45,0x41,0x41,0x45,0x6f,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x78,0x59,0x2c,0x53,0x41,0x41,0x53,0x6f,0x58,0x2c,0x47,0x41,0x41,0x47,0x35,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x59,0x2c,0x51,0x41,0x41,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x76,0x45,0x2c,0x61,0x41,0x41,0x61,0x37,0x59,0x2c,0x45,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x62,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x59,0x2c,0x57,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x59,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x35,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x5a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x36,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x6c,0x48,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x58,0x2c,0x57,0x41,0x41,0x57,0x6a,0x5a,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x58,0x2c,0x59,0x41,0x41,0x59,0x31,0x58,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x56,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x55,0x2c,0x59,0x41,0x41,0x59,0x68,0x56,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x4e,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x58,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x6b,0x42,0x70,0x5a,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x42,0x2c,0x65,0x41,0x41,0x65,0x6a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x49,0x41,0x41,0x67,0x49,0x2c,0x4f,0x41,0x41,0x35,0x48,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x58,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x58,0x2c,0x45,0x41,0x41,0x45,0x34,0x58,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x35,0x58,0x2c,0x45,0x41,0x41,0x45,0x34,0x58,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x4b,0x35,0x58,0x2c,0x45,0x41,0x41,0x45,0x36,0x58,0x2c,0x61,0x41,0x41,0x61,0x52,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x58,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x58,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x52,0x2c,0x47,0x41,0x41,0x55,0x70,0x58,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x39,0x45,0x2c,0x4f,0x41,0x44,0x2b,0x45,0x6b,0x44,0x2c,0x45,0x41,0x41,0x45,0x37,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x75,0x59,0x2c,0x65,0x41,0x41,0x65,0x2c,0x57,0x41,0x41,0x57,0x37,0x58,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x58,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x74,0x5a,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x55,0x2c,0x59,0x41,0x41,0x59,0x31,0x57,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x5a,0x2c,0x65,0x41,0x41,0x65,0x7a,0x5a,0x2c,0x45,0x41,0x41,0x45,0x79,0x5a,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x7a,0x5a,0x2c,0x45,0x41,0x41,0x45,0x75,0x5a,0x2c,0x63,0x41,0x43,0x37,0x65,0x76,0x5a,0x2c,0x45,0x41,0x41,0x45,0x75,0x5a,0x2c,0x61,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x49,0x33,0x58,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x58,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x4e,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x54,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x74,0x59,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x55,0x2c,0x59,0x41,0x41,0x59,0x31,0x57,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x59,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x74,0x59,0x2c,0x45,0x41,0x41,0x45,0x73,0x59,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x74,0x59,0x2c,0x45,0x41,0x41,0x45,0x30,0x5a,0x2c,0x65,0x41,0x41,0x65,0x31,0x5a,0x2c,0x45,0x41,0x41,0x45,0x30,0x5a,0x2c,0x63,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x49,0x39,0x58,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x58,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x54,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x59,0x2c,0x51,0x41,0x41,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x61,0x41,0x41,0x61,0x62,0x2c,0x4b,0x41,0x41,0x59,0x39,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6a,0x52,0x2c,0x49,0x41,0x41,0x6f,0x4c,0x34,0x5a,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x74,0x4c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x70,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x61,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x68,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x65,0x2c,0x49,0x41,0x41,0x49,0x53,0x2c,0x47,0x41,0x41,0x47,0x33,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x49,0x41,0x41,0x61,0x49,0x2c,0x47,0x41,0x41,0x47,0x2f,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x53,0x41,0x41,0x53,0x35,0x62,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x62,0x2c,0x63,0x41,0x41,0x63,0x35,0x62,0x2c,0x45,0x41,0x41,0x45,0x36,0x62,0x2c,0x63,0x41,0x41,0x63,0x37,0x62,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x57,0x41,0x41,0x57,0x78,0x50,0x2c,0x45,0x41,0x41,0x45,0x38,0x62,0x2c,0x55,0x41,0x41,0x55,0x39,0x62,0x2c,0x45,0x41,0x41,0x45,0x36,0x62,0x2c,0x59,0x41,0x41,0x59,0x37,0x62,0x2c,0x45,0x41,0x41,0x45,0x34,0x62,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x2f,0x62,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x47,0x2c,0x63,0x41,0x43,0x33,0x65,0x41,0x2c,0x45,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x62,0x2c,0x57,0x41,0x41,0x55,0x2f,0x62,0x2c,0x49,0x41,0x41,0x49,0x2b,0x5a,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x2f,0x5a,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x58,0x2c,0x47,0x41,0x41,0x47,0x37,0x5a,0x2c,0x45,0x41,0x41,0x45,0x38,0x61,0x2c,0x51,0x41,0x41,0x51,0x66,0x2c,0x47,0x41,0x41,0x47,0x65,0x2c,0x51,0x41,0x41,0x51,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2b,0x61,0x2c,0x51,0x41,0x41,0x51,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2f,0x5a,0x2c,0x47,0x41,0x41,0x55,0x36,0x5a,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x68,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x63,0x2c,0x55,0x41,0x41,0x55,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x44,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x49,0x41,0x41,0x69,0x43,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x44,0x2c,0x47,0x41,0x41,0x37,0x42,0x6e,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x73,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x34,0x43,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x44,0x2c,0x47,0x41,0x41,0x39,0x42,0x6e,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x6d,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x30,0x45,0x53,0x2c,0x47,0x41,0x41,0x47,0x70,0x44,0x2c,0x47,0x41,0x41,0x35,0x44,0x6e,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x73,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x63,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x30,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x53,0x41,0x41,0x53,0x31,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x63,0x2c,0x63,0x41,0x41,0x63,0x37,0x62,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x62,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x44,0x2c,0x47,0x41,0x41,0x47,0x77,0x44,0x2c,0x49,0x41,0x41,0x79,0x42,0x47,0x2c,0x47,0x41,0x41,0x47,0x33,0x44,0x2c,0x47,0x41,0x41,0x72,0x42,0x6e,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x36,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x63,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x43,0x78,0x66,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x41,0x61,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x61,0x41,0x41,0x61,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x59,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x43,0x74,0x66,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x55,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x57,0x2c,0x45,0x41,0x41,0x45,0x75,0x62,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x76,0x62,0x2c,0x45,0x41,0x41,0x45,0x75,0x62,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x78,0x62,0x2c,0x4d,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x64,0x2c,0x47,0x41,0x41,0x47,0x35,0x64,0x2c,0x4f,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x62,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x68,0x53,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x30,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x6e,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x65,0x2c,0x45,0x41,0x41,0x45,0x36,0x63,0x2c,0x47,0x41,0x41,0x47,0x39,0x63,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x65,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x6c,0x65,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x41,0x61,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x52,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x59,0x2c,0x47,0x41,0x41,0x47,0x35,0x59,0x2c,0x49,0x41,0x41,0x55,0x2c,0x51,0x41,0x41,0x51,0x6f,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x61,0x41,0x41,0x61,0x72,0x65,0x2c,0x47,0x41,0x41,0x49,0x2c,0x59,0x41,0x41,0x59,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x55,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x62,0x2c,0x47,0x41,0x41,0x47,0x33,0x64,0x2c,0x45,0x41,0x41,0x45,0x36,0x59,0x2c,0x55,0x41,0x41,0x55,0x2c,0x65,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x45,0x6e,0x44,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x69,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x6a,0x44,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x39,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x57,0x2c,0x47,0x41,0x41,0x47,0x35,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x59,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x37,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x59,0x41,0x41,0x59,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x55,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x59,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x53,0x41,0x41,0x53,0x31,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x43,0x37,0x65,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x57,0x2c,0x47,0x41,0x41,0x47,0x35,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x55,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x59,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x38,0x46,0x2c,0x47,0x41,0x41,0x47,0x31,0x46,0x2c,0x47,0x41,0x41,0x47,0x69,0x46,0x2c,0x49,0x41,0x41,0x69,0x49,0x55,0x2c,0x47,0x41,0x41,0x47,0x33,0x46,0x2c,0x47,0x41,0x41,0x37,0x48,0x6e,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x72,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x45,0x71,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x6d,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x47,0x2c,0x47,0x41,0x41,0x72,0x48,0x6e,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x38,0x45,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x65,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x43,0x2c,0x4d,0x41,0x41,0x30,0x45,0x69,0x45,0x2c,0x47,0x41,0x41,0x47,0x7a,0x47,0x2c,0x47,0x41,0x41,0x33,0x44,0x6e,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2f,0x58,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x73,0x61,0x2c,0x59,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x63,0x6d,0x44,0x2c,0x47,0x41,0x41,0x47,0x37,0x61,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2b,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x35,0x66,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x35,0x66,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x66,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x6e,0x66,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x39,0x66,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x39,0x66,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x66,0x2c,0x59,0x41,0x41,0x59,0x2c,0x65,0x41,0x41,0x65,0x2f,0x66,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x67,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x48,0x2c,0x47,0x41,0x41,0x47,0x30,0x47,0x2c,0x49,0x41,0x41,0x49,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x66,0x2c,0x47,0x41,0x41,0x49,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x66,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x66,0x2c,0x47,0x41,0x41,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x45,0x2c,0x57,0x41,0x41,0x57,0x77,0x66,0x2c,0x47,0x41,0x41,0x47,0x78,0x66,0x2c,0x53,0x41,0x41,0x53,0x79,0x66,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x66,0x2c,0x47,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x66,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x47,0x41,0x41,0x47,0x37,0x66,0x2c,0x4b,0x41,0x41,0x4d,0x79,0x66,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x49,0x49,0x2c,0x47,0x41,0x41,0x47,0x74,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x73,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x31,0x57,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6f,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x53,0x2c,0x51,0x41,0x41,0x51,0x33,0x4e,0x2c,0x45,0x41,0x41,0x45,0x34,0x59,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x59,0x2c,0x45,0x41,0x41,0x45,0x34,0x59,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x49,0x2c,0x47,0x41,0x41,0x47,0x37,0x67,0x42,0x2c,0x47,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6a,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x61,0x2c,0x53,0x41,0x41,0x6b,0x43,0x2c,0x53,0x41,0x41,0x53,0x33,0x61,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x69,0x45,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x45,0x39,0x51,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x55,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x55,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x47,0x2c,0x55,0x41,0x41,0x55,0x37,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x47,0x2c,0x53,0x41,0x41,0x53,0x72,0x45,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x55,0x76,0x43,0x2c,0x49,0x41,0x41,0x49,0x38,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x41,0x61,0x6a,0x43,0x2c,0x43,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x4f,0x2c,0x47,0x41,0x41,0x47,0x31,0x4f,0x2c,0x47,0x41,0x41,0x73,0x42,0x2c,0x47,0x41,0x41,0x6e,0x42,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x61,0x41,0x41,0x67,0x42,0x47,0x2c,0x53,0x41,0x41,0x53,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x73,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x61,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x38,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x6a,0x69,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x75,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x69,0x42,0x2c,0x47,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x47,0x79,0x48,0x2c,0x45,0x41,0x41,0x54,0x2b,0x61,0x2c,0x47,0x41,0x41,0x47,0x78,0x69,0x42,0x2c,0x49,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x70,0x65,0x2c,0x53,0x41,0x41,0x53,0x79,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x79,0x69,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x39,0x68,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2b,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x67,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x39,0x68,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x66,0x2c,0x61,0x41,0x41,0x61,0x2c,0x55,0x41,0x41,0x55,0x2c,0x57,0x41,0x41,0x57,0x75,0x66,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x48,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x68,0x42,0x2c,0x53,0x41,0x41,0x53,0x79,0x66,0x2c,0x63,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x45,0x7a,0x66,0x2c,0x53,0x41,0x41,0x53,0x79,0x66,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x5a,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x61,0x2c,0x59,0x41,0x41,0x59,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x43,0x2c,0x49,0x41,0x41,0x49,0x62,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x63,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x63,0x41,0x41,0x63,0x73,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x50,0x2c,0x47,0x41,0x41,0x47,0x74,0x50,0x2c,0x49,0x41,0x41,0x49,0x77,0x51,0x2c,0x47,0x41,0x41,0x47,0x36,0x52,0x2c,0x47,0x41,0x41,0x47,0x70,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x2f,0x62,0x2c,0x53,0x41,0x41,0x53,0x69,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x46,0x2c,0x47,0x41,0x41,0x47,0x2b,0x69,0x42,0x2c,0x4b,0x41,0x41,0x55,0x58,0x2c,0x47,0x41,0x41,0x47,0x6c,0x69,0x42,0x2c,0x47,0x41,0x41,0x52,0x69,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x69,0x42,0x2c,0x47,0x41,0x41,0x55,0x6b,0x6a,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x6a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2b,0x69,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x4b,0x2c,0x47,0x41,0x41,0x47,0x70,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x71,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x69,0x45,0x2c,0x49,0x41,0x41,0x49,0x73,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x74,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6e,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x4f,0x2c,0x47,0x41,0x41,0x35,0x47,0x2c,0x53,0x41,0x41,0x59,0x70,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x74,0x57,0x2c,0x53,0x41,0x41,0x53,0x75,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x73,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x4e,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x4e,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x53,0x41,0x41,0x53,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x52,0x2c,0x45,0x41,0x41,0x47,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x59,0x41,0x41,0x59,0x6e,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x74,0x55,0x2c,0x53,0x41,0x41,0x53,0x30,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x77,0x42,0x75,0x42,0x2c,0x45,0x41,0x41,0x70,0x42,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4a,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x59,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x7a,0x42,0x6c,0x4a,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x4a,0x2c,0x59,0x41,0x41,0x59,0x74,0x4a,0x2c,0x4f,0x41,0x41,0x55,0x4a,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x30,0x6a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6a,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x6a,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x6a,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x6a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x78,0x50,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x4f,0x44,0x2c,0x49,0x41,0x41,0x47,0x43,0x2c,0x4b,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x59,0x41,0x41,0x59,0x7a,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x53,0x41,0x41,0x53,0x6f,0x5a,0x2c,0x47,0x41,0x41,0x47,0x39,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x50,0x2c,0x59,0x41,0x41,0x59,0x2c,0x61,0x41,0x41,0x61,0x31,0x50,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6a,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x6a,0x42,0x2c,0x4b,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x6b,0x42,0x2c,0x34,0x42,0x41,0x41,0x77,0x44,0x2c,0x47,0x41,0x41,0x37,0x42,0x68,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6b,0x42,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2f,0x6a,0x42,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x43,0x41,0x43,0x39,0x5a,0x2c,0x53,0x41,0x41,0x53,0x67,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x6a,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x5a,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x49,0x41,0x41,0x4b,0x33,0x48,0x2c,0x61,0x41,0x41,0x61,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6b,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x68,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6b,0x42,0x2c,0x63,0x41,0x41,0x63,0x35,0x46,0x2c,0x53,0x41,0x41,0x53,0x36,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x47,0x41,0x41,0x2f,0x42,0x35,0x48,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6b,0x42,0x2c,0x65,0x41,0x41,0x67,0x43,0x72,0x6a,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x62,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x47,0x2c,0x55,0x41,0x41,0x55,0x37,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x47,0x2c,0x53,0x41,0x41,0x53,0x72,0x45,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x41,0x61,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x61,0x41,0x41,0x61,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x6b,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x43,0x41,0x43,0x78,0x61,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x6b,0x42,0x2c,0x59,0x41,0x41,0x59,0x68,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x47,0x78,0x6b,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x49,0x2c,0x65,0x41,0x41,0x65,0x6d,0x62,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x49,0x2c,0x63,0x41,0x41,0x63,0x2b,0x62,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x78,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6a,0x42,0x2c,0x57,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x52,0x33,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6a,0x42,0x2c,0x4f,0x41,0x41,0x69,0x42,0x35,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x35,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x6b,0x42,0x2c,0x61,0x41,0x41,0x61,0x2f,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x52,0x2c,0x49,0x41,0x41,0x49,0x2f,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x48,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x47,0x4a,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x49,0x2c,0x65,0x41,0x41,0x65,0x37,0x48,0x2c,0x57,0x41,0x41,0x57,0x62,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6b,0x42,0x2c,0x61,0x41,0x41,0x61,0x6e,0x6b,0x42,0x2c,0x51,0x41,0x41,0x53,0x6f,0x6b,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x6a,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x6c,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x49,0x41,0x41,0x49,0x78,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x4a,0x2c,0x59,0x41,0x41,0x59,0x74,0x4a,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x52,0x2c,0x49,0x41,0x41,0x49,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6a,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x52,0x2c,0x49,0x41,0x41,0x49,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6c,0x42,0x2c,0x51,0x41,0x41,0x51,0x78,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x6a,0x42,0x2c,0x45,0x41,0x43,0x76,0x66,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6c,0x42,0x2c,0x59,0x41,0x41,0x59,0x6e,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6c,0x42,0x2c,0x61,0x41,0x41,0x61,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x69,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x6c,0x42,0x2c,0x65,0x41,0x41,0x65,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x69,0x42,0x2c,0x51,0x41,0x41,0x51,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x42,0x2c,0x59,0x41,0x41,0x59,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x69,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x6c,0x42,0x2c,0x63,0x41,0x41,0x63,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x69,0x42,0x2c,0x57,0x41,0x41,0x55,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x6c,0x42,0x2c,0x65,0x41,0x41,0x67,0x42,0x43,0x2c,0x53,0x41,0x41,0x53,0x68,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x69,0x42,0x2c,0x51,0x41,0x41,0x51,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6c,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x68,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6c,0x42,0x2c,0x53,0x41,0x41,0x53,0x31,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x69,0x42,0x2c,0x51,0x41,0x41,0x51,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6c,0x42,0x2c,0x53,0x41,0x41,0x53,0x31,0x6c,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4c,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x49,0x31,0x50,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x55,0x41,0x41,0x55,0x7a,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x30,0x56,0x2c,0x51,0x41,0x41,0x51,0x37,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6c,0x42,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x49,0x41,0x41,0x49,0x68,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x6d,0x42,0x2c,0x59,0x41,0x41,0x6d,0x44,0x2c,0x49,0x41,0x41,0x76,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2f,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6d,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6d,0x42,0x2c,0x51,0x41,0x41,0x59,0x68,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x4b,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x4b,0x32,0x6c,0x42,0x2c,0x51,0x41,0x41,0x51,0x45,0x2c,0x57,0x41,0x41,0x57,0x2f,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6c,0x42,0x2c,0x51,0x41,0x41,0x51,0x49,0x2c,0x55,0x41,0x41,0x55,0x6a,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x7a,0x66,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x47,0x41,0x41,0x47,0x76,0x6c,0x42,0x2c,0x47,0x41,0x41,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x53,0x41,0x41,0x53,0x79,0x66,0x2c,0x61,0x41,0x41,0x61,0x36,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x33,0x46,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x57,0x2c,0x53,0x41,0x41,0x53,0x58,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x59,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x5a,0x2c,0x45,0x41,0x41,0x45,0x77,0x4b,0x2c,0x53,0x41,0x41,0x53,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x49,0x2c,0x63,0x41,0x41,0x63,0x34,0x64,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x48,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x65,0x2c,0x45,0x41,0x41,0x47,0x70,0x47,0x2c,0x4b,0x41,0x41,0x55,0x2c,0x6d,0x42,0x41,0x41,0x4c,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x79,0x42,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x6a,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x6a,0x42,0x2c,0x65,0x41,0x41,0x65,0x44,0x2c,0x49,0x41,0x41,0x49,0x70,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6a,0x42,0x2c,0x63,0x41,0x41,0x75,0x46,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x34,0x6a,0x42,0x2c,0x59,0x41,0x41,0x33,0x45,0x35,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x48,0x2c,0x65,0x41,0x41,0x65,0x6e,0x48,0x2c,0x45,0x41,0x41,0x45,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x71,0x63,0x2c,0x61,0x41,0x41,0x61,0x6e,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x6f,0x6b,0x42,0x2c,0x67,0x42,0x41,0x41,0x2b,0x42,0x47,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x61,0x41,0x41,0x61,0x37,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6a,0x42,0x2c,0x61,0x41,0x41,0x61,0x43,0x2c,0x55,0x41,0x41,0x55,0x39,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6a,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x59,0x41,0x41,0x59,0x2f,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6a,0x42,0x2c,0x61,0x41,0x41,0x63,0x65,0x2c,0x49,0x41,0x41,0x49,0x39,0x43,0x2c,0x47,0x41,0x41,0x47,0x38,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6b,0x42,0x2c,0x45,0x41,0x41,0x73,0x42,0x2c,0x47,0x41,0x41,0x70,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x67,0x42,0x6a,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x61,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x38,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x31,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x74,0x66,0x2c,0x53,0x41,0x41,0x53,0x4b,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x69,0x46,0x2c,0x4f,0x41,0x41,0x2f,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x43,0x2c,0x65,0x41,0x41,0x65,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x43,0x2c,0x63,0x41,0x41,0x63,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x53,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x61,0x41,0x41,0x61,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x49,0x2c,0x65,0x41,0x41,0x65,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4b,0x2c,0x63,0x41,0x41,0x63,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x70,0x46,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x59,0x45,0x2c,0x45,0x41,0x41,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x6d,0x42,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x2f,0x58,0x59,0x2c,0x49,0x41,0x41,0x4b,0x6f,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x39,0x4d,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x36,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x61,0x41,0x41,0x61,0x4f,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x52,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x4d,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x52,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x65,0x41,0x41,0x65,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x6d,0x42,0x2c,0x65,0x41,0x41,0x65,0x36,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x63,0x41,0x41,0x63,0x39,0x4f,0x2c,0x59,0x41,0x41,0x77,0x4a,0x2c,0x49,0x41,0x41,0x49,0x6d,0x50,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x47,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x49,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4b,0x2c,0x47,0x41,0x41,0x47,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x72,0x52,0x2c,0x49,0x41,0x41,0x49,0x73,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x73,0x6d,0x42,0x41,0x41,0x73,0x6d,0x42,0x6c,0x6c,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x43,0x2f,0x6c,0x43,0x2c,0x53,0x41,0x41,0x53,0x6d,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x68,0x42,0x2c,0x49,0x41,0x41,0x49,0x7a,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x51,0x2c,0x45,0x41,0x41,0x47,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x30,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x70,0x6e,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x6e,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x32,0x44,0x44,0x2c,0x47,0x41,0x41,0x70,0x44,0x45,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6c,0x42,0x2c,0x63,0x41,0x41,0x75,0x44,0x2c,0x4d,0x41,0x41,0x74,0x43,0x6d,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x68,0x6c,0x42,0x2c,0x63,0x41,0x41,0x63,0x67,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x41,0x43,0x34,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4d,0x2c,0x47,0x41,0x41,0x47,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x4b,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x35,0x6d,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x65,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x45,0x41,0x41,0x47,0x2c,0x65,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x45,0x41,0x41,0x47,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x67,0x42,0x41,0x43,0x37,0x63,0x41,0x2c,0x45,0x41,0x41,0x47,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x6f,0x45,0x41,0x41,0x6f,0x45,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x75,0x46,0x41,0x41,0x75,0x46,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x59,0x41,0x41,0x59,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x32,0x44,0x41,0x41,0x32,0x44,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x36,0x44,0x41,0x41,0x36,0x44,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x43,0x2f,0x66,0x37,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x38,0x44,0x41,0x41,0x38,0x44,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x73,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x36,0x4e,0x41,0x41,0x36,0x4e,0x74,0x6c,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x74,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x30,0x43,0x41,0x41,0x30,0x43,0x2b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x4b,0x41,0x43,0x7a,0x5a,0x2c,0x53,0x41,0x41,0x53,0x47,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x5a,0x2c,0x63,0x41,0x41,0x63,0x6c,0x5a,0x2c,0x45,0x41,0x6c,0x44,0x6a,0x45,0x2c,0x53,0x41,0x41,0x59,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x34,0x42,0x2c,0x47,0x41,0x41,0x7a,0x42,0x79,0x4c,0x2c,0x47,0x41,0x41,0x47,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x50,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x57,0x41,0x41,0x63,0x2b,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x67,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x31,0x43,0x2c,0x49,0x41,0x41,0x49,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x75,0x4c,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x38,0x42,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x6b,0x44,0x70,0x45,0x6f,0x69,0x42,0x2c,0x43,0x41,0x41,0x47,0x78,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x5a,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x78,0x47,0x2c,0x53,0x41,0x41,0x53,0x6b,0x4a,0x2c,0x47,0x41,0x41,0x47,0x74,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x41,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x67,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x67,0x42,0x2c,0x55,0x41,0x41,0x55,0x6c,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x70,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x47,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x72,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x54,0x2c,0x63,0x41,0x41,0x32,0x42,0x2c,0x47,0x41,0x41,0x62,0x76,0x54,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x42,0x2c,0x53,0x41,0x41,0x59,0x70,0x69,0x42,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x58,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x70,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x6f,0x44,0x2c,0x47,0x41,0x41,0x35,0x43,0x6d,0x45,0x2c,0x47,0x41,0x41,0x50,0x44,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x49,0x41,0x41,0x4f,0x73,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x72,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x54,0x2c,0x63,0x41,0x41,0x63,0x76,0x54,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x42,0x2c,0x53,0x41,0x41,0x59,0x70,0x69,0x42,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x58,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x52,0x2c,0x45,0x41,0x41,0x45,0x71,0x52,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x52,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x35,0x61,0x2c,0x53,0x41,0x41,0x53,0x6d,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x6e,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6f,0x42,0x2c,0x53,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x53,0x6c,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x37,0x6e,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x37,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x49,0x41,0x41,0x49,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x38,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x7a,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x55,0x2c,0x53,0x41,0x41,0x53,0x76,0x65,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x72,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x36,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x78,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x6c,0x6f,0x42,0x2c,0x45,0x41,0x41,0x47,0x69,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x74,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x49,0x41,0x41,0x49,0x34,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x51,0x2c,0x49,0x41,0x41,0x49,0x70,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x73,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x75,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x49,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x49,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x6f,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6b,0x42,0x2c,0x45,0x41,0x41,0x47,0x74,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6a,0x62,0x2c,0x53,0x41,0x41,0x53,0x71,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x57,0x2c,0x47,0x41,0x41,0x47,0x74,0x59,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x79,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x7a,0x57,0x2c,0x45,0x41,0x41,0x45,0x77,0x57,0x2c,0x47,0x41,0x41,0x47,0x2f,0x58,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6e,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x51,0x69,0x50,0x2c,0x49,0x41,0x41,0x49,0x2c,0x65,0x41,0x41,0x65,0x7a,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x44,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x51,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x33,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x30,0x6f,0x42,0x2c,0x53,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x51,0x41,0x41,0x51,0x70,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x51,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x33,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x53,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x51,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x33,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x32,0x6f,0x42,0x2c,0x51,0x41,0x41,0x51,0x70,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x51,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x33,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x6c,0x56,0x2c,0x53,0x41,0x41,0x53,0x69,0x59,0x2c,0x47,0x41,0x41,0x47,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x76,0x42,0x2c,0x49,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x41,0x2c,0x49,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x32,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x78,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x74,0x52,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x45,0x2c,0x55,0x41,0x41,0x55,0x37,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x4a,0x2c,0x61,0x41,0x41,0x61,0x6a,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x4d,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x4f,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x69,0x42,0x41,0x41,0x6b,0x42,0x31,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x45,0x2c,0x55,0x41,0x41,0x55,0x35,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x4a,0x2c,0x61,0x41,0x41,0x61,0x6a,0x4f,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x58,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x56,0x2c,0x47,0x41,0x41,0x47,0x6e,0x52,0x2c,0x49,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x58,0x43,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x45,0x2c,0x4d,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x33,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x4a,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x6c,0x4f,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x6c,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x68,0x50,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x4e,0x2c,0x47,0x41,0x41,0x47,0x70,0x50,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x43,0x70,0x66,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x47,0x41,0x41,0x47,0x73,0x4f,0x2c,0x45,0x41,0x41,0x45,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x34,0x59,0x2c,0x47,0x41,0x41,0x47,0x31,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x38,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x6d,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x68,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x30,0x4d,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x74,0x57,0x2c,0x45,0x41,0x41,0x45,0x73,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6c,0x63,0x2c,0x45,0x41,0x41,0x45,0x77,0x62,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x62,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x38,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x57,0x2c,0x45,0x41,0x43,0x31,0x69,0x42,0x6f,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x70,0x57,0x2c,0x45,0x41,0x41,0x45,0x77,0x5a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x4c,0x2c,0x47,0x41,0x41,0x47,0x78,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x5a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x35,0x5a,0x2c,0x45,0x41,0x41,0x45,0x38,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x39,0x55,0x2c,0x45,0x41,0x41,0x45,0x71,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x72,0x61,0x2c,0x45,0x41,0x41,0x45,0x36,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x37,0x57,0x2c,0x45,0x41,0x41,0x45,0x38,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6d,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x39,0x6f,0x42,0x2c,0x47,0x41,0x41,0x4b,0x2b,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2f,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x51,0x47,0x2c,0x45,0x41,0x41,0x4a,0x43,0x2c,0x45,0x41,0x41,0x45,0x33,0x6e,0x42,0x2c,0x45,0x41,0x41,0x49,0x2c,0x4f,0x41,0x43,0x2f,0x65,0x32,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x52,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x55,0x6e,0x5a,0x2c,0x55,0x41,0x41,0x73,0x46,0x2c,0x47,0x41,0x41,0x35,0x45,0x2c,0x49,0x41,0x41,0x49,0x6b,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2f,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x48,0x2c,0x49,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x56,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x59,0x2c,0x47,0x41,0x41,0x47,0x30,0x59,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x4b,0x41,0x41,0x59,0x46,0x2c,0x45,0x41,0x41,0x45,0x35,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x5a,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x4d,0x41,0x41,0x53,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x7a,0x58,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x33,0x6f,0x42,0x2c,0x53,0x41,0x41,0x53,0x79,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x38,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x63,0x2c,0x45,0x41,0x41,0x45,0x71,0x63,0x2c,0x55,0x41,0x41,0x55,0x36,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x39,0x6f,0x42,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x34,0x45,0x2c,0x47,0x41,0x41,0x6e,0x43,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x61,0x41,0x41,0x61,0x39,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x65,0x41,0x41,0x65,0x41,0x2c,0x4b,0x41,0x41,0x74,0x45,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x63,0x41,0x41,0x63,0x37,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x41,0x2c,0x49,0x41,0x41,0x32,0x43,0x45,0x2c,0x49,0x41,0x41,0x49,0x6d,0x50,0x2c,0x4d,0x41,0x41,0x4b,0x79,0x5a,0x2c,0x45,0x41,0x41,0x45,0x35,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x62,0x2c,0x65,0x41,0x41,0x65,0x31,0x62,0x2c,0x45,0x41,0x41,0x45,0x32,0x62,0x2c,0x65,0x41,0x41,0x65,0x37,0x45,0x2c,0x47,0x41,0x41,0x47,0x38,0x52,0x2c,0x4b,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4f,0x41,0x41,0x67,0x42,0x78,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x4b,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x5a,0x2c,0x53,0x41,0x41,0x53,0x59,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x65,0x41,0x41,0x65,0x39,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x66,0x2c,0x61,0x41,0x41,0x61,0x6e,0x66,0x2c,0x45,0x41,0x41,0x45,0x30,0x6a,0x42,0x2c,0x61,0x41,0x41,0x61,0x31,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x55,0x69,0x46,0x2c,0x47,0x41,0x41,0x71,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x74,0x45,0x2c,0x45,0x41,0x41,0x69,0x42,0x2c,0x51,0x41,0x41,0x66,0x73,0x6e,0x42,0x2c,0x47,0x41,0x41,0x6e,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x35,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x62,0x2c,0x65,0x41,0x41,0x65,0x31,0x62,0x2c,0x45,0x41,0x41,0x45,0x34,0x62,0x2c,0x57,0x41,0x41,0x6b,0x42,0x39,0x45,0x2c,0x47,0x41,0x41,0x47,0x38,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x43,0x39,0x64,0x41,0x2c,0x4b,0x41,0x41,0x52,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x58,0x2c,0x47,0x41,0x41,0x47,0x73,0x58,0x2c,0x4b,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x33,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x32,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4b,0x32,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x55,0x68,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6e,0x42,0x2c,0x47,0x41,0x41,0x4b,0x73,0x45,0x2c,0x49,0x41,0x41,0x49,0x67,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x67,0x55,0x2c,0x47,0x41,0x41,0x2f,0x54,0x43,0x2c,0x45,0x41,0x41,0x45,0x39,0x4d,0x2c,0x47,0x41,0x41,0x47,0x6d,0x4e,0x2c,0x45,0x41,0x41,0x45,0x2c,0x65,0x41,0x41,0x65,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x65,0x41,0x41,0x65,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x57,0x2c,0x65,0x41,0x41,0x65,0x6e,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x41,0x2c,0x49,0x41,0x41,0x45,0x2b,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x4b,0x2c,0x47,0x41,0x41,0x47,0x77,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x55,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x47,0x41,0x41,0x47,0x31,0x63,0x2c,0x47,0x41,0x41,0x47,0x6f,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x47,0x41,0x41,0x47,0x73,0x47,0x2c,0x49,0x41,0x41,0x47,0x6a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6b,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x72,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x49,0x41,0x41,0x4b,0x38,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x5a,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x56,0x2c,0x63,0x41,0x41,0x63,0x73,0x4e,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x53,0x2c,0x47,0x41,0x41,0x47,0x76,0x56,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x4b,0x41,0x41,0x49,0x75,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x4c,0x2c,0x45,0x41,0x41,0x45,0x35,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x49,0x41,0x41,0x4b,0x38,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x5a,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x6e,0x4e,0x2c,0x63,0x41,0x41,0x63,0x6f,0x4e,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x4c,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x4b,0x74,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x67,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x68,0x42,0x48,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x6b,0x42,0x6f,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x47,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4a,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x47,0x41,0x41,0x47,0x54,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x43,0x70,0x66,0x4f,0x2c,0x47,0x41,0x41,0x47,0x50,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x58,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x47,0x41,0x41,0x47,0x54,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x4f,0x2c,0x47,0x41,0x41,0x47,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x47,0x41,0x41,0x47,0x53,0x2c,0x47,0x41,0x41,0x47,0x39,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x38,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x31,0x43,0x6a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x6a,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x58,0x2c,0x51,0x41,0x41,0x57,0x67,0x47,0x2c,0x55,0x41,0x41,0x55,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x72,0x45,0x2c,0x67,0x42,0x41,0x41,0x2b,0x42,0x2c,0x55,0x41,0x41,0x55,0x73,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x33,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x77,0x6e,0x42,0x2c,0x45,0x41,0x41,0x47,0x6a,0x48,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x58,0x2c,0x47,0x41,0x41,0x47,0x6a,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x36,0x63,0x2c,0x47,0x41,0x41,0x47,0x67,0x48,0x2c,0x45,0x41,0x41,0x47,0x70,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x6f,0x47,0x2c,0x45,0x41,0x41,0x47,0x74,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x47,0x2c,0x45,0x41,0x41,0x47,0x7a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x64,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x55,0x41,0x41,0x55,0x66,0x2c,0x45,0x41,0x41,0x45,0x74,0x44,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x61,0x41,0x41,0x61,0x71,0x44,0x2c,0x45,0x41,0x41,0x45,0x33,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x55,0x32,0x44,0x2c,0x45,0x41,0x41,0x45,0x33,0x44,0x2c,0x51,0x41,0x41,0x51,0x77,0x6e,0x42,0x2c,0x45,0x41,0x41,0x47,0x72,0x47,0x2c,0x49,0x41,0x43,0x72,0x56,0x2c,0x4f,0x41,0x44,0x34,0x56,0x71,0x47,0x2c,0x49,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x47,0x31,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x4b,0x75,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6e,0x42,0x2c,0x45,0x41,0x41,0x47,0x78,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x49,0x41,0x41,0x57,0x6b,0x6f,0x42,0x2c,0x47,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x47,0x33,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x32,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x39,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x67,0x42,0x41,0x43,0x6c,0x66,0x79,0x68,0x42,0x2c,0x45,0x41,0x41,0x47,0x72,0x68,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x57,0x41,0x41,0x57,0x7a,0x43,0x2c,0x45,0x41,0x41,0x45,0x33,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x75,0x47,0x2c,0x47,0x41,0x41,0x47,0x35,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x42,0x2c,0x51,0x41,0x41,0x4f,0x67,0x69,0x42,0x2c,0x45,0x41,0x41,0x47,0x6e,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x58,0x2c,0x4f,0x41,0x41,0x63,0x62,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x61,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x48,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x47,0x72,0x46,0x2c,0x6d,0x42,0x41,0x41,0x67,0x42,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x44,0x2c,0x45,0x41,0x41,0x47,0x74,0x44,0x2c,0x47,0x41,0x41,0x47,0x37,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x4b,0x2c,0x47,0x41,0x41,0x47,0x37,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6d,0x6f,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x76,0x4a,0x2c,0x47,0x41,0x41,0x47,0x70,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x36,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x34,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x43,0x70,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x34,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x70,0x42,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x49,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x35,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x59,0x41,0x41,0x59,0x37,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x59,0x2c,0x55,0x41,0x41,0x55,0x67,0x52,0x2c,0x45,0x41,0x41,0x47,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x41,0x2c,0x49,0x41,0x41,0x4b,0x70,0x4a,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x65,0x2c,0x53,0x41,0x41,0x53,0x71,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2b,0x49,0x2c,0x45,0x41,0x41,0x47,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x41,0x2c,0x47,0x41,0x41,0x49,0x2f,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x49,0x2c,0x45,0x41,0x41,0x47,0x6a,0x52,0x2c,0x4f,0x41,0x41,0x59,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x52,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x57,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2b,0x57,0x2c,0x47,0x41,0x41,0x47,0x37,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x51,0x2c,0x47,0x41,0x41,0x47,0x39,0x4f,0x2c,0x59,0x41,0x41,0x59,0x6f,0x58,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x69,0x42,0x2c,0x47,0x41,0x41,0x5a,0x36,0x49,0x2c,0x45,0x41,0x41,0x47,0x33,0x48,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x6f,0x42,0x2c,0x49,0x41,0x41,0x53,0x7a,0x70,0x42,0x2c,0x53,0x41,0x41,0x53,0x79,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6a,0x4e,0x2c,0x47,0x41,0x41,0x47,0x69,0x4e,0x2c,0x45,0x41,0x41,0x47,0x37,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x38,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x34,0x48,0x2c,0x45,0x41,0x41,0x47,0x33,0x48,0x2c,0x55,0x41,0x41,0x55,0x79,0x48,0x2c,0x49,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x47,0x68,0x4e,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x4d,0x2c,0x45,0x41,0x41,0x61,0x2c,0x51,0x41,0x41,0x54,0x41,0x2c,0x45,0x41,0x41,0x47,0x2f,0x49,0x2c,0x47,0x41,0x41,0x47,0x33,0x67,0x42,0x2c,0x4d,0x41,0x41,0x65,0x32,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x68,0x4e,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x4d,0x2c,0x4d,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x47,0x70,0x4a,0x2c,0x47,0x41,0x35,0x42,0x68,0x4d,0x2c,0x53,0x41,0x41,0x59,0x78,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x65,0x2c,0x4d,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x4b,0x69,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x55,0x44,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x63,0x2c,0x51,0x41,0x41,0x53,0x36,0x44,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x34,0x42,0x45,0x38,0x70,0x42,0x2c,0x43,0x41,0x41,0x47,0x39,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x33,0x42,0x7a,0x64,0x2c,0x53,0x41,0x41,0x59,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x36,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x39,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x71,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x4f,0x2c,0x47,0x41,0x41,0x47,0x35,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x49,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x39,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x67,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x33,0x50,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x62,0x2c,0x53,0x41,0x41,0x53,0x6e,0x62,0x2c,0x45,0x41,0x41,0x45,0x71,0x62,0x2c,0x51,0x41,0x41,0x51,0x72,0x62,0x2c,0x45,0x41,0x41,0x45,0x73,0x62,0x2c,0x55,0x41,0x41,0x55,0x74,0x62,0x2c,0x45,0x41,0x41,0x45,0x6d,0x62,0x2c,0x53,0x41,0x41,0x53,0x6e,0x62,0x2c,0x45,0x41,0x41,0x45,0x71,0x62,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x62,0x2c,0x45,0x41,0x41,0x45,0x38,0x70,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x39,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x70,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x70,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x48,0x2c,0x45,0x41,0x41,0x45,0x38,0x70,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x39,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x61,0x41,0x41,0x61,0x70,0x65,0x2c,0x45,0x41,0x41,0x45,0x79,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x65,0x2c,0x45,0x41,0x41,0x45,0x34,0x63,0x2c,0x4b,0x41,0x41,0x79,0x42,0x2c,0x43,0x41,0x32,0x42,0x71,0x46,0x6d,0x4e,0x2c,0x43,0x41,0x41,0x47,0x68,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4d,0x41,0x43,0x6a,0x65,0x2c,0x47,0x41,0x44,0x6f,0x65,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6b,0x42,0x41,0x43,0x76,0x65,0x70,0x42,0x2c,0x53,0x41,0x41,0x53,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6d,0x62,0x2c,0x47,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x63,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x38,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x67,0x42,0x2c,0x55,0x41,0x41,0x55,0x31,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x62,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x74,0x48,0x2c,0x47,0x41,0x41,0x47,0x33,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2b,0x6e,0x42,0x2c,0x53,0x41,0x41,0x53,0x6a,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6f,0x42,0x2c,0x53,0x41,0x41,0x53,0x6a,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x5a,0x2c,0x63,0x41,0x41,0x63,0x6c,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x76,0x4f,0x2c,0x45,0x41,0x41,0x45,0x30,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x56,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x4f,0x2c,0x47,0x41,0x41,0x47,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x59,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x6f,0x42,0x2c,0x51,0x41,0x41,0x51,0x5a,0x2c,0x47,0x41,0x41,0x47,0x72,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x56,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x4f,0x2c,0x47,0x41,0x41,0x47,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x59,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x5a,0x2c,0x47,0x41,0x41,0x47,0x72,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x61,0x41,0x41,0x61,0x31,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x47,0x2c,0x47,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x6e,0x64,0x2c,0x53,0x41,0x41,0x53,0x79,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x5a,0x2c,0x57,0x41,0x41,0x57,0x76,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x4c,0x2c,0x55,0x41,0x41,0x55,0x37,0x4c,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x4b,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x50,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x56,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x4b,0x2c,0x47,0x41,0x41,0x47,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x59,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6f,0x42,0x2c,0x51,0x41,0x41,0x51,0x5a,0x2c,0x47,0x41,0x41,0x47,0x6e,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x4b,0x70,0x45,0x2c,0x47,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x56,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x4b,0x2c,0x47,0x41,0x41,0x47,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x59,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x5a,0x2c,0x47,0x41,0x41,0x47,0x6e,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4b,0x41,0x41,0x4d,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x51,0x41,0x41,0x51,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x38,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x76,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x75,0x44,0x2c,0x51,0x41,0x41,0x51,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x6d,0x42,0x2c,0x51,0x41,0x41,0x51,0x34,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x45,0x2c,0x47,0x41,0x41,0x47,0x72,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x71,0x42,0x2c,0x47,0x41,0x41,0x4d,0x6d,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x75,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x39,0x65,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x61,0x41,0x41,0x61,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x4a,0x2c,0x55,0x41,0x41,0x55,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x72,0x4a,0x2c,0x45,0x41,0x41,0x45,0x71,0x4a,0x2c,0x55,0x41,0x41,0x55,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x72,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x71,0x68,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x43,0x35,0x50,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x67,0x42,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x6b,0x42,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x61,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x65,0x41,0x41,0x65,0x41,0x2c,0x65,0x41,0x41,0x65,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x2f,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x58,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x57,0x2c,0x47,0x41,0x41,0x47,0x74,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x71,0x42,0x2c,0x59,0x41,0x41,0x57,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x71,0x42,0x2c,0x43,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x70,0x56,0x2c,0x53,0x41,0x41,0x53,0x75,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6a,0x42,0x2c,0x59,0x41,0x41,0x36,0x42,0x2c,0x47,0x41,0x41,0x6a,0x42,0x37,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4b,0x2c,0x59,0x41,0x41,0x59,0x6c,0x4b,0x2c,0x47,0x41,0x41,0x4d,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x4a,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x59,0x2c,0x51,0x41,0x41,0x54,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x62,0x2c,0x4d,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x72,0x62,0x2c,0x45,0x41,0x41,0x30,0x42,0x2c,0x4f,0x41,0x41,0x76,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4b,0x2c,0x59,0x41,0x41,0x59,0x33,0x49,0x2c,0x51,0x41,0x41,0x47,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x31,0x58,0x2c,0x47,0x41,0x41,0x55,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x58,0x2c,0x47,0x41,0x41,0x47,0x31,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x75,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x6a,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x7a,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x5a,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x63,0x2c,0x4f,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6a,0x59,0x2c,0x53,0x41,0x41,0x53,0x79,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x72,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x7a,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x72,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x58,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x55,0x2c,0x53,0x41,0x41,0x53,0x76,0x65,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x72,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x46,0x2c,0x47,0x41,0x41,0x47,0x72,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x71,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x75,0x44,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x48,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x4a,0x2c,0x47,0x41,0x43,0x6c,0x58,0x2c,0x53,0x41,0x41,0x53,0x33,0x55,0x2c,0x47,0x41,0x41,0x47,0x68,0x58,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x33,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x57,0x41,0x41,0x57,0x78,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x70,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x64,0x31,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x55,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x79,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x4a,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x4d,0x77,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2f,0x50,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x51,0x41,0x41,0x66,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x70,0x42,0x2c,0x4d,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x74,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x51,0x2c,0x47,0x41,0x41,0x47,0x6a,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x6e,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x76,0x65,0x2c,0x53,0x41,0x41,0x53,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x6e,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x73,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x36,0x5a,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x47,0x2c,0x47,0x41,0x41,0x45,0x70,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x67,0x73,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x6a,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x6e,0x53,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x6c,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6f,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x4a,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x47,0x41,0x41,0x47,0x4c,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x4d,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x49,0x2c,0x47,0x41,0x41,0x47,0x7a,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x71,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x37,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x78,0x4f,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x38,0x43,0x41,0x41,0x38,0x43,0x31,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x30,0x43,0x41,0x41,0x30,0x43,0x2c,0x49,0x41,0x41,0x53,0x6c,0x72,0x42,0x2c,0x45,0x41,0x41,0x4c,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x6f,0x48,0x2c,0x4f,0x41,0x41,0x6a,0x48,0x46,0x2c,0x4b,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x57,0x41,0x41,0x59,0x32,0x63,0x2c,0x34,0x43,0x41,0x41,0x34,0x43,0x31,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x73,0x42,0x2c,0x30,0x43,0x41,0x41,0x30,0x43,0x6e,0x72,0x42,0x2c,0x47,0x41,0x41,0x55,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x39,0x64,0x2c,0x53,0x41,0x41,0x53,0x6f,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x73,0x42,0x2c,0x47,0x41,0x41,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x37,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x73,0x42,0x2c,0x79,0x42,0x41,0x41,0x6d,0x43,0x2c,0x49,0x41,0x41,0x53,0x39,0x73,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x73,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x5a,0x2c,0x47,0x41,0x41,0x45,0x49,0x2c,0x49,0x41,0x41,0x49,0x4a,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x55,0x2c,0x47,0x41,0x41,0x47,0x68,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6f,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x55,0x41,0x41,0x55,0x6b,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x6e,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x71,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x45,0x72,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x47,0x72,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x67,0x43,0x2c,0x47,0x41,0x41,0x74,0x42,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x73,0x42,0x2c,0x6b,0x42,0x41,0x41,0x71,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x74,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x72,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x74,0x42,0x2c,0x45,0x41,0x41,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x4b,0x41,0x41,0x39,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x72,0x42,0x2c,0x6b,0x42,0x41,0x41,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x32,0x47,0x2c,0x45,0x41,0x41,0x47,0x31,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x55,0x41,0x41,0x55,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x35,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x78,0x58,0x2c,0x53,0x41,0x41,0x53,0x32,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x74,0x42,0x2c,0x47,0x41,0x41,0x32,0x47,0x2c,0x4f,0x41,0x41,0x78,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x59,0x41,0x41,0x59,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x6f,0x74,0x42,0x2c,0x32,0x43,0x41,0x41,0x32,0x43,0x66,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x51,0x41,0x41,0x51,0x69,0x61,0x2c,0x47,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x45,0x74,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x70,0x61,0x2c,0x55,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x62,0x2c,0x47,0x41,0x41,0x47,0x72,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x78,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x72,0x42,0x2c,0x30,0x43,0x41,0x41,0x30,0x43,0x70,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x49,0x2c,0x49,0x41,0x41,0x49,0x4a,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x49,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x45,0x74,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x49,0x2c,0x49,0x41,0x41,0x49,0x48,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x47,0x72,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x74,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x64,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x68,0x57,0x2c,0x53,0x41,0x41,0x53,0x30,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x45,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x78,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x56,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x6e,0x56,0x2c,0x45,0x41,0x41,0x45,0x6f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6a,0x59,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x38,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x7a,0x71,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x59,0x2c,0x47,0x41,0x41,0x47,0x77,0x61,0x2c,0x49,0x41,0x41,0x49,0x6a,0x73,0x42,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x34,0x54,0x2c,0x47,0x41,0x41,0x45,0x70,0x56,0x2c,0x45,0x41,0x41,0x45,0x75,0x74,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x30,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x37,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x74,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6a,0x56,0x2c,0x53,0x41,0x41,0x53,0x6f,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x36,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x6a,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x31,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x71,0x53,0x2c,0x47,0x41,0x41,0x47,0x74,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6f,0x53,0x2c,0x47,0x41,0x41,0x47,0x37,0x54,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x75,0x49,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x31,0x49,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x70,0x61,0x2c,0x47,0x41,0x41,0x47,0x37,0x54,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6b,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x73,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x53,0x41,0x41,0x53,0x30,0x63,0x2c,0x47,0x41,0x41,0x47,0x70,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x71,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x75,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x49,0x36,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x47,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x43,0x6a,0x65,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x33,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x75,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x55,0x41,0x41,0x55,0x35,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x67,0x42,0x2c,0x51,0x41,0x41,0x64,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x75,0x42,0x2c,0x59,0x41,0x41,0x6f,0x42,0x2f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x37,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x78,0x4a,0x2c,0x53,0x41,0x41,0x53,0x38,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x79,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x33,0x45,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x55,0x41,0x41,0x55,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x73,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x47,0x2c,0x53,0x41,0x41,0x53,0x72,0x45,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x43,0x2c,0x4b,0x41,0x41,0x6d,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x75,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x44,0x2c,0x47,0x41,0x41,0x47,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x4b,0x2c,0x61,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x6f,0x44,0x2c,0x51,0x41,0x41,0x37,0x43,0x6c,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x4b,0x2c,0x4b,0x41,0x41,0x59,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x75,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x2b,0x42,0x2c,0x51,0x41,0x41,0x78,0x42,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x4b,0x2c,0x4b,0x41,0x41,0x59,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x37,0x56,0x2c,0x47,0x41,0x41,0x47,0x38,0x56,0x2c,0x47,0x41,0x41,0x47,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x66,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x57,0x41,0x41,0x57,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x76,0x42,0x2c,0x59,0x41,0x41,0x59,0x6a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x76,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x61,0x41,0x41,0x59,0x6c,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x4b,0x37,0x65,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x52,0x2c,0x45,0x41,0x41,0x45,0x73,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x47,0x41,0x43,0x6c,0x66,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x59,0x2c,0x47,0x41,0x41,0x47,0x72,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x74,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x64,0x2c,0x47,0x41,0x41,0x47,0x76,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x30,0x75,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2b,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x6f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6a,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x72,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2b,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x54,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x45,0x2b,0x63,0x2c,0x49,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x54,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x45,0x2b,0x63,0x2c,0x49,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x63,0x2c,0x47,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x68,0x61,0x2c,0x53,0x41,0x41,0x53,0x79,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x77,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x63,0x2c,0x47,0x41,0x41,0x47,0x78,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x75,0x42,0x2c,0x49,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x7a,0x75,0x42,0x2c,0x45,0x41,0x41,0x6b,0x47,0x2c,0x49,0x41,0x41,0x2f,0x46,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x51,0x41,0x41,0x51,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4f,0x41,0x41,0x67,0x42,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4f,0x41,0x41,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x6a,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x67,0x42,0x41,0x41,0x6d,0x42,0x7a,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x59,0x2c,0x47,0x41,0x41,0x47,0x72,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x71,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x6a,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x4e,0x32,0x4c,0x2c,0x47,0x41,0x41,0x47,0x78,0x76,0x42,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x67,0x44,0x2c,0x4b,0x41,0x41,0x37,0x42,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x70,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x65,0x41,0x41,0x79,0x42,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x38,0x52,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x68,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x6a,0x42,0x2c,0x59,0x41,0x41,0x67,0x42,0x35,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x63,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x77,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x44,0x2c,0x47,0x41,0x41,0x47,0x78,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6a,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x6a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x6a,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x34,0x4b,0x2c,0x47,0x41,0x43,0x6a,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x68,0x44,0x2c,0x47,0x41,0x41,0x47,0x78,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x36,0x54,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x4c,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x33,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6a,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x4c,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x49,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x33,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x38,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x73,0x42,0x2c,0x45,0x41,0x41,0x47,0x6f,0x55,0x2c,0x77,0x42,0x41,0x43,0x68,0x4d,0x2c,0x53,0x41,0x41,0x53,0x6b,0x59,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x58,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x76,0x42,0x2c,0x4d,0x41,0x41,0x69,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x58,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4f,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x78,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x61,0x41,0x41,0x61,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x53,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x77,0x42,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x53,0x7a,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x2f,0x63,0x2c,0x53,0x41,0x41,0x53,0x6f,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x75,0x43,0x2c,0x4d,0x41,0x41,0x70,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x55,0x41,0x41,0x55,0x67,0x4a,0x2c,0x53,0x41,0x41,0x53,0x6a,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x44,0x2c,0x47,0x41,0x41,0x53,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x4e,0x2c,0x47,0x41,0x41,0x47,0x6f,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x72,0x77,0x42,0x2c,0x47,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x73,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x77,0x42,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x66,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x4f,0x41,0x41,0x65,0x7a,0x47,0x2c,0x45,0x41,0x41,0x45,0x77,0x47,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x43,0x72,0x4d,0x2c,0x53,0x41,0x41,0x53,0x2b,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x37,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x32,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6b,0x57,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x49,0x41,0x41,0x49,0x6e,0x65,0x2c,0x45,0x41,0x41,0x45,0x79,0x46,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x49,0x41,0x41,0x49,0x6c,0x65,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x46,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x73,0x43,0x2c,0x4f,0x41,0x41,0x6e,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x4b,0x75,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x78,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x59,0x6c,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x56,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x4d,0x78,0x42,0x2c,0x45,0x41,0x41,0x36,0x43,0x2c,0x51,0x41,0x41,0x6a,0x42,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x59,0x41,0x41,0x36,0x42,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x4f,0x41,0x41,0x51,0x74,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x7a,0x52,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x53,0x7a,0x52,0x2c,0x49,0x41,0x41,0x72,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x7a,0x52,0x2c,0x45,0x41,0x41,0x71,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x47,0x41,0x43,0x7a,0x64,0x2c,0x4f,0x41,0x44,0x34,0x64,0x44,0x2c,0x47,0x41,0x43,0x37,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x59,0x41,0x41,0x59,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x55,0x31,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4d,0x41,0x41,0x57,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x74,0x42,0x2c,0x49,0x41,0x41,0x4b,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x4b,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x47,0x52,0x2c,0x49,0x41,0x41,0x49,0x71,0x43,0x2c,0x45,0x41,0x41,0x55,0x69,0x4e,0x2c,0x45,0x41,0x41,0x45,0x68,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x6e,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x48,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x65,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x70,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x45,0x2c,0x57,0x41,0x41,0x57,0x39,0x42,0x2c,0x47,0x41,0x41,0x49,0x38,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x51,0x41,0x41,0x61,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x51,0x41,0x41,0x53,0x58,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x49,0x41,0x41,0x49,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x74,0x42,0x2c,0x49,0x41,0x41,0x4b,0x77,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x53,0x77,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x43,0x6a,0x66,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6a,0x58,0x2c,0x45,0x41,0x41,0x45,0x69,0x58,0x2c,0x65,0x41,0x41,0x65,0x6c,0x58,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x36,0x67,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x69,0x42,0x41,0x41,0x73,0x42,0x35,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x74,0x42,0x2c,0x49,0x41,0x41,0x4b,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4d,0x6f,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x51,0x2c,0x45,0x41,0x41,0x45,0x68,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4d,0x41,0x41,0x57,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x38,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x4b,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x4b,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x76,0x42,0x2c,0x49,0x41,0x41,0x4b,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x49,0x41,0x41,0x49,0x6c,0x65,0x2c,0x45,0x41,0x41,0x45,0x30,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x76,0x42,0x2c,0x49,0x41,0x43,0x6a,0x66,0x38,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x76,0x42,0x2c,0x49,0x41,0x41,0x4b,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x45,0x2c,0x45,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x47,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x6e,0x42,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x47,0x2c,0x4f,0x41,0x41,0x6d,0x42,0x78,0x47,0x2c,0x45,0x41,0x41,0x45,0x75,0x47,0x2c,0x55,0x41,0x41,0x55,0x74,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x30,0x49,0x2c,0x47,0x41,0x41,0x47,0x33,0x49,0x2c,0x49,0x41,0x41,0x49,0x32,0x45,0x2c,0x45,0x41,0x41,0x47,0x33,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6a,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x63,0x2c,0x45,0x41,0x41,0x45,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x63,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x69,0x42,0x79,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x78,0x42,0x2c,0x45,0x41,0x43,0x70,0x66,0x43,0x2c,0x47,0x41,0x44,0x77,0x65,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x47,0x2c,0x4f,0x41,0x43,0x78,0x65,0x76,0x47,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x55,0x41,0x41,0x55,0x68,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6f,0x48,0x2c,0x47,0x41,0x41,0x47,0x31,0x49,0x2c,0x49,0x41,0x41,0x49,0x30,0x45,0x2c,0x45,0x41,0x41,0x47,0x31,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x50,0x2c,0x45,0x41,0x41,0x45,0x68,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x34,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x77,0x42,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x6e,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x49,0x41,0x41,0x49,0x68,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x32,0x43,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x74,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x49,0x41,0x41,0x49,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x57,0x33,0x63,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x32,0x43,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x45,0x41,0x41,0x74,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x49,0x41,0x41,0x49,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x57,0x33,0x63,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x43,0x2c,0x45,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x76,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x46,0x2c,0x4f,0x41,0x41,0x75,0x42,0x6a,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x46,0x2c,0x55,0x41,0x41,0x55,0x2f,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6d,0x48,0x2c,0x47,0x41,0x41,0x47,0x70,0x48,0x2c,0x49,0x41,0x41,0x49,0x6f,0x44,0x2c,0x45,0x41,0x41,0x47,0x70,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x77,0x42,0x77,0x50,0x2c,0x45,0x41,0x41,0x45,0x2f,0x51,0x2c,0x45,0x41,0x41,0x6e,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x49,0x41,0x41,0x49,0x68,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x57,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x39,0x66,0x2c,0x53,0x41,0x41,0x53,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x59,0x2c,0x45,0x41,0x41,0x45,0x76,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x48,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x58,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x34,0x57,0x2c,0x45,0x41,0x41,0x45,0x6d,0x49,0x2c,0x45,0x41,0x41,0x45,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6a,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x45,0x41,0x41,0x45,0x72,0x58,0x2c,0x57,0x41,0x41,0x57,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x58,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x34,0x57,0x2c,0x45,0x41,0x41,0x45,0x39,0x58,0x2c,0x45,0x41,0x41,0x45,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x46,0x2c,0x49,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x6f,0x42,0x2c,0x49,0x41,0x41,0x6b,0x42,0x2c,0x51,0x41,0x41,0x64,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x45,0x41,0x41,0x45,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x6a,0x42,0x2c,0x4d,0x41,0x41,0x63,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x73,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x59,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x67,0x58,0x2c,0x45,0x41,0x41,0x45,0x6c,0x59,0x2c,0x45,0x41,0x41,0x45,0x6b,0x59,0x2c,0x47,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x58,0x77,0x46,0x2c,0x49,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x47,0x41,0x41,0x55,0x76,0x6a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x6f,0x42,0x2c,0x49,0x41,0x41,0x73,0x42,0x2c,0x51,0x41,0x41,0x6c,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x49,0x2c,0x45,0x41,0x41,0x45,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x7a,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x6a,0x42,0x2c,0x4d,0x41,0x41,0x63,0x39,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x58,0x2c,0x57,0x41,0x41,0x57,0x79,0x58,0x2c,0x45,0x41,0x41,0x45,0x33,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x43,0x76,0x66,0x30,0x53,0x2c,0x45,0x41,0x41,0x45,0x39,0x4b,0x2c,0x49,0x41,0x41,0x49,0x67,0x4c,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x39,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x63,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x71,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x59,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x2b,0x57,0x2c,0x45,0x41,0x41,0x45,0x6a,0x59,0x2c,0x45,0x41,0x41,0x45,0x69,0x59,0x2c,0x47,0x41,0x41,0x75,0x44,0x2c,0x4f,0x41,0x41,0x70,0x44,0x6a,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x6d,0x42,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x47,0x30,0x75,0x42,0x2c,0x49,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x47,0x41,0x41,0x55,0x76,0x6a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6d,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x68,0x42,0x2c,0x45,0x41,0x41,0x47,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x58,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x66,0x38,0x46,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x33,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x43,0x2c,0x49,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x5a,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x6d,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x72,0x50,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x48,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x72,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x73,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x49,0x2c,0x49,0x41,0x41,0x49,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x72,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x6e,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x66,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x48,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x6a,0x59,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x59,0x2c,0x45,0x41,0x41,0x45,0x6a,0x59,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x36,0x57,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x45,0x41,0x41,0x45,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x50,0x2c,0x45,0x41,0x41,0x45,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x6e,0x68,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x58,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6a,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x58,0x2c,0x45,0x41,0x41,0x45,0x74,0x58,0x2c,0x57,0x41,0x41,0x57,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x50,0x2c,0x47,0x41,0x41,0x47,0x72,0x50,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x68,0x58,0x2c,0x51,0x41,0x41,0x51,0x36,0x57,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x2f,0x58,0x2c,0x45,0x41,0x41,0x45,0x69,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x45,0x41,0x41,0x45,0x73,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x43,0x7a,0x66,0x75,0x50,0x2c,0x47,0x41,0x41,0x47,0x30,0x64,0x2c,0x49,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x73,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x49,0x2c,0x49,0x41,0x41,0x49,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x72,0x42,0x2c,0x4f,0x41,0x41,0x77,0x42,0x2c,0x51,0x41,0x41,0x6a,0x42,0x72,0x49,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x45,0x41,0x41,0x45,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x68,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x42,0x2c,0x4d,0x41,0x41,0x63,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x68,0x58,0x2c,0x51,0x41,0x41,0x51,0x34,0x57,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x4a,0x2c,0x47,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x58,0x34,0x46,0x2c,0x49,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x47,0x41,0x41,0x55,0x76,0x6a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x78,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x50,0x2c,0x49,0x41,0x41,0x49,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x73,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x49,0x2c,0x49,0x41,0x41,0x49,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x72,0x42,0x2c,0x4f,0x41,0x41,0x34,0x42,0x2c,0x51,0x41,0x41,0x72,0x42,0x72,0x49,0x2c,0x45,0x41,0x41,0x45,0x6f,0x49,0x2c,0x45,0x41,0x41,0x45,0x6c,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x50,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6e,0x68,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x42,0x2c,0x4d,0x41,0x41,0x63,0x39,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x58,0x2c,0x57,0x41,0x41,0x57,0x54,0x2c,0x45,0x41,0x41,0x45,0x75,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x53,0x2c,0x45,0x41,0x41,0x45,0x33,0x4b,0x2c,0x49,0x41,0x41,0x49,0x67,0x4c,0x2c,0x45,0x41,0x41,0x45,0x4c,0x2c,0x45,0x41,0x41,0x45,0x33,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x63,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x68,0x58,0x2c,0x51,0x41,0x41,0x51,0x34,0x57,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x45,0x41,0x41,0x45,0x4a,0x2c,0x47,0x41,0x41,0x75,0x44,0x2c,0x4f,0x41,0x41,0x70,0x44,0x39,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x52,0x2c,0x45,0x41,0x41,0x45,0x7a,0x4f,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x47,0x30,0x75,0x42,0x2c,0x49,0x41,0x41,0x47,0x4e,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6e,0x42,0x2c,0x47,0x41,0x41,0x55,0x76,0x6a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x47,0x33,0x54,0x2c,0x4f,0x41,0x48,0x34,0x54,0x2c,0x53,0x41,0x41,0x53,0x6f,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x47,0x41,0x41,0x6b,0x46,0x2c,0x47,0x41,0x41,0x2f,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x42,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x63,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x6e,0x42,0x2c,0x55,0x41,0x41,0x61,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x35,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x45,0x41,0x41,0x47,0x33,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x38,0x46,0x2c,0x45,0x41,0x43,0x37,0x68,0x42,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x63,0x2c,0x49,0x41,0x41,0x49,0x76,0x59,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x59,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x54,0x41,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x51,0x41,0x41,0x59,0x36,0x42,0x2c,0x47,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x4d,0x2c,0x55,0x41,0x41,0x53,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x6e,0x42,0x2c,0x57,0x41,0x41,0x59,0x6f,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x70,0x42,0x2c,0x63,0x41,0x41,0x63,0x68,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x57,0x41,0x41,0x57,0x39,0x42,0x2c,0x47,0x41,0x41,0x49,0x38,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x31,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x4d,0x2c,0x55,0x41,0x41,0x53,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x51,0x41,0x41,0x53,0x58,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x4d,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x6e,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x63,0x2c,0x4d,0x41,0x41,0x4f,0x7a,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x49,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x63,0x2c,0x49,0x41,0x41,0x49,0x7a,0x63,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x70,0x42,0x2c,0x49,0x41,0x41,0x4b,0x6d,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x44,0x2c,0x45,0x41,0x41,0x47,0x39,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x63,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x43,0x7a,0x66,0x33,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x59,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x7a,0x56,0x2c,0x45,0x41,0x41,0x45,0x79,0x56,0x2c,0x65,0x41,0x41,0x65,0x33,0x56,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x55,0x41,0x41,0x55,0x36,0x67,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x6e,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x76,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x43,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x55,0x41,0x41,0x53,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x48,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4d,0x6f,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x4b,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x43,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x70,0x42,0x2c,0x49,0x41,0x41,0x4b,0x36,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x69,0x42,0x77,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x64,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x45,0x2c,0x4f,0x41,0x41,0x63,0x2f,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x45,0x2c,0x55,0x41,0x41,0x55,0x58,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2b,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6a,0x42,0x2c,0x45,0x41,0x41,0x47,0x6c,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x75,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x55,0x41,0x41,0x53,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x4b,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x43,0x6e,0x66,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x70,0x42,0x2c,0x49,0x41,0x41,0x4b,0x36,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x36,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x64,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x65,0x2c,0x47,0x41,0x41,0x47,0x66,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x49,0x2c,0x47,0x41,0x41,0x47,0x35,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x66,0x2c,0x51,0x41,0x41,0x51,0x67,0x61,0x2c,0x47,0x41,0x41,0x45,0x6f,0x46,0x2c,0x49,0x41,0x41,0x49,0x76,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x63,0x41,0x41,0x63,0x35,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x36,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x2b,0x48,0x2c,0x49,0x41,0x41,0x70,0x48,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x39,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x39,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x78,0x42,0x2c,0x47,0x41,0x41,0x4d,0x44,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6e,0x5a,0x2c,0x53,0x41,0x41,0x53,0x73,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x75,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x73,0x42,0x2c,0x51,0x41,0x41,0x6a,0x42,0x7a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x65,0x41,0x41,0x75,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x79,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x47,0x2c,0x47,0x41,0x41,0x47,0x72,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x73,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x74,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x79,0x42,0x2c,0x63,0x41,0x41,0x63,0x74,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x73,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x30,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x53,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x61,0x41,0x41,0x61,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x4e,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x78,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x76,0x59,0x2c,0x53,0x41,0x41,0x53,0x30,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x79,0x42,0x2c,0x59,0x41,0x41,0x2b,0x45,0x2c,0x4f,0x41,0x41,0x6e,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x7a,0x79,0x42,0x2c,0x45,0x41,0x41,0x53,0x30,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x71,0x43,0x2c,0x49,0x41,0x41,0x33,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x52,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x78,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x2c,0x51,0x41,0x41,0x64,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x61,0x41,0x41,0x71,0x42,0x76,0x52,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x36,0x69,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x55,0x41,0x41,0x55,0x68,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x6f,0x68,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x2f,0x65,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x63,0x41,0x41,0x63,0x2f,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x55,0x41,0x41,0x55,0x68,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x7a,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6a,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x7a,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x43,0x2c,0x65,0x41,0x41,0x65,0x6c,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x65,0x41,0x41,0x65,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x7a,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x51,0x41,0x41,0x51,0x72,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x45,0x2c,0x47,0x41,0x41,0x47,0x76,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x75,0x7a,0x42,0x2c,0x55,0x41,0x41,0x55,0x78,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x75,0x74,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x74,0x52,0x2c,0x53,0x41,0x41,0x53,0x79,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x67,0x42,0x2c,0x47,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x78,0x42,0x2c,0x4f,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x78,0x42,0x2c,0x51,0x41,0x41,0x2b,0x44,0x2c,0x4f,0x41,0x41,0x76,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x78,0x42,0x2c,0x51,0x41,0x41,0x51,0x6e,0x7a,0x42,0x2c,0x45,0x41,0x41,0x53,0x32,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x6f,0x46,0x2c,0x4f,0x41,0x41,0x6e,0x45,0x2c,0x51,0x41,0x41,0x68,0x42,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x63,0x41,0x41,0x73,0x42,0x31,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x31,0x79,0x42,0x2c,0x45,0x41,0x41,0x53,0x32,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x6e,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x65,0x41,0x41,0x30,0x42,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x46,0x6a,0x7a,0x42,0x2c,0x49,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x77,0x42,0x6a,0x79,0x42,0x2c,0x47,0x41,0x41,0x6c,0x42,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x61,0x41,0x41,0x6b,0x42,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x70,0x56,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x72,0x5a,0x2c,0x53,0x41,0x41,0x53,0x36,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x76,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x51,0x2c,0x47,0x41,0x41,0x6f,0x42,0x74,0x42,0x2c,0x4b,0x41,0x41,0x68,0x42,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x78,0x42,0x2c,0x61,0x41,0x41,0x6d,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x76,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x69,0x42,0x41,0x41,0x34,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x36,0x78,0x42,0x2c,0x55,0x41,0x41,0x55,0x74,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x7a,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x74,0x42,0x2c,0x51,0x41,0x41,0x51,0x78,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x53,0x41,0x41,0x53,0x7a,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x78,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x69,0x48,0x2c,0x4f,0x41,0x41,0x2f,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x38,0x79,0x42,0x2c,0x55,0x41,0x41,0x55,0x78,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x78,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x78,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x78,0x42,0x2c,0x65,0x41,0x41,0x65,0x78,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x51,0x41,0x41,0x51,0x37,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x63,0x41,0x41,0x53,0x72,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x37,0x79,0x42,0x2c,0x45,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x6f,0x42,0x2c,0x51,0x41,0x41,0x6e,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x7a,0x42,0x2c,0x67,0x42,0x41,0x41,0x77,0x42,0x68,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x68,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x4b,0x41,0x43,0x6e,0x66,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x7a,0x42,0x2c,0x65,0x41,0x41,0x65,0x6a,0x7a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x70,0x42,0x2c,0x53,0x41,0x41,0x53,0x2b,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x46,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x78,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x74,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x78,0x42,0x2c,0x65,0x41,0x41,0x65,0x72,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x74,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6a,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6b,0x4c,0x2c,0x45,0x41,0x41,0x45,0x68,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x54,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x6e,0x4c,0x2c,0x47,0x41,0x41,0x68,0x42,0x6d,0x4c,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x68,0x42,0x2c,0x61,0x41,0x41,0x67,0x42,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6d,0x42,0x76,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4c,0x2c,0x45,0x41,0x41,0x45,0x69,0x69,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x72,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6b,0x69,0x42,0x2c,0x65,0x41,0x41,0x65,0x70,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x78,0x42,0x2c,0x55,0x41,0x41,0x36,0x42,0x2c,0x49,0x41,0x41,0x6e,0x42,0x72,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x50,0x2c,0x45,0x41,0x41,0x45,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x74,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x68,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x71,0x43,0x2c,0x55,0x41,0x41,0x55,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x74,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x4e,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x49,0x41,0x41,0x49,0x75,0x74,0x42,0x2c,0x51,0x41,0x41,0x51,0x37,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x74,0x42,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x53,0x41,0x41,0x53,0x39,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x74,0x42,0x2c,0x53,0x41,0x43,0x76,0x66,0x78,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x38,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x6a,0x42,0x2c,0x45,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x52,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x53,0x36,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x66,0x32,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x4b,0x2c,0x53,0x41,0x41,0x69,0x43,0x2c,0x43,0x41,0x41,0x43,0x31,0x43,0x2c,0x45,0x41,0x41,0x45,0x6c,0x49,0x2c,0x45,0x41,0x41,0x45,0x37,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x58,0x2c,0x4f,0x41,0x41,0x65,0x2c,0x4d,0x41,0x41,0x54,0x6d,0x58,0x2c,0x45,0x41,0x41,0x45,0x6e,0x58,0x2c,0x4d,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x73,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x33,0x43,0x73,0x66,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6f,0x42,0x41,0x41,0x64,0x6e,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x4b,0x2c,0x53,0x41,0x41,0x67,0x43,0x35,0x4b,0x2c,0x45,0x41,0x41,0x45,0x37,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x49,0x2c,0x53,0x41,0x41,0x65,0x2c,0x49,0x41,0x41,0x53,0x6d,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x36,0x79,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x74,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x39,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x74,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x65,0x2c,0x51,0x41,0x41,0x5a,0x73,0x66,0x2c,0x45,0x41,0x41,0x45,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x78,0x42,0x2c,0x53,0x41,0x41,0x69,0x42,0x35,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x78,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x78,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x71,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x73,0x43,0x2c,0x55,0x41,0x41,0x55,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x43,0x2c,0x45,0x41,0x41,0x45,0x39,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x4e,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x49,0x41,0x41,0x49,0x75,0x74,0x42,0x2c,0x51,0x41,0x41,0x51,0x37,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x74,0x42,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x53,0x41,0x41,0x53,0x39,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x74,0x42,0x2c,0x53,0x41,0x41,0x53,0x78,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6b,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x76,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x76,0x42,0x2c,0x45,0x41,0x43,0x33,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x5a,0x70,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x72,0x42,0x2c,0x4d,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x73,0x42,0x2c,0x51,0x41,0x41,0x6e,0x42,0x74,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x53,0x41,0x41,0x69,0x42,0x2c,0x4d,0x41,0x41,0x65,0x76,0x74,0x42,0x2c,0x47,0x41,0x41,0x4a,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x72,0x42,0x2c,0x47,0x41,0x41,0x4d,0x73,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x78,0x42,0x2c,0x65,0x41,0x41,0x65,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x73,0x47,0x2c,0x47,0x41,0x41,0x35,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x69,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6b,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x78,0x42,0x2c,0x55,0x41,0x41,0x55,0x6c,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x78,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x72,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x78,0x42,0x2c,0x65,0x41,0x41,0x65,0x6c,0x69,0x42,0x2c,0x45,0x41,0x41,0x34,0x42,0x2c,0x51,0x41,0x41,0x31,0x42,0x2f,0x51,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x52,0x2c,0x61,0x41,0x41,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x57,0x41,0x41,0x57,0x31,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x38,0x42,0x2c,0x49,0x41,0x41,0x49,0x74,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x6d,0x66,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x39,0x56,0x2c,0x53,0x41,0x41,0x53,0x6b,0x44,0x2c,0x47,0x41,0x41,0x47,0x6c,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x38,0x42,0x2c,0x47,0x41,0x41,0x33,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x70,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x71,0x42,0x2c,0x47,0x41,0x41,0x70,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x32,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x49,0x2c,0x47,0x41,0x41,0x47,0x69,0x49,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x47,0x41,0x41,0x47,0x6e,0x49,0x2c,0x47,0x41,0x41,0x47,0x69,0x49,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x47,0x41,0x41,0x47,0x70,0x49,0x2c,0x47,0x41,0x41,0x47,0x69,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x49,0x2c,0x47,0x41,0x41,0x47,0x76,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x6d,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6e,0x53,0x2c,0x53,0x41,0x41,0x53,0x77,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x79,0x43,0x2c,0x4f,0x41,0x41,0x74,0x43,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x6b,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x69,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x67,0x49,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x6e,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x55,0x41,0x41,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4b,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x6b,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x7a,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x4a,0x2c,0x61,0x41,0x41,0x61,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x6b,0x45,0x33,0x4a,0x2c,0x45,0x41,0x41,0x45,0x32,0x4a,0x2c,0x47,0x41,0x41,0x72,0x43,0x33,0x4a,0x2c,0x47,0x41,0x41,0x76,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x50,0x2c,0x57,0x41,0x41,0x57,0x7a,0x50,0x2c,0x47,0x41,0x41,0x4d,0x38,0x4a,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x4a,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x30,0x42,0x2c,0x53,0x41,0x41,0x6b,0x42,0x74,0x49,0x2c,0x47,0x41,0x41,0x45,0x69,0x49,0x2c,0x49,0x41,0x41,0x49,0x68,0x49,0x2c,0x47,0x41,0x41,0x45,0x67,0x49,0x2c,0x47,0x41,0x41,0x47,0x6e,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x49,0x2c,0x47,0x41,0x41,0x45,0x69,0x49,0x2c,0x49,0x41,0x41,0x49,0x6a,0x49,0x2c,0x47,0x41,0x41,0x45,0x6b,0x49,0x2c,0x49,0x41,0x41,0x49,0x6c,0x49,0x2c,0x47,0x41,0x41,0x45,0x6d,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x4b,0x2c,0x47,0x41,0x41,0x47,0x33,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x6e,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x73,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x6a,0x69,0x42,0x2c,0x53,0x41,0x41,0x61,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x30,0x4a,0x2c,0x47,0x41,0x41,0x47,0x33,0x4a,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x69,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x67,0x49,0x2c,0x47,0x41,0x41,0x47,0x6c,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x6e,0x53,0x2c,0x49,0x41,0x41,0x49,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x69,0x49,0x2c,0x49,0x41,0x41,0x49,0x6a,0x49,0x2c,0x47,0x41,0x41,0x45,0x6b,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x51,0x2c,0x47,0x41,0x41,0x45,0x33,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x43,0x78,0x5a,0x2c,0x53,0x41,0x41,0x53,0x34,0x49,0x2c,0x47,0x41,0x41,0x47,0x39,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x49,0x41,0x41,0x6d,0x42,0x2c,0x51,0x41,0x41,0x66,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x61,0x41,0x41,0x71,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x63,0x2c,0x45,0x41,0x41,0x45,0x32,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x55,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x53,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x71,0x46,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x39,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x53,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x51,0x41,0x41,0x51,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x53,0x41,0x41,0x53,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x38,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x43,0x72,0x63,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x6a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x30,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x49,0x41,0x41,0x49,0x67,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x31,0x42,0x2c,0x38,0x42,0x41,0x41,0x38,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x47,0x41,0x41,0x47,0x35,0x30,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2b,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x78,0x42,0x2c,0x45,0x41,0x41,0x47,0x32,0x78,0x42,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x78,0x42,0x2c,0x45,0x41,0x41,0x47,0x6f,0x55,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x79,0x64,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x51,0x41,0x41,0x51,0x46,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x71,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x68,0x57,0x2c,0x53,0x41,0x41,0x53,0x38,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x79,0x48,0x2c,0x47,0x41,0x41,0x74,0x48,0x34,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x74,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x67,0x44,0x2c,0x47,0x41,0x41,0x47,0x68,0x6a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x6f,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x4d,0x6b,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x6a,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x58,0x69,0x30,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6c,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x75,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2b,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6a,0x42,0x2c,0x51,0x41,0x41,0x51,0x67,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x2b,0x44,0x2c,0x47,0x41,0x41,0x39,0x44,0x52,0x2c,0x47,0x41,0x41,0x47,0x68,0x6a,0x42,0x2c,0x51,0x41,0x41,0x51,0x69,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x31,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x45,0x72,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4d,0x7a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x71,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x72,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x34,0x31,0x42,0x2c,0x47,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4c,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x53,0x35,0x31,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x2f,0x59,0x2c,0x53,0x41,0x41,0x53,0x73,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x74,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x68,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x44,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x38,0x43,0x2c,0x4f,0x41,0x41,0x78,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x45,0x2c,0x47,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x45,0x31,0x6a,0x42,0x2c,0x63,0x41,0x41,0x63,0x34,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x7a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x45,0x74,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x53,0x79,0x31,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x78,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x39,0x6a,0x42,0x2c,0x55,0x41,0x41,0x55,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x72,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x45,0x31,0x6a,0x42,0x2c,0x63,0x41,0x41,0x63,0x34,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x74,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x78,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x78,0x31,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x55,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x36,0x52,0x2c,0x65,0x41,0x41,0x50,0x32,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x78,0x31,0x42,0x2c,0x47,0x41,0x41,0x71,0x42,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x6d,0x68,0x42,0x2c,0x55,0x41,0x41,0x55,0x77,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x43,0x2c,0x55,0x41,0x41,0x55,0x75,0x44,0x2c,0x55,0x41,0x41,0x55,0x66,0x2c,0x47,0x41,0x41,0x45,0x65,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x42,0x2c,0x47,0x41,0x41,0x45,0x67,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x45,0x2c,0x47,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x45,0x31,0x6a,0x42,0x2c,0x63,0x41,0x41,0x63,0x34,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x7a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x45,0x74,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x31,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6a,0x65,0x2c,0x53,0x41,0x41,0x53,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6e,0x44,0x2c,0x53,0x41,0x41,0x53,0x30,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x32,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x32,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x35,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x30,0x42,0x2c,0x47,0x41,0x41,0x45,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x30,0x42,0x2c,0x55,0x41,0x41,0x55,0x37,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x76,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x30,0x42,0x2c,0x55,0x41,0x41,0x55,0x39,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x78,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x6e,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x50,0x2c,0x45,0x41,0x41,0x45,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x36,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x4c,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x73,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x63,0x41,0x41,0x63,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x57,0x41,0x41,0x57,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x63,0x41,0x41,0x63,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x2f,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x79,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x63,0x41,0x41,0x63,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x63,0x41,0x43,0x6e,0x67,0x42,0x43,0x2c,0x57,0x41,0x41,0x57,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x47,0x41,0x41,0x47,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x48,0x2c,0x45,0x41,0x41,0x45,0x75,0x45,0x2c,0x47,0x41,0x41,0x45,0x70,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x6a,0x6a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x64,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x75,0x67,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x55,0x41,0x41,0x55,0x72,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x32,0x42,0x2c,0x55,0x41,0x41,0x55,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x32,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x78,0x31,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x6e,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x79,0x42,0x2c,0x61,0x41,0x41,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x70,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x57,0x41,0x41,0x57,0x31,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x2b,0x32,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x43,0x39,0x58,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x32,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x32,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x35,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x32,0x42,0x2c,0x53,0x41,0x41,0x53,0x78,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x31,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x7a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x31,0x42,0x2c,0x51,0x41,0x41,0x51,0x6c,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x76,0x42,0x2c,0x57,0x41,0x41,0x57,0x78,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x47,0x41,0x41,0x47,0x38,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x75,0x67,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x32,0x42,0x2c,0x59,0x41,0x41,0x59,0x74,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x55,0x41,0x41,0x55,0x74,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x32,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x74,0x31,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x32,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x70,0x57,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x51,0x2c,0x63,0x41,0x41,0x63,0x70,0x51,0x2c,0x47,0x41,0x41,0x73,0x45,0x2c,0x47,0x41,0x41,0x6e,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x71,0x51,0x2c,0x63,0x41,0x41,0x63,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x35,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x31,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x61,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x49,0x41,0x41,0x4f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x31,0x42,0x2c,0x63,0x41,0x41,0x63,0x74,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x7a,0x42,0x2c,0x49,0x41,0x41,0x75,0x42,0x2c,0x45,0x41,0x41,0x70,0x42,0x41,0x2c,0x47,0x41,0x41,0x45,0x35,0x6a,0x42,0x2c,0x63,0x41,0x41,0x63,0x31,0x4c,0x2c,0x49,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x75,0x44,0x2c,0x47,0x41,0x41,0x74,0x44,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x51,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x48,0x75,0x31,0x42,0x2c,0x4b,0x41,0x41,0x51,0x71,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x75,0x33,0x42,0x2c,0x59,0x41,0x41,0x59,0x74,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x47,0x41,0x41,0x6d,0x42,0x2c,0x51,0x41,0x41,0x68,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x78,0x43,0x2c,0x63,0x41,0x41,0x73,0x42,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x32,0x33,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x43,0x2c,0x59,0x41,0x41,0x59,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x33,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x37,0x33,0x42,0x2c,0x49,0x41,0x41,0x67,0x42,0x2c,0x51,0x41,0x41,0x58,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x33,0x42,0x2c,0x51,0x41,0x41,0x67,0x42,0x35,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x33,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x37,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x6c,0x66,0x2c,0x53,0x41,0x41,0x53,0x79,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x33,0x42,0x2c,0x59,0x41,0x41,0x59,0x2f,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x33,0x42,0x2c,0x49,0x41,0x41,0x49,0x38,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x73,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x34,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x33,0x42,0x2c,0x49,0x41,0x41,0x49,0x38,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x33,0x42,0x2c,0x59,0x41,0x41,0x59,0x76,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x75,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2b,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x6c,0x51,0x2c,0x53,0x41,0x41,0x53,0x69,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x32,0x42,0x2c,0x4b,0x41,0x41,0x38,0x4d,0x2c,0x4d,0x41,0x41,0x7a,0x4d,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x74,0x32,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x55,0x41,0x41,0x55,0x68,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6f,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x38,0x45,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x4c,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x46,0x2c,0x47,0x41,0x41,0x47,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x68,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x32,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x33,0x42,0x2c,0x53,0x41,0x41,0x53,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x50,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x4d,0x2c,0x47,0x41,0x41,0x45,0x76,0x31,0x42,0x2c,0x47,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x35,0x50,0x2c,0x53,0x41,0x41,0x53,0x77,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x38,0x4f,0x2c,0x4f,0x41,0x41,0x33,0x4f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x34,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x34,0x42,0x2c,0x51,0x41,0x41,0x51,0x6c,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x73,0x42,0x2c,0x51,0x41,0x41,0x68,0x42,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x78,0x43,0x2c,0x63,0x41,0x41,0x73,0x42,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x32,0x33,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x43,0x2c,0x59,0x41,0x41,0x59,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x33,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x78,0x42,0x2c,0x47,0x41,0x41,0x6d,0x42,0x2c,0x51,0x41,0x41,0x66,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x33,0x42,0x2c,0x59,0x41,0x41,0x6f,0x42,0x33,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x33,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x33,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x33,0x42,0x2c,0x47,0x41,0x41,0x57,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x73,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x6b,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x66,0x2c,0x47,0x41,0x41,0x45,0x35,0x6a,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x63,0x41,0x41,0x63,0x32,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x76,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x53,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x39,0x59,0x2c,0x53,0x41,0x41,0x53,0x67,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x31,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x37,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x33,0x6a,0x42,0x2c,0x63,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x5a,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x32,0x42,0x2c,0x51,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x32,0x42,0x2c,0x4d,0x41,0x41,0x6d,0x43,0x2c,0x59,0x41,0x41,0x35,0x42,0x35,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x63,0x41,0x41,0x63,0x32,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2b,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x35,0x6a,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x63,0x41,0x41,0x63,0x32,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x76,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x76,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x78,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x68,0x58,0x2c,0x53,0x41,0x41,0x53,0x32,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x47,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x47,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x6e,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x51,0x41,0x41,0x31,0x45,0x2c,0x43,0x41,0x41,0x32,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x36,0x43,0x2c,0x4f,0x41,0x41,0x31,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x6e,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x39,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x59,0x77,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x47,0x41,0x41,0x47,0x6a,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x32,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x47,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x55,0x44,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x37,0x5a,0x2c,0x53,0x41,0x41,0x53,0x67,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x32,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x55,0x44,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x48,0x6f,0x31,0x42,0x2c,0x4b,0x41,0x41,0x63,0x74,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x7a,0x42,0x2c,0x59,0x41,0x41,0x59,0x68,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x7a,0x42,0x2c,0x57,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x47,0x5a,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x33,0x52,0x2c,0x49,0x41,0x41,0x45,0x71,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x67,0x42,0x2c,0x47,0x41,0x41,0x45,0x70,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x7a,0x42,0x2c,0x57,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x57,0x2f,0x79,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6e,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x64,0x2c,0x57,0x41,0x41,0x57,0x71,0x64,0x2c,0x47,0x41,0x41,0x47,0x72,0x64,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x68,0x59,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x6f,0x56,0x2c,0x47,0x41,0x41,0x45,0x6e,0x56,0x2c,0x45,0x41,0x41,0x45,0x6d,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x64,0x2c,0x57,0x41,0x41,0x57,0x78,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x32,0x33,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x6b,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x43,0x31,0x64,0x2c,0x53,0x41,0x41,0x53,0x75,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x47,0x41,0x41,0x6b,0x45,0x2c,0x47,0x41,0x41,0x2f,0x44,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x75,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x31,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x32,0x42,0x2c,0x65,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x53,0x6d,0x49,0x2c,0x47,0x41,0x41,0x47,0x74,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x51,0x41,0x41,0x64,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x49,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x57,0x77,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x58,0x67,0x34,0x42,0x2c,0x4d,0x41,0x41,0x67,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x2f,0x4b,0x2c,0x53,0x41,0x41,0x53,0x30,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x67,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x31,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x32,0x42,0x2c,0x65,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x6d,0x49,0x2c,0x47,0x41,0x41,0x47,0x74,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x51,0x41,0x41,0x69,0x43,0x2c,0x51,0x41,0x41,0x78,0x42,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x32,0x42,0x2c,0x71,0x42,0x41,0x41,0x38,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x6a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x32,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x71,0x43,0x2c,0x47,0x41,0x41,0x6c,0x43,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x31,0x42,0x2c,0x65,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x47,0x72,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x31,0x42,0x2c,0x57,0x41,0x41,0x57,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x4b,0x30,0x64,0x2c,0x47,0x41,0x41,0x47,0x31,0x64,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x79,0x42,0x2c,0x59,0x41,0x41,0x2b,0x45,0x2c,0x4f,0x41,0x41,0x6e,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x51,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x77,0x42,0x2c,0x51,0x41,0x41,0x64,0x31,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4d,0x41,0x41,0x6f,0x42,0x77,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x62,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x33,0x42,0x2c,0x4d,0x41,0x41,0x67,0x42,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x2f,0x63,0x2c,0x53,0x41,0x41,0x53,0x38,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x49,0x41,0x41,0x49,0x75,0x31,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x73,0x31,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x45,0x2c,0x47,0x41,0x41,0x47,0x76,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x30,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x78,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x6e,0x7a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x46,0x41,0x2c,0x47,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x77,0x42,0x6a,0x79,0x42,0x2c,0x47,0x41,0x41,0x6c,0x42,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x61,0x41,0x41,0x6b,0x42,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x70,0x56,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x39,0x50,0x2c,0x49,0x41,0x41,0x49,0x6b,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x73,0x44,0x2c,0x59,0x41,0x41,0x59,0x72,0x48,0x2c,0x47,0x41,0x41,0x47,0x73,0x48,0x2c,0x59,0x41,0x41,0x59,0x37,0x44,0x2c,0x47,0x41,0x41,0x45,0x38,0x44,0x2c,0x57,0x41,0x41,0x57,0x39,0x44,0x2c,0x47,0x41,0x41,0x45,0x2b,0x44,0x2c,0x55,0x41,0x41,0x55,0x2f,0x44,0x2c,0x47,0x41,0x41,0x45,0x67,0x45,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x45,0x2c,0x47,0x41,0x41,0x45,0x69,0x45,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x6a,0x45,0x2c,0x47,0x41,0x41,0x45,0x6b,0x45,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6c,0x45,0x2c,0x47,0x41,0x41,0x45,0x6d,0x45,0x2c,0x51,0x41,0x41,0x51,0x6e,0x45,0x2c,0x47,0x41,0x41,0x45,0x6f,0x45,0x2c,0x57,0x41,0x41,0x57,0x70,0x45,0x2c,0x47,0x41,0x41,0x45,0x71,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x45,0x2c,0x47,0x41,0x41,0x45,0x73,0x45,0x2c,0x53,0x41,0x41,0x53,0x74,0x45,0x2c,0x47,0x41,0x41,0x45,0x75,0x45,0x2c,0x63,0x41,0x41,0x63,0x76,0x45,0x2c,0x47,0x41,0x41,0x45,0x77,0x45,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x78,0x45,0x2c,0x47,0x41,0x41,0x45,0x79,0x45,0x2c,0x63,0x41,0x41,0x63,0x7a,0x45,0x2c,0x47,0x41,0x41,0x45,0x30,0x45,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x31,0x45,0x2c,0x47,0x41,0x41,0x45,0x32,0x45,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x33,0x45,0x2c,0x47,0x41,0x41,0x45,0x34,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x45,0x2c,0x47,0x41,0x41,0x45,0x36,0x45,0x2c,0x30,0x42,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x49,0x31,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x79,0x44,0x2c,0x59,0x41,0x41,0x59,0x72,0x48,0x2c,0x47,0x41,0x41,0x47,0x73,0x48,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x33,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x34,0x43,0x2c,0x4f,0x41,0x41,0x7a,0x43,0x71,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x6b,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x37,0x52,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x55,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x35,0x42,0x2c,0x57,0x41,0x41,0x57,0x76,0x48,0x2c,0x47,0x41,0x41,0x47,0x77,0x48,0x2c,0x55,0x41,0x41,0x55,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x36,0x43,0x2c,0x4f,0x41,0x41,0x31,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x6e,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x39,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x59,0x75,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x43,0x33,0x66,0x2c,0x45,0x41,0x41,0x45,0x4b,0x2c,0x47,0x41,0x41,0x47,0x6a,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x35,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x68,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x76,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x35,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x2f,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x36,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x6a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x32,0x42,0x2c,0x4b,0x41,0x41,0x71,0x44,0x2c,0x4f,0x41,0x41,0x68,0x44,0x72,0x32,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x55,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x53,0x6c,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x30,0x42,0x2c,0x4b,0x41,0x41,0x6b,0x4d,0x2c,0x4f,0x41,0x41,0x37,0x4c,0x72,0x32,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x51,0x2c,0x63,0x41,0x41,0x63,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x77,0x78,0x42,0x2c,0x55,0x41,0x41,0x55,0x2f,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6f,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x38,0x45,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x4c,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x35,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x33,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2f,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x31,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x33,0x42,0x2c,0x53,0x41,0x41,0x53,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x4d,0x2c,0x47,0x41,0x41,0x45,0x76,0x31,0x42,0x2c,0x47,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x51,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x36,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x6e,0x36,0x42,0x2c,0x47,0x41,0x43,0x33,0x64,0x2c,0x4f,0x41,0x41,0x64,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x6e,0x53,0x2c,0x47,0x41,0x41,0x68,0x42,0x73,0x32,0x42,0x2c,0x4b,0x41,0x41,0x34,0x42,0x7a,0x6b,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x36,0x42,0x2c,0x53,0x41,0x41,0x53,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x6f,0x43,0x2c,0x63,0x41,0x41,0x63,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x6b,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x76,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x34,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x68,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x36,0x43,0x2c,0x4f,0x41,0x41,0x31,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x73,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x6b,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x45,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x36,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x53,0x41,0x41,0x53,0x7a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x39,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x35,0x48,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x4e,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x48,0x75,0x31,0x42,0x2c,0x4b,0x41,0x41,0x51,0x71,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x63,0x41,0x41,0x63,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x69,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x71,0x33,0x42,0x2c,0x59,0x41,0x41,0x59,0x74,0x33,0x42,0x2c,0x47,0x41,0x43,0x76,0x5a,0x2c,0x4f,0x41,0x44,0x30,0x5a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x30,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x43,0x70,0x66,0x45,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x51,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x61,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x31,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x6b,0x44,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x4d,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x75,0x42,0x2c,0x47,0x41,0x41,0x6b,0x44,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x39,0x43,0x43,0x2c,0x47,0x41,0x41,0x48,0x67,0x75,0x42,0x2c,0x4b,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x70,0x61,0x2c,0x47,0x41,0x41,0x68,0x42,0x6f,0x61,0x2c,0x49,0x41,0x41,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x6b,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x68,0x4b,0x2c,0x47,0x41,0x41,0x75,0x42,0x2c,0x47,0x41,0x41,0x50,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x31,0x42,0x2c,0x51,0x41,0x41,0x57,0x33,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x61,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x66,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x31,0x42,0x2c,0x4d,0x41,0x41,0x6d,0x42,0x33,0x72,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x4b,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x35,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x30,0x42,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x49,0x7a,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x77,0x44,0x2c,0x59,0x41,0x41,0x59,0x72,0x48,0x2c,0x47,0x41,0x41,0x47,0x73,0x48,0x2c,0x59,0x41,0x41,0x59,0x5a,0x2c,0x47,0x41,0x41,0x47,0x61,0x2c,0x57,0x41,0x41,0x57,0x76,0x48,0x2c,0x47,0x41,0x41,0x47,0x77,0x48,0x2c,0x55,0x41,0x41,0x55,0x78,0x43,0x2c,0x47,0x41,0x41,0x47,0x79,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x51,0x41,0x41,0x51,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x42,0x2c,0x57,0x41,0x41,0x57,0x76,0x44,0x2c,0x47,0x41,0x41,0x47,0x77,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x72,0x68,0x42,0x32,0x44,0x2c,0x63,0x41,0x41,0x63,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x36,0x42,0x2c,0x47,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x35,0x42,0x2c,0x47,0x41,0x41,0x5a,0x78,0x43,0x2c,0x4b,0x41,0x41,0x69,0x42,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x33,0x6a,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x57,0x41,0x41,0x67,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x72,0x43,0x35,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x4b,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x6b,0x42,0x2c,0x63,0x41,0x41,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6f,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x72,0x44,0x2c,0x47,0x41,0x41,0x47,0x73,0x44,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x72,0x44,0x2c,0x47,0x41,0x41,0x47,0x73,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x30,0x42,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x49,0x78,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x75,0x44,0x2c,0x59,0x41,0x41,0x59,0x72,0x48,0x2c,0x47,0x41,0x41,0x47,0x73,0x48,0x2c,0x59,0x41,0x41,0x59,0x5a,0x2c,0x47,0x41,0x41,0x47,0x61,0x2c,0x57,0x41,0x41,0x57,0x76,0x48,0x2c,0x47,0x41,0x41,0x47,0x77,0x48,0x2c,0x55,0x41,0x41,0x55,0x78,0x43,0x2c,0x47,0x41,0x41,0x47,0x79,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x51,0x41,0x41,0x51,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x42,0x2c,0x57,0x41,0x41,0x57,0x68,0x44,0x2c,0x47,0x41,0x41,0x47,0x69,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x44,0x2c,0x47,0x41,0x41,0x47,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x32,0x44,0x2c,0x63,0x41,0x41,0x63,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x43,0x7a,0x66,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x33,0x6a,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x57,0x41,0x41,0x67,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x72,0x43,0x72,0x44,0x2c,0x47,0x41,0x41,0x47,0x52,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x4b,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x6b,0x42,0x2c,0x63,0x41,0x41,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6f,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x72,0x44,0x2c,0x47,0x41,0x41,0x47,0x73,0x44,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x72,0x44,0x2c,0x47,0x41,0x41,0x47,0x73,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x30,0x42,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x45,0x2c,0x47,0x41,0x41,0x47,0x37,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x36,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x34,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x35,0x36,0x42,0x2c,0x4b,0x41,0x41,0x6e,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x36,0x42,0x2c,0x6b,0x42,0x41,0x41,0x34,0x42,0x2c,0x49,0x41,0x41,0x53,0x37,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x38,0x42,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x74,0x42,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x73,0x42,0x41,0x41,0x6d,0x43,0x2c,0x49,0x41,0x41,0x53,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x43,0x2c,0x55,0x41,0x41,0x55,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x72,0x64,0x2c,0x49,0x41,0x41,0x49,0x38,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x6a,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x37,0x42,0x2c,0x6b,0x42,0x41,0x41,0x69,0x42,0x31,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x52,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x43,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x6d,0x37,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x6e,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x37,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x31,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x34,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x7a,0x7a,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x7a,0x7a,0x42,0x2c,0x47,0x41,0x41,0x65,0x2c,0x51,0x41,0x41,0x5a,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4d,0x41,0x41,0x63,0x75,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x73,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x32,0x35,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x53,0x41,0x41,0x53,0x70,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x37,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x31,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x34,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x7a,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x7a,0x7a,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x7a,0x7a,0x42,0x2c,0x47,0x41,0x41,0x65,0x2c,0x51,0x41,0x41,0x5a,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4d,0x41,0x41,0x63,0x75,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x73,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x34,0x35,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x72,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x37,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x35,0x42,0x2c,0x4b,0x41,0x41,0x49,0x68,0x34,0x42,0x2c,0x45,0x41,0x43,0x6e,0x66,0x36,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x6c,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x31,0x7a,0x42,0x2c,0x47,0x41,0x41,0x65,0x2c,0x51,0x41,0x41,0x5a,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4d,0x41,0x41,0x63,0x77,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x38,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6f,0x42,0x41,0x41,0x70,0x42,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x57,0x41,0x41,0x73,0x43,0x75,0x72,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x76,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x37,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2f,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x59,0x41,0x41,0x57,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x55,0x41,0x41,0x55,0x73,0x36,0x42,0x2c,0x77,0x42,0x41,0x41,0x73,0x42,0x68,0x59,0x2c,0x47,0x41,0x41,0x47,0x74,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x31,0x53,0x2c,0x53,0x41,0x41,0x53,0x2b,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x71,0x42,0x2c,0x47,0x41,0x41,0x4f,0x33,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x37,0x42,0x2c,0x59,0x41,0x41,0x32,0x57,0x2c,0x4d,0x41,0x41,0x2f,0x56,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x68,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x51,0x41,0x41,0x79,0x42,0x7a,0x51,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x74,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x73,0x42,0x2c,0x6f,0x42,0x41,0x41,0x34,0x42,0x2c,0x49,0x41,0x41,0x53,0x6c,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x69,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x70,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x59,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x53,0x31,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x37,0x42,0x2c,0x51,0x41,0x41,0x51,0x5a,0x2c,0x47,0x41,0x41,0x47,0x68,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x37,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6c,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4b,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x57,0x41,0x41,0x59,0x32,0x63,0x2c,0x34,0x43,0x41,0x41,0x34,0x43,0x6c,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x73,0x42,0x2c,0x30,0x43,0x41,0x41,0x30,0x43,0x6c,0x72,0x42,0x2c,0x47,0x41,0x41,0x55,0x7a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x35,0x5a,0x2c,0x53,0x41,0x41,0x53,0x34,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x31,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x37,0x42,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x37,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x37,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x35,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x37,0x42,0x2c,0x6b,0x43,0x41,0x41,0x6b,0x43,0x39,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x37,0x42,0x2c,0x69,0x43,0x41,0x41,0x69,0x43,0x37,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x51,0x41,0x41,0x51,0x33,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6e,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x70,0x51,0x2c,0x53,0x41,0x41,0x53,0x4b,0x2c,0x47,0x41,0x41,0x47,0x68,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x76,0x4f,0x2c,0x45,0x41,0x41,0x45,0x6b,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x37,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x68,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x44,0x2c,0x47,0x41,0x41,0x47,0x33,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x51,0x41,0x41,0x51,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x36,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x37,0x46,0x2c,0x47,0x41,0x41,0x47,0x7a,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x32,0x43,0x2c,0x6f,0x42,0x41,0x41,0x37,0x42,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x38,0x42,0x2c,0x34,0x42,0x41,0x41,0x69,0x44,0x6c,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x65,0x41,0x41,0x65,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x38,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x78,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x36,0x42,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x7a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x31,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x36,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x6e,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x43,0x72,0x66,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6c,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x36,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x33,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x36,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x33,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x31,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x6c,0x38,0x42,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x58,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x33,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x48,0x2c,0x47,0x41,0x41,0x47,0x68,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x65,0x41,0x41,0x65,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x34,0x36,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x32,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x67,0x47,0x2c,0x45,0x41,0x41,0x47,0x31,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x61,0x41,0x41,0x61,0x6c,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x36,0x42,0x41,0x41,0x36,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x36,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x79,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x4f,0x2c,0x45,0x41,0x41,0x45,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x36,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x31,0x64,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x79,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x2b,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x4a,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x38,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x38,0x42,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x47,0x41,0x41,0x47,0x30,0x71,0x42,0x2c,0x59,0x41,0x41,0x57,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x71,0x42,0x2c,0x43,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x32,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x51,0x41,0x41,0x51,0x35,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x36,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x72,0x7a,0x42,0x2c,0x49,0x41,0x41,0x4b,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x77,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x37,0x4e,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x72,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x73,0x44,0x2c,0x4f,0x41,0x41,0x68,0x44,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x79,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x57,0x41,0x41,0x57,0x71,0x4a,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x53,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x72,0x57,0x2c,0x53,0x41,0x41,0x53,0x67,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x72,0x7a,0x42,0x2c,0x49,0x41,0x41,0x4b,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x37,0x42,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x33,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x48,0x2c,0x45,0x41,0x41,0x45,0x77,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x57,0x41,0x41,0x57,0x2b,0x49,0x2c,0x47,0x41,0x41,0x47,0x31,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x38,0x4f,0x2c,0x4f,0x41,0x41,0x70,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6c,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x57,0x41,0x41,0x57,0x2b,0x49,0x2c,0x47,0x41,0x41,0x47,0x31,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x39,0x38,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x71,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x38,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x37,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6e,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x32,0x31,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x55,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6e,0x62,0x2c,0x53,0x41,0x41,0x53,0x71,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x39,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x39,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x58,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x70,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6c,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x45,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x69,0x42,0x2c,0x4b,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x46,0x2c,0x49,0x41,0x41,0x49,0x6a,0x48,0x2c,0x4d,0x41,0x41,0x67,0x42,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6c,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x45,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x64,0x2c,0x49,0x41,0x41,0x49,0x54,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x34,0x45,0x2c,0x49,0x41,0x41,0x76,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4f,0x41,0x41,0x73,0x42,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x70,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x59,0x41,0x41,0x75,0x42,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x68,0x57,0x2c,0x53,0x41,0x41,0x53,0x32,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4f,0x41,0x41,0x65,0x74,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x75,0x52,0x2c,0x55,0x41,0x41,0x55,0x76,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x73,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x70,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x79,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6e,0x79,0x42,0x2c,0x49,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x53,0x7a,0x42,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x34,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x36,0x42,0x2c,0x45,0x41,0x41,0x47,0x6f,0x36,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x7a,0x4c,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x30,0x4c,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x73,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x52,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x6e,0x56,0x2c,0x53,0x41,0x41,0x53,0x75,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x31,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x71,0x43,0x2c,0x4f,0x41,0x41,0x6a,0x43,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x32,0x42,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x32,0x42,0x2c,0x47,0x41,0x41,0x49,0x6f,0x79,0x42,0x2c,0x49,0x41,0x41,0x32,0x45,0x31,0x44,0x2c,0x49,0x41,0x41,0x47,0x78,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x55,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x37,0x47,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2f,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x6f,0x44,0x2c,0x43,0x41,0x43,0x7a,0x4e,0x2c,0x53,0x41,0x41,0x53,0x77,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x52,0x2c,0x47,0x41,0x41,0x49,0x77,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x38,0x42,0x2c,0x53,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x2b,0x42,0x2c,0x63,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x53,0x6a,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x36,0x42,0x2c,0x65,0x41,0x41,0x6f,0x44,0x39,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x56,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x74,0x42,0x2c,0x49,0x41,0x41,0x4b,0x75,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x53,0x2c,0x49,0x41,0x41,0x72,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x79,0x45,0x2c,0x43,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x56,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x42,0x2c,0x63,0x41,0x41,0x30,0x43,0x2c,0x49,0x41,0x41,0x68,0x42,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x64,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x2b,0x42,0x2c,0x53,0x41,0x41,0x6d,0x42,0x6a,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6a,0x42,0x2c,0x49,0x41,0x41,0x51,0x37,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x4f,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x36,0x43,0x2c,0x4f,0x41,0x41,0x35,0x43,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x45,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x49,0x41,0x41,0x4b,0x77,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x31,0x62,0x2c,0x53,0x41,0x41,0x53,0x6f,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x6c,0x4d,0x2c,0x47,0x41,0x41,0x47,0x39,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x47,0x6f,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x7a,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x77,0x42,0x2c,0x47,0x41,0x41,0x73,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x4c,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x6a,0x45,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x52,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x53,0x41,0x41,0x67,0x42,0x79,0x67,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x79,0x43,0x2c,0x45,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x4d,0x2c,0x47,0x41,0x41,0x47,0x72,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x78,0x4e,0x2c,0x53,0x41,0x41,0x53,0x36,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x78,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x53,0x41,0x41,0x53,0x35,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x38,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x30,0x73,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x53,0x2c,0x47,0x41,0x41,0x45,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x49,0x7a,0x2b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x57,0x41,0x41,0x46,0x41,0x2c,0x47,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x38,0x42,0x2c,0x55,0x41,0x41,0x55,0x72,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x57,0x41,0x41,0x57,0x39,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x30,0x73,0x42,0x2c,0x55,0x41,0x41,0x55,0x76,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x2b,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x47,0x2c,0x47,0x41,0x41,0x45,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x49,0x33,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x30,0x73,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x38,0x42,0x2c,0x55,0x41,0x41,0x55,0x72,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x49,0x6e,0x39,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x43,0x74,0x66,0x45,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x38,0x42,0x2c,0x55,0x41,0x41,0x55,0x72,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x49,0x6e,0x39,0x42,0x2c,0x45,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x5a,0x73,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x55,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x32,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x76,0x42,0x2c,0x4b,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x51,0x41,0x41,0x6d,0x44,0x2c,0x4f,0x41,0x41,0x33,0x43,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x2b,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x30,0x42,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x32,0x42,0x2c,0x47,0x41,0x41,0x49,0x6f,0x79,0x42,0x2c,0x49,0x41,0x41,0x32,0x45,0x31,0x44,0x2c,0x49,0x41,0x41,0x47,0x6c,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x55,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x37,0x47,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2f,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x6f,0x44,0x2c,0x43,0x41,0x43,0x6c,0x61,0x2c,0x53,0x41,0x41,0x53,0x6f,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6f,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x79,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x52,0x73,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x38,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x77,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6e,0x4b,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2f,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x31,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x37,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x39,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x73,0x42,0x2c,0x47,0x41,0x41,0x79,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x31,0x42,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x53,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x51,0x2c,0x45,0x41,0x41,0x45,0x2b,0x37,0x42,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x6a,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x50,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x6c,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x36,0x42,0x2c,0x6b,0x43,0x41,0x41,0x6b,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x36,0x42,0x2c,0x34,0x42,0x41,0x43,0x31,0x64,0x6a,0x32,0x42,0x2c,0x49,0x41,0x41,0x49,0x72,0x45,0x2c,0x47,0x41,0x41,0x47,0x73,0x45,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x49,0x41,0x41,0x49,0x69,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x47,0x41,0x41,0x47,0x69,0x74,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x68,0x4d,0x2c,0x49,0x41,0x41,0x49,0x72,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x61,0x2c,0x53,0x41,0x41,0x53,0x30,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x37,0x68,0x42,0x2c,0x49,0x41,0x41,0x49,0x2b,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x51,0x2c,0x45,0x41,0x41,0x45,0x78,0x50,0x2c,0x47,0x41,0x41,0x47,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x68,0x4d,0x2c,0x45,0x41,0x41,0x45,0x67,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x79,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x36,0x42,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x78,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x36,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x7a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x36,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x7a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x36,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x7a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x36,0x42,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x78,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x36,0x42,0x2c,0x36,0x42,0x41,0x41,0x36,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x78,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x57,0x41,0x43,0x6c,0x66,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2f,0x4c,0x2c,0x47,0x41,0x41,0x47,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x31,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x6e,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x47,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x73,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x39,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x59,0x41,0x41,0x59,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x44,0x2c,0x47,0x41,0x41,0x47,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x51,0x41,0x41,0x77,0x42,0x2c,0x6b,0x42,0x41,0x41,0x68,0x42,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x37,0x42,0x2c,0x63,0x41,0x41,0x69,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x73,0x42,0x2c,0x47,0x41,0x41,0x79,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x31,0x42,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x53,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x2b,0x65,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x37,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x6a,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6b,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x30,0x42,0x41,0x43,0x39,0x65,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x76,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x36,0x42,0x2c,0x6b,0x43,0x41,0x41,0x6b,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x36,0x42,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x6a,0x32,0x42,0x2c,0x49,0x41,0x41,0x49,0x6d,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x2b,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x73,0x45,0x2c,0x47,0x41,0x41,0x47,0x2b,0x73,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x71,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x68,0x4d,0x2c,0x49,0x41,0x41,0x49,0x6d,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x49,0x2c,0x47,0x41,0x41,0x47,0x79,0x44,0x2c,0x47,0x41,0x41,0x47,0x70,0x61,0x2c,0x53,0x41,0x41,0x53,0x30,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x33,0x42,0x2c,0x49,0x41,0x41,0x49,0x36,0x4a,0x2c,0x47,0x41,0x41,0x47,0x39,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6a,0x4d,0x2c,0x45,0x41,0x41,0x45,0x69,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x79,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x46,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x49,0x2c,0x45,0x41,0x41,0x45,0x68,0x6a,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x4b,0x6b,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x50,0x2c,0x45,0x41,0x41,0x45,0x6f,0x39,0x42,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x39,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x39,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x72,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x39,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x78,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x39,0x42,0x2c,0x34,0x42,0x41,0x43,0x35,0x66,0x70,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x39,0x42,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x76,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x39,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x68,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x6a,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x73,0x39,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x35,0x42,0x2c,0x49,0x41,0x41,0x49,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x65,0x41,0x41,0x65,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x72,0x32,0x42,0x2c,0x49,0x41,0x41,0x49,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x65,0x41,0x41,0x65,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x69,0x58,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x67,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x53,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6a,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x39,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x35,0x42,0x2c,0x49,0x41,0x41,0x49,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x65,0x41,0x41,0x65,0x75,0x42,0x2c,0x49,0x41,0x43,0x6a,0x66,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x75,0x36,0x42,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x72,0x32,0x42,0x2c,0x49,0x41,0x41,0x49,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x65,0x41,0x41,0x65,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x6e,0x4b,0x2c,0x53,0x41,0x41,0x53,0x79,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x6e,0x51,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x47,0x41,0x41,0x47,0x34,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x38,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x34,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x72,0x42,0x2c,0x51,0x41,0x41,0x51,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x39,0x42,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x45,0x2c,0x53,0x41,0x41,0x77,0x49,0x2c,0x4f,0x41,0x41,0x2f,0x48,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x47,0x41,0x41,0x47,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6f,0x66,0x2c,0x47,0x41,0x41,0x47,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x51,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6f,0x66,0x2c,0x47,0x41,0x41,0x47,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x49,0x41,0x41,0x49,0x6f,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x6d,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x57,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x65,0x41,0x41,0x65,0x70,0x53,0x2c,0x47,0x41,0x41,0x47,0x68,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x65,0x41,0x41,0x65,0x6e,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x6e,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x72,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x46,0x2c,0x47,0x41,0x41,0x47,0x68,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x79,0x42,0x2c,0x53,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x49,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x58,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x43,0x35,0x65,0x2c,0x53,0x41,0x41,0x53,0x6b,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x75,0x43,0x2c,0x4f,0x41,0x41,0x70,0x43,0x6d,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x55,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x61,0x71,0x4c,0x71,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x62,0x31,0x4c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x35,0x74,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x64,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x75,0x51,0x2c,0x47,0x41,0x41,0x47,0x33,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x75,0x2b,0x42,0x2c,0x55,0x41,0x41,0x55,0x76,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x2b,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x6c,0x4d,0x2c,0x53,0x41,0x41,0x53,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x30,0x44,0x32,0x46,0x2c,0x45,0x41,0x41,0x74,0x44,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x78,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x51,0x41,0x41,0x51,0x7a,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x71,0x4a,0x2c,0x49,0x41,0x41,0x76,0x49,0x39,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x70,0x51,0x2c,0x49,0x41,0x41,0x53,0x6f,0x45,0x2c,0x47,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x63,0x70,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x45,0x32,0x71,0x42,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x46,0x70,0x7a,0x42,0x2c,0x47,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x32,0x42,0x2c,0x4f,0x41,0x41,0x78,0x42,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x76,0x42,0x2c,0x47,0x41,0x41,0x77,0x42,0x2c,0x51,0x41,0x41,0x72,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x67,0x42,0x41,0x41,0x32,0x43,0x2c,0x51,0x41,0x41,0x66,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x52,0x2c,0x61,0x41,0x41,0x34,0x42,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x63,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4b,0x78,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x53,0x41,0x41,0x53,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x2b,0x42,0x2c,0x53,0x41,0x41,0x67,0x42,0x6e,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x32,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x68,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x33,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x48,0x2c,0x49,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x72,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x74,0x42,0x2c,0x61,0x41,0x43,0x37,0x65,0x74,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x51,0x41,0x41,0x51,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x4a,0x2c,0x63,0x41,0x41,0x63,0x38,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x36,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2b,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x49,0x41,0x41,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x72,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x32,0x43,0x2c,0x51,0x41,0x41,0x66,0x68,0x4d,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x51,0x2c,0x59,0x41,0x41,0x71,0x42,0x2c,0x4f,0x41,0x47,0x70,0x4d,0x2c,0x53,0x41,0x41,0x59,0x39,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x69,0x42,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x77,0x42,0x71,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x33,0x42,0x48,0x2c,0x45,0x41,0x41,0x45,0x69,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x33,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x73,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x65,0x41,0x41,0x71,0x42,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4b,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x71,0x2b,0x42,0x2c,0x53,0x41,0x41,0x53,0x70,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x78,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x68,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x48,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x55,0x41,0x41,0x55,0x37,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x51,0x41,0x41,0x51,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4f,0x41,0x41,0x53,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x51,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x4a,0x2c,0x63,0x41,0x41,0x63,0x38,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x36,0x74,0x42,0x2c,0x47,0x41,0x41,0x55,0x68,0x2b,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x51,0x2c,0x47,0x41,0x41,0x47,0x68,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x62,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x68,0x64,0x2c,0x47,0x41,0x44,0x69,0x64,0x72,0x62,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x69,0x42,0x2c,0x61,0x41,0x41,0x61,0x70,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x69,0x42,0x2c,0x59,0x41,0x41,0x59,0x6f,0x63,0x2c,0x51,0x41,0x43,0x33,0x65,0x2c,0x49,0x41,0x41,0x49,0x70,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x30,0x43,0x2c,0x4f,0x41,0x41,0x72,0x43,0x31,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x45,0x2c,0x45,0x41,0x41,0x30,0x43,0x6d,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x2f,0x42,0x48,0x2c,0x45,0x41,0x41,0x45,0x69,0x37,0x42,0x2c,0x47,0x41,0x41,0x6c,0x42,0x2f,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x61,0x79,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x30,0x42,0x2c,0x43,0x41,0x41,0x77,0x42,0x2c,0x47,0x41,0x41,0x76,0x42,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x59,0x41,0x41,0x65,0x4b,0x2c,0x49,0x41,0x41,0x49,0x76,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x50,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x32,0x42,0x2c,0x49,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x43,0x68,0x64,0x2c,0x4b,0x41,0x44,0x6b,0x64,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x54,0x2c,0x65,0x41,0x41,0x65,0x2f,0x53,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x49,0x41,0x43,0x35,0x65,0x41,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x74,0x42,0x2c,0x59,0x41,0x41,0x59,0x31,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x74,0x42,0x2c,0x55,0x41,0x41,0x55,0x33,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x30,0x42,0x2c,0x4f,0x41,0x41,0x7a,0x42,0x30,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x67,0x43,0x48,0x2c,0x47,0x41,0x41,0x47,0x68,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x6c,0x43,0x48,0x2c,0x45,0x41,0x41,0x45,0x69,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x33,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x79,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x62,0x2c,0x4d,0x41,0x41,0x59,0x35,0x63,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x6d,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x58,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x2b,0x42,0x2c,0x59,0x41,0x41,0x59,0x70,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x74,0x42,0x2c,0x59,0x41,0x41,0x59,0x56,0x2c,0x47,0x41,0x41,0x47,0x6a,0x44,0x2c,0x47,0x41,0x41,0x47,0x2f,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x69,0x42,0x2c,0x61,0x41,0x41,0x61,0x32,0x4b,0x2c,0x47,0x41,0x41,0x47,0x76,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x49,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2b,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x47,0x41,0x41,0x47,0x4a,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x59,0x2c,0x47,0x41,0x41,0x47,0x2b,0x56,0x2c,0x47,0x41,0x41,0x47,0x6e,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x76,0x42,0x2c,0x53,0x41,0x41,0x53,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x55,0x41,0x41,0x55,0x72,0x4a,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x59,0x31,0x52,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x4c,0x72,0x4b,0x71,0x67,0x43,0x2c,0x43,0x41,0x41,0x47,0x74,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x71,0x2b,0x42,0x2c,0x53,0x41,0x41,0x53,0x6c,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4b,0x41,0x41,0x65,0x7a,0x70,0x42,0x2c,0x47,0x41,0x41,0x56,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x55,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x70,0x4d,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x77,0x70,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x68,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x48,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x55,0x41,0x43,0x68,0x46,0x2c,0x4f,0x41,0x44,0x30,0x46,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x33,0x48,0x2c,0x49,0x41,0x41,0x4d,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x78,0x51,0x2c,0x49,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4f,0x41,0x41,0x51,0x38,0x66,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x76,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x74,0x42,0x2c,0x61,0x41,0x41,0x61,0x6e,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x45,0x2c,0x49,0x41,0x41,0x4b,0x79,0x36,0x42,0x2c,0x61,0x41,0x41,0x34,0x42,0x2c,0x53,0x41,0x41,0x66,0x39,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x2b,0x42,0x2c,0x61,0x41,0x41,0x75,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x43,0x6e,0x66,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x51,0x41,0x41,0x51,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x38,0x42,0x74,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x31,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x4a,0x2c,0x65,0x41,0x41,0x79,0x42,0x38,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x71,0x2b,0x42,0x2c,0x55,0x41,0x41,0x55,0x35,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x38,0x42,0x2c,0x55,0x41,0x41,0x55,0x72,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x2b,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x59,0x41,0x41,0x59,0x39,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x38,0x42,0x2c,0x61,0x41,0x41,0x61,0x2f,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x63,0x41,0x41,0x63,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x37,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x36,0x74,0x42,0x2c,0x47,0x41,0x41,0x55,0x6c,0x2b,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x6f,0x4f,0x2c,0x4f,0x41,0x41,0x7a,0x4e,0x78,0x42,0x2c,0x47,0x41,0x41,0x56,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x55,0x43,0x2c,0x51,0x41,0x41,0x51,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x34,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x68,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x48,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x72,0x4a,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x51,0x41,0x41,0x55,0x39,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x53,0x2c,0x49,0x41,0x41,0x6b,0x42,0x2c,0x51,0x41,0x41,0x64,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x42,0x2c,0x59,0x41,0x41,0x6f,0x42,0x39,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2f,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x59,0x72,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6e,0x64,0x2c,0x53,0x41,0x41,0x53,0x75,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x38,0x44,0x2c,0x4f,0x41,0x41,0x33,0x44,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x78,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x68,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x72,0x4a,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x35,0x64,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x77,0x47,0x2c,0x4f,0x41,0x41,0x72,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x71,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x52,0x2c,0x49,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x33,0x6c,0x42,0x2c,0x57,0x41,0x41,0x59,0x71,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x59,0x37,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x47,0x6b,0x4a,0x2c,0x53,0x41,0x41,0x53,0x77,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x51,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x78,0x63,0x2c,0x53,0x41,0x41,0x53,0x75,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x36,0x75,0x42,0x2c,0x59,0x41,0x41,0x59,0x7a,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x67,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x67,0x43,0x2c,0x53,0x41,0x41,0x53,0x74,0x2f,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x2f,0x42,0x2c,0x59,0x41,0x41,0x59,0x7a,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x2f,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x2f,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x33,0x4f,0x2c,0x53,0x41,0x41,0x53,0x75,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x78,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x7a,0x42,0x2c,0x59,0x41,0x41,0x59,0x72,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x73,0x43,0x2c,0x47,0x41,0x41,0x6a,0x43,0x68,0x44,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x53,0x41,0x41,0x53,0x70,0x4a,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x74,0x42,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x55,0x41,0x41,0x71,0x42,0x33,0x51,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x46,0x41,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x57,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x65,0x41,0x41,0x65,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x71,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x53,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x53,0x41,0x41,0x53,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x31,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x50,0x34,0x71,0x42,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x45,0x72,0x7a,0x42,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x43,0x2f,0x65,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x71,0x42,0x2c,0x49,0x41,0x41,0x56,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x55,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x51,0x41,0x41,0x64,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x52,0x2c,0x59,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x59,0x2c,0x51,0x41,0x41,0x4a,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x49,0x41,0x41,0x59,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x75,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x36,0x42,0x2c,0x49,0x41,0x41,0x6a,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x55,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x6a,0x42,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x59,0x41,0x41,0x75,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x51,0x2c,0x51,0x41,0x41,0x51,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x79,0x51,0x2c,0x51,0x41,0x41,0x51,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x79,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2b,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x37,0x64,0x2c,0x53,0x41,0x41,0x53,0x36,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x71,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x79,0x44,0x2c,0x47,0x41,0x41,0x74,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x79,0x42,0x2c,0x61,0x41,0x41,0x61,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x63,0x41,0x41,0x63,0x67,0x43,0x2c,0x49,0x41,0x41,0x49,0x68,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x4e,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x34,0x43,0x2c,0x49,0x41,0x41,0x6a,0x43,0x2f,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x47,0x41,0x41,0x5a,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x61,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x52,0x2c,0x45,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x53,0x41,0x41,0x53,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x53,0x41,0x41,0x51,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x75,0x65,0x2c,0x47,0x41,0x41,0x47,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x65,0x41,0x41,0x67,0x42,0x76,0x64,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x4f,0x39,0x61,0x2c,0x53,0x41,0x41,0x53,0x67,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x75,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x67,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x39,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x59,0x41,0x41,0x59,0x76,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x59,0x41,0x41,0x59,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x74,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x52,0x2c,0x59,0x41,0x41,0x59,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x75,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x35,0x55,0x2c,0x53,0x41,0x41,0x53,0x67,0x76,0x42,0x2c,0x47,0x41,0x41,0x45,0x6c,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x57,0x41,0x41,0x57,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x51,0x2c,0x51,0x41,0x41,0x51,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x51,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x76,0x77,0x42,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x53,0x41,0x41,0x66,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x2b,0x42,0x2c,0x61,0x41,0x41,0x73,0x42,0x2f,0x2b,0x42,0x2c,0x47,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x52,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4d,0x41,0x41,0x65,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x51,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x51,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x76,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x2b,0x42,0x2c,0x61,0x41,0x41,0x61,0x2f,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x51,0x2c,0x51,0x41,0x41,0x79,0x43,0x2c,0x4f,0x41,0x41,0x6a,0x43,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x75,0x67,0x43,0x2c,0x63,0x41,0x41,0x63,0x2f,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x37,0x78,0x42,0x2c,0x45,0x41,0x41,0x53,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x37,0x56,0x2c,0x53,0x41,0x41,0x53,0x6b,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x6d,0x42,0x2c,0x4f,0x41,0x41,0x4e,0x56,0x2c,0x47,0x41,0x41,0x47,0x74,0x75,0x42,0x2c,0x47,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x36,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x55,0x74,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x55,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x56,0x71,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x32,0x51,0x2c,0x4f,0x41,0x41,0x7a,0x51,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x30,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x49,0x2c,0x47,0x41,0x41,0x45,0x49,0x2c,0x49,0x41,0x41,0x49,0x4a,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x49,0x41,0x41,0x47,0x32,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x39,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x35,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x39,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x39,0x42,0x2c,0x65,0x41,0x41,0x65,0x35,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x39,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4d,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x4d,0x77,0x64,0x2c,0x47,0x41,0x41,0x47,0x78,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x71,0x46,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x6a,0x58,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x53,0x41,0x41,0x61,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x64,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x53,0x2c,0x47,0x41,0x41,0x47,0x7a,0x53,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x4f,0x34,0x51,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x69,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x32,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x6e,0x69,0x42,0x2c,0x53,0x41,0x43,0x37,0x65,0x2c,0x47,0x41,0x41,0x54,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x77,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4c,0x6d,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x6b,0x42,0x2c,0x47,0x41,0x41,0x6a,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x6a,0x69,0x42,0x2c,0x53,0x41,0x41,0x59,0x73,0x64,0x2c,0x47,0x41,0x41,0x47,0x78,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x39,0x50,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x52,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x2b,0x43,0x2c,0x4f,0x41,0x41,0x6a,0x43,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4d,0x41,0x41,0x65,0x70,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x69,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x6e,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x30,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x50,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x43,0x6e,0x68,0x42,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x34,0x47,0x2c,0x45,0x41,0x41,0x47,0x35,0x47,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x47,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x6d,0x35,0x42,0x2c,0x63,0x41,0x41,0x63,0x33,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x2f,0x42,0x2c,0x55,0x41,0x41,0x55,0x6e,0x5a,0x2c,0x47,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2b,0x48,0x2c,0x47,0x41,0x41,0x47,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x33,0x6d,0x42,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x4b,0x41,0x41,0x76,0x42,0x75,0x4e,0x2c,0x47,0x41,0x41,0x47,0x68,0x50,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x6b,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x50,0x2c,0x65,0x41,0x41,0x65,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x37,0x44,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x4b,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x2f,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x6c,0x58,0x2c,0x47,0x41,0x41,0x47,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x59,0x41,0x41,0x59,0x37,0x44,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x57,0x41,0x41,0x57,0x6f,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x37,0x44,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x4b,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x2f,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x6c,0x58,0x2c,0x47,0x41,0x41,0x47,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x59,0x41,0x43,0x31,0x65,0x37,0x44,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x6f,0x45,0x2c,0x49,0x41,0x41,0x49,0x72,0x46,0x2c,0x45,0x41,0x41,0x47,0x57,0x2c,0x65,0x41,0x41,0x65,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x6b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x77,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x33,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x34,0x47,0x2c,0x45,0x41,0x41,0x47,0x74,0x46,0x2c,0x47,0x41,0x41,0x47,0x6b,0x48,0x2c,0x45,0x41,0x41,0x47,0x6c,0x48,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x6f,0x46,0x2c,0x45,0x41,0x41,0x47,0x74,0x46,0x2c,0x47,0x41,0x41,0x47,0x69,0x49,0x2c,0x47,0x41,0x41,0x47,0x6a,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x2f,0x42,0x2c,0x55,0x41,0x41,0x55,0x68,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x67,0x43,0x2c,0x51,0x41,0x41,0x51,0x6e,0x58,0x2c,0x49,0x41,0x41,0x49,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x76,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x4a,0x2c,0x53,0x41,0x41,0x53,0x6a,0x4a,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x63,0x41,0x41,0x63,0x2c,0x69,0x43,0x41,0x41,0x69,0x43,0x33,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x4a,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4a,0x2c,0x49,0x41,0x41,0x49,0x2c,0x69,0x43,0x41,0x41,0x69,0x43,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x45,0x2c,0x49,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x5a,0x2c,0x63,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x53,0x69,0x4a,0x2c,0x55,0x41,0x41,0x55,0x2c,0x71,0x42,0x41,0x41,0x75,0x42,0x68,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4b,0x2c,0x59,0x41,0x41,0x59,0x70,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x61,0x41,0x43,0x2f,0x66,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x33,0x49,0x2c,0x45,0x41,0x41,0x45,0x34,0x4e,0x2c,0x47,0x41,0x41,0x47,0x70,0x50,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x5a,0x2c,0x63,0x41,0x41,0x63,0x62,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6b,0x50,0x2c,0x47,0x41,0x41,0x47,0x35,0x4e,0x2c,0x45,0x41,0x41,0x45,0x34,0x4e,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x50,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x5a,0x2c,0x63,0x41,0x41,0x63,0x62,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x33,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x2f,0x42,0x2c,0x55,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x47,0x39,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x67,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x67,0x43,0x2c,0x51,0x41,0x41,0x51,0x31,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x67,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x33,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x72,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x56,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x4e,0x2c,0x47,0x41,0x41,0x47,0x6a,0x50,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x55,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x69,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x6d,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x6e,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x30,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x50,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x43,0x6c,0x66,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x6d,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x34,0x47,0x2c,0x45,0x41,0x41,0x47,0x70,0x49,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x45,0x41,0x41,0x47,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x69,0x4c,0x2c,0x51,0x41,0x41,0x51,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x51,0x41,0x41,0x78,0x4b,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x49,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x6d,0x35,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x2f,0x42,0x2c,0x55,0x41,0x41,0x55,0x37,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x47,0x2c,0x57,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x53,0x77,0x67,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x75,0x4a,0x2c,0x47,0x41,0x41,0x47,0x76,0x4a,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x47,0x41,0x41,0x47,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x69,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x4b,0x41,0x41,0x68,0x42,0x77,0x4e,0x2c,0x47,0x41,0x41,0x47,0x68,0x50,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x31,0x45,0x2c,0x65,0x41,0x41,0x65,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x4d,0x2c,0x47,0x41,0x41,0x47,0x31,0x4e,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x70,0x45,0x2c,0x45,0x41,0x41,0x75,0x42,0x2c,0x4f,0x41,0x41,0x70,0x42,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x6b,0x42,0x2c,0x59,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x67,0x42,0x35,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x4a,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x47,0x41,0x41,0x49,0x2c,0x61,0x41,0x41,0x61,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6f,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x43,0x37,0x65,0x35,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x46,0x2c,0x49,0x41,0x41,0x49,0x30,0x45,0x2c,0x47,0x41,0x41,0x47,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x38,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x30,0x45,0x2c,0x47,0x41,0x41,0x47,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x38,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x43,0x41,0x41,0x6d,0x43,0x70,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x36,0x42,0x41,0x41,0x36,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x49,0x41,0x41,0x49,0x6c,0x42,0x2c,0x45,0x41,0x41,0x47,0x57,0x2c,0x65,0x41,0x41,0x65,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x6f,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x70,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x38,0x46,0x2c,0x47,0x41,0x41,0x47,0x6c,0x44,0x2c,0x45,0x41,0x41,0x47,0x35,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x34,0x47,0x2c,0x45,0x41,0x41,0x47,0x39,0x47,0x2c,0x47,0x41,0x41,0x47,0x30,0x49,0x2c,0x45,0x41,0x41,0x47,0x31,0x49,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x73,0x46,0x2c,0x45,0x41,0x41,0x47,0x39,0x47,0x2c,0x47,0x41,0x41,0x47,0x79,0x4a,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x71,0x44,0x2c,0x61,0x41,0x41,0x61,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x73,0x44,0x2c,0x45,0x41,0x41,0x47,0x6e,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x33,0x48,0x2c,0x45,0x41,0x41,0x45,0x73,0x68,0x43,0x2c,0x57,0x41,0x41,0x57,0x39,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x2f,0x42,0x2c,0x53,0x41,0x41,0x6d,0x42,0x2c,0x4f,0x41,0x41,0x56,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4f,0x41,0x41,0x63,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x49,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x35,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x63,0x41,0x41,0x63,0x63,0x2c,0x47,0x41,0x41,0x47,0x2f,0x49,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x63,0x41,0x43,0x6c,0x66,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x78,0x47,0x2c,0x45,0x41,0x41,0x45,0x2b,0x2f,0x42,0x2c,0x55,0x41,0x41,0x55,0x78,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x68,0x43,0x2c,0x51,0x41,0x41,0x51,0x6e,0x58,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x67,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4c,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x79,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x6c,0x75,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x73,0x43,0x2c,0x47,0x41,0x41,0x68,0x43,0x47,0x2c,0x45,0x41,0x41,0x45,0x71,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x6e,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x6f,0x69,0x42,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x6a,0x69,0x42,0x2c,0x53,0x41,0x41,0x59,0x73,0x64,0x2c,0x47,0x41,0x41,0x47,0x78,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x79,0x43,0x2c,0x47,0x41,0x41,0x78,0x43,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x39,0x50,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x72,0x42,0x2c,0x47,0x41,0x41,0x4b,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4a,0x2c,0x59,0x41,0x41,0x59,0x7a,0x4b,0x2c,0x49,0x41,0x43,0x2f,0x65,0x2c,0x51,0x41,0x44,0x6f,0x66,0x46,0x2c,0x45,0x41,0x43,0x76,0x66,0x77,0x75,0x42,0x2c,0x49,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4a,0x2c,0x55,0x41,0x41,0x55,0x7a,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x74,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x36,0x52,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x6c,0x58,0x2c,0x47,0x41,0x41,0x47,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4a,0x2c,0x55,0x41,0x41,0x55,0x7a,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4f,0x41,0x41,0x53,0x35,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x4b,0x2c,0x53,0x41,0x41,0x53,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x49,0x2c,0x65,0x41,0x41,0x65,0x6b,0x35,0x42,0x2c,0x65,0x41,0x41,0x65,0x72,0x67,0x43,0x2c,0x49,0x41,0x41,0x4b,0x6f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x78,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4c,0x30,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x76,0x42,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x30,0x49,0x2c,0x49,0x41,0x41,0x47,0x72,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x63,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x78,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x57,0x67,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x43,0x35,0x66,0x39,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x75,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x71,0x44,0x2c,0x4b,0x41,0x41,0x37,0x42,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x70,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x65,0x41,0x41,0x79,0x42,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x72,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x33,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x53,0x41,0x41,0x61,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x53,0x2c,0x47,0x41,0x41,0x47,0x7a,0x53,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x74,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x65,0x2c,0x4d,0x41,0x41,0x52,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x59,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x6b,0x42,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x4b,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x72,0x51,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x51,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x56,0x36,0x30,0x42,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x53,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x33,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x63,0x41,0x41,0x63,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x30,0x42,0x2c,0x4b,0x41,0x43,0x72,0x66,0x36,0x4b,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x30,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x65,0x41,0x41,0x65,0x2b,0x70,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x45,0x2c,0x55,0x41,0x41,0x55,0x32,0x36,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x2b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x76,0x42,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x30,0x49,0x2c,0x49,0x41,0x41,0x77,0x42,0x2c,0x51,0x41,0x41,0x72,0x42,0x6e,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x65,0x41,0x41,0x30,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x76,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x75,0x43,0x2c,0x47,0x41,0x41,0x6c,0x43,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x34,0x42,0x2c,0x51,0x41,0x41,0x6a,0x42,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x2f,0x42,0x2c,0x57,0x41,0x41,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6f,0x67,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x58,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x30,0x42,0x2c,0x49,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x6d,0x47,0x2c,0x49,0x41,0x41,0x6c,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x73,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x6f,0x42,0x2c,0x51,0x41,0x41,0x68,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x6f,0x78,0x42,0x2c,0x65,0x41,0x41,0x75,0x42,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x76,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x73,0x67,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x2f,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x52,0x2c,0x47,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x4e,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x47,0x41,0x41,0x51,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x43,0x2f,0x64,0x2c,0x51,0x41,0x41,0x64,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x59,0x41,0x41,0x6f,0x42,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x72,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x36,0x2b,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x37,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x71,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x4f,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x72,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x51,0x2c,0x45,0x41,0x41,0x45,0x73,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x36,0x2b,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x37,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x74,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x2f,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x74,0x42,0x2c,0x63,0x41,0x41,0x63,0x68,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x63,0x41,0x41,0x63,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x63,0x41,0x41,0x63,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x71,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x72,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x50,0x2c,0x45,0x41,0x41,0x45,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x77,0x42,0x2c,0x61,0x41,0x41,0x61,0x76,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x61,0x41,0x41,0x61,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x65,0x41,0x41,0x65,0x68,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x32,0x42,0x2c,0x4f,0x41,0x41,0x6e,0x42,0x6b,0x61,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x56,0x41,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x51,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x55,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6a,0x53,0x2c,0x45,0x41,0x43,0x6c,0x67,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x75,0x42,0x2c,0x4b,0x41,0x41,0x49,0x69,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6e,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x79,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x57,0x2c,0x51,0x41,0x41,0x52,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6e,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x6d,0x42,0x2c,0x51,0x41,0x41,0x68,0x42,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x65,0x41,0x41,0x75,0x42,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x37,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x73,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x70,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x2f,0x42,0x2c,0x57,0x41,0x41,0x57,0x70,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x59,0x41,0x41,0x59,0x69,0x64,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x53,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x45,0x36,0x53,0x2c,0x4b,0x41,0x41,0x49,0x70,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x2f,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x61,0x41,0x41,0x61,0x37,0x68,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6e,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x79,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x53,0x41,0x41,0x53,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x2f,0x42,0x2c,0x61,0x41,0x41,0x61,0x2f,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x51,0x41,0x41,0x51,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x51,0x2c,0x49,0x41,0x41,0x61,0x2c,0x51,0x41,0x41,0x54,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x4d,0x41,0x41,0x63,0x33,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x51,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x4d,0x41,0x41,0x59,0x37,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x2f,0x42,0x2c,0x55,0x41,0x43,0x39,0x65,0x31,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x2f,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x39,0x74,0x42,0x2c,0x4b,0x41,0x41,0x49,0x37,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x32,0x30,0x42,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x51,0x41,0x41,0x51,0x69,0x61,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x45,0x72,0x7a,0x42,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x46,0x74,0x42,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x46,0x41,0x2c,0x47,0x41,0x41,0x4b,0x44,0x2c,0x49,0x41,0x41,0x45,0x69,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x68,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x72,0x51,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x57,0x41,0x41,0x48,0x71,0x50,0x2c,0x4d,0x41,0x41,0x69,0x42,0x75,0x43,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x45,0x41,0x41,0x66,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x67,0x43,0x2c,0x65,0x41,0x41,0x69,0x42,0x74,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x43,0x6c,0x58,0x2c,0x53,0x41,0x41,0x53,0x38,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4e,0x73,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x75,0x42,0x2c,0x47,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x71,0x42,0x2c,0x4b,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x5a,0x2f,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x65,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x48,0x33,0x52,0x2c,0x45,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x49,0x2c,0x47,0x41,0x41,0x45,0x49,0x2c,0x49,0x41,0x41,0x49,0x4a,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x49,0x41,0x41,0x47,0x32,0x49,0x2c,0x4b,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x6a,0x42,0x6a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x53,0x41,0x41,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x46,0x33,0x52,0x2c,0x49,0x41,0x41,0x51,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x48,0x33,0x52,0x2c,0x45,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x76,0x42,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x30,0x49,0x2c,0x49,0x41,0x41,0x77,0x42,0x2c,0x51,0x41,0x41,0x72,0x42,0x37,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x67,0x42,0x41,0x41,0x32,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x38,0x52,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x6e,0x42,0x35,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x73,0x42,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x48,0x33,0x52,0x2c,0x45,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x30,0x49,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x37,0x42,0x2c,0x4b,0x41,0x43,0x31,0x67,0x42,0x2c,0x4b,0x41,0x41,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x72,0x42,0x37,0x43,0x31,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x74,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x71,0x4b,0x2c,0x59,0x41,0x41,0x59,0x6e,0x4b,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x39,0x50,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2f,0x52,0x2c,0x45,0x41,0x41,0x45,0x2b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x52,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x51,0x41,0x41,0x51,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x53,0x41,0x41,0x53,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x43,0x78,0x54,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x78,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x6a,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x75,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x47,0x41,0x41,0x47,0x6a,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x34,0x52,0x78,0x51,0x2c,0x45,0x41,0x41,0x78,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x45,0x41,0x41,0x47,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x47,0x2c,0x45,0x41,0x41,0x47,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6b,0x47,0x2c,0x57,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x53,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x73,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x47,0x2c,0x57,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x53,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x47,0x41,0x41,0x47,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x48,0x2c,0x47,0x41,0x41,0x47,0x70,0x4a,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x67,0x43,0x2c,0x55,0x41,0x41,0x55,0x78,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x68,0x43,0x2c,0x51,0x41,0x41,0x51,0x6e,0x58,0x2c,0x49,0x41,0x41,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x31,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x7a,0x42,0x73,0x4a,0x2c,0x47,0x41,0x41,0x47,0x68,0x50,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x53,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x63,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x4c,0x2c,0x65,0x41,0x41,0x65,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x4e,0x2c,0x65,0x41,0x41,0x65,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6a,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x31,0x45,0x2c,0x65,0x41,0x41,0x65,0x51,0x2c,0x4b,0x41,0x43,0x6a,0x66,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x69,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x43,0x41,0x41,0x6d,0x43,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x36,0x42,0x41,0x41,0x36,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x63,0x41,0x41,0x63,0x41,0x2c,0x49,0x41,0x41,0x49,0x70,0x46,0x2c,0x45,0x41,0x41,0x47,0x57,0x2c,0x65,0x41,0x41,0x65,0x79,0x45,0x2c,0x47,0x41,0x41,0x47,0x6c,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x47,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x74,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x51,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x55,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x4c,0x2c,0x65,0x41,0x41,0x65,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x31,0x45,0x2c,0x65,0x41,0x41,0x65,0x51,0x2c,0x49,0x41,0x41,0x49,0x6d,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x33,0x45,0x2c,0x65,0x41,0x41,0x65,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x33,0x45,0x2c,0x65,0x41,0x41,0x65,0x51,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x4b,0x2c,0x45,0x41,0x43,0x70,0x66,0x31,0x46,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x46,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x6b,0x42,0x2c,0x59,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x4f,0x37,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x6b,0x42,0x2c,0x59,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x4b,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x61,0x41,0x41,0x61,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x43,0x41,0x41,0x6d,0x43,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x36,0x42,0x41,0x41,0x36,0x42,0x41,0x2c,0x49,0x41,0x41,0x49,0x70,0x46,0x2c,0x45,0x41,0x41,0x47,0x57,0x2c,0x65,0x41,0x41,0x65,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x46,0x2c,0x47,0x41,0x41,0x47,0x75,0x69,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x6d,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x4b,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x35,0x46,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x6a,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x47,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x6e,0x74,0x42,0x2c,0x4b,0x41,0x41,0x45,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x7a,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x6b,0x42,0x6c,0x62,0x2c,0x49,0x41,0x41,0x49,0x75,0x77,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x49,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x51,0x41,0x41,0x51,0x39,0x68,0x43,0x2c,0x49,0x41,0x41,0x49,0x2b,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x73,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x68,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x49,0x78,0x52,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x79,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x68,0x43,0x76,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x32,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x45,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x32,0x42,0x2c,0x51,0x41,0x41,0x51,0x33,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x32,0x42,0x2c,0x61,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x53,0x31,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2b,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x67,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x68,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x6c,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x61,0x41,0x41,0x75,0x42,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x33,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x31,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x34,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x34,0x42,0x2c,0x51,0x41,0x41,0x51,0x35,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x69,0x42,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x38,0x42,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x6e,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6c,0x66,0x2c,0x53,0x41,0x41,0x53,0x38,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x69,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x2b,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4d,0x41,0x41,0x6f,0x42,0x2c,0x51,0x41,0x41,0x64,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x6f,0x42,0x41,0x41,0x34,0x42,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x32,0x72,0x42,0x2c,0x57,0x41,0x41,0x57,0x33,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x72,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6f,0x42,0x2c,0x57,0x41,0x41,0x57,0x6e,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x72,0x42,0x2c,0x57,0x41,0x41,0x57,0x37,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x51,0x2c,0x47,0x41,0x41,0x47,0x2f,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x6e,0x61,0x2c,0x53,0x41,0x41,0x53,0x36,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x71,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x32,0x42,0x2c,0x49,0x41,0x41,0x31,0x42,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x57,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x52,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x53,0x41,0x41,0x53,0x6e,0x47,0x2c,0x45,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x52,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x7a,0x54,0x2c,0x53,0x41,0x41,0x53,0x69,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x33,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x4b,0x2c,0x53,0x41,0x41,0x53,0x78,0x4b,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x57,0x41,0x41,0x57,0x77,0x7a,0x42,0x2c,0x61,0x41,0x41,0x61,0x6c,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x6a,0x43,0x2c,0x61,0x41,0x41,0x61,0x6c,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x4b,0x2c,0x55,0x41,0x41,0x55,0x7a,0x4b,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x59,0x41,0x41,0x61,0x77,0x7a,0x42,0x2c,0x61,0x41,0x41,0x61,0x6c,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x49,0x6d,0x4b,0x2c,0x59,0x41,0x41,0x59,0x72,0x4b,0x2c,0x47,0x41,0x41,0x34,0x42,0x2c,0x51,0x41,0x41,0x78,0x42,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x43,0x2c,0x32,0x42,0x41,0x41,0x38,0x42,0x2c,0x49,0x41,0x41,0x53,0x6a,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x68,0x43,0x2c,0x55,0x41,0x41,0x55,0x78,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x68,0x43,0x2c,0x51,0x41,0x41,0x51,0x6e,0x58,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x39,0x6f,0x42,0x2c,0x47,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x56,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x67,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x53,0x2c,0x47,0x41,0x41,0x47,0x69,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x31,0x58,0x2c,0x53,0x41,0x41,0x53,0x6b,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x33,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x6a,0x43,0x2c,0x61,0x41,0x41,0x61,0x6c,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x59,0x41,0x41,0x59,0x72,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x47,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x56,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x6d,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x53,0x2c,0x47,0x41,0x41,0x47,0x6f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x78,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x52,0x2c,0x47,0x41,0x41,0x47,0x73,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x6e,0x52,0x2c,0x53,0x41,0x41,0x53,0x73,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x32,0x54,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x34,0x76,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x35,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x76,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x37,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x54,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x67,0x38,0x42,0x2c,0x49,0x41,0x41,0x47,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x35,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x4f,0x6f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x54,0x34,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x37,0x68,0x43,0x2c,0x4b,0x41,0x41,0x6b,0x42,0x38,0x68,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x6a,0x43,0x2c,0x47,0x41,0x41,0x45,0x6e,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x57,0x41,0x41,0x57,0x74,0x46,0x2c,0x59,0x41,0x41,0x59,0x6c,0x4b,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4b,0x2c,0x59,0x41,0x41,0x59,0x6c,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6d,0x6a,0x43,0x2c,0x47,0x41,0x41,0x45,0x6a,0x35,0x42,0x2c,0x59,0x41,0x41,0x59,0x6c,0x4b,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x49,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x6a,0x43,0x2c,0x47,0x41,0x41,0x45,0x6e,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x36,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x57,0x41,0x41,0x57,0x78,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x55,0x41,0x41,0x55,0x36,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x58,0x2c,0x47,0x41,0x41,0x47,0x33,0x58,0x2c,0x49,0x41,0x41,0x49,0x75,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x58,0x2c,0x47,0x41,0x41,0x45,0x6e,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x78,0x4f,0x2c,0x45,0x41,0x41,0x45,0x36,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x35,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x45,0x6e,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x6d,0x73,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x6c,0x66,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6d,0x6a,0x43,0x2c,0x47,0x41,0x41,0x45,0x37,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x67,0x43,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x2c,0x51,0x41,0x41,0x68,0x42,0x33,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x79,0x42,0x2c,0x63,0x41,0x41,0x73,0x43,0x2c,0x51,0x41,0x41,0x66,0x76,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x32,0x42,0x2c,0x61,0x41,0x41,0x73,0x42,0x2c,0x43,0x41,0x41,0x43,0x6e,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x32,0x42,0x2c,0x51,0x41,0x41,0x51,0x31,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x45,0x2c,0x53,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x53,0x78,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x44,0x2c,0x49,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x41,0x2c,0x4b,0x41,0x41,0x66,0x2b,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x47,0x41,0x41,0x79,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2b,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x69,0x69,0x43,0x2c,0x4b,0x41,0x41,0x49,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x6f,0x42,0x41,0x41,0x64,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x57,0x41,0x41,0x67,0x43,0x30,0x7a,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x69,0x43,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x74,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x30,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x71,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x50,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x36,0x53,0x2c,0x49,0x41,0x41,0x47,0x33,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x67,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x4f,0x41,0x43,0x68,0x66,0x6a,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x30,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x69,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x33,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x2b,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x71,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x37,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x50,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x6f,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x74,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x62,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x70,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x49,0x41,0x41,0x49,0x56,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x7a,0x51,0x2c,0x53,0x41,0x41,0x53,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6b,0x39,0x42,0x2c,0x47,0x41,0x41,0x45,0x78,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x55,0x41,0x41,0x55,0x73,0x7a,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x34,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x71,0x6a,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4b,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x6d,0x73,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x4c,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x78,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x2b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x34,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x78,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x4c,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x4c,0x2c,0x47,0x41,0x41,0x47,0x34,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x2f,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x6b,0x42,0x2c,0x4d,0x41,0x41,0x66,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x67,0x43,0x2c,0x61,0x41,0x41,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x74,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x53,0x2c,0x47,0x41,0x41,0x47,0x36,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x6a,0x65,0x2c,0x53,0x41,0x41,0x53,0x34,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x47,0x41,0x41,0x64,0x30,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x46,0x77,0x42,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x51,0x6b,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x35,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x34,0x5a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x71,0x58,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x38,0x61,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x46,0x77,0x42,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x67,0x44,0x2c,0x47,0x41,0x41,0x39,0x43,0x6d,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x46,0x77,0x42,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x51,0x41,0x41,0x6d,0x42,0x2c,0x47,0x41,0x41,0x52,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x78,0x46,0x2c,0x47,0x41,0x41,0x47,0x2f,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x46,0x76,0x6e,0x42,0x2c,0x47,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x64,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x57,0x41,0x41,0x6d,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x4f,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2f,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x68,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x44,0x2c,0x45,0x41,0x41,0x45,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x43,0x6a,0x65,0x2c,0x47,0x41,0x41,0x6e,0x42,0x2f,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x55,0x41,0x41,0x55,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x43,0x2c,0x45,0x41,0x41,0x47,0x39,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x79,0x4e,0x2c,0x47,0x41,0x41,0x47,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x69,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x4a,0x2c,0x47,0x41,0x41,0x47,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x31,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x71,0x50,0x2c,0x45,0x41,0x41,0x45,0x6c,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x47,0x71,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x71,0x50,0x2c,0x45,0x41,0x41,0x45,0x74,0x44,0x2c,0x47,0x41,0x41,0x47,0x6a,0x4d,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x48,0x2c,0x47,0x41,0x41,0x47,0x72,0x49,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x61,0x41,0x41,0x61,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x47,0x2c,0x47,0x41,0x41,0x47,0x2f,0x49,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x75,0x42,0x2c,0x45,0x41,0x41,0x47,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x50,0x2c,0x45,0x41,0x41,0x45,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x32,0x43,0x2c,0x45,0x41,0x41,0x47,0x2f,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x38,0x48,0x2c,0x47,0x41,0x41,0x47,0x2f,0x48,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x63,0x41,0x41,0x63,0x6d,0x35,0x42,0x2c,0x59,0x41,0x41,0x59,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x47,0x2c,0x63,0x41,0x41,0x63,0x6d,0x35,0x42,0x2c,0x63,0x41,0x41,0x63,0x33,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x75,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x48,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x70,0x51,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x2f,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x47,0x2c,0x61,0x41,0x41,0x61,0x63,0x2c,0x47,0x41,0x41,0x47,0x74,0x48,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x2f,0x42,0x2c,0x53,0x41,0x43,0x6e,0x66,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x47,0x2c,0x63,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x49,0x63,0x2c,0x47,0x41,0x41,0x47,0x74,0x48,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x2f,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x37,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x71,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x71,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x67,0x42,0x2c,0x47,0x41,0x41,0x64,0x38,0x61,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x46,0x77,0x42,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x74,0x4f,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x6a,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x4a,0x2c,0x55,0x41,0x41,0x55,0x6a,0x4a,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x71,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x67,0x42,0x2c,0x47,0x41,0x41,0x64,0x38,0x61,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x46,0x77,0x42,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x71,0x46,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x53,0x2c,0x47,0x41,0x41,0x47,0x31,0x58,0x2c,0x45,0x41,0x41,0x45,0x6b,0x58,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x34,0x52,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x47,0x34,0x47,0x2c,0x51,0x41,0x41,0x51,0x38,0x61,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x43,0x6e,0x66,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x53,0x41,0x4a,0x34,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x36,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x71,0x42,0x2c,0x4d,0x41,0x41,0x6c,0x42,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x51,0x4e,0x2c,0x51,0x41,0x41,0x61,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x63,0x41,0x41,0x63,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x75,0x4f,0x2c,0x55,0x41,0x41,0x55,0x67,0x30,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x43,0x6c,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x49,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6f,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x78,0x42,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x46,0x74,0x52,0x2c,0x47,0x41,0x41,0x4b,0x6d,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x73,0x46,0x2c,0x47,0x41,0x41,0x6e,0x46,0x67,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x71,0x42,0x2c,0x45,0x41,0x41,0x50,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x36,0x53,0x2c,0x49,0x41,0x41,0x47,0x76,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x38,0x42,0x2c,0x4b,0x41,0x41,0x49,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x6d,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x76,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x69,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x46,0x77,0x42,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x7a,0x42,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x65,0x41,0x41,0x6b,0x42,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x67,0x30,0x42,0x2c,0x53,0x41,0x41,0x53,0x70,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x68,0x52,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x67,0x54,0x2c,0x47,0x41,0x41,0x45,0x74,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x52,0x2c,0x45,0x41,0x41,0x45,0x68,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x52,0x2c,0x47,0x41,0x41,0x45,0x74,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x78,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x56,0x70,0x52,0x2c,0x47,0x41,0x41,0x4a,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x52,0x2c,0x49,0x41,0x41,0x4d,0x72,0x77,0x42,0x2c,0x4d,0x41,0x41,0x61,0x67,0x66,0x2c,0x45,0x41,0x41,0x45,0x39,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x77,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x66,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x36,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x66,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x6f,0x58,0x2c,0x45,0x41,0x41,0x45,0x6d,0x49,0x2c,0x45,0x41,0x41,0x45,0x6a,0x68,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x38,0x59,0x2c,0x45,0x41,0x41,0x45,0x34,0x61,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x43,0x41,0x41,0x43,0x6c,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x48,0x2c,0x4d,0x41,0x43,0x70,0x66,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x35,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x69,0x58,0x2c,0x45,0x41,0x41,0x45,0x34,0x61,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x61,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x68,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x77,0x5a,0x2c,0x47,0x41,0x41,0x47,0x74,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x66,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x66,0x2c,0x45,0x41,0x41,0x45,0x70,0x66,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x71,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x54,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x66,0x2c,0x45,0x41,0x41,0x45,0x71,0x52,0x2c,0x47,0x41,0x41,0x45,0x70,0x52,0x2c,0x47,0x41,0x41,0x47,0x67,0x54,0x2c,0x47,0x41,0x41,0x47,0x6c,0x54,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x67,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x68,0x42,0x2c,0x55,0x41,0x41,0x55,0x70,0x4b,0x2c,0x45,0x41,0x41,0x61,0x2c,0x6f,0x42,0x41,0x41,0x56,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x4d,0x2c,0x4f,0x41,0x41,0x34,0x42,0x45,0x2c,0x59,0x41,0x41,0x59,0x6e,0x4d,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4d,0x2c,0x59,0x41,0x41,0x59,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x61,0x41,0x41,0x61,0x6e,0x4d,0x2c,0x45,0x41,0x41,0x45,0x79,0x69,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x51,0x41,0x41,0x53,0x74,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x68,0x42,0x2c,0x55,0x41,0x41,0x6b,0x43,0x72,0x4f,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x31,0x42,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x63,0x41,0x41,0x63,0x2f,0x68,0x42,0x2c,0x51,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x48,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x33,0x45,0x2c,0x65,0x41,0x41,0x65,0x2c,0x57,0x41,0x41,0x57,0x32,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x2b,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x32,0x42,0x2c,0x51,0x41,0x43,0x7a,0x66,0x31,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x55,0x41,0x41,0x55,0x39,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6f,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x69,0x49,0x2c,0x45,0x41,0x41,0x45,0x37,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x68,0x42,0x2c,0x55,0x41,0x41,0x55,0x72,0x46,0x2c,0x55,0x41,0x41,0x55,0x2f,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x47,0x2c,0x47,0x41,0x41,0x47,0x79,0x5a,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x49,0x2c,0x45,0x41,0x41,0x45,0x37,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x66,0x2c,0x65,0x41,0x41,0x65,0x6d,0x66,0x2c,0x49,0x41,0x41,0x49,0x68,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2b,0x65,0x2c,0x45,0x41,0x41,0x45,0x2f,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x66,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2f,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2b,0x65,0x2c,0x49,0x41,0x41,0x49,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x65,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x65,0x2c,0x45,0x41,0x41,0x45,0x74,0x66,0x2c,0x51,0x41,0x41,0x51,0x73,0x66,0x2c,0x45,0x41,0x41,0x45,0x74,0x66,0x2c,0x53,0x41,0x41,0x53,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x52,0x2c,0x49,0x41,0x41,0x49,0x67,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x74,0x66,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x56,0x2c,0x49,0x41,0x41,0x49,0x67,0x67,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x65,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x66,0x2c,0x45,0x41,0x41,0x45,0x74,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x66,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x39,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x32,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x46,0x77,0x42,0x2c,0x47,0x41,0x41,0x4b,0x6d,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x6a,0x43,0x2c,0x47,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x43,0x74,0x64,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x46,0x31,0x52,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x36,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x31,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x55,0x41,0x41,0x6b,0x42,0x2c,0x47,0x41,0x41,0x52,0x78,0x4f,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x51,0x41,0x41,0x57,0x6e,0x48,0x2c,0x47,0x41,0x41,0x47,0x2f,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x67,0x42,0x79,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x6a,0x43,0x2c,0x45,0x41,0x41,0x54,0x67,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6a,0x43,0x2c,0x47,0x41,0x41,0x55,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x73,0x42,0x38,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6a,0x43,0x2c,0x45,0x41,0x41,0x54,0x67,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6a,0x43,0x2c,0x47,0x41,0x41,0x55,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x46,0x2c,0x47,0x41,0x41,0x47,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x46,0x31,0x52,0x2c,0x49,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6f,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x74,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x76,0x62,0x2c,0x53,0x41,0x41,0x53,0x6d,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x54,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x37,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x65,0x41,0x41,0x65,0x71,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x76,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x33,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x4d,0x2c,0x65,0x41,0x41,0x65,0x73,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x74,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x74,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x38,0x42,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x4c,0x44,0x2c,0x47,0x41,0x41,0x47,0x76,0x67,0x43,0x2c,0x47,0x41,0x41,0x4d,0x77,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x72,0x38,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x37,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x67,0x43,0x2c,0x49,0x41,0x41,0x4f,0x78,0x38,0x42,0x2c,0x47,0x41,0x41,0x4a,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x32,0x67,0x43,0x2c,0x49,0x41,0x41,0x4d,0x72,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x51,0x2c,0x45,0x41,0x41,0x45,0x77,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x63,0x41,0x41,0x63,0x79,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x32,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x51,0x41,0x41,0x51,0x6f,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x37,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x38,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x32,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6b,0x43,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x66,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x2b,0x42,0x2c,0x65,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x36,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x35,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x36,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6b,0x43,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x76,0x63,0x2c,0x53,0x41,0x41,0x53,0x75,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x69,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x52,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x52,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x67,0x38,0x42,0x2c,0x49,0x41,0x41,0x47,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x52,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x55,0x77,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x36,0x42,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x35,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x6d,0x4c,0x2c,0x47,0x41,0x41,0x47,0x35,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x76,0x42,0x2c,0x65,0x41,0x41,0x65,0x6c,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x39,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x78,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x6a,0x43,0x2c,0x6f,0x43,0x41,0x41,0x6f,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x39,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x50,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x4c,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x43,0x76,0x66,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x43,0x2c,0x55,0x41,0x41,0x55,0x6b,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x50,0x2c,0x47,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x34,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x37,0x42,0x2c,0x57,0x41,0x41,0x57,0x31,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x6d,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x2b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x6b,0x43,0x2c,0x49,0x41,0x41,0x49,0x33,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x79,0x4a,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x68,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6a,0x4d,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x69,0x4d,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x62,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x63,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x66,0x2c,0x47,0x41,0x41,0x47,0x72,0x5a,0x2c,0x47,0x41,0x41,0x47,0x71,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x43,0x35,0x63,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x6f,0x69,0x43,0x2c,0x49,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x52,0x6c,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x57,0x6b,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x52,0x2c,0x47,0x41,0x41,0x45,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x66,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x73,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x66,0x70,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x53,0x41,0x41,0x6f,0x42,0x2c,0x43,0x41,0x41,0x43,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x70,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6f,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x77,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x69,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x72,0x69,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x73,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x70,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x70,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6f,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x76,0x53,0x2c,0x53,0x41,0x41,0x53,0x34,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x69,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6b,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x46,0x2c,0x47,0x41,0x41,0x47,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x78,0x4f,0x2c,0x45,0x41,0x41,0x45,0x36,0x36,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x35,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x36,0x36,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6d,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x46,0x2c,0x47,0x41,0x41,0x47,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6d,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x46,0x2c,0x47,0x41,0x41,0x47,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x47,0x41,0x41,0x47,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x46,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x73,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x4d,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x7a,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x79,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x37,0x64,0x2c,0x49,0x41,0x77,0x42,0x6b,0x4e,0x67,0x7a,0x42,0x2c,0x47,0x41,0x78,0x42,0x39,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x68,0x43,0x2c,0x45,0x41,0x41,0x47,0x32,0x78,0x42,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x30,0x50,0x2c,0x47,0x41,0x41,0x47,0x72,0x68,0x43,0x2c,0x45,0x41,0x41,0x47,0x6f,0x36,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6b,0x48,0x2c,0x47,0x41,0x41,0x47,0x74,0x68,0x43,0x2c,0x45,0x41,0x41,0x47,0x6f,0x55,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x67,0x63,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x74,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x78,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x34,0x56,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x6b,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x77,0x44,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x49,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x49,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x76,0x4d,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x33,0x46,0x2c,0x49,0x41,0x41,0x4b,0x2f,0x67,0x42,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x67,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x68,0x7a,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x68,0x55,0x2c,0x53,0x41,0x41,0x53,0x75,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4d,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x75,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x6f,0x52,0x2c,0x47,0x41,0x41,0x53,0x41,0x2c,0x49,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x56,0x2c,0x47,0x41,0x41,0x47,0x39,0x58,0x2c,0x59,0x41,0x41,0x6b,0x42,0x2c,0x49,0x41,0x41,0x49,0x2b,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x2f,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x77,0x42,0x2c,0x49,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x50,0x2f,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x56,0x2c,0x49,0x41,0x41,0x6b,0x42,0x72,0x56,0x2c,0x45,0x41,0x41,0x69,0x42,0x41,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x6a,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x68,0x42,0x2c,0x4f,0x41,0x41,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x4a,0x2c,0x47,0x41,0x41,0x47,0x76,0x59,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6f,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x67,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6d,0x56,0x2c,0x47,0x41,0x41,0x47,0x6c,0x56,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x71,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4d,0x37,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x30,0x33,0x42,0x2c,0x4b,0x41,0x41,0x45,0x31,0x33,0x42,0x2c,0x49,0x41,0x41,0x49,0x30,0x33,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x37,0x44,0x2c,0x4d,0x41,0x41,0x4f,0x73,0x52,0x2c,0x49,0x41,0x41,0x49,0x6a,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x34,0x68,0x43,0x2c,0x49,0x41,0x41,0x47,0x6b,0x45,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x49,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x32,0x7a,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x35,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x76,0x42,0x2c,0x51,0x41,0x41,0x55,0x79,0x53,0x2c,0x47,0x41,0x41,0x47,0x6a,0x76,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x79,0x61,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x31,0x59,0x2c,0x53,0x41,0x41,0x53,0x75,0x59,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6d,0x43,0x2c,0x63,0x41,0x33,0x4d,0x7a,0x42,0x2c,0x53,0x41,0x41,0x59,0x6c,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x65,0x41,0x41,0x65,0x6c,0x54,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x55,0x2c,0x59,0x41,0x41,0x59,0x6c,0x54,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6d,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x7a,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x2f,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6d,0x53,0x2c,0x47,0x41,0x41,0x47,0x70,0x53,0x2c,0x47,0x41,0x41,0x47,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x6d,0x45,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x4b,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x6d,0x54,0x2c,0x47,0x41,0x41,0x47,0x6a,0x50,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x49,0x41,0x41,0x51,0x36,0x46,0x2c,0x47,0x41,0x41,0x47,0x37,0x46,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6d,0x43,0x2c,0x63,0x41,0x41,0x63,0x76,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x45,0x2c,0x49,0x41,0x41,0x49,0x6d,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x32,0x4d,0x6e,0x4c,0x77,0x67,0x43,0x2c,0x43,0x41,0x41,0x47,0x72,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x54,0x2c,0x47,0x41,0x41,0x47,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x30,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x75,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x7a,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x74,0x53,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6d,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6d,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x72,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6d,0x43,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x72,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x67,0x42,0x2c,0x47,0x41,0x41,0x66,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x53,0x2c,0x47,0x41,0x41,0x47,0x74,0x53,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x35,0x49,0x73,0x4a,0x2c,0x53,0x41,0x41,0x59,0x6e,0x47,0x2c,0x47,0x41,0x41,0x47,0x75,0x74,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x45,0x2c,0x47,0x41,0x41,0x47,0x7a,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x34,0x49,0x35,0x4b,0x75,0x6d,0x43,0x2c,0x43,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x64,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x79,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2b,0x59,0x2c,0x47,0x41,0x41,0x47,0x37,0x64,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x72,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x34,0x49,0x2c,0x4b,0x41,0x41,0x4d,0x6e,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x47,0x78,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x56,0x2c,0x47,0x41,0x41,0x47,0x39,0x54,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x54,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x68,0x54,0x2c,0x45,0x41,0x41,0x45,0x6b,0x54,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x77,0x43,0x2c,0x51,0x41,0x41,0x51,0x6c,0x54,0x2c,0x45,0x41,0x41,0x45,0x6f,0x54,0x2c,0x53,0x41,0x41,0x70,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x55,0x70,0x54,0x2c,0x45,0x41,0x41,0x45,0x77,0x54,0x2c,0x47,0x41,0x41,0x73,0x42,0x78,0x54,0x2c,0x45,0x41,0x41,0x45,0x75,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x64,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x6d,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x72,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6d,0x43,0x2c,0x61,0x41,0x41,0x61,0x68,0x6d,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x37,0x63,0x2c,0x53,0x41,0x41,0x53,0x77,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x58,0x36,0x6c,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x6c,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6d,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6d,0x43,0x2c,0x65,0x41,0x41,0x65,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x54,0x2c,0x47,0x41,0x41,0x47,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x49,0x30,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x75,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x7a,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x46,0x41,0x2c,0x49,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6d,0x43,0x2c,0x65,0x41,0x41,0x65,0x6e,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x67,0x44,0x2c,0x49,0x41,0x41,0x78,0x43,0x6e,0x50,0x2c,0x4b,0x41,0x41,0x49,0x31,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x69,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x49,0x68,0x6c,0x43,0x2c,0x49,0x41,0x41,0x45,0x75,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x44,0x2c,0x47,0x41,0x41,0x47,0x6a,0x76,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x67,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x38,0x6d,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x6d,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x55,0x38,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x54,0x2c,0x47,0x41,0x41,0x47,0x31,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x6a,0x43,0x2c,0x47,0x41,0x41,0x45,0x2f,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x79,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x68,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x37,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x79,0x43,0x2c,0x47,0x41,0x41,0x78,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x52,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x54,0x2c,0x47,0x41,0x41,0x47,0x2f,0x55,0x2c,0x4d,0x41,0x41,0x57,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x67,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x53,0x2c,0x4d,0x41,0x41,0x4b,0x35,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4f,0x41,0x43,0x68,0x66,0x2c,0x43,0x41,0x41,0x75,0x42,0x2c,0x47,0x41,0x41,0x74,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x56,0x2c,0x55,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x46,0x6a,0x51,0x2c,0x4b,0x41,0x47,0x6e,0x43,0x2c,0x53,0x41,0x41,0x59,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x52,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x79,0x42,0x2c,0x47,0x41,0x41,0x65,0x2c,0x51,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x33,0x42,0x2c,0x51,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x72,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x31,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x34,0x62,0x2c,0x47,0x41,0x41,0x47,0x37,0x68,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x56,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x77,0x42,0x2c,0x4d,0x41,0x41,0x66,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x73,0x67,0x43,0x2c,0x63,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x51,0x41,0x41,0x51,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x53,0x41,0x41,0x53,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x48,0x76,0x58,0x67,0x31,0x42,0x2c,0x43,0x41,0x41,0x47,0x7a,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x56,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x4d,0x41,0x41,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x52,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x54,0x2c,0x47,0x41,0x41,0x47,0x2f,0x55,0x2c,0x4d,0x41,0x41,0x57,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x67,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x53,0x2c,0x4d,0x41,0x41,0x4b,0x35,0x53,0x2c,0x45,0x41,0x41,0x71,0x43,0x2c,0x4f,0x41,0x41,0x6e,0x43,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6e,0x43,0x2c,0x61,0x41,0x41,0x61,0x31,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x35,0x6c,0x43,0x2c,0x45,0x41,0x41,0x53,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x43,0x38,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x44,0x37,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x52,0x51,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x53,0x2c,0x55,0x41,0x41,0x46,0x41,0x2c,0x4b,0x41,0x41,0x65,0x41,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x49,0x41,0x41,0x62,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x78,0x42,0x2c,0x4d,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x79,0x42,0x2c,0x4b,0x41,0x41,0x6e,0x42,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x67,0x42,0x41,0x41,0x71,0x42,0x6c,0x54,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x67,0x34,0x42,0x2c,0x4b,0x41,0x41,0x49,0x78,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x55,0x2c,0x61,0x41,0x41,0x61,0x33,0x55,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x65,0x41,0x41,0x65,0x6a,0x54,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x33,0x63,0x2c,0x47,0x41,0x41,0x47,0x30,0x63,0x2c,0x47,0x41,0x41,0x47,0x31,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x76,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6f,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x52,0x51,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x53,0x2c,0x51,0x41,0x41,0x46,0x41,0x2c,0x4b,0x41,0x43,0x39,0x65,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x71,0x42,0x2c,0x49,0x41,0x41,0x66,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x57,0x41,0x41,0x65,0x31,0x54,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6d,0x53,0x2c,0x47,0x41,0x41,0x47,0x74,0x53,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x49,0x41,0x41,0x4b,0x46,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x71,0x47,0x2c,0x47,0x41,0x41,0x70,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x71,0x47,0x2c,0x49,0x41,0x41,0x33,0x46,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x58,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x52,0x2c,0x4b,0x41,0x41,0x49,0x74,0x52,0x2c,0x47,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x33,0x63,0x2c,0x47,0x41,0x41,0x47,0x30,0x63,0x2c,0x47,0x41,0x41,0x47,0x31,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x68,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x36,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x2b,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x67,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x56,0x6b,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x53,0x2c,0x4d,0x41,0x41,0x59,0x39,0x53,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6d,0x43,0x2c,0x65,0x41,0x41,0x65,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x64,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x72,0x58,0x2c,0x53,0x41,0x41,0x53,0x69,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6c,0x43,0x2c,0x47,0x41,0x41,0x32,0x47,0x2c,0x4f,0x41,0x41,0x78,0x47,0x72,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x4e,0x2c,0x63,0x41,0x41,0x63,0x71,0x46,0x2c,0x65,0x41,0x41,0x65,0x34,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x56,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x34,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x70,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x6d,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x68,0x43,0x2c,0x49,0x41,0x41,0x57,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x74,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x75,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x45,0x35,0x4c,0x2c,0x53,0x41,0x41,0x53,0x67,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x75,0x44,0x2c,0x49,0x41,0x41,0x70,0x44,0x41,0x2c,0x49,0x41,0x41,0x49,0x6d,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6c,0x43,0x2c,0x49,0x41,0x41,0x49,0x6b,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x7a,0x55,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x55,0x2c,0x63,0x41,0x41,0x63,0x31,0x55,0x2c,0x45,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6d,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x34,0x54,0x2c,0x47,0x41,0x41,0x47,0x37,0x54,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x36,0x7a,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x34,0x6d,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x31,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x55,0x2c,0x47,0x41,0x41,0x47,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x53,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x35,0x53,0x2c,0x45,0x41,0x41,0x45,0x30,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x54,0x2c,0x47,0x41,0x41,0x47,0x2f,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x67,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x67,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x53,0x2c,0x4d,0x41,0x41,0x4b,0x35,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x69,0x46,0x2c,0x4f,0x41,0x41,0x33,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6e,0x43,0x2c,0x61,0x41,0x41,0x61,0x6e,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x56,0x2c,0x55,0x41,0x41,0x55,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x6e,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x49,0x41,0x41,0x49,0x53,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x53,0x2c,0x4d,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x76,0x64,0x2c,0x53,0x41,0x41,0x53,0x79,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4a,0x34,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x33,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x55,0x36,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x76,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x79,0x61,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x5a,0x2c,0x47,0x41,0x41,0x47,0x78,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x6c,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x47,0x76,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x30,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4d,0x38,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x31,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x33,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x78,0x57,0x2c,0x45,0x41,0x41,0x45,0x36,0x54,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x30,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x71,0x56,0x2c,0x47,0x41,0x41,0x45,0x37,0x54,0x2c,0x45,0x41,0x41,0x45,0x75,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x39,0x58,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x58,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x35,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x61,0x79,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x73,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x44,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x76,0x73,0x42,0x2c,0x51,0x41,0x41,0x51,0x67,0x61,0x2c,0x47,0x41,0x41,0x45,0x75,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x68,0x54,0x2c,0x53,0x41,0x41,0x53,0x6f,0x49,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6e,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6c,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x43,0x2c,0x63,0x41,0x41,0x69,0x44,0x2c,0x49,0x41,0x41,0x6c,0x43,0x2c,0x49,0x41,0x41,0x49,0x70,0x6e,0x43,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x43,0x2c,0x65,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x45,0x7a,0x63,0x2c,0x47,0x41,0x41,0x47,0x33,0x71,0x42,0x2c,0x49,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x39,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x74,0x7a,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4e,0x71,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x47,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x36,0x42,0x2c,0x51,0x41,0x41,0x33,0x42,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x71,0x42,0x2c,0x79,0x42,0x41,0x41,0x34,0x42,0x2c,0x49,0x41,0x41,0x53,0x74,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x32,0x48,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x49,0x2c,0x47,0x41,0x41,0x45,0x49,0x2c,0x49,0x41,0x41,0x49,0x4a,0x2c,0x47,0x41,0x41,0x45,0x47,0x2c,0x49,0x41,0x41,0x47,0x32,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x4c,0x2c,0x47,0x41,0x41,0x47,0x70,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x76,0x49,0x2c,0x47,0x41,0x41,0x45,0x30,0x49,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x6a,0x44,0x2c,0x47,0x41,0x41,0x47,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x79,0x37,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x71,0x45,0x2c,0x47,0x41,0x41,0x70,0x45,0x67,0x6d,0x42,0x2c,0x47,0x41,0x41,0x45,0x31,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6c,0x43,0x2c,0x47,0x41,0x41,0x45,0x68,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x38,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x74,0x47,0x2c,0x47,0x41,0x41,0x47,0x31,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x6c,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x71,0x52,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x76,0x79,0x42,0x2c,0x45,0x41,0x43,0x31,0x66,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x79,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x32,0x42,0x2c,0x51,0x41,0x41,0x68,0x42,0x75,0x42,0x2c,0x47,0x41,0x41,0x52,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x79,0x42,0x2c,0x49,0x41,0x41,0x4f,0x30,0x79,0x42,0x2c,0x61,0x41,0x41,0x71,0x42,0x2c,0x43,0x41,0x41,0x43,0x7a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x76,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x35,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x67,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x79,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x33,0x4b,0x2c,0x53,0x41,0x41,0x53,0x67,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x75,0x42,0x2c,0x47,0x41,0x41,0x6e,0x42,0x72,0x54,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x44,0x2c,0x47,0x41,0x41,0x47,0x68,0x6a,0x42,0x2c,0x51,0x41,0x41,0x51,0x69,0x6b,0x42,0x2c,0x47,0x41,0x41,0x4d,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x6c,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x31,0x6a,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x31,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x30,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x78,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x75,0x45,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x34,0x43,0x2c,0x47,0x41,0x41,0x33,0x43,0x4a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x47,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x49,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x6b,0x50,0x2c,0x47,0x41,0x41,0x47,0x33,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x6f,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x44,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x68,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x4c,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x71,0x42,0x2c,0x47,0x41,0x41,0x6e,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x6c,0x43,0x2c,0x47,0x41,0x41,0x45,0x70,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x4c,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x78,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6e,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x36,0x4b,0x2c,0x45,0x41,0x41,0x45,0x73,0x65,0x2c,0x51,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6a,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x53,0x2c,0x55,0x41,0x41,0x55,0x77,0x66,0x2c,0x47,0x41,0x41,0x47,0x6a,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x68,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x42,0x2c,0x59,0x41,0x41,0x59,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x61,0x2c,0x63,0x41,0x41,0x63,0x6f,0x66,0x2c,0x45,0x41,0x41,0x45,0x70,0x66,0x2c,0x63,0x41,0x43,0x78,0x65,0x62,0x2c,0x45,0x41,0x41,0x45,0x6d,0x68,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x6e,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x68,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x61,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x71,0x66,0x2c,0x45,0x41,0x41,0x45,0x77,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2f,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x66,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x67,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4d,0x2c,0x45,0x41,0x41,0x45,0x76,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x50,0x69,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x42,0x2c,0x4d,0x41,0x41,0x51,0x69,0x4f,0x2c,0x47,0x41,0x41,0x47,0x37,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x47,0x41,0x41,0x4f,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6b,0x6a,0x42,0x2c,0x47,0x41,0x41,0x5a,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x47,0x41,0x41,0x63,0x36,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x78,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x77,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x6d,0x46,0x2c,0x47,0x41,0x41,0x47,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x68,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x6d,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x73,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x33,0x46,0x2c,0x47,0x41,0x41,0x47,0x6b,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x67,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x38,0x46,0x2c,0x45,0x41,0x41,0x45,0x62,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x32,0x75,0x42,0x2c,0x49,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x50,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x70,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x47,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x47,0x41,0x41,0x47,0x2f,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x52,0x41,0x2c,0x45,0x41,0x41,0x45,0x72,0x58,0x2c,0x53,0x41,0x41,0x65,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x72,0x58,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x55,0x2c,0x45,0x41,0x41,0x45,0x72,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x4d,0x2c,0x47,0x41,0x41,0x47,0x78,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x69,0x38,0x42,0x2c,0x4b,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x44,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x33,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x32,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x4f,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x7a,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x43,0x70,0x66,0x31,0x52,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x6b,0x42,0x38,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x79,0x42,0x2c,0x45,0x41,0x41,0x62,0x71,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x49,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x71,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x4f,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x74,0x4f,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x53,0x41,0x41,0x61,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x77,0x58,0x2c,0x45,0x41,0x41,0x45,0x67,0x55,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x55,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x68,0x56,0x2c,0x49,0x41,0x41,0x49,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x78,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x52,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x6b,0x42,0x38,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x79,0x42,0x2c,0x45,0x41,0x41,0x62,0x77,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x49,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2b,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x70,0x42,0x2c,0x47,0x41,0x41,0x49,0x7a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x70,0x42,0x2c,0x45,0x41,0x41,0x47,0x73,0x62,0x2c,0x4b,0x41,0x41,0x49,0x39,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x49,0x41,0x41,0x49,0x38,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x39,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x51,0x41,0x41,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6d,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x37,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x79,0x42,0x2c,0x51,0x41,0x41,0x73,0x42,0x2c,0x4f,0x41,0x41,0x64,0x30,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x69,0x6b,0x42,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x32,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x72,0x64,0x2c,0x53,0x41,0x41,0x53,0x6d,0x67,0x43,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x4b,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x4b,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x55,0x41,0x41,0x48,0x7a,0x44,0x2c,0x4b,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x55,0x41,0x41,0x48,0x6b,0x52,0x2c,0x4b,0x41,0x41,0x65,0x61,0x2c,0x47,0x41,0x41,0x47,0x74,0x4f,0x2c,0x47,0x41,0x41,0x45,0x75,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x72,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x71,0x43,0x2c,0x49,0x41,0x41,0x37,0x42,0x6e,0x50,0x2c,0x4b,0x41,0x41,0x49,0x31,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x69,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x49,0x68,0x6c,0x43,0x2c,0x49,0x41,0x41,0x45,0x75,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x79,0x6e,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x75,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x67,0x43,0x2c,0x47,0x41,0x41,0x74,0x42,0x6b,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x33,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x33,0x51,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x6a,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x2f,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x58,0x32,0x33,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x53,0x6e,0x44,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x34,0x46,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x43,0x2c,0x49,0x41,0x41,0x47,0x32,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x49,0x74,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x32,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x2b,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x67,0x6c,0x43,0x2c,0x47,0x41,0x41,0x45,0x2f,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x31,0x64,0x2c,0x53,0x41,0x41,0x53,0x73,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x55,0x41,0x41,0x71,0x42,0x2c,0x47,0x41,0x41,0x58,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x52,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x67,0x42,0x2c,0x51,0x41,0x41,0x62,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x69,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x6b,0x42,0x2c,0x59,0x41,0x41,0x4a,0x71,0x47,0x2c,0x47,0x41,0x41,0x45,0x39,0x6b,0x43,0x2c,0x4f,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x62,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x6d,0x43,0x2c,0x4f,0x41,0x41,0x6e,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x57,0x41,0x41,0x4d,0x71,0x7a,0x42,0x2c,0x47,0x41,0x41,0x45,0x39,0x6b,0x43,0x2c,0x47,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x6d,0x45,0x2c,0x4f,0x41,0x41,0x58,0x38,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x45,0x6b,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x35,0x44,0x68,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x67,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x76,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x34,0x42,0x2c,0x43,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x66,0x39,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x53,0x41,0x41,0x79,0x42,0x2c,0x59,0x41,0x41,0x4a,0x38,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x2f,0x6b,0x43,0x2c,0x47,0x41,0x41,0x53,0x2b,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2f,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x36,0x68,0x43,0x2c,0x4b,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x75,0x46,0x2c,0x47,0x41,0x41,0x47,0x72,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x54,0x2c,0x47,0x41,0x41,0x45,0x35,0x54,0x2c,0x45,0x41,0x41,0x45,0x73,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x2b,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x43,0x33,0x59,0x2c,0x53,0x41,0x41,0x59,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x6d,0x6c,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x37,0x52,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6e,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x31,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x32,0x43,0x2c,0x47,0x41,0x41,0x74,0x43,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6e,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x4b,0x6c,0x6e,0x43,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x4e,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6d,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x6d,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x35,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x57,0x41,0x41,0x38,0x4a,0x2c,0x47,0x41,0x7a,0x4e,0x74,0x54,0x2c,0x53,0x41,0x41,0x59,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x63,0x41,0x41,0x63,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x61,0x41,0x41,0x61,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x65,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x45,0x31,0x55,0x2c,0x45,0x41,0x41,0x45,0x32,0x55,0x2c,0x59,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x45,0x33,0x55,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6d,0x43,0x2c,0x63,0x41,0x41,0x63,0x6e,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x6e,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x33,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x55,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x33,0x55,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x55,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x72,0x54,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x6e,0x56,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6d,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x71,0x53,0x2c,0x47,0x41,0x41,0x47,0x35,0x54,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x79,0x4e,0x35,0x47,0x6d,0x6d,0x43,0x2c,0x43,0x41,0x41,0x47,0x37,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x49,0x41,0x41,0x49,0x30,0x33,0x42,0x2c,0x4b,0x41,0x41,0x49,0x73,0x4e,0x2c,0x47,0x41,0x41,0x45,0x74,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x4e,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x66,0x2f,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x67,0x43,0x2c,0x65,0x41,0x41,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x52,0x72,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x51,0x41,0x41,0x61,0x38,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x7a,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x67,0x42,0x2c,0x4f,0x41,0x41,0x4c,0x71,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x49,0x6a,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x52,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x2c,0x4d,0x41,0x41,0x66,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x71,0x67,0x43,0x2c,0x65,0x41,0x41,0x71,0x42,0x37,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2b,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x43,0x68,0x66,0x2c,0x49,0x41,0x41,0x49,0x72,0x57,0x2c,0x45,0x41,0x41,0x45,0x30,0x54,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x78,0x50,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x42,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x52,0x2c,0x47,0x41,0x41,0x47,0x33,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x31,0x43,0x70,0x43,0x2c,0x53,0x41,0x41,0x59,0x6e,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x67,0x42,0x2c,0x47,0x41,0x41,0x62,0x73,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x53,0x2c,0x47,0x41,0x41,0x61,0x75,0x4d,0x2c,0x47,0x41,0x41,0x56,0x72,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x6b,0x42,0x2c,0x4d,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x6a,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x79,0x6b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x44,0x2c,0x49,0x41,0x41,0x49,0x35,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6b,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x39,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x38,0x43,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x47,0x41,0x41,0x6a,0x44,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x49,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x7a,0x49,0x2c,0x45,0x41,0x41,0x45,0x38,0x6b,0x42,0x2c,0x61,0x41,0x41,0x61,0x6e,0x6b,0x42,0x2c,0x51,0x41,0x41,0x65,0x6f,0x6b,0x42,0x2c,0x63,0x41,0x41,0x63,0x2f,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x6a,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x6a,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x6a,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x6a,0x42,0x2c,0x61,0x41,0x41,0x61,0x33,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x6a,0x42,0x2c,0x55,0x41,0x41,0x55,0x39,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6a,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x49,0x72,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x4b,0x2c,0x53,0x41,0x41,0x53,0x68,0x4a,0x2c,0x45,0x41,0x41,0x45,0x67,0x4a,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x30,0x65,0x2c,0x47,0x41,0x41,0x47,0x6c,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x69,0x78,0x42,0x2c,0x45,0x41,0x41,0x4b,0x46,0x2c,0x49,0x41,0x41,0x49,0x39,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6d,0x42,0x2c,0x57,0x41,0x41,0x57,0x37,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x75,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x74,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6d,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6d,0x42,0x2c,0x57,0x41,0x41,0x57,0x2f,0x49,0x2c,0x47,0x41,0x43,0x6e,0x66,0x71,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x6d,0x42,0x2c,0x55,0x41,0x41,0x55,0x76,0x4b,0x2c,0x51,0x41,0x41,0x57,0x2c,0x51,0x41,0x41,0x51,0x38,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x37,0x6d,0x42,0x2c,0x61,0x41,0x41,0x6b,0x42,0x38,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x49,0x41,0x41,0x49,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x38,0x43,0x2c,0x47,0x41,0x41,0x35,0x43,0x67,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2f,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x46,0x2c,0x49,0x41,0x41,0x49,0x6e,0x45,0x2c,0x49,0x41,0x41,0x49,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x47,0x41,0x41,0x47,0x73,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x50,0x2c,0x49,0x41,0x41,0x49,0x78,0x50,0x2c,0x49,0x41,0x41,0x49,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6e,0x4e,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x55,0x6f,0x4e,0x2c,0x47,0x41,0x41,0x4a,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x4d,0x76,0x68,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x73,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x68,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x32,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x36,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x65,0x2c,0x45,0x41,0x41,0x45,0x2b,0x65,0x2c,0x49,0x41,0x41,0x49,0x39,0x65,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x79,0x6b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x2b,0x43,0x2c,0x49,0x41,0x41,0x31,0x43,0x73,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x68,0x47,0x2c,0x59,0x41,0x41,0x59,0x78,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x6b,0x42,0x2c,0x65,0x41,0x41,0x65,0x76,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x58,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4f,0x77,0x71,0x42,0x2c,0x47,0x41,0x41,0x45,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x69,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x4f,0x74,0x69,0x43,0x2c,0x47,0x41,0x41,0x4a,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x43,0x2c,0x49,0x41,0x41,0x4d,0x72,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x66,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x73,0x67,0x43,0x2c,0x65,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x74,0x69,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x69,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x78,0x5a,0x2c,0x45,0x41,0x41,0x45,0x37,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x52,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x52,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x43,0x76,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x33,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x47,0x2c,0x63,0x41,0x41,0x63,0x31,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6a,0x58,0x2c,0x63,0x41,0x41,0x63,0x6f,0x58,0x2c,0x45,0x41,0x41,0x45,0x68,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x5a,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x54,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x6a,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6d,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x52,0x2c,0x47,0x41,0x41,0x47,0x35,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x62,0x2c,0x6f,0x43,0x41,0x41,0x6f,0x43,0x72,0x62,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x2b,0x52,0x2c,0x45,0x41,0x41,0x45,0x78,0x65,0x2c,0x53,0x41,0x41,0x53,0x77,0x65,0x2c,0x45,0x41,0x41,0x45,0x78,0x66,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x66,0x2c,0x45,0x41,0x41,0x45,0x78,0x65,0x2c,0x55,0x41,0x41,0x55,0x77,0x65,0x2c,0x45,0x41,0x41,0x45,0x78,0x45,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x77,0x45,0x2c,0x45,0x41,0x41,0x45,0x39,0x65,0x2c,0x59,0x41,0x41,0x59,0x38,0x65,0x2c,0x45,0x41,0x41,0x45,0x78,0x45,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4d,0x41,0x41,0x79,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x66,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x71,0x70,0x42,0x2c,0x47,0x41,0x41,0x47,0x6f,0x5a,0x2c,0x47,0x41,0x41,0x45,0x76,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x66,0x70,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x53,0x41,0x41,0x6f,0x42,0x2c,0x43,0x41,0x41,0x43,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x74,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x73,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x72,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x6f,0x58,0x2c,0x45,0x41,0x41,0x45,0x34,0x5a,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x57,0x2c,0x43,0x41,0x77,0x43,0x6c,0x64,0x6f,0x46,0x2c,0x43,0x41,0x41,0x47,0x39,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x34,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x75,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x31,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x53,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x6d,0x52,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x68,0x42,0x2c,0x47,0x41,0x41,0x45,0x68,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x47,0x41,0x41,0x45,0x31,0x54,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x74,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x6a,0x53,0x2c,0x45,0x41,0x41,0x73,0x46,0x2c,0x47,0x41,0x41,0x70,0x46,0x75,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x2f,0x53,0x2c,0x49,0x41,0x41,0x49,0x32,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x68,0x4f,0x6d,0x4a,0x2c,0x53,0x41,0x41,0x59,0x72,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x36,0x54,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x6b,0x30,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x30,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6e,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x54,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x75,0x42,0x2c,0x49,0x41,0x41,0x68,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x4f,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x67,0x4f,0x78,0x52,0x2b,0x6e,0x43,0x2c,0x43,0x41,0x41,0x47,0x39,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x57,0x41,0x41,0x61,0x69,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x53,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x6f,0x43,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2f,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x32,0x31,0x42,0x2c,0x65,0x41,0x41,0x65,0x37,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x73,0x33,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x36,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x68,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x48,0x32,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x33,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x55,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x2f,0x53,0x2c,0x47,0x41,0x41,0x4b,0x31,0x42,0x2c,0x49,0x41,0x41,0x49,0x36,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x6c,0x59,0x2c,0x49,0x41,0x41,0x67,0x42,0x2c,0x43,0x41,0x46,0x78,0x46,0x77,0x61,0x2c,0x43,0x41,0x41,0x47,0x6c,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x75,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x76,0x57,0x2c,0x45,0x41,0x41,0x45,0x34,0x54,0x2c,0x47,0x41,0x41,0x45,0x37,0x54,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x47,0x68,0x63,0x2c,0x53,0x41,0x41,0x53,0x6d,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x31,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x56,0x2c,0x47,0x41,0x41,0x47,0x71,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x31,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x39,0x58,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x6d,0x43,0x2c,0x47,0x41,0x41,0x2f,0x42,0x30,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6c,0x6b,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x6d,0x42,0x2c,0x47,0x41,0x41,0x6c,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x39,0x52,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x79,0x42,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x4c,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4d,0x79,0x4f,0x2c,0x47,0x41,0x41,0x45,0x74,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x77,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x33,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x52,0x71,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x33,0x77,0x42,0x2c,0x4f,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x39,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x74,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6c,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x7a,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x46,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x31,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x38,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x74,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x78,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x77,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x65,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x74,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x56,0x2c,0x45,0x41,0x41,0x45,0x73,0x78,0x42,0x2c,0x47,0x41,0x41,0x45,0x74,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x52,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x72,0x52,0x2c,0x47,0x41,0x41,0x52,0x6a,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x78,0x42,0x2c,0x49,0x41,0x41,0x55,0x70,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x67,0x66,0x2c,0x45,0x41,0x41,0x45,0x6c,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x55,0x2c,0x4f,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x4e,0x6f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x78,0x42,0x2c,0x47,0x41,0x41,0x4d,0x41,0x2c,0x49,0x41,0x43,0x6e,0x66,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x66,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x66,0x2c,0x45,0x41,0x41,0x45,0x6f,0x52,0x2c,0x47,0x41,0x41,0x45,0x72,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x71,0x52,0x2c,0x47,0x41,0x41,0x45,0x70,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x70,0x49,0x2c,0x45,0x41,0x41,0x45,0x70,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x37,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x57,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x37,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2b,0x57,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x37,0x57,0x2c,0x51,0x41,0x41,0x51,0x36,0x57,0x2c,0x45,0x41,0x41,0x45,0x37,0x57,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x75,0x5a,0x2c,0x47,0x41,0x41,0x45,0x35,0x67,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x66,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x2b,0x42,0x2c,0x65,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x34,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x33,0x67,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x69,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x70,0x42,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x67,0x43,0x2c,0x49,0x41,0x41,0x59,0x33,0x77,0x42,0x2c,0x4f,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x51,0x2c,0x45,0x41,0x41,0x45,0x79,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x77,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x6a,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x75,0x58,0x2c,0x45,0x41,0x41,0x45,0x76,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x57,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x58,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x72,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x70,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x35,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x79,0x58,0x2c,0x45,0x41,0x41,0x45,0x6e,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x6d,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x6e,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x5a,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x70,0x5a,0x2c,0x47,0x41,0x41,0x52,0x76,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x67,0x43,0x2c,0x49,0x41,0x41,0x55,0x72,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x66,0x74,0x51,0x2c,0x45,0x41,0x41,0x45,0x34,0x2b,0x42,0x2c,0x65,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x43,0x6c,0x66,0x72,0x58,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x78,0x58,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x32,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x70,0x5a,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x5a,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4d,0x41,0x41,0x70,0x42,0x7a,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x38,0x42,0x2c,0x49,0x41,0x41,0x59,0x33,0x77,0x42,0x2c,0x4f,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x4c,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x79,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2f,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x6a,0x42,0x2c,0x47,0x41,0x41,0x49,0x38,0x59,0x2c,0x47,0x41,0x41,0x45,0x33,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x59,0x2c,0x45,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x37,0x6a,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x32,0x67,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x69,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x31,0x58,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x4c,0x2c,0x45,0x41,0x41,0x45,0x36,0x4c,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x45,0x6c,0x5a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x70,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x71,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x7a,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x4c,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x54,0x6d,0x69,0x42,0x2c,0x47,0x41,0x41,0x45,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x73,0x42,0x2c,0x4b,0x41,0x41,0x51,0x37,0x5a,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x73,0x30,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x49,0x41,0x41,0x49,0x74,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x30,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x76,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x54,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x30,0x70,0x42,0x2c,0x47,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x6c,0x6f,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x36,0x54,0x2c,0x47,0x41,0x41,0x45,0x6e,0x56,0x2c,0x45,0x41,0x41,0x45,0x36,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2f,0x58,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6d,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x79,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x34,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x7a,0x42,0x2c,0x45,0x41,0x41,0x6a,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x38,0x42,0x2c,0x45,0x41,0x41,0x66,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x35,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x35,0x42,0x2c,0x49,0x41,0x41,0x49,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x6c,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x67,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x7a,0x65,0x2c,0x53,0x41,0x41,0x53,0x75,0x69,0x43,0x2c,0x47,0x41,0x41,0x45,0x78,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x69,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x69,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x37,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x33,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x37,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x47,0x41,0x41,0x47,0x68,0x56,0x2c,0x49,0x41,0x41,0x49,0x37,0x6d,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x75,0x42,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x7a,0x42,0x2c,0x45,0x41,0x41,0x6a,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x39,0x42,0x2c,0x45,0x41,0x41,0x66,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x35,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x35,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x56,0x2c,0x47,0x41,0x41,0x47,0x6a,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x69,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6e,0x56,0x2c,0x53,0x41,0x41,0x53,0x2b,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x39,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x57,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x35,0x42,0x2c,0x4b,0x41,0x41,0x49,0x78,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x55,0x2c,0x61,0x41,0x41,0x61,0x33,0x55,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x65,0x41,0x41,0x65,0x78,0x55,0x2c,0x45,0x41,0x41,0x45,0x77,0x33,0x42,0x2c,0x4b,0x41,0x41,0x49,0x31,0x33,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x6c,0x43,0x2c,0x47,0x41,0x41,0x45,0x2f,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x34,0x68,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x46,0x6d,0x44,0x2c,0x4d,0x41,0x41,0x65,0x41,0x2c,0x49,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x79,0x42,0x2c,0x4b,0x41,0x41,0x49,0x6d,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6f,0x6c,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x50,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4d,0x41,0x41,0x51,0x72,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x55,0x2c,0x47,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x57,0x41,0x41,0x66,0x41,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x75,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x70,0x55,0x2c,0x45,0x41,0x41,0x45,0x73,0x35,0x42,0x2c,0x4b,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x56,0x78,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4d,0x41,0x41,0x63,0x69,0x56,0x2c,0x47,0x41,0x41,0x47,0x6c,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x76,0x42,0x2c,0x57,0x41,0x41,0x57,0x69,0x5a,0x2c,0x47,0x41,0x41,0x47,0x72,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x6a,0x5a,0x2c,0x53,0x41,0x41,0x53,0x30,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x63,0x76,0x4f,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x51,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x74,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x35,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x57,0x2c,0x47,0x41,0x41,0x47,0x6f,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x51,0x71,0x4b,0x2c,0x53,0x41,0x41,0x53,0x75,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x53,0x2c,0x47,0x41,0x41,0x47,0x74,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x6a,0x5a,0x2c,0x53,0x41,0x41,0x53,0x71,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x45,0x2c,0x49,0x41,0x41,0x49,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x63,0x2c,0x49,0x41,0x41,0x49,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x51,0x2c,0x51,0x41,0x41,0x51,0x74,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x50,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x4f,0x2c,0x55,0x41,0x41,0x55,0x70,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x4e,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x74,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x35,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x74,0x42,0x2c,0x61,0x41,0x41,0x61,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x77,0x42,0x2c,0x61,0x41,0x41,0x61,0x72,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x51,0x2c,0x63,0x41,0x41,0x63,0x6a,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x6e,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x74,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x2b,0x42,0x2c,0x61,0x41,0x41,0x61,0x33,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x50,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x2f,0x50,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x74,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x74,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x6e,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x76,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6f,0x64,0x2c,0x47,0x41,0x41,0x47,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x38,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x2b,0x42,0x2c,0x47,0x41,0x41,0x69,0x42,0x2c,0x55,0x41,0x41,0x64,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x42,0x2c,0x61,0x41,0x41,0x75,0x42,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x6f,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x45,0x70,0x64,0x2c,0x53,0x41,0x41,0x53,0x39,0x58,0x2c,0x47,0x41,0x41,0x47,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x43,0x75,0x42,0x2c,0x4f,0x41,0x44,0x62,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x52,0x2c,0x49,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x49,0x41,0x41,0x49,0x6e,0x65,0x2c,0x45,0x41,0x41,0x45,0x73,0x76,0x42,0x2c,0x4f,0x41,0x41,0x51,0x52,0x2c,0x59,0x41,0x41,0x59,0x39,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x42,0x2c,0x59,0x41,0x41,0x59,0x35,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x55,0x41,0x41,0x55,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x39,0x50,0x2c,0x45,0x41,0x41,0x45,0x75,0x52,0x2c,0x55,0x41,0x41,0x55,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x55,0x41,0x41,0x55,0x76,0x52,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x75,0x42,0x2c,0x61,0x41,0x41,0x61,0x68,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x71,0x67,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x72,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x63,0x2c,0x53,0x41,0x41,0x52,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x65,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x57,0x41,0x41,0x57,0x37,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x52,0x2c,0x45,0x41,0x41,0x45,0x77,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x78,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x63,0x41,0x41,0x63,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x63,0x41,0x41,0x63,0x33,0x52,0x2c,0x45,0x41,0x41,0x45,0x36,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x2f,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x61,0x41,0x41,0x61,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x78,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x61,0x41,0x41,0x61,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x79,0x42,0x2c,0x63,0x41,0x43,0x2f,0x65,0x68,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x51,0x41,0x41,0x51,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x73,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x49,0x41,0x41,0x57,0x39,0x76,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x78,0x44,0x2c,0x53,0x41,0x41,0x53,0x30,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x4a,0x48,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x2b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x44,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x67,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x53,0x41,0x41,0x53,0x37,0x48,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x44,0x2c,0x45,0x41,0x41,0x47,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x33,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x46,0x77,0x42,0x2c,0x49,0x41,0x41,0x4f,0x71,0x74,0x42,0x2c,0x59,0x41,0x41,0x59,0x37,0x71,0x42,0x2c,0x45,0x41,0x41,0x47,0x6a,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x33,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x4b,0x71,0x74,0x42,0x2c,0x59,0x41,0x41,0x59,0x7a,0x71,0x42,0x2c,0x45,0x41,0x41,0x47,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x33,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x4b,0x71,0x74,0x42,0x2c,0x59,0x41,0x41,0x59,0x78,0x71,0x42,0x2c,0x45,0x41,0x41,0x47,0x74,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x79,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x43,0x2c,0x45,0x41,0x41,0x47,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x45,0x2c,0x45,0x41,0x41,0x47,0x78,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x45,0x2c,0x45,0x41,0x41,0x47,0x7a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x43,0x70,0x66,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x45,0x2c,0x45,0x41,0x41,0x47,0x35,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x45,0x2c,0x45,0x41,0x41,0x47,0x37,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x75,0x44,0x2c,0x4f,0x41,0x41,0x6a,0x44,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x49,0x41,0x41,0x4b,0x71,0x74,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x56,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x53,0x7a,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x32,0x42,0x2c,0x4f,0x41,0x41,0x78,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x49,0x41,0x41,0x4b,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x53,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x75,0x45,0x2c,0x4f,0x41,0x41,0x70,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x49,0x41,0x41,0x4b,0x36,0x75,0x42,0x2c,0x59,0x41,0x41,0x59,0x72,0x71,0x42,0x2c,0x45,0x41,0x41,0x47,0x7a,0x45,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x67,0x30,0x42,0x2c,0x55,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x57,0x68,0x6b,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x38,0x42,0x2c,0x4f,0x41,0x41,0x33,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x4b,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x53,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x35,0x57,0x2c,0x53,0x41,0x41,0x53,0x38,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x38,0x4a,0x2c,0x4f,0x41,0x41,0x33,0x4a,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x4a,0x2c,0x53,0x41,0x41,0x53,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x73,0x4a,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x49,0x41,0x41,0x49,0x6c,0x65,0x2c,0x49,0x41,0x41,0x4b,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x6e,0x58,0x2c,0x45,0x41,0x41,0x45,0x6d,0x58,0x2c,0x63,0x41,0x41,0x63,0x71,0x78,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x58,0x2c,0x65,0x41,0x41,0x65,0x37,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x77,0x42,0x2c,0x67,0x42,0x41,0x41,0x75,0x42,0x35,0x77,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x74,0x4c,0x2c,0x53,0x41,0x41,0x53,0x77,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x45,0x2c,0x49,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x56,0x2c,0x63,0x41,0x41,0x63,0x6e,0x58,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x6c,0x43,0x2c,0x61,0x41,0x41,0x61,0x76,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x37,0x42,0x2c,0x55,0x41,0x41,0x55,0x35,0x37,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x51,0x2c,0x51,0x41,0x41,0x51,0x76,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x6d,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x6d,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x6c,0x43,0x2c,0x65,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x45,0x31,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x73,0x6b,0x43,0x2c,0x61,0x41,0x41,0x61,0x74,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x39,0x42,0x2c,0x65,0x41,0x41,0x65,0x78,0x39,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x6b,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x54,0x2c,0x57,0x41,0x41,0x57,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x72,0x54,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x6b,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6c,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x72,0x54,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x54,0x2c,0x65,0x41,0x41,0x65,0x68,0x54,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x6c,0x43,0x2c,0x63,0x41,0x41,0x63,0x78,0x6c,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x6d,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x68,0x6d,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x6b,0x43,0x2c,0x61,0x41,0x41,0x61,0x78,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x53,0x2c,0x59,0x41,0x41,0x59,0x2f,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x53,0x2c,0x65,0x41,0x41,0x65,0x39,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x53,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x37,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x54,0x2c,0x63,0x41,0x41,0x63,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x72,0x54,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x35,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x70,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x6d,0x43,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x78,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x6d,0x43,0x2c,0x67,0x43,0x41,0x43,0x2f,0x65,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x67,0x4e,0x2c,0x4f,0x41,0x41,0x37,0x4d,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x79,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x37,0x46,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x4f,0x2c,0x55,0x41,0x41,0x55,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x63,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x67,0x55,0x2c,0x51,0x41,0x41,0x51,0x72,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x56,0x2c,0x61,0x41,0x41,0x61,0x68,0x58,0x2c,0x45,0x41,0x41,0x45,0x30,0x6f,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x4b,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x56,0x2c,0x47,0x41,0x41,0x47,0x70,0x78,0x42,0x2c,0x47,0x41,0x41,0x55,0x31,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x7a,0x50,0x2c,0x53,0x41,0x41,0x53,0x38,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x71,0x73,0x42,0x2c,0x47,0x41,0x41,0x75,0x42,0x72,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x77,0x52,0x2c,0x47,0x41,0x41,0x31,0x42,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x37,0x42,0x2c,0x6d,0x42,0x41,0x41,0x38,0x42,0x6c,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x73,0x69,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x36,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6f,0x64,0x2c,0x30,0x43,0x41,0x41,0x30,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x74,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6a,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x32,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x33,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x70,0x57,0x2c,0x53,0x41,0x41,0x53,0x38,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x77,0x4b,0x2c,0x4f,0x41,0x41,0x72,0x4b,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x4b,0x77,0x73,0x42,0x2c,0x51,0x41,0x41,0x51,0x77,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x53,0x41,0x41,0x73,0x42,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x36,0x78,0x42,0x2c,0x47,0x41,0x41,0x68,0x42,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x34,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x35,0x42,0x2c,0x4b,0x41,0x41,0x65,0x79,0x7a,0x42,0x2c,0x63,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x53,0x31,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x51,0x41,0x41,0x51,0x67,0x67,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x54,0x2c,0x47,0x41,0x41,0x47,0x6c,0x56,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x79,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x55,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x67,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x38,0x33,0x42,0x2c,0x4b,0x41,0x41,0x49,0x37,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x33,0x42,0x2c,0x47,0x41,0x41,0x73,0x4c,0x2c,0x4f,0x41,0x41,0x6e,0x4c,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x72,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x79,0x42,0x2c,0x51,0x41,0x41,0x51,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x65,0x41,0x41,0x65,0x6c,0x2f,0x42,0x2c,0x47,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x73,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x4b,0x2b,0x78,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x37,0x4e,0x2c,0x51,0x41,0x41,0x51,0x37,0x6c,0x42,0x2c,0x47,0x41,0x41,0x75,0x42,0x2c,0x51,0x41,0x41,0x70,0x42,0x77,0x42,0x2c,0x4f,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x4b,0x41,0x41,0x61,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x6e,0x79,0x42,0x2c,0x47,0x41,0x41,0x65,0x2c,0x51,0x41,0x41,0x5a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x4d,0x41,0x41,0x63,0x71,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x6f,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x57,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x33,0x62,0x2c,0x53,0x41,0x41,0x53,0x73,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x6a,0x70,0x43,0x2c,0x47,0x41,0x41,0x65,0x2c,0x4f,0x41,0x41,0x5a,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x53,0x2c,0x53,0x41,0x41,0x63,0x46,0x2c,0x4f,0x41,0x41,0x79,0x42,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x39,0x4c,0x2c,0x49,0x41,0x41,0x6f,0x44,0x6e,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x43,0x2c,0x57,0x41,0x41,0x68,0x46,0x2c,0x49,0x41,0x41,0x30,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x72,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x67,0x42,0x41,0x41,0x32,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x52,0x2c,0x45,0x41,0x41,0x45,0x38,0x52,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x76,0x42,0x2c,0x55,0x41,0x41,0x55,0x70,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x76,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x6c,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x69,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x6c,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x59,0x41,0x41,0x59,0x79,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x6e,0x42,0x37,0x53,0x79,0x6b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x31,0x6b,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x31,0x43,0x2c,0x47,0x41,0x41,0x47,0x70,0x61,0x2c,0x51,0x41,0x41,0x51,0x69,0x67,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x79,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x67,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x7a,0x45,0x31,0x49,0x2c,0x53,0x41,0x41,0x59,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x67,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2b,0x45,0x2c,0x47,0x41,0x41,0x47,0x31,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x34,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x75,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x33,0x56,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x45,0x2c,0x53,0x41,0x41,0x53,0x39,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2f,0x6e,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x6b,0x42,0x2c,0x47,0x41,0x41,0x45,0x6d,0x46,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x65,0x41,0x41,0x65,0x72,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x63,0x41,0x41,0x63,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x71,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x72,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x65,0x41,0x41,0x32,0x42,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x73,0x51,0x2c,0x59,0x41,0x41,0x6b,0x42,0x73,0x61,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x56,0x41,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x53,0x41,0x41,0x57,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x38,0x66,0x2c,0x59,0x41,0x41,0x6d,0x42,0x36,0x4e,0x2c,0x47,0x41,0x41,0x47,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x47,0x6b,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x56,0x41,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x53,0x41,0x41,0x38,0x42,0x2c,0x51,0x41,0x41,0x6e,0x42,0x6e,0x53,0x2c,0x45,0x41,0x41,0x45,0x67,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x6d,0x42,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4b,0x6b,0x61,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x56,0x41,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x53,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x43,0x37,0x64,0x2c,0x47,0x41,0x44,0x67,0x65,0x33,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x42,0x2c,0x45,0x41,0x43,0x72,0x66,0x44,0x2c,0x45,0x41,0x41,0x45,0x38,0x78,0x42,0x2c,0x59,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x52,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4f,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x36,0x46,0x2c,0x47,0x41,0x41,0x31,0x45,0x2c,0x51,0x41,0x41,0x6c,0x42,0x6c,0x51,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x69,0x42,0x41,0x41,0x79,0x42,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x2f,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x32,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x4c,0x2c,0x47,0x41,0x41,0x45,0x79,0x49,0x2c,0x47,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x45,0x31,0x69,0x42,0x2c,0x53,0x41,0x41,0x59,0x33,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x6d,0x4d,0x2c,0x47,0x41,0x41,0x47,0x74,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x77,0x45,0x37,0x47,0x6b,0x70,0x43,0x2c,0x43,0x41,0x41,0x47,0x70,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x52,0x70,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x52,0x2c,0x4d,0x41,0x41,0x6d,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x67,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x31,0x44,0x2c,0x49,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x51,0x41,0x41,0x52,0x7a,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x51,0x41,0x41,0x67,0x42,0x30,0x63,0x2c,0x47,0x41,0x41,0x47,0x70,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x4f,0x41,0x41,0x69,0x42,0x2c,0x4f,0x41,0x41,0x56,0x76,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x53,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x78,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x6e,0x61,0x2c,0x53,0x41,0x41,0x53,0x36,0x66,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x30,0x42,0x2c,0x4b,0x41,0x43,0x76,0x49,0x2c,0x4f,0x41,0x44,0x34,0x49,0x70,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6c,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x45,0x2c,0x61,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x53,0x33,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x45,0x2c,0x55,0x41,0x41,0x55,0x72,0x47,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x52,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x43,0x31,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x47,0x2c,0x47,0x41,0x41,0x47,0x72,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x79,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x51,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x59,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x53,0x6c,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x36,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x49,0x2c,0x47,0x41,0x41,0x47,0x37,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x36,0x42,0x2c,0x51,0x41,0x41,0x51,0x5a,0x2c,0x47,0x41,0x41,0x47,0x2f,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x76,0x4f,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x35,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6a,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x75,0x6f,0x42,0x2c,0x49,0x41,0x41,0x47,0x68,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x37,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4f,0x41,0x41,0x63,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x59,0x41,0x41,0x59,0x39,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x71,0x46,0x2c,0x4f,0x41,0x41,0x70,0x46,0x38,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x75,0x42,0x7a,0x74,0x42,0x2c,0x47,0x41,0x41,0x56,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x46,0x2c,0x4f,0x41,0x41,0x55,0x6a,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x46,0x2c,0x55,0x41,0x41,0x55,0x76,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x51,0x74,0x55,0x2c,0x53,0x41,0x41,0x59,0x6e,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x62,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x59,0x41,0x41,0x67,0x42,0x6c,0x43,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x70,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x52,0x32,0x4c,0x38,0x6b,0x43,0x2c,0x43,0x41,0x41,0x47,0x37,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x47,0x41,0x41,0x55,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x43,0x76,0x67,0x42,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x32,0x43,0x6f,0x50,0x2c,0x47,0x41,0x41,0x47,0x72,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x72,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x74,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x63,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x32,0x43,0x34,0x50,0x2c,0x47,0x41,0x41,0x47,0x37,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x72,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x74,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x63,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x4e,0x6d,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x2f,0x42,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x2b,0x42,0x78,0x74,0x42,0x2c,0x47,0x41,0x41,0x6c,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x65,0x41,0x41,0x6b,0x42,0x67,0x55,0x2c,0x51,0x41,0x41,0x51,0x79,0x4e,0x2c,0x47,0x41,0x41,0x47,0x74,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2b,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x30,0x42,0x2c,0x47,0x41,0x41,0x5a,0x72,0x51,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6b,0x42,0x2c,0x51,0x41,0x41,0x57,0x6e,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x56,0x2c,0x61,0x41,0x41,0x59,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x6b,0x42,0x2c,0x51,0x41,0x41,0x51,0x72,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x56,0x2c,0x63,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x47,0x30,0x78,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x6e,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x6c,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6e,0x43,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x70,0x4b,0x2c,0x59,0x41,0x41,0x59,0x39,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x38,0x42,0x2c,0x61,0x41,0x41,0x61,0x78,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x79,0x42,0x2c,0x59,0x41,0x41,0x59,0x43,0x2c,0x55,0x41,0x43,0x68,0x66,0x74,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x52,0x2c,0x63,0x41,0x41,0x63,0x6e,0x51,0x2c,0x45,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x52,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4d,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x75,0x42,0x31,0x52,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x6a,0x43,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x33,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x49,0x41,0x41,0x6d,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x75,0x42,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x6a,0x43,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x33,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x49,0x41,0x41,0x6d,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x79,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x44,0x2c,0x47,0x41,0x41,0x47,0x76,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x63,0x41,0x41,0x63,0x68,0x4e,0x2c,0x59,0x41,0x41,0x59,0x71,0x6b,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x49,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2f,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4f,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x54,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x79,0x52,0x2c,0x4d,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x52,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x4c,0x30,0x64,0x2c,0x4b,0x41,0x41,0x51,0x70,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x38,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x76,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x76,0x42,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2f,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x48,0x2c,0x53,0x41,0x41,0x53,0x6d,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2b,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x43,0x6e,0x66,0x69,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x36,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x53,0x2c,0x47,0x41,0x41,0x47,0x75,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x32,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x30,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x55,0x41,0x41,0x55,0x6d,0x48,0x2c,0x65,0x41,0x41,0x65,0x33,0x56,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6f,0x66,0x2c,0x47,0x41,0x41,0x47,0x70,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x51,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x32,0x43,0x38,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2f,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x72,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x74,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x63,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x2f,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x6d,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x33,0x6c,0x42,0x2c,0x53,0x41,0x41,0x53,0x70,0x4a,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x6a,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x78,0x5a,0x2c,0x47,0x41,0x44,0x79,0x5a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x45,0x2c,0x53,0x41,0x41,0x53,0x39,0x45,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x76,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x76,0x42,0x2c,0x63,0x41,0x43,0x6c,0x66,0x2f,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x79,0x6b,0x42,0x2c,0x47,0x41,0x41,0x45,0x6d,0x46,0x2c,0x47,0x41,0x41,0x47,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x65,0x41,0x41,0x65,0x72,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x77,0x42,0x2c,0x63,0x41,0x41,0x63,0x6c,0x77,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x36,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x68,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x34,0x48,0x2c,0x57,0x41,0x41,0x57,0x37,0x48,0x2c,0x45,0x41,0x41,0x45,0x36,0x48,0x2c,0x57,0x41,0x41,0x57,0x69,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x61,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x2b,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x68,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x56,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x53,0x41,0x41,0x69,0x42,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x52,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x77,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x6e,0x4d,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x71,0x73,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x73,0x42,0x2c,0x55,0x41,0x41,0x55,0x39,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x43,0x4c,0x2c,0x45,0x41,0x41,0x45,0x79,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x72,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x4b,0x69,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x50,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x78,0x42,0x2c,0x59,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x49,0x6f,0x4c,0x2c,0x47,0x41,0x41,0x66,0x70,0x4c,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x75,0x74,0x42,0x2c,0x51,0x41,0x41,0x65,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x4c,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x72,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x74,0x42,0x2c,0x51,0x41,0x41,0x51,0x74,0x74,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x2c,0x51,0x41,0x41,0x64,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x61,0x41,0x41,0x71,0x42,0x33,0x4c,0x2c,0x45,0x41,0x41,0x45,0x71,0x73,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x43,0x6c,0x66,0x78,0x52,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x78,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x52,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x79,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x64,0x78,0x45,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x51,0x41,0x41,0x6d,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x2c,0x51,0x41,0x41,0x64,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x50,0x2c,0x61,0x41,0x41,0x71,0x42,0x35,0x4c,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x76,0x51,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x51,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x49,0x41,0x41,0x49,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x47,0x2c,0x51,0x41,0x41,0x66,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x51,0x2c,0x53,0x41,0x41,0x6f,0x42,0x2c,0x43,0x41,0x41,0x43,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x50,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x68,0x51,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x6d,0x38,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x48,0x2c,0x53,0x41,0x41,0x53,0x70,0x4a,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x56,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x33,0x6c,0x42,0x2c,0x53,0x41,0x41,0x53,0x30,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x57,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x56,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x77,0x42,0x2c,0x49,0x41,0x41,0x55,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x52,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x6d,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x47,0x41,0x43,0x70,0x66,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x67,0x42,0x78,0x51,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x47,0x41,0x41,0x58,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x59,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x63,0x41,0x41,0x36,0x42,0x67,0x50,0x2c,0x47,0x41,0x41,0x47,0x6a,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x74,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x47,0x41,0x41,0x63,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x70,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x2f,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x54,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x76,0x42,0x2c,0x61,0x41,0x41,0x61,0x78,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x42,0x2c,0x63,0x41,0x41,0x63,0x74,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x71,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x30,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x6d,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x6c,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x67,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x75,0x37,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x75,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x67,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x67,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x2b,0x42,0x2c,0x47,0x41,0x41,0x47,0x74,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x47,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x45,0x41,0x59,0x78,0x43,0x2c,0x49,0x41,0x41,0x49,0x6d,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x43,0x2c,0x59,0x41,0x41,0x59,0x41,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x76,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x32,0x38,0x42,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x77,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x7a,0x70,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x6a,0x49,0x2c,0x53,0x41,0x41,0x53,0x30,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x7a,0x70,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x35,0x4a,0x2c,0x53,0x41,0x41,0x53,0x32,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x2f,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x55,0x41,0x41,0x55,0x2c,0x69,0x43,0x41,0x41,0x69,0x43,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x32,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x6b,0x2f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x45,0x78,0x61,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x7a,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x70,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x45,0x2c,0x45,0x41,0x41,0x45,0x35,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x67,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x44,0x78,0x4a,0x2c,0x53,0x41,0x41,0x59,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x36,0x70,0x43,0x2c,0x49,0x41,0x41,0x6d,0x46,0x2c,0x4f,0x41,0x41,0x2f,0x45,0x37,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6a,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x78,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x70,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x51,0x2c,0x51,0x41,0x41,0x51,0x75,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x31,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x57,0x41,0x41,0x57,0x31,0x50,0x2c,0x47,0x41,0x41,0x47,0x77,0x6e,0x43,0x2c,0x4b,0x41,0x41,0x59,0x37,0x6c,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x57,0x41,0x41,0x57,0x7a,0x4b,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4b,0x2c,0x59,0x41,0x41,0x59,0x33,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x35,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x38,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x69,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x36,0x70,0x43,0x2c,0x49,0x41,0x41,0x30,0x47,0x2c,0x4f,0x41,0x41,0x74,0x47,0x37,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6a,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x70,0x42,0x2c,0x49,0x41,0x41,0x49,0x78,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x4d,0x2c,0x51,0x41,0x41,0x51,0x75,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x31,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x57,0x41,0x41,0x57,0x31,0x50,0x2c,0x47,0x41,0x41,0x47,0x77,0x6e,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x55,0x73,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x70,0x55,0x69,0x6b,0x43,0x2c,0x43,0x41,0x41,0x47,0x37,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x48,0x70,0x4c,0x2b,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x6f,0x43,0x2c,0x55,0x41,0x41,0x55,0x6b,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x6a,0x43,0x2c,0x47,0x41,0x41,0x47,0x74,0x6f,0x43,0x2c,0x55,0x41,0x41,0x55,0x6b,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x70,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x78,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x79,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x6f,0x43,0x2c,0x55,0x41,0x41,0x55,0x38,0x6f,0x43,0x2c,0x51,0x41,0x41,0x51,0x52,0x2c,0x47,0x41,0x41,0x47,0x74,0x6f,0x43,0x2c,0x55,0x41,0x41,0x55,0x38,0x6f,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x68,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x36,0x6e,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x78,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x58,0x2c,0x63,0x41,0x41,0x63,0x71,0x77,0x42,0x2c,0x49,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x70,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x7a,0x54,0x6f,0x67,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x6f,0x43,0x2c,0x55,0x41,0x41,0x55,0x2b,0x6f,0x43,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x2c,0x53,0x41,0x41,0x53,0x6a,0x71,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x56,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x32,0x57,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x50,0x2c,0x45,0x41,0x41,0x45,0x69,0x58,0x2c,0x53,0x41,0x41,0x53,0x68,0x58,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x68,0x57,0x2c,0x51,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x48,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x57,0x2c,0x47,0x41,0x41,0x47,0x6c,0x57,0x2c,0x47,0x41,0x41,0x47,0x2b,0x57,0x2c,0x53,0x41,0x41,0x53,0x2f,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x57,0x2c,0x47,0x41,0x41,0x47,0x38,0x7a,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x47,0x41,0x41,0x47,0x36,0x57,0x2c,0x47,0x41,0x41,0x47,0x2f,0x57,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x45,0x58,0x75,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x76,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2f,0x50,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x4e,0x2c,0x63,0x41,0x41,0x63,0x71,0x46,0x2c,0x61,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x68,0x58,0x2c,0x45,0x41,0x41,0x45,0x71,0x55,0x2c,0x47,0x41,0x41,0x47,0x74,0x55,0x2c,0x45,0x41,0x41,0x45,0x77,0x55,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x76,0x55,0x2c,0x49,0x41,0x41,0x49,0x6b,0x56,0x2c,0x47,0x41,0x41,0x47,0x6e,0x56,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x46,0x43,0x2c,0x47,0x41,0x41,0x4b,0x2b,0x6c,0x43,0x2c,0x47,0x41,0x41,0x47,0x68,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x53,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x46,0x2b,0x67,0x42,0x2c,0x4d,0x41,0x41,0x4f,0x6b,0x4f,0x2c,0x47,0x41,0x41,0x47,0x6a,0x76,0x42,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x34,0x61,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x38,0x5a,0x2c,0x49,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x76,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x35,0x42,0x2c,0x4b,0x41,0x41,0x49,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x47,0x69,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x6e,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x2f,0x62,0x77,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x78,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x32,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x61,0x2b,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x58,0x77,0x35,0x42,0x2c,0x4d,0x41,0x41,0x77,0x42,0x32,0x50,0x2c,0x47,0x41,0x41,0x47,0x6e,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x7a,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x47,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x72,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x61,0x38,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x58,0x75,0x35,0x42,0x2c,0x4d,0x41,0x41,0x67,0x42,0x32,0x50,0x2c,0x47,0x41,0x41,0x47,0x6e,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x56,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x4c,0x2c,0x45,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x33,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x56,0x2c,0x47,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x45,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x6f,0x56,0x2c,0x47,0x41,0x41,0x45,0x6e,0x56,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x6c,0x53,0x79,0x50,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x33,0x50,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x6a,0x42,0x75,0x49,0x2c,0x45,0x41,0x41,0x47,0x78,0x49,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x46,0x2c,0x4b,0x41,0x41,0x51,0x2c,0x55,0x41,0x41,0x55,0x2f,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x59,0x41,0x41,0x59,0x78,0x50,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x57,0x41,0x41,0x73,0x46,0x2c,0x49,0x41,0x41,0x33,0x45,0x78,0x50,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x71,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x63,0x41,0x41,0x63,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x70,0x71,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6d,0x42,0x41,0x41,0x75,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x74,0x71,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x71,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x37,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x4f,0x2c,0x47,0x41,0x41,0x47,0x7a,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x44,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x48,0x2c,0x45,0x41,0x41,0x47,0x6a,0x47,0x2c,0x47,0x41,0x41,0x47,0x67,0x48,0x2c,0x45,0x41,0x41,0x47,0x68,0x48,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x57,0x41,0x41,0x57,0x2b,0x48,0x2c,0x47,0x41,0x41,0x47,0x78,0x4a,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x6d,0x42,0x2c,0x4f,0x41,0x41,0x56,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x48,0x2c,0x51,0x41,0x41,0x65,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2f,0x49,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x68,0x43,0x2c,0x53,0x41,0x41,0x53,0x72,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x47,0x41,0x41,0x47,0x6b,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x6b,0x33,0x42,0x2c,0x47,0x41,0x43,0x70,0x61,0x2c,0x49,0x41,0x41,0x49,0x2b,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x75,0x42,0x41,0x41,0x73,0x42,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x31,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x53,0x2c,0x47,0x41,0x41,0x47,0x76,0x53,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x47,0x41,0x41,0x47,0x6d,0x33,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x33,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x7a,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x61,0x41,0x43,0x31,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x48,0x2c,0x57,0x41,0x41,0x57,0x46,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x51,0x41,0x41,0x51,0x48,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x4a,0x2c,0x47,0x41,0x41,0x47,0x49,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x45,0x2c,0x65,0x41,0x41,0x65,0x4e,0x2c,0x47,0x41,0x41,0x47,0x4d,0x2c,0x65,0x41,0x41,0x65,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x65,0x41,0x41,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x6a,0x6f,0x43,0x2c,0x45,0x41,0x41,0x47,0x32,0x78,0x42,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x75,0x57,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x53,0x41,0x41,0x53,0x33,0x72,0x43,0x2c,0x47,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x41,0x66,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x47,0x41,0x41,0x47,0x68,0x53,0x2c,0x49,0x41,0x41,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x53,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x45,0x32,0x36,0x42,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x79,0x42,0x41,0x52,0x6a,0x4e,0x2c,0x57,0x41,0x41,0x63,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x53,0x70,0x55,0x69,0x42,0x2c,0x34,0x42,0x41,0x41,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x2c,0x6d,0x43,0x41,0x41,0x6d,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x43,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x59,0x41,0x41,0x59,0x44,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x7a,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x75,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x73,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x73,0x43,0x2c,0x49,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x37,0x6f,0x43,0x2c,0x6d,0x44,0x41,0x41,0x6d,0x44,0x36,0x6d,0x43,0x2c,0x47,0x41,0x43,0x2f,0x59,0x67,0x43,0x2c,0x45,0x41,0x41,0x51,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x53,0x41,0x41,0x53,0x78,0x73,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x61,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x53,0x44,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x77,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x62,0x75,0x48,0x2c,0x53,0x41,0x41,0x59,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x61,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x53,0x44,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x6d,0x47,0x2c,0x53,0x41,0x41,0x53,0x78,0x43,0x2c,0x45,0x41,0x41,0x47,0x71,0x61,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x63,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x53,0x41,0x41,0x53,0x74,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6d,0x58,0x2c,0x63,0x41,0x41,0x63,0x6c,0x58,0x2c,0x45,0x41,0x41,0x45,0x34,0x77,0x42,0x2c,0x65,0x41,0x41,0x65,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x61,0x31,0x52,0x75,0x73,0x43,0x2c,0x43,0x41,0x41,0x47,0x7a,0x73,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x47,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x53,0x31,0x73,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x36,0x6e,0x43,0x2c,0x47,0x41,0x41,0x34,0x50,0x2c,0x4f,0x41,0x41,0x7a,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x70,0x43,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x73,0x43,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x7a,0x73,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x53,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x36,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x70,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x36,0x42,0x2c,0x75,0x42,0x41,0x41,0x6b,0x42,0x2c,0x49,0x41,0x41,0x53,0x33,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6f,0x43,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x78,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x6f,0x43,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x68,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x4b,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x70,0x42,0x2c,0x49,0x41,0x41,0x49,0x72,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x75,0x57,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x31,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x30,0x50,0x2c,0x57,0x41,0x41,0x57,0x31,0x50,0x2c,0x47,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x77,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x76,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x43,0x72,0x66,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x4b,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x35,0x73,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x37,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x6a,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x69,0x43,0x2c,0x4d,0x41,0x41,0x33,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x4e,0x2c,0x47,0x41,0x41,0x47,0x71,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x57,0x70,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x71,0x43,0x2c,0x4f,0x41,0x41,0x35,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x56,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x47,0x41,0x41,0x47,0x2f,0x52,0x2c,0x49,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x51,0x2c,0x53,0x41,0x41,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x38,0x42,0x2c,0x45,0x41,0x41,0x51,0x4d,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x37,0x73,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x77,0x6e,0x43,0x2c,0x47,0x41,0x41,0x47,0x78,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x4f,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x39,0x73,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x43,0x2f,0x59,0x71,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x51,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x2f,0x73,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x73,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x72,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x32,0x6e,0x43,0x2c,0x47,0x41,0x41,0x79,0x4f,0x2c,0x47,0x41,0x41,0x74,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x70,0x43,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x79,0x73,0x43,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x6c,0x72,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x51,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x53,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x6c,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x36,0x42,0x2c,0x75,0x42,0x41,0x41,0x6b,0x42,0x2c,0x49,0x41,0x41,0x53,0x31,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6e,0x43,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x74,0x6d,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6e,0x43,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x68,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x70,0x42,0x2c,0x49,0x41,0x41,0x49,0x72,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x51,0x41,0x41,0x51,0x75,0x57,0x2c,0x47,0x41,0x41,0x47,0x31,0x6f,0x42,0x2c,0x47,0x41,0x41,0x4d,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x49,0x41,0x41,0x32,0x42,0x79,0x42,0x2c,0x47,0x41,0x41,0x68,0x42,0x41,0x2c,0x47,0x41,0x41,0x50,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x49,0x41,0x41,0x4f,0x69,0x74,0x43,0x2c,0x61,0x41,0x41,0x67,0x42,0x2f,0x73,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x74,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x6f,0x43,0x2c,0x67,0x43,0x41,0x41,0x67,0x43,0x7a,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x6f,0x43,0x2c,0x67,0x43,0x41,0x41,0x67,0x43,0x2c,0x43,0x41,0x41,0x43,0x78,0x6f,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x6f,0x43,0x2c,0x67,0x43,0x41,0x41,0x67,0x43,0x76,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x51,0x2c,0x45,0x41,0x43,0x76,0x68,0x42,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x69,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x6e,0x6d,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x70,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x30,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x33,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x67,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x71,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x59,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2c,0x53,0x41,0x41,0x53,0x6e,0x74,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x34,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x35,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x51,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6a,0x43,0x2c,0x73,0x42,0x41,0x41,0x71,0x42,0x71,0x45,0x2c,0x49,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x73,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x70,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x6a,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6e,0x6a,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x70,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x42,0x2c,0x45,0x41,0x41,0x51,0x61,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x37,0x46,0x2c,0x47,0x41,0x43,0x2f,0x55,0x67,0x46,0x2c,0x45,0x41,0x41,0x51,0x63,0x2c,0x6f,0x43,0x41,0x41,0x6f,0x43,0x2c,0x53,0x41,0x41,0x53,0x72,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6f,0x6f,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2b,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x6b,0x37,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x32,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x70,0x43,0x2c,0x47,0x41,0x41,0x47,0x39,0x70,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2b,0x71,0x43,0x2c,0x45,0x41,0x41,0x51,0x31,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x69,0x44,0x43,0x2f,0x54,0x37,0x4c,0x2c,0x49,0x41,0x41,0x49,0x37,0x35,0x42,0x2c,0x45,0x41,0x41,0x49,0x6e,0x52,0x2c,0x45,0x41,0x41,0x51,0x2c,0x4b,0x41,0x45,0x64,0x30,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x47,0x2c,0x57,0x41,0x41,0x61,0x31,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x37,0x42,0x2c,0x57,0x41,0x43,0x76,0x42,0x48,0x2c,0x45,0x41,0x41,0x51,0x51,0x2c,0x59,0x41,0x41,0x63,0x2f,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x37,0x42,0x2c,0x34,0x42,0x43,0x48,0x31,0x42,0x2c,0x53,0x41,0x41,0x53,0x4f,0x2c,0x49,0x41,0x45,0x50,0x2c,0x47,0x41,0x43,0x34,0x43,0x2c,0x71,0x42,0x41,0x41,0x6e,0x43,0x70,0x42,0x2c,0x67,0x43,0x41,0x43,0x34,0x43,0x2c,0x6f,0x42,0x41,0x41,0x35,0x43,0x41,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x6f,0x42,0x2c,0x53,0x41,0x63,0x78,0x43,0x2c,0x49,0x41,0x45,0x45,0x70,0x42,0x2c,0x2b,0x42,0x41,0x41,0x2b,0x42,0x6f,0x42,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x43,0x31,0x43,0x2c,0x43,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x47,0x50,0x35,0x51,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x32,0x51,0x2c,0x45,0x41,0x43,0x68,0x42,0x2c,0x43,0x41,0x43,0x46,0x2c,0x43,0x41,0x4b,0x45,0x44,0x2c,0x47,0x41,0x43,0x41,0x45,0x2c,0x45,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x51,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x6a,0x42,0x69,0x42,0x2c,0x77,0x42,0x43,0x7a,0x42,0x65,0x39,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x37,0x42,0x2c,0x45,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x53,0x69,0x47,0x2c,0x45,0x41,0x41,0x45,0x6c,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6d,0x4e,0x2c,0x45,0x41,0x41,0x45,0x2f,0x50,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x65,0x41,0x41,0x65,0x32,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x43,0x2c,0x6d,0x44,0x41,0x41,0x6d,0x44,0x6d,0x36,0x42,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x39,0x39,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6f,0x65,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x36,0x52,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x79,0x64,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x55,0x41,0x41,0x53,0x2c,0x47,0x41,0x43,0x68,0x50,0x2c,0x53,0x41,0x41,0x53,0x31,0x63,0x2c,0x45,0x41,0x41,0x45,0x39,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x69,0x46,0x2c,0x49,0x41,0x41,0x49,0x35,0x46,0x2c,0x55,0x41,0x41,0x68,0x46,0x2c,0x49,0x41,0x41,0x53,0x30,0x42,0x2c,0x49,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x31,0x63,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x55,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x53,0x6e,0x65,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x4b,0x41,0x41,0x63,0x68,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x52,0x2c,0x45,0x41,0x41,0x45,0x2f,0x4e,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x42,0x2c,0x65,0x41,0x41,0x65,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x36,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x37,0x36,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x36,0x42,0x2c,0x6b,0x42,0x41,0x41,0x65,0x2c,0x49,0x41,0x41,0x53,0x74,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x71,0x47,0x2c,0x53,0x41,0x41,0x53,0x52,0x2c,0x45,0x41,0x41,0x45,0x35,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x49,0x41,0x41,0x49,0x31,0x63,0x2c,0x45,0x41,0x41,0x45,0x75,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x71,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x48,0x2c,0x45,0x41,0x41,0x45,0x33,0x57,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x6f,0x42,0x6f,0x36,0x42,0x2c,0x45,0x41,0x41,0x51,0x6f,0x42,0x2c,0x49,0x41,0x41,0x49,0x33,0x63,0x2c,0x45,0x41,0x41,0x45,0x75,0x62,0x2c,0x45,0x41,0x41,0x51,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x63,0x2c,0x65,0x43,0x44,0x37,0x56,0x2c,0x49,0x41,0x41,0x49,0x70,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x69,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x39,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6d,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x74,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x6f,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x74,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6b,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x71,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x73,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x6f,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x6c,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x71,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x74,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x65,0x2c,0x53,0x41,0x43,0x7a,0x57,0x2c,0x49,0x41,0x41,0x49,0x6d,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6d,0x6f,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x39,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x44,0x2c,0x4f,0x41,0x41,0x4f,0x6f,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x67,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x72,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x76,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x36,0x42,0x2c,0x51,0x41,0x41,0x51,0x6e,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x77,0x49,0x2c,0x53,0x41,0x41,0x53,0x73,0x57,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x67,0x44,0x2c,0x45,0x41,0x41,0x45,0x70,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2b,0x75,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x72,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x49,0x2c,0x45,0x41,0x41,0x45,0x76,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x36,0x42,0x2c,0x51,0x41,0x41,0x51,0x6e,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x71,0x52,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x44,0x78,0x50,0x71,0x5a,0x2c,0x45,0x41,0x41,0x45,0x6a,0x72,0x42,0x2c,0x55,0x41,0x41,0x55,0x71,0x6e,0x43,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x70,0x51,0x70,0x63,0x2c,0x45,0x41,0x41,0x45,0x6a,0x72,0x42,0x2c,0x55,0x41,0x41,0x55,0x32,0x73,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x37,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x79,0x48,0x41,0x41,0x79,0x48,0x72,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x36,0x42,0x2c,0x51,0x41,0x41,0x51,0x54,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x76,0x35,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x6b,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x72,0x42,0x2c,0x55,0x41,0x41,0x55,0x34,0x73,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x39,0x74,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x67,0x36,0x42,0x2c,0x51,0x41,0x41,0x51,0x50,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x7a,0x35,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x63,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x67,0x42,0x6f,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x6f,0x42,0x2c,0x55,0x41,0x41,0x55,0x69,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x72,0x42,0x2c,0x55,0x41,0x41,0x73,0x46,0x2c,0x49,0x41,0x41,0x49,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6c,0x72,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x6b,0x6f,0x42,0x2c,0x45,0x41,0x43,0x72,0x66,0x6b,0x44,0x2c,0x45,0x41,0x41,0x45,0x72,0x6c,0x42,0x2c,0x59,0x41,0x41,0x59,0x6d,0x6c,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x57,0x2c,0x45,0x41,0x41,0x45,0x69,0x58,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x45,0x41,0x41,0x45,0x6a,0x72,0x42,0x2c,0x57,0x41,0x41,0x57,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x50,0x2c,0x73,0x42,0x41,0x41,0x71,0x42,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x39,0x4d,0x2c,0x45,0x41,0x41,0x45,0x37,0x6c,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x51,0x41,0x41,0x51,0x6b,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x6e,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x65,0x41,0x41,0x65,0x30,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x31,0x68,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x30,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x31,0x57,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x36,0x52,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x79,0x64,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x55,0x41,0x41,0x53,0x2c,0x47,0x41,0x43,0x74,0x4b,0x2c,0x53,0x41,0x41,0x53,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x76,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x55,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x53,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x55,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x53,0x2f,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x72,0x59,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x65,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x71,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x7a,0x42,0x2c,0x65,0x41,0x41,0x65,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x53,0x41,0x41,0x53,0x37,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x6d,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x48,0x2c,0x47,0x41,0x41,0x47,0x71,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x72,0x50,0x2c,0x45,0x41,0x41,0x45,0x71,0x50,0x2c,0x49,0x41,0x41,0x49,0x74,0x50,0x2c,0x45,0x41,0x41,0x45,0x73,0x50,0x2c,0x47,0x41,0x41,0x47,0x37,0x51,0x2c,0x55,0x41,0x41,0x55,0x36,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x39,0x51,0x2c,0x45,0x41,0x41,0x45,0x6f,0x4a,0x2c,0x53,0x41,0x41,0x53,0x35,0x48,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x38,0x36,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x74,0x35,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x47,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x36,0x42,0x2c,0x6b,0x42,0x41,0x41,0x65,0x2c,0x49,0x41,0x41,0x53,0x35,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x45,0x41,0x41,0x45,0x48,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x38,0x45,0x2c,0x53,0x41,0x41,0x53,0x56,0x2c,0x45,0x41,0x41,0x45,0x31,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x49,0x41,0x41,0x49,0x72,0x59,0x2c,0x45,0x41,0x41,0x45,0x6b,0x71,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x71,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x44,0x2c,0x45,0x41,0x41,0x45,0x31,0x68,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x43,0x68,0x56,0x2c,0x53,0x41,0x41,0x53,0x73,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x57,0x41,0x41,0x57,0x56,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x6f,0x47,0x2c,0x49,0x41,0x41,0x49,0x6b,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x34,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x49,0x41,0x41,0x37,0x4b,0x2c,0x53,0x41,0x41,0x67,0x42,0x6e,0x65,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x75,0x44,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x2b,0x45,0x2b,0x74,0x43,0x2c,0x43,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2f,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x65,0x2c,0x45,0x41,0x41,0x45,0x69,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x43,0x2f,0x57,0x2c,0x53,0x41,0x41,0x53,0x73,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x34,0x46,0x2c,0x53,0x41,0x41,0x53,0x39,0x46,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x63,0x41,0x41,0x63,0x38,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x59,0x41,0x41,0x59,0x41,0x2c,0x49,0x41,0x41,0x45,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x36,0x46,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x36,0x46,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x73,0x47,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x6a,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x57,0x33,0x46,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x4e,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x47,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6b,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x6b,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x42,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x44,0x2c,0x51,0x41,0x41,0x51,0x75,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x44,0x2c,0x45,0x41,0x41,0x45,0x74,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x7a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x45,0x2c,0x49,0x41,0x41,0x49,0x75,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x31,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x44,0x6e,0x57,0x2c,0x53,0x41,0x41,0x57,0x46,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x71,0x47,0x2c,0x53,0x41,0x41,0x53,0x56,0x2c,0x45,0x41,0x41,0x45,0x31,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x63,0x2c,0x49,0x41,0x41,0x49,0x6c,0x65,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x56,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x79,0x51,0x75,0x46,0x2c,0x43,0x41,0x41,0x45,0x74,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x74,0x59,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x59,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x69,0x65,0x2c,0x4b,0x41,0x41,0x4b,0x35,0x61,0x2c,0x51,0x41,0x41,0x51,0x75,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x31,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x79,0x42,0x2c,0x47,0x41,0x41,0x76,0x42,0x32,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x72,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x4f,0x6b,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x43,0x2f,0x65,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x32,0x42,0x2c,0x45,0x41,0x44,0x77,0x65,0x35,0x78,0x42,0x2c,0x45,0x41,0x43,0x72,0x66,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x32,0x42,0x2c,0x47,0x41,0x41,0x65,0x41,0x2c,0x47,0x41,0x41,0x47,0x6b,0x45,0x2c,0x47,0x41,0x41,0x47,0x32,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x50,0x73,0x55,0x2c,0x53,0x41,0x41,0x57,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x73,0x43,0x2c,0x6f,0x42,0x41,0x41,0x6a,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x47,0x41,0x41,0x47,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x43,0x2c,0x49,0x41,0x41,0x49,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x65,0x41,0x41,0x30,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x4f,0x35,0x62,0x38,0x45,0x2c,0x43,0x41,0x41,0x45,0x39,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x44,0x2c,0x47,0x41,0x41,0x47,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6d,0x45,0x2c,0x45,0x41,0x41,0x45,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x78,0x42,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x4d,0x41,0x41,0x36,0x42,0x76,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x32,0x7a,0x42,0x2c,0x45,0x41,0x41,0x31,0x42,0x31,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x42,0x2c,0x4d,0x41,0x41,0x30,0x42,0x31,0x48,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x74,0x42,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6e,0x45,0x2c,0x4b,0x41,0x41,0x6b,0x42,0x7a,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x47,0x41,0x41,0x47,0x2c,0x57,0x41,0x41,0x57,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x65,0x2c,0x47,0x41,0x41,0x47,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6d,0x44,0x41,0x41,0x6d,0x44,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x68,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x67,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x39,0x4e,0x2c,0x47,0x41,0x41,0x47,0x71,0x77,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x70,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x36,0x45,0x41,0x41,0x36,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x7a,0x5a,0x2c,0x53,0x41,0x41,0x53,0x71,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x6d,0x44,0x2c,0x4f,0x41,0x41,0x6a,0x44,0x73,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x55,0x73,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x73,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x39,0x68,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2f,0x74,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x69,0x75,0x43,0x2c,0x53,0x41,0x41,0x51,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x4b,0x41,0x41,0x4d,0x6d,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x6e,0x72,0x42,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x55,0x41,0x41,0x51,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x47,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x55,0x41,0x41,0x51,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x55,0x41,0x41,0x55,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x45,0x41,0x41,0x45,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x75,0x43,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x43,0x41,0x43,0x35,0x5a,0x2c,0x49,0x41,0x41,0x49,0x39,0x4c,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x6d,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x74,0x71,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x77,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x70,0x4e,0x2c,0x75,0x42,0x41,0x41,0x75,0x42,0x2b,0x4d,0x2c,0x45,0x41,0x41,0x45,0x74,0x71,0x42,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x79,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x68,0x4b,0x2c,0x47,0x41,0x41,0x47,0x2c,0x53,0x41,0x41,0x53,0x77,0x50,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x2b,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x32,0x44,0x41,0x41,0x34,0x44,0x2c,0x43,0x41,0x43,0x7a,0x4d,0x73,0x6e,0x43,0x2c,0x45,0x41,0x41,0x51,0x34,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x4e,0x2c,0x45,0x41,0x41,0x45,0x33,0x2b,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x2f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6c,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x50,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x73,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x53,0x41,0x41,0x53,0x72,0x75,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x75,0x42,0x2c,0x4f,0x41,0x41,0x72,0x42,0x69,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x6c,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x55,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x75,0x43,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x74,0x75,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x68,0x43,0x2c,0x45,0x41,0x41,0x45,0x6c,0x68,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x75,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x76,0x75,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x79,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x31,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x79,0x45,0x41,0x41,0x79,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x6a,0x46,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x69,0x43,0x2c,0x55,0x41,0x41,0x55,0x72,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x67,0x42,0x2c,0x45,0x41,0x41,0x51,0x6b,0x43,0x2c,0x53,0x41,0x41,0x53,0x31,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x6d,0x43,0x2c,0x53,0x41,0x41,0x53,0x7a,0x64,0x2c,0x45,0x41,0x41,0x45,0x73,0x62,0x2c,0x45,0x41,0x41,0x51,0x6f,0x43,0x2c,0x63,0x41,0x41,0x63,0x76,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x67,0x42,0x2c,0x45,0x41,0x41,0x51,0x71,0x43,0x2c,0x57,0x41,0x41,0x57,0x35,0x64,0x2c,0x45,0x41,0x41,0x45,0x75,0x62,0x2c,0x45,0x41,0x41,0x51,0x73,0x43,0x2c,0x53,0x41,0x41,0x53,0x31,0x6c,0x42,0x2c,0x45,0x41,0x43,0x6c,0x63,0x6f,0x6a,0x42,0x2c,0x45,0x41,0x41,0x51,0x37,0x6f,0x43,0x2c,0x6d,0x44,0x41,0x41,0x6d,0x44,0x38,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x4a,0x2c,0x45,0x41,0x41,0x51,0x75,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x4c,0x2c,0x45,0x41,0x43,0x7a,0x45,0x6b,0x4a,0x2c,0x45,0x41,0x41,0x51,0x77,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x53,0x41,0x41,0x53,0x2f,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x42,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x46,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x69,0x46,0x41,0x41,0x69,0x46,0x6a,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x54,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x32,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x7a,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x65,0x2c,0x49,0x41,0x41,0x49,0x72,0x59,0x2c,0x45,0x41,0x41,0x45,0x39,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x77,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x68,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x6f,0x45,0x2c,0x51,0x41,0x41,0x6e,0x45,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x68,0x42,0x2c,0x63,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x53,0x6c,0x53,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x4d,0x41,0x41,0x4d,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x6b,0x65,0x2c,0x4b,0x41,0x41,0x51,0x6e,0x65,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x34,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x6e,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x34,0x34,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x49,0x41,0x41,0x49,0x70,0x35,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x6c,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x68,0x44,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6d,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x7a,0x42,0x2c,0x65,0x41,0x41,0x65,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x46,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x51,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x53,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x53,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x47,0x41,0x41,0x47,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x53,0x41,0x41,0x53,0x37,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x48,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x48,0x2c,0x47,0x41,0x43,0x72,0x66,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x73,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x74,0x50,0x2c,0x45,0x41,0x41,0x45,0x73,0x50,0x2c,0x49,0x41,0x41,0x49,0x72,0x50,0x2c,0x45,0x41,0x41,0x45,0x71,0x50,0x2c,0x47,0x41,0x41,0x47,0x37,0x51,0x2c,0x55,0x41,0x41,0x55,0x36,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x78,0x50,0x2c,0x45,0x41,0x41,0x45,0x38,0x48,0x2c,0x53,0x41,0x41,0x53,0x33,0x48,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x32,0x45,0x2c,0x53,0x41,0x41,0x53,0x56,0x2c,0x45,0x41,0x41,0x45,0x31,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x63,0x2c,0x49,0x41,0x41,0x49,0x6a,0x65,0x2c,0x45,0x41,0x41,0x45,0x38,0x76,0x42,0x2c,0x49,0x41,0x41,0x49,0x6c,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x36,0x71,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x79,0x75,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x30,0x6d,0x43,0x2c,0x45,0x41,0x41,0x51,0x79,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x53,0x41,0x41,0x53,0x68,0x76,0x43,0x2c,0x47,0x41,0x41,0x71,0x4b,0x2c,0x4f,0x41,0x41,0x6c,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x73,0x47,0x2c,0x53,0x41,0x41,0x53,0x34,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x32,0x49,0x2c,0x63,0x41,0x41,0x63,0x37,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x76,0x43,0x2c,0x65,0x41,0x41,0x65,0x6a,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x76,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x51,0x48,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x37,0x6f,0x43,0x2c,0x53,0x41,0x41,0x53,0x79,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x78,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x76,0x47,0x2c,0x47,0x41,0x41,0x55,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x76,0x43,0x2c,0x53,0x41,0x41,0x53,0x70,0x76,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x78,0x72,0x43,0x2c,0x63,0x41,0x41,0x63,0x77,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x58,0x2c,0x45,0x41,0x41,0x51,0x67,0x44,0x2c,0x63,0x41,0x41,0x63,0x2c,0x53,0x41,0x41,0x53,0x76,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4b,0x33,0x6f,0x42,0x2c,0x47,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x54,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x53,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x69,0x44,0x2c,0x55,0x41,0x41,0x55,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x72,0x39,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x43,0x39,0x64,0x6f,0x36,0x42,0x2c,0x45,0x41,0x41,0x51,0x6b,0x44,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x53,0x7a,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x73,0x47,0x2c,0x53,0x41,0x41,0x53,0x2f,0x45,0x2c,0x45,0x41,0x41,0x45,0x36,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x70,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x6d,0x44,0x2c,0x65,0x41,0x41,0x65,0x6a,0x61,0x2c,0x45,0x41,0x41,0x45,0x38,0x57,0x2c,0x45,0x41,0x41,0x51,0x6f,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x33,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x73,0x47,0x2c,0x53,0x41,0x41,0x53,0x34,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x71,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x77,0x6e,0x43,0x2c,0x53,0x41,0x41,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x51,0x41,0x41,0x51,0x6a,0x75,0x43,0x2c,0x47,0x41,0x41,0x47,0x79,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x71,0x37,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x79,0x4b,0x2c,0x45,0x41,0x41,0x51,0x71,0x44,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x41,0x53,0x35,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x71,0x47,0x2c,0x53,0x41,0x41,0x53,0x32,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2b,0x42,0x2c,0x61,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x53,0x6c,0x2b,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x73,0x44,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x37,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x71,0x42,0x2c,0x57,0x41,0x41,0x57,0x73,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x71,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x68,0x59,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x73,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x74,0x71,0x42,0x2c,0x57,0x41,0x41,0x57,0x2f,0x58,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x75,0x44,0x2c,0x61,0x41,0x41,0x61,0x7a,0x4d,0x2c,0x45,0x41,0x41,0x45,0x6b,0x4a,0x2c,0x45,0x41,0x41,0x51,0x35,0x53,0x2c,0x59,0x41,0x41,0x59,0x2c,0x53,0x41,0x41,0x53,0x33,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x77,0x6e,0x42,0x2c,0x59,0x41,0x41,0x59,0x33,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x33,0x53,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x53,0x35,0x35,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x79,0x6e,0x42,0x2c,0x57,0x41,0x41,0x57,0x35,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x43,0x33,0x66,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x6c,0x53,0x2c,0x63,0x41,0x41,0x63,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x6b,0x53,0x2c,0x45,0x41,0x41,0x51,0x6a,0x53,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x2c,0x53,0x41,0x41,0x53,0x74,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x6d,0x6f,0x42,0x2c,0x69,0x42,0x41,0x41,0x69,0x42,0x74,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x31,0x53,0x2c,0x55,0x41,0x41,0x55,0x2c,0x53,0x41,0x41,0x53,0x37,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x30,0x6e,0x42,0x2c,0x55,0x41,0x41,0x55,0x37,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x37,0x52,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x79,0x48,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x75,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x45,0x41,0x41,0x45,0x36,0x52,0x2c,0x45,0x41,0x41,0x51,0x7a,0x53,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x2c,0x53,0x41,0x41,0x53,0x39,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x32,0x6e,0x42,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x39,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x71,0x43,0x2c,0x45,0x41,0x41,0x51,0x78,0x53,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x53,0x41,0x41,0x53,0x2f,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x34,0x6e,0x42,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2f,0x35,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x76,0x53,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x2c,0x53,0x41,0x41,0x53,0x68,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x36,0x6e,0x42,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x68,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x43,0x7a,0x64,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x74,0x53,0x2c,0x51,0x41,0x41,0x51,0x2c,0x53,0x41,0x41,0x53,0x6a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x38,0x6e,0x42,0x2c,0x51,0x41,0x41,0x51,0x6a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x72,0x53,0x2c,0x57,0x41,0x41,0x57,0x2c,0x53,0x41,0x41,0x53,0x6c,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x2b,0x6e,0x42,0x2c,0x57,0x41,0x41,0x57,0x6c,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x71,0x43,0x2c,0x45,0x41,0x41,0x51,0x70,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x53,0x41,0x41,0x53,0x6e,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x67,0x6f,0x42,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x6e,0x53,0x2c,0x53,0x41,0x41,0x53,0x2c,0x53,0x41,0x41,0x53,0x70,0x36,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6d,0x69,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x69,0x6f,0x42,0x2c,0x53,0x41,0x41,0x53,0x70,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x39,0x52,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x53,0x41,0x41,0x53,0x7a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x30,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x73,0x6f,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x7a,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x38,0x71,0x43,0x2c,0x45,0x41,0x41,0x51,0x68,0x53,0x2c,0x63,0x41,0x41,0x63,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x34,0x48,0x2c,0x45,0x41,0x41,0x45,0x68,0x77,0x42,0x2c,0x51,0x41,0x41,0x51,0x6f,0x6f,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x45,0x41,0x41,0x45,0x67,0x53,0x2c,0x45,0x41,0x41,0x51,0x31,0x42,0x2c,0x51,0x41,0x41,0x51,0x2c,0x75,0x42,0x43,0x74,0x42,0x6c,0x61,0x32,0x43,0x2c,0x45,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x51,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x6a,0x42,0x69,0x42,0x2c,0x6f,0x42,0x43,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x51,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x6a,0x42,0x69,0x42,0x2c,0x6b,0x42,0x43,0x4d,0x57,0x2c,0x53,0x41,0x41,0x53,0x39,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x4a,0x2c,0x45,0x41,0x41,0x45,0x6d,0x51,0x2c,0x4b,0x41,0x41,0x4b,0x6c,0x51,0x2c,0x47,0x41,0x41,0x47,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x47,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x78,0x42,0x2c,0x49,0x41,0x41,0x30,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x45,0x41,0x41,0x37,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x47,0x41,0x41,0x47,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x43,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x71,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x4a,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x46,0x2c,0x45,0x41,0x41,0x45,0x39,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x49,0x41,0x41,0x49,0x48,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x47,0x41,0x41,0x47,0x37,0x76,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x45,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x2b,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x32,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x78,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x36,0x54,0x2c,0x45,0x41,0x41,0x45,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x67,0x52,0x2c,0x47,0x41,0x41,0x47,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x39,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x69,0x59,0x2c,0x45,0x41,0x41,0x45,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x6e,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x54,0x2c,0x45,0x41,0x41,0x45,0x6e,0x56,0x2c,0x47,0x41,0x41,0x47,0x34,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x72,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x54,0x2c,0x49,0x41,0x41,0x49,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x36,0x54,0x2c,0x45,0x41,0x41,0x45,0x72,0x56,0x2c,0x45,0x41,0x41,0x45,0x67,0x52,0x2c,0x47,0x41,0x41,0x47,0x39,0x51,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x50,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x47,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x72,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x6f,0x42,0x2c,0x49,0x41,0x41,0x30,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x46,0x2c,0x45,0x41,0x41,0x37,0x42,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x35,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x6e,0x42,0x2c,0x43,0x41,0x41,0x63,0x2c,0x45,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x37,0x6f,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x33,0x63,0x2c,0x53,0x41,0x41,0x53,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x43,0x2c,0x55,0x41,0x41,0x55,0x2f,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x43,0x2c,0x55,0x41,0x41,0x55,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x49,0x41,0x41,0x49,0x39,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x59,0x2c,0x47,0x41,0x41,0x47,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x6d,0x59,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x36,0x33,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x41,0x2c,0x59,0x41,0x41,0x59,0x33,0x31,0x42,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x31,0x55,0x2c,0x45,0x41,0x41,0x45,0x71,0x71,0x43,0x2c,0x59,0x41,0x41,0x59,0x31,0x44,0x2c,0x45,0x41,0x41,0x51,0x78,0x35,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x6e,0x4e,0x2c,0x45,0x41,0x41,0x45,0x30,0x55,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x76,0x61,0x2c,0x45,0x41,0x41,0x45,0x73,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x57,0x2c,0x45,0x41,0x41,0x45,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x61,0x2c,0x4d,0x41,0x41,0x4d,0x69,0x79,0x42,0x2c,0x45,0x41,0x41,0x51,0x78,0x35,0x42,0x2c,0x61,0x41,0x41,0x61,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x68,0x54,0x2c,0x45,0x41,0x41,0x45,0x75,0x61,0x2c,0x4d,0x41,0x41,0x4d,0x30,0x57,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x6c,0x49,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x33,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x37,0x75,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x79,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x67,0x4f,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x71,0x56,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x79,0x43,0x2c,0x57,0x41,0x41,0x57,0x41,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4b,0x41,0x41,0x4b,0x75,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x72,0x42,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x38,0x6d,0x42,0x2c,0x61,0x41,0x41,0x61,0x41,0x2c,0x61,0x41,0x41,0x61,0x2c,0x4b,0x41,0x43,0x6e,0x54,0x2c,0x53,0x41,0x41,0x53,0x39,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x45,0x30,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x37,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x42,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x4d,0x41,0x41,0x47,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x77,0x43,0x2c,0x57,0x41,0x41,0x57,0x6e,0x77,0x43,0x2c,0x47,0x41,0x41,0x67,0x44,0x2c,0x4d,0x41,0x41,0x39,0x43,0x38,0x46,0x2c,0x45,0x41,0x41,0x45,0x69,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x39,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x76,0x43,0x2c,0x55,0x41,0x41,0x55,0x2f,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x77,0x43,0x2c,0x65,0x41,0x41,0x65,0x31,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x41,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x75,0x44,0x2c,0x45,0x41,0x41,0x45,0x74,0x73,0x42,0x2c,0x47,0x41,0x41,0x61,0x2c,0x47,0x41,0x41,0x56,0x38,0x53,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x73,0x5a,0x2c,0x45,0x41,0x41,0x45,0x70,0x73,0x42,0x2c,0x49,0x41,0x41,0x4f,0x38,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x65,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x6e,0x73,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x34,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x46,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2f,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x39,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x34,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x48,0x2c,0x45,0x41,0x41,0x45,0x72,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x77,0x43,0x2c,0x55,0x41,0x41,0x55,0x6e,0x77,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x43,0x72,0x61,0x2c,0x53,0x41,0x41,0x53,0x67,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x36,0x45,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x67,0x4f,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x71,0x5a,0x2c,0x45,0x41,0x41,0x45,0x30,0x49,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x78,0x79,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x6e,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x4c,0x39,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x73,0x42,0x2c,0x47,0x41,0x41,0x4f,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x76,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x41,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x43,0x2c,0x65,0x41,0x41,0x65,0x6e,0x77,0x43,0x2c,0x49,0x41,0x41,0x49,0x44,0x2c,0x49,0x41,0x41,0x49,0x75,0x31,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x2f,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x6e,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x44,0x2c,0x45,0x41,0x41,0x45,0x6f,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x43,0x2c,0x45,0x41,0x41,0x45,0x33,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x75,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x49,0x41,0x41,0x49,0x35,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x45,0x36,0x75,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x6e,0x77,0x43,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x78,0x35,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x74,0x52,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x45,0x46,0x2c,0x49,0x41,0x41,0x49,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x6e,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x37,0x45,0x2c,0x45,0x41,0x41,0x45,0x6e,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x6d,0x72,0x42,0x2c,0x47,0x41,0x41,0x47,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x45,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x31,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x34,0x6e,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x6e,0x59,0x2c,0x45,0x41,0x41,0x45,0x6e,0x4c,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x58,0x2c,0x47,0x41,0x41,0x47,0x36,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x48,0x2c,0x45,0x41,0x41,0x45,0x74,0x62,0x2c,0x45,0x41,0x41,0x45,0x6d,0x2f,0x42,0x2c,0x55,0x41,0x41,0x55,0x6c,0x77,0x43,0x2c,0x47,0x41,0x41,0x47,0x6b,0x70,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x35,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x6d,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x44,0x31,0x61,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x69,0x75,0x43,0x2c,0x67,0x42,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x53,0x41,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x69,0x42,0x41,0x41,0x59,0x2c,0x49,0x41,0x41,0x53,0x44,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x67,0x42,0x41,0x41,0x67,0x42,0x46,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x57,0x41,0x41,0x57,0x43,0x2c,0x65,0x41,0x41,0x65,0x37,0x6e,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x6e,0x42,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x59,0x41,0x43,0x32,0x51,0x2c,0x49,0x41,0x43,0x7a,0x50,0x72,0x50,0x2c,0x45,0x41,0x44,0x36,0x50,0x31,0x4c,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x5a,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x76,0x63,0x2c,0x53,0x41,0x41,0x53,0x6e,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x51,0x41,0x41,0x4f,0x67,0x58,0x2c,0x45,0x41,0x41,0x51,0x78,0x35,0x42,0x2c,0x65,0x41,0x41,0x65,0x32,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x35,0x42,0x2c,0x45,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x30,0x44,0x2c,0x49,0x41,0x41,0x49,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x2f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x7a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x78,0x35,0x42,0x2c,0x65,0x41,0x41,0x65,0x32,0x6b,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x33,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x77,0x31,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x7a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x68,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x31,0x4c,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x44,0x2c,0x47,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x6f,0x42,0x41,0x41,0x6f,0x42,0x70,0x4d,0x2c,0x45,0x41,0x41,0x45,0x38,0x58,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x39,0x58,0x2c,0x45,0x41,0x41,0x45,0x6f,0x51,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x47,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x69,0x58,0x2c,0x65,0x41,0x41,0x65,0x2c,0x43,0x41,0x41,0x43,0x2c,0x49,0x41,0x41,0x49,0x33,0x4f,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x32,0x4f,0x2c,0x65,0x41,0x41,0x65,0x74,0x4f,0x2c,0x45,0x41,0x41,0x45,0x4c,0x2c,0x45,0x41,0x41,0x45,0x34,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x35,0x4f,0x2c,0x45,0x41,0x41,0x45,0x36,0x4f,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x55,0x41,0x41,0x55,0x70,0x58,0x2c,0x45,0x41,0x41,0x45,0x30,0x48,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x30,0x4f,0x2c,0x59,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x33,0x50,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2f,0x59,0x2c,0x45,0x41,0x41,0x45,0x71,0x52,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x53,0x41,0x41,0x53,0x39,0x4b,0x2c,0x45,0x41,0x41,0x45,0x31,0x75,0x42,0x2c,0x47,0x41,0x41,0x47,0x79,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x7a,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x77,0x31,0x42,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x30,0x4c,0x2c,0x49,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x53,0x41,0x41,0x53,0x72,0x4e,0x2c,0x45,0x41,0x41,0x45,0x37,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x34,0x30,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x4d,0x2c,0x47,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x6e,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x78,0x35,0x42,0x2c,0x65,0x41,0x41,0x65,0x2c,0x47,0x41,0x41,0x45,0x39,0x53,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x43,0x35,0x64,0x73,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x35,0x34,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x34,0x34,0x42,0x2c,0x45,0x41,0x41,0x51,0x70,0x35,0x42,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x35,0x42,0x2c,0x45,0x41,0x41,0x51,0x39,0x34,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x34,0x42,0x2c,0x45,0x41,0x41,0x51,0x68,0x35,0x42,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x35,0x42,0x2c,0x45,0x41,0x41,0x51,0x75,0x45,0x2c,0x6d,0x42,0x41,0x41,0x6d,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x76,0x45,0x2c,0x45,0x41,0x41,0x51,0x6c,0x35,0x42,0x2c,0x38,0x42,0x41,0x41,0x38,0x42,0x2c,0x45,0x41,0x41,0x45,0x6b,0x35,0x42,0x2c,0x45,0x41,0x41,0x51,0x39,0x35,0x42,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x53,0x41,0x41,0x53,0x7a,0x53,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x7a,0x42,0x2c,0x53,0x41,0x41,0x53,0x2c,0x49,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x45,0x34,0x59,0x2c,0x45,0x41,0x41,0x51,0x77,0x45,0x2c,0x32,0x42,0x41,0x41,0x32,0x42,0x2c,0x57,0x41,0x41,0x57,0x6a,0x73,0x43,0x2c,0x47,0x41,0x41,0x47,0x7a,0x43,0x2c,0x49,0x41,0x41,0x49,0x79,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x34,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x46,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x43,0x31,0x55,0x75,0x6a,0x42,0x2c,0x45,0x41,0x41,0x51,0x79,0x45,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x53,0x41,0x41,0x53,0x68,0x78,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x41,0x2c,0x45,0x41,0x41,0x45,0x32,0x38,0x42,0x2c,0x51,0x41,0x41,0x51,0x43,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x6d,0x48,0x41,0x41,0x6d,0x48,0x39,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x39,0x31,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x54,0x2c,0x4b,0x41,0x41,0x4b,0x6b,0x39,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x49,0x41,0x41,0x49,0x6a,0x78,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x74,0x35,0x42,0x2c,0x69,0x43,0x41,0x41,0x69,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x69,0x65,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x62,0x2c,0x45,0x41,0x41,0x51,0x32,0x45,0x2c,0x38,0x42,0x41,0x41,0x38,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x4f,0x72,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x73,0x62,0x2c,0x45,0x41,0x41,0x51,0x34,0x45,0x2c,0x63,0x41,0x41,0x63,0x2c,0x53,0x41,0x41,0x53,0x6e,0x78,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x6b,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x41,0x45,0x71,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x36,0x45,0x2c,0x77,0x42,0x41,0x41,0x77,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x43,0x39,0x66,0x37,0x45,0x2c,0x45,0x41,0x41,0x51,0x31,0x35,0x42,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x57,0x41,0x41,0x57,0x2c,0x45,0x41,0x41,0x45,0x30,0x35,0x42,0x2c,0x45,0x41,0x41,0x51,0x38,0x45,0x2c,0x79,0x42,0x41,0x41,0x79,0x42,0x2c,0x53,0x41,0x41,0x53,0x72,0x78,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x45,0x2c,0x45,0x41,0x41,0x45,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6c,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x69,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x68,0x4d,0x71,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x68,0x36,0x42,0x2c,0x30,0x42,0x41,0x41,0x30,0x42,0x2c,0x53,0x41,0x41,0x53,0x76,0x53,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x2b,0x71,0x43,0x2c,0x45,0x41,0x41,0x51,0x78,0x35,0x42,0x2c,0x65,0x41,0x41,0x38,0x46,0x2c,0x4f,0x41,0x41,0x2f,0x45,0x2c,0x6b,0x42,0x41,0x41,0x6b,0x42,0x37,0x53,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x61,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x6b,0x42,0x41,0x41,0x5a,0x41,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6f,0x78,0x43,0x2c,0x51,0x41,0x41,0x36,0x42,0x2c,0x45,0x41,0x41,0x45,0x70,0x78,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x47,0x74,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x45,0x41,0x41,0x53,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x79,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x57,0x41,0x41,0x57,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x51,0x41,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x6d,0x4e,0x2c,0x4f,0x41,0x41,0x7a,0x4d,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x43,0x41,0x41,0x43,0x6f,0x59,0x2c,0x47,0x41,0x41,0x47,0x38,0x51,0x2c,0x49,0x41,0x41,0x49,0x79,0x4b,0x2c,0x53,0x41,0x41,0x53,0x31,0x7a,0x42,0x2c,0x45,0x41,0x41,0x45,0x6f,0x77,0x43,0x2c,0x63,0x41,0x41,0x63,0x72,0x77,0x43,0x2c,0x45,0x41,0x41,0x45,0x6d,0x77,0x43,0x2c,0x55,0x41,0x41,0x55,0x6a,0x77,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x77,0x43,0x2c,0x65,0x41,0x41,0x76,0x44,0x33,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x75,0x42,0x2c,0x45,0x41,0x41,0x6f,0x45,0x75,0x75,0x43,0x2c,0x57,0x41,0x41,0x57,0x2c,0x47,0x41,0x41,0x47,0x39,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x47,0x41,0x41,0x47,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x43,0x2c,0x55,0x41,0x41,0x55,0x39,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x71,0x6e,0x42,0x2c,0x45,0x41,0x41,0x45,0x2f,0x6f,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x6f,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x6a,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x36,0x46,0x2c,0x45,0x41,0x41,0x45,0x6b,0x6a,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6a,0x57,0x2c,0x47,0x41,0x41,0x47,0x71,0x5a,0x2c,0x45,0x41,0x41,0x45,0x30,0x49,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x47,0x41,0x41,0x47,0x2c,0x47,0x41,0x41,0x47,0x2f,0x68,0x42,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x2b,0x67,0x42,0x2c,0x45,0x41,0x41,0x45,0x76,0x48,0x2c,0x45,0x41,0x41,0x45,0x70,0x73,0x42,0x2c,0x45,0x41,0x41,0x45,0x73,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x77,0x43,0x2c,0x55,0x41,0x41,0x55,0x76,0x75,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x45,0x75,0x76,0x42,0x2c,0x45,0x41,0x41,0x45,0x6a,0x78,0x42,0x2c,0x47,0x41,0x41,0x47,0x38,0x45,0x2c,0x47,0x41,0x41,0x47,0x7a,0x43,0x2c,0x49,0x41,0x41,0x49,0x79,0x43,0x2c,0x47,0x41,0x41,0x45,0x2c,0x45,0x41,0x41,0x47,0x34,0x70,0x42,0x2c,0x45,0x41,0x41,0x45,0x31,0x46,0x2c,0x4b,0x41,0x41,0x59,0x68,0x70,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x6e,0x65,0x75,0x73,0x43,0x2c,0x45,0x41,0x41,0x51,0x35,0x35,0x42,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x34,0x69,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x58,0x2c,0x45,0x41,0x41,0x51,0x67,0x46,0x2c,0x73,0x42,0x41,0x41,0x73,0x42,0x2c,0x53,0x41,0x41,0x53,0x76,0x78,0x43,0x2c,0x47,0x41,0x41,0x47,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x45,0x69,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x57,0x41,0x41,0x57,0x2c,0x49,0x41,0x41,0x49,0x68,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x41,0x2c,0x45,0x41,0x41,0x45,0x6a,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x2c,0x49,0x41,0x41,0x49,0x2c,0x4f,0x41,0x41,0x4f,0x44,0x2c,0x45,0x41,0x41,0x45,0x2b,0x51,0x2c,0x4d,0x41,0x41,0x4d,0x6e,0x50,0x2c,0x4b,0x41,0x41,0x4b,0x7a,0x42,0x2c,0x55,0x41,0x41,0x55,0x2c,0x43,0x41,0x41,0x43,0x2c,0x51,0x41,0x41,0x51,0x2b,0x77,0x42,0x2c,0x45,0x41,0x41,0x45,0x68,0x78,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x43,0x41,0x41,0x43,0x2c,0x69,0x42,0x43,0x66,0x37,0x4a,0x73,0x74,0x43,0x2c,0x45,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x51,0x41,0x41,0x55,0x2c,0x45,0x41,0x41,0x6a,0x42,0x69,0x42,0x2c,0x4f,0x43,0x46,0x45,0x67,0x45,0x2c,0x45,0x41,0x41,0x32,0x42,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x47,0x68,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x43,0x2c,0x47,0x41,0x45,0x35,0x42,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x65,0x48,0x2c,0x45,0x41,0x41,0x79,0x42,0x45,0x2c,0x47,0x41,0x43,0x35,0x43,0x2c,0x51,0x41,0x41,0x71,0x42,0x45,0x2c,0x49,0x41,0x41,0x6a,0x42,0x44,0x2c,0x45,0x41,0x43,0x48,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x61,0x70,0x46,0x2c,0x51,0x41,0x47,0x72,0x42,0x2c,0x49,0x41,0x41,0x49,0x69,0x42,0x2c,0x45,0x41,0x41,0x53,0x67,0x45,0x2c,0x45,0x41,0x41,0x79,0x42,0x45,0x2c,0x47,0x41,0x41,0x59,0x2c,0x43,0x41,0x47,0x6a,0x44,0x6e,0x46,0x2c,0x51,0x41,0x41,0x53,0x2c,0x43,0x41,0x41,0x43,0x2c,0x47,0x41,0x4f,0x58,0x2c,0x4f,0x41,0x48,0x41,0x73,0x46,0x2c,0x45,0x41,0x41,0x6f,0x42,0x48,0x2c,0x47,0x41,0x41,0x55,0x6c,0x45,0x2c,0x45,0x41,0x41,0x51,0x41,0x2c,0x45,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x51,0x41,0x41,0x53,0x6b,0x46,0x2c,0x47,0x41,0x47,0x2f,0x43,0x6a,0x45,0x2c,0x45,0x41,0x41,0x4f,0x6a,0x42,0x2c,0x4f,0x41,0x43,0x66,0x2c,0x43,0x41,0x47,0x41,0x6b,0x46,0x2c,0x45,0x41,0x41,0x6f,0x42,0x7a,0x67,0x43,0x2c,0x45,0x41,0x41,0x49,0x36,0x67,0x43,0x2c,0x45,0x43,0x78,0x42,0x78,0x42,0x4a,0x2c,0x45,0x41,0x41,0x6f,0x42,0x6a,0x77,0x43,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2b,0x71,0x43,0x2c,0x45,0x41,0x41,0x53,0x75,0x46,0x2c,0x4b,0x41,0x43,0x6a,0x43,0x2c,0x49,0x41,0x41,0x49,0x2c,0x49,0x41,0x41,0x49,0x33,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x32,0x7a,0x42,0x2c,0x45,0x41,0x43,0x58,0x4c,0x2c,0x45,0x41,0x41,0x6f,0x42,0x4d,0x2c,0x45,0x41,0x41,0x45,0x44,0x2c,0x45,0x41,0x41,0x59,0x33,0x7a,0x42,0x2c,0x4b,0x41,0x41,0x53,0x73,0x7a,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x4d,0x2c,0x45,0x41,0x41,0x45,0x78,0x46,0x2c,0x45,0x41,0x41,0x53,0x70,0x75,0x42,0x2c,0x49,0x41,0x43,0x35,0x45,0x6c,0x64,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x45,0x2c,0x65,0x41,0x41,0x65,0x2b,0x6d,0x43,0x2c,0x45,0x41,0x41,0x53,0x70,0x75,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x45,0x2f,0x57,0x2c,0x59,0x41,0x41,0x59,0x2c,0x45,0x41,0x41,0x4d,0x46,0x2c,0x49,0x41,0x41,0x4b,0x34,0x71,0x43,0x2c,0x45,0x41,0x41,0x57,0x33,0x7a,0x42,0x2c,0x49,0x41,0x45,0x31,0x45,0x2c,0x45,0x43,0x4e,0x44,0x73,0x7a,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x2f,0x76,0x43,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x47,0x7a,0x42,0x2b,0x76,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x68,0x77,0x43,0x2c,0x45,0x41,0x41,0x4b,0x75,0x77,0x43,0x2c,0x47,0x41,0x43,0x6a,0x42,0x68,0x6e,0x42,0x2c,0x51,0x41,0x41,0x51,0x69,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x68,0x78,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x36,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x32,0x6a,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x2f,0x76,0x43,0x2c,0x47,0x41,0x41,0x47,0x77,0x77,0x43,0x2c,0x51,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x55,0x68,0x30,0x42,0x2c,0x4b,0x41,0x43,0x76,0x45,0x73,0x7a,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x2f,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x79,0x63,0x2c,0x47,0x41,0x41,0x4b,0x36,0x7a,0x42,0x2c,0x45,0x41,0x41,0x53,0x47,0x2c,0x47,0x41,0x43,0x37,0x42,0x41,0x2c,0x49,0x41,0x43,0x4c,0x2c,0x4b,0x43,0x4e,0x4a,0x56,0x2c,0x45,0x41,0x41,0x6f,0x42,0x76,0x6f,0x42,0x2c,0x45,0x41,0x41,0x4b,0x38,0x6f,0x42,0x2c,0x47,0x41,0x45,0x6a,0x42,0x2c,0x61,0x41,0x41,0x65,0x41,0x2c,0x45,0x41,0x41,0x66,0x2c,0x71,0x42,0x43,0x46,0x52,0x50,0x2c,0x45,0x41,0x41,0x6f,0x42,0x57,0x2c,0x53,0x41,0x41,0x59,0x4a,0x2c,0x49,0x41,0x45,0x66,0x2c,0x45,0x43,0x48,0x6a,0x42,0x50,0x2c,0x45,0x41,0x41,0x6f,0x42,0x4d,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x4d,0x2c,0x45,0x41,0x41,0x4b,0x43,0x2c,0x49,0x41,0x41,0x55,0x72,0x78,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x43,0x2c,0x55,0x41,0x41,0x55,0x43,0x2c,0x65,0x41,0x41,0x65,0x38,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x6f,0x76,0x43,0x2c,0x45,0x41,0x41,0x4b,0x43,0x2c,0x53,0x43,0x41,0x6c,0x46,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x43,0x2c,0x45,0x41,0x43,0x64,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x2c,0x75,0x42,0x41,0x45,0x78,0x42,0x66,0x2c,0x45,0x41,0x41,0x6f,0x42,0x37,0x72,0x43,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x67,0x63,0x2c,0x45,0x41,0x41,0x4b,0x77,0x50,0x2c,0x45,0x41,0x41,0x4d,0x6a,0x54,0x2c,0x45,0x41,0x41,0x4b,0x36,0x7a,0x42,0x2c,0x4b,0x41,0x43,0x78,0x43,0x2c,0x47,0x41,0x41,0x47,0x4f,0x2c,0x45,0x41,0x41,0x57,0x33,0x77,0x42,0x2c,0x47,0x41,0x41,0x51,0x32,0x77,0x42,0x2c,0x45,0x41,0x41,0x57,0x33,0x77,0x42,0x2c,0x47,0x41,0x41,0x4b,0x7a,0x52,0x2c,0x4b,0x41,0x41,0x4b,0x69,0x68,0x42,0x2c,0x4f,0x41,0x41,0x33,0x43,0x2c,0x43,0x41,0x43,0x41,0x2c,0x49,0x41,0x41,0x49,0x71,0x68,0x42,0x2c,0x45,0x41,0x41,0x51,0x43,0x2c,0x45,0x41,0x43,0x5a,0x2c,0x51,0x41,0x41,0x57,0x64,0x2c,0x49,0x41,0x41,0x52,0x7a,0x7a,0x42,0x2c,0x45,0x41,0x45,0x46,0x2c,0x49,0x41,0x44,0x41,0x2c,0x49,0x41,0x41,0x49,0x77,0x30,0x42,0x2c,0x45,0x41,0x41,0x55,0x37,0x78,0x43,0x2c,0x53,0x41,0x41,0x53,0x38,0x78,0x43,0x2c,0x71,0x42,0x41,0x41,0x71,0x42,0x2c,0x55,0x41,0x43,0x70,0x43,0x43,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x41,0x49,0x46,0x2c,0x45,0x41,0x41,0x51,0x76,0x79,0x43,0x2c,0x4f,0x41,0x41,0x51,0x79,0x79,0x43,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x43,0x41,0x43,0x76,0x43,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x49,0x48,0x2c,0x45,0x41,0x41,0x51,0x45,0x2c,0x47,0x41,0x43,0x68,0x42,0x2c,0x47,0x41,0x41,0x47,0x43,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x51,0x41,0x41,0x55,0x6e,0x78,0x42,0x2c,0x47,0x41,0x41,0x4f,0x6b,0x78,0x42,0x2c,0x45,0x41,0x41,0x45,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x69,0x42,0x41,0x41,0x6d,0x42,0x50,0x2c,0x45,0x41,0x41,0x6f,0x42,0x72,0x30,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x43,0x41,0x41,0x45,0x73,0x30,0x42,0x2c,0x45,0x41,0x41,0x53,0x4b,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x70,0x48,0x2c,0x43,0x41,0x45,0x47,0x4c,0x2c,0x49,0x41,0x43,0x48,0x43,0x2c,0x47,0x41,0x41,0x61,0x2c,0x47,0x41,0x43,0x62,0x44,0x2c,0x45,0x41,0x41,0x53,0x33,0x78,0x43,0x2c,0x53,0x41,0x41,0x53,0x43,0x2c,0x63,0x41,0x41,0x63,0x2c,0x57,0x41,0x45,0x7a,0x42,0x69,0x79,0x43,0x2c,0x51,0x41,0x41,0x55,0x2c,0x51,0x41,0x43,0x6a,0x42,0x50,0x2c,0x45,0x41,0x41,0x4f,0x51,0x2c,0x51,0x41,0x41,0x55,0x2c,0x49,0x41,0x43,0x62,0x78,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x79,0x42,0x2c,0x49,0x41,0x43,0x76,0x42,0x54,0x2c,0x45,0x41,0x41,0x4f,0x70,0x76,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x51,0x41,0x41,0x53,0x6f,0x75,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x79,0x42,0x2c,0x49,0x41,0x45,0x6c,0x44,0x54,0x2c,0x45,0x41,0x41,0x4f,0x70,0x76,0x43,0x2c,0x61,0x41,0x41,0x61,0x2c,0x65,0x41,0x41,0x67,0x42,0x6d,0x76,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x72,0x30,0x42,0x2c,0x47,0x41,0x45,0x78,0x44,0x73,0x30,0x42,0x2c,0x45,0x41,0x41,0x4f,0x68,0x4f,0x2c,0x49,0x41,0x41,0x4d,0x37,0x69,0x42,0x2c,0x47,0x41,0x45,0x64,0x32,0x77,0x42,0x2c,0x45,0x41,0x41,0x57,0x33,0x77,0x42,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x43,0x77,0x50,0x2c,0x47,0x41,0x43,0x6e,0x42,0x2c,0x49,0x41,0x41,0x49,0x2b,0x68,0x42,0x2c,0x45,0x41,0x41,0x6d,0x42,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x4d,0x6e,0x78,0x42,0x2c,0x4b,0x41,0x45,0x37,0x42,0x77,0x77,0x42,0x2c,0x45,0x41,0x41,0x4f,0x59,0x2c,0x51,0x41,0x41,0x55,0x5a,0x2c,0x45,0x41,0x41,0x4f,0x61,0x2c,0x4f,0x41,0x41,0x53,0x2c,0x4b,0x41,0x43,0x6a,0x43,0x78,0x6f,0x42,0x2c,0x61,0x41,0x41,0x61,0x6d,0x6f,0x42,0x2c,0x47,0x41,0x43,0x62,0x2c,0x49,0x41,0x41,0x49,0x4d,0x2c,0x45,0x41,0x41,0x55,0x68,0x42,0x2c,0x45,0x41,0x41,0x57,0x33,0x77,0x42,0x2c,0x47,0x41,0x49,0x7a,0x42,0x2c,0x55,0x41,0x48,0x4f,0x32,0x77,0x42,0x2c,0x45,0x41,0x41,0x57,0x33,0x77,0x42,0x2c,0x47,0x41,0x43,0x6c,0x42,0x36,0x77,0x42,0x2c,0x45,0x41,0x41,0x4f,0x2f,0x69,0x43,0x2c,0x59,0x41,0x41,0x63,0x2b,0x69,0x43,0x2c,0x45,0x41,0x41,0x4f,0x2f,0x69,0x43,0x2c,0x57,0x41,0x41,0x57,0x74,0x46,0x2c,0x59,0x41,0x41,0x59,0x71,0x6f,0x43,0x2c,0x47,0x41,0x43,0x6e,0x44,0x63,0x2c,0x47,0x41,0x41,0x57,0x41,0x2c,0x45,0x41,0x41,0x51,0x68,0x78,0x43,0x2c,0x53,0x41,0x41,0x53,0x69,0x78,0x43,0x2c,0x47,0x41,0x41,0x51,0x41,0x2c,0x45,0x41,0x41,0x47,0x76,0x78,0x42,0x2c,0x4b,0x41,0x43,0x70,0x43,0x6d,0x78,0x42,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x4f,0x41,0x2c,0x45,0x41,0x41,0x4b,0x6e,0x78,0x42,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x45,0x41,0x45,0x78,0x42,0x67,0x78,0x42,0x2c,0x45,0x41,0x41,0x55,0x72,0x6f,0x42,0x2c,0x57,0x41,0x41,0x57,0x75,0x6f,0x42,0x2c,0x45,0x41,0x41,0x69,0x42,0x78,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x55,0x41,0x41,0x4d,0x69,0x70,0x42,0x2c,0x45,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x45,0x31,0x76,0x43,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x55,0x41,0x41,0x57,0x71,0x4e,0x2c,0x4f,0x41,0x41,0x51,0x6b,0x6a,0x43,0x2c,0x49,0x41,0x41,0x57,0x2c,0x4d,0x41,0x43,0x74,0x47,0x41,0x2c,0x45,0x41,0x41,0x4f,0x59,0x2c,0x51,0x41,0x41,0x55,0x46,0x2c,0x45,0x41,0x41,0x69,0x42,0x78,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4d,0x38,0x70,0x42,0x2c,0x45,0x41,0x41,0x4f,0x59,0x2c,0x53,0x41,0x43,0x70,0x44,0x5a,0x2c,0x45,0x41,0x41,0x4f,0x61,0x2c,0x4f,0x41,0x41,0x53,0x48,0x2c,0x45,0x41,0x41,0x69,0x42,0x78,0x71,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4d,0x38,0x70,0x42,0x2c,0x45,0x41,0x41,0x4f,0x61,0x2c,0x51,0x41,0x43,0x6e,0x44,0x5a,0x2c,0x47,0x41,0x41,0x63,0x35,0x78,0x43,0x2c,0x53,0x41,0x41,0x53,0x32,0x79,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x70,0x70,0x43,0x2c,0x59,0x41,0x41,0x59,0x6f,0x6f,0x43,0x2c,0x45,0x41,0x70,0x43,0x6b,0x42,0x2c,0x43,0x41,0x6f,0x43,0x58,0x2c,0x4d,0x43,0x76,0x43,0x68,0x44,0x68,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x78,0x67,0x42,0x2c,0x45,0x41,0x41,0x4b,0x73,0x62,0x2c,0x49,0x41,0x43,0x48,0x2c,0x71,0x42,0x41,0x41,0x58,0x33,0x6f,0x43,0x2c,0x51,0x41,0x41,0x30,0x42,0x41,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x76,0x43,0x2c,0x61,0x41,0x43,0x31,0x43,0x7a,0x79,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x45,0x2c,0x65,0x41,0x41,0x65,0x2b,0x6d,0x43,0x2c,0x45,0x41,0x41,0x53,0x33,0x6f,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x38,0x76,0x43,0x2c,0x59,0x41,0x41,0x61,0x2c,0x43,0x41,0x41,0x45,0x2f,0x72,0x43,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x57,0x41,0x45,0x37,0x44,0x31,0x47,0x2c,0x4f,0x41,0x41,0x4f,0x75,0x45,0x2c,0x65,0x41,0x41,0x65,0x2b,0x6d,0x43,0x2c,0x45,0x41,0x41,0x53,0x2c,0x61,0x41,0x41,0x63,0x2c,0x43,0x41,0x41,0x45,0x35,0x6b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x47,0x41,0x41,0x4f,0x2c,0x45,0x43,0x4c,0x39,0x44,0x38,0x70,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x31,0x78,0x43,0x2c,0x45,0x41,0x41,0x49,0x2c,0x55,0x43,0x4b,0x78,0x42,0x2c,0x49,0x41,0x41,0x49,0x34,0x7a,0x43,0x2c,0x45,0x41,0x41,0x6b,0x42,0x2c,0x43,0x41,0x43,0x72,0x42,0x2c,0x49,0x41,0x41,0x4b,0x2c,0x47,0x41,0x47,0x4e,0x6c,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x2f,0x76,0x43,0x2c,0x45,0x41,0x41,0x45,0x6b,0x79,0x43,0x2c,0x45,0x41,0x41,0x49,0x2c,0x43,0x41,0x41,0x43,0x35,0x42,0x2c,0x45,0x41,0x41,0x53,0x47,0x2c,0x4b,0x41,0x45,0x6c,0x43,0x2c,0x49,0x41,0x41,0x49,0x30,0x42,0x2c,0x45,0x41,0x41,0x71,0x42,0x70,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x4d,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x45,0x41,0x41,0x69,0x42,0x33,0x42,0x2c,0x47,0x41,0x41,0x57,0x32,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x51,0x41,0x41,0x57,0x4a,0x2c,0x45,0x41,0x43,0x74,0x47,0x2c,0x47,0x41,0x41,0x30,0x42,0x2c,0x49,0x41,0x41,0x76,0x42,0x69,0x43,0x2c,0x45,0x41,0x47,0x46,0x2c,0x47,0x41,0x41,0x47,0x41,0x2c,0x45,0x41,0x43,0x46,0x31,0x42,0x2c,0x45,0x41,0x41,0x53,0x68,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x6a,0x43,0x2c,0x45,0x41,0x41,0x6d,0x42,0x2c,0x51,0x41,0x43,0x33,0x42,0x2c,0x43,0x41,0x47,0x4c,0x2c,0x49,0x41,0x41,0x49,0x43,0x2c,0x45,0x41,0x41,0x55,0x2c,0x49,0x41,0x41,0x49,0x39,0x6f,0x42,0x2c,0x53,0x41,0x41,0x51,0x2c,0x43,0x41,0x41,0x43,0x47,0x2c,0x45,0x41,0x41,0x53,0x34,0x6f,0x42,0x2c,0x49,0x41,0x41,0x59,0x46,0x2c,0x45,0x41,0x41,0x71,0x42,0x46,0x2c,0x45,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x47,0x41,0x41,0x57,0x2c,0x43,0x41,0x41,0x43,0x37,0x6d,0x42,0x2c,0x45,0x41,0x41,0x53,0x34,0x6f,0x42,0x2c,0x4b,0x41,0x43,0x31,0x47,0x35,0x42,0x2c,0x45,0x41,0x41,0x53,0x68,0x69,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x30,0x6a,0x43,0x2c,0x45,0x41,0x41,0x6d,0x42,0x2c,0x47,0x41,0x41,0x4b,0x43,0x2c,0x47,0x41,0x47,0x74,0x43,0x2c,0x49,0x41,0x41,0x49,0x6c,0x79,0x42,0x2c,0x45,0x41,0x41,0x4d,0x36,0x76,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x31,0x78,0x43,0x2c,0x45,0x41,0x41,0x49,0x30,0x78,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x76,0x6f,0x42,0x2c,0x45,0x41,0x41,0x45,0x38,0x6f,0x42,0x2c,0x47,0x41,0x45,0x70,0x44,0x70,0x56,0x2c,0x45,0x41,0x41,0x51,0x2c,0x49,0x41,0x41,0x49,0x33,0x33,0x42,0x2c,0x4d,0x41,0x67,0x42,0x68,0x42,0x77,0x73,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x37,0x72,0x43,0x2c,0x45,0x41,0x41,0x45,0x67,0x63,0x2c,0x47,0x41,0x66,0x46,0x4b,0x2c,0x49,0x41,0x43,0x6e,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x76,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x4d,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x45,0x41,0x41,0x69,0x42,0x33,0x42,0x2c,0x4b,0x41,0x45,0x66,0x2c,0x4b,0x41,0x44,0x31,0x42,0x36,0x42,0x2c,0x45,0x41,0x41,0x71,0x42,0x46,0x2c,0x45,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x4d,0x41,0x43,0x52,0x32,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x51,0x41,0x41,0x57,0x4a,0x2c,0x47,0x41,0x43,0x72,0x44,0x69,0x43,0x2c,0x47,0x41,0x41,0x6f,0x42,0x2c,0x43,0x41,0x43,0x74,0x42,0x2c,0x49,0x41,0x41,0x49,0x47,0x2c,0x45,0x41,0x41,0x59,0x2f,0x78,0x42,0x2c,0x49,0x41,0x41,0x79,0x42,0x2c,0x53,0x41,0x41,0x66,0x41,0x2c,0x45,0x41,0x41,0x4d,0x2f,0x66,0x2c,0x4b,0x41,0x41,0x6b,0x42,0x2c,0x55,0x41,0x41,0x59,0x2b,0x66,0x2c,0x45,0x41,0x41,0x4d,0x2f,0x66,0x2c,0x4d,0x41,0x43,0x68,0x45,0x2b,0x78,0x43,0x2c,0x45,0x41,0x41,0x55,0x68,0x79,0x42,0x2c,0x47,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x41,0x4d,0x31,0x53,0x2c,0x51,0x41,0x41,0x55,0x30,0x53,0x2c,0x45,0x41,0x41,0x4d,0x31,0x53,0x2c,0x4f,0x41,0x41,0x4f,0x6b,0x31,0x42,0x2c,0x49,0x41,0x43,0x70,0x44,0x37,0x48,0x2c,0x45,0x41,0x41,0x4d,0x4c,0x2c,0x51,0x41,0x41,0x55,0x2c,0x69,0x42,0x41,0x41,0x6d,0x42,0x79,0x56,0x2c,0x45,0x41,0x41,0x55,0x2c,0x63,0x41,0x41,0x67,0x42,0x67,0x43,0x2c,0x45,0x41,0x41,0x59,0x2c,0x4b,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x55,0x2c,0x49,0x41,0x43,0x31,0x46,0x72,0x58,0x2c,0x45,0x41,0x41,0x4d,0x33,0x32,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x2c,0x69,0x42,0x41,0x43,0x62,0x32,0x32,0x42,0x2c,0x45,0x41,0x41,0x4d,0x31,0x36,0x42,0x2c,0x4b,0x41,0x41,0x4f,0x38,0x78,0x43,0x2c,0x45,0x41,0x43,0x62,0x70,0x58,0x2c,0x45,0x41,0x41,0x4d,0x73,0x58,0x2c,0x51,0x41,0x41,0x55,0x44,0x2c,0x45,0x41,0x43,0x68,0x42,0x4a,0x2c,0x45,0x41,0x41,0x6d,0x42,0x2c,0x47,0x41,0x41,0x47,0x6a,0x58,0x2c,0x45,0x41,0x43,0x76,0x42,0x2c,0x43,0x41,0x43,0x44,0x2c,0x47,0x41,0x45,0x77,0x43,0x2c,0x53,0x41,0x41,0x57,0x6f,0x56,0x2c,0x45,0x41,0x41,0x53,0x41,0x2c,0x45,0x41,0x45,0x2f,0x44,0x2c,0x43,0x41,0x43,0x44,0x2c,0x45,0x41,0x63,0x46,0x2c,0x49,0x41,0x41,0x49,0x6d,0x43,0x2c,0x45,0x41,0x41,0x75,0x42,0x2c,0x43,0x41,0x41,0x43,0x43,0x2c,0x45,0x41,0x41,0x34,0x42,0x76,0x33,0x42,0x2c,0x4b,0x41,0x43,0x76,0x44,0x2c,0x49,0x41,0x4b,0x49,0x36,0x30,0x42,0x2c,0x45,0x41,0x41,0x55,0x4d,0x2c,0x45,0x41,0x4c,0x56,0x71,0x43,0x2c,0x45,0x41,0x41,0x57,0x78,0x33,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x47,0x41,0x43,0x68,0x42,0x79,0x33,0x42,0x2c,0x45,0x41,0x41,0x63,0x7a,0x33,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x47,0x41,0x43,0x6e,0x42,0x30,0x33,0x42,0x2c,0x45,0x41,0x41,0x55,0x31,0x33,0x42,0x2c,0x45,0x41,0x41,0x4b,0x2c,0x47,0x41,0x47,0x49,0x67,0x32,0x42,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x43,0x33,0x42,0x2c,0x47,0x41,0x41,0x47,0x77,0x42,0x2c,0x45,0x41,0x41,0x53,0x47,0x2c,0x4d,0x41,0x41,0x4d,0x70,0x38,0x42,0x2c,0x47,0x41,0x41,0x67,0x43,0x2c,0x49,0x41,0x41,0x78,0x42,0x75,0x37,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x76,0x37,0x42,0x2c,0x4b,0x41,0x41,0x61,0x2c,0x43,0x41,0x43,0x74,0x44,0x2c,0x49,0x41,0x41,0x49,0x73,0x35,0x42,0x2c,0x4b,0x41,0x41,0x59,0x34,0x43,0x2c,0x45,0x41,0x43,0x5a,0x37,0x43,0x2c,0x45,0x41,0x41,0x6f,0x42,0x4d,0x2c,0x45,0x41,0x41,0x45,0x75,0x43,0x2c,0x45,0x41,0x41,0x61,0x35,0x43,0x2c,0x4b,0x41,0x43,0x72,0x43,0x44,0x2c,0x45,0x41,0x41,0x6f,0x42,0x7a,0x67,0x43,0x2c,0x45,0x41,0x41,0x45,0x30,0x67,0x43,0x2c,0x47,0x41,0x41,0x59,0x34,0x43,0x2c,0x45,0x41,0x41,0x59,0x35,0x43,0x2c,0x49,0x41,0x47,0x68,0x44,0x2c,0x47,0x41,0x41,0x47,0x36,0x43,0x2c,0x45,0x41,0x41,0x73,0x42,0x41,0x2c,0x45,0x41,0x41,0x51,0x39,0x43,0x2c,0x45,0x41,0x43,0x6c,0x43,0x2c,0x43,0x41,0x45,0x41,0x2c,0x49,0x41,0x44,0x47,0x32,0x43,0x2c,0x47,0x41,0x41,0x34,0x42,0x41,0x2c,0x45,0x41,0x41,0x32,0x42,0x76,0x33,0x42,0x2c,0x47,0x41,0x43,0x72,0x44,0x67,0x32,0x42,0x2c,0x45,0x41,0x41,0x49,0x77,0x42,0x2c,0x45,0x41,0x41,0x53,0x6a,0x30,0x43,0x2c,0x4f,0x41,0x41,0x51,0x79,0x79,0x43,0x2c,0x49,0x41,0x43,0x7a,0x42,0x62,0x2c,0x45,0x41,0x41,0x55,0x71,0x43,0x2c,0x45,0x41,0x41,0x53,0x78,0x42,0x2c,0x47,0x41,0x43,0x68,0x42,0x70,0x42,0x2c,0x45,0x41,0x41,0x6f,0x42,0x4d,0x2c,0x45,0x41,0x41,0x45,0x34,0x42,0x2c,0x45,0x41,0x41,0x69,0x42,0x33,0x42,0x2c,0x49,0x41,0x41,0x59,0x32,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x49,0x41,0x43,0x72,0x45,0x32,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x47,0x41,0x41,0x53,0x2c,0x4b,0x41,0x45,0x31,0x42,0x32,0x42,0x2c,0x45,0x41,0x41,0x67,0x42,0x33,0x42,0x2c,0x47,0x41,0x41,0x57,0x2c,0x43,0x41,0x43,0x35,0x42,0x2c,0x45,0x41,0x49,0x47,0x79,0x43,0x2c,0x45,0x41,0x41,0x71,0x42,0x43,0x2c,0x4b,0x41,0x41,0x73,0x43,0x2c,0x67,0x43,0x41,0x41,0x49,0x41,0x2c,0x4b,0x41,0x41,0x73,0x43,0x2c,0x69,0x43,0x41,0x41,0x4b,0x2c,0x47,0x41,0x43,0x39,0x47,0x44,0x2c,0x45,0x41,0x41,0x6d,0x42,0x6c,0x79,0x43,0x2c,0x51,0x41,0x41,0x51,0x34,0x78,0x43,0x2c,0x45,0x41,0x41,0x71,0x42,0x78,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4d,0x2c,0x49,0x41,0x43,0x33,0x44,0x38,0x72,0x42,0x2c,0x45,0x41,0x41,0x6d,0x42,0x74,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4f,0x67,0x6b,0x43,0x2c,0x45,0x41,0x41,0x71,0x42,0x78,0x72,0x42,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x4b,0x41,0x41,0x4d,0x38,0x72,0x42,0x2c,0x45,0x41,0x41,0x6d,0x42,0x74,0x6b,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x77,0x59,0x2c,0x4b,0x41,0x41,0x4b,0x38,0x72,0x42,0x2c,0x73,0x43,0x43,0x72,0x46,0x76,0x46,0x2c,0x4d,0x41,0x77,0x45,0x41,0x2c,0x45,0x41,0x78,0x45,0x59,0x45,0x2c,0x4b,0x41,0x43,0x56,0x2c,0x4d,0x41,0x41,0x4f,0x43,0x2c,0x45,0x41,0x41,0x51,0x43,0x2c,0x49,0x41,0x41,0x61,0x7a,0x61,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x55,0x41,0x41,0x53,0x2c,0x4b,0x41,0x43,0x39,0x42,0x30,0x61,0x2c,0x45,0x41,0x41,0x51,0x43,0x2c,0x49,0x41,0x41,0x61,0x33,0x61,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x55,0x41,0x41,0x53,0x2c,0x4b,0x41,0x43,0x39,0x42,0x34,0x61,0x2c,0x45,0x41,0x41,0x51,0x43,0x2c,0x49,0x41,0x41,0x61,0x37,0x61,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x55,0x41,0x41,0x53,0x2c,0x4d,0x41,0x4f,0x72,0x43,0x2c,0x4f,0x41,0x43,0x45,0x38,0x61,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4d,0x41,0x41,0x41,0x2c,0x4f,0x41,0x41,0x4b,0x76,0x6e,0x43,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x45,0x77,0x6e,0x43,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x4f,0x41,0x41,0x51,0x43,0x2c,0x57,0x41,0x41,0x59,0x2c,0x71,0x42,0x41,0x41,0x73,0x42,0x39,0x72,0x43,0x2c,0x53,0x41,0x41,0x41,0x2c,0x45,0x41,0x43,0x39,0x44,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x4f,0x41,0x41,0x4b,0x35,0x51,0x2c,0x49,0x41,0x41,0x49,0x2c,0x63,0x41,0x41,0x63,0x35,0x6c,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x2c,0x4b,0x41,0x41,0x4b,0x43,0x2c,0x4f,0x41,0x41,0x4f,0x2c,0x51,0x41,0x43,0x7a,0x43,0x75,0x32,0x42,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x4d,0x41,0x41,0x41,0x2f,0x72,0x43,0x2c,0x53,0x41,0x41,0x49,0x2c,0x79,0x42,0x41,0x43,0x4a,0x34,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4d,0x41,0x41,0x41,0x2c,0x4f,0x41,0x41,0x4b,0x76,0x6e,0x43,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x45,0x32,0x6e,0x43,0x2c,0x61,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x53,0x68,0x73,0x43,0x2c,0x53,0x41,0x41,0x41,0x2c,0x45,0x41,0x43,0x6e,0x43,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x53,0x41,0x41,0x41,0x2f,0x72,0x43,0x2c,0x55,0x41,0x43,0x45,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x55,0x41,0x41,0x41,0x2f,0x72,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x67,0x42,0x41,0x45,0x56,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x53,0x41,0x43,0x45,0x6e,0x7a,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x43,0x4c,0x79,0x46,0x2c,0x4d,0x41,0x41,0x4f,0x69,0x74,0x43,0x2c,0x45,0x41,0x43,0x50,0x57,0x2c,0x53,0x41,0x41,0x57,0x39,0x7a,0x43,0x2c,0x47,0x41,0x41,0x4d,0x6f,0x7a,0x43,0x2c,0x45,0x41,0x41,0x55,0x70,0x7a,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x48,0x2c,0x4f,0x41,0x43,0x70,0x43,0x67,0x47,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x45,0x36,0x6e,0x43,0x2c,0x57,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x51,0x43,0x2c,0x51,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4f,0x43,0x2c,0x53,0x41,0x41,0x55,0x2c,0x63,0x41,0x47,0x33,0x44,0x52,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4d,0x41,0x41,0x41,0x2c,0x4f,0x41,0x41,0x4b,0x76,0x6e,0x43,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x45,0x32,0x6e,0x43,0x2c,0x61,0x41,0x41,0x63,0x2c,0x51,0x41,0x41,0x53,0x68,0x73,0x43,0x2c,0x53,0x41,0x41,0x41,0x2c,0x45,0x41,0x43,0x6e,0x43,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x53,0x41,0x41,0x41,0x2f,0x72,0x43,0x2c,0x55,0x41,0x43,0x45,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x55,0x41,0x41,0x41,0x2f,0x72,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x67,0x42,0x41,0x45,0x56,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x53,0x41,0x43,0x45,0x6e,0x7a,0x43,0x2c,0x4b,0x41,0x41,0x4b,0x2c,0x53,0x41,0x43,0x4c,0x79,0x46,0x2c,0x4d,0x41,0x41,0x4f,0x6d,0x74,0x43,0x2c,0x45,0x41,0x43,0x50,0x53,0x2c,0x53,0x41,0x41,0x57,0x39,0x7a,0x43,0x2c,0x47,0x41,0x41,0x4d,0x73,0x7a,0x43,0x2c,0x45,0x41,0x41,0x55,0x74,0x7a,0x43,0x2c,0x45,0x41,0x41,0x45,0x38,0x4e,0x2c,0x4f,0x41,0x41,0x4f,0x35,0x48,0x2c,0x4f,0x41,0x43,0x70,0x43,0x67,0x47,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x45,0x36,0x6e,0x43,0x2c,0x57,0x41,0x41,0x59,0x2c,0x4f,0x41,0x41,0x51,0x43,0x2c,0x51,0x41,0x41,0x53,0x2c,0x4d,0x41,0x41,0x4f,0x43,0x2c,0x53,0x41,0x41,0x55,0x2c,0x63,0x41,0x47,0x33,0x44,0x4c,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x55,0x41,0x43,0x45,0x37,0x54,0x2c,0x51,0x41,0x68,0x43,0x65,0x6d,0x55,0x2c,0x4b,0x41,0x43,0x6e,0x42,0x2c,0x4d,0x41,0x41,0x4d,0x43,0x2c,0x45,0x41,0x41,0x4d,0x43,0x2c,0x57,0x41,0x41,0x57,0x6a,0x42,0x2c,0x47,0x41,0x41,0x55,0x2c,0x47,0x41,0x41,0x4b,0x69,0x42,0x2c,0x57,0x41,0x41,0x57,0x66,0x2c,0x47,0x41,0x41,0x55,0x2c,0x47,0x41,0x43,0x33,0x44,0x47,0x2c,0x45,0x41,0x41,0x55,0x57,0x2c,0x45,0x41,0x41,0x49,0x2c,0x45,0x41,0x2b,0x42,0x56,0x6a,0x6f,0x43,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x4c,0x38,0x6e,0x43,0x2c,0x51,0x41,0x41,0x53,0x2c,0x59,0x41,0x43,0x54,0x4b,0x2c,0x67,0x42,0x41,0x41,0x69,0x42,0x2c,0x55,0x41,0x43,0x6a,0x42,0x39,0x30,0x42,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x51,0x41,0x43,0x50,0x30,0x30,0x42,0x2c,0x53,0x41,0x41,0x55,0x2c,0x4f,0x41,0x43,0x56,0x4b,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x4f,0x41,0x43,0x52,0x43,0x2c,0x61,0x41,0x41,0x63,0x2c,0x4d,0x41,0x43,0x64,0x43,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x55,0x41,0x43,0x52,0x43,0x2c,0x59,0x41,0x41,0x61,0x2c,0x51,0x41,0x43,0x62,0x35,0x73,0x43,0x2c,0x53,0x41,0x43,0x48,0x2c,0x67,0x43,0x41,0x47,0x44,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x55,0x41,0x43,0x45,0x6a,0x39,0x42,0x2c,0x47,0x41,0x41,0x47,0x2c,0x4f,0x41,0x43,0x48,0x7a,0x4b,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x43,0x4c,0x38,0x6e,0x43,0x2c,0x51,0x41,0x41,0x53,0x2c,0x59,0x41,0x43,0x54,0x4b,0x2c,0x67,0x42,0x41,0x41,0x69,0x42,0x2c,0x55,0x41,0x43,0x6a,0x42,0x39,0x30,0x42,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x51,0x41,0x43,0x50,0x30,0x30,0x42,0x2c,0x53,0x41,0x41,0x55,0x2c,0x4f,0x41,0x43,0x56,0x4b,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x4f,0x41,0x43,0x52,0x43,0x2c,0x61,0x41,0x41,0x63,0x2c,0x4d,0x41,0x43,0x64,0x43,0x2c,0x4f,0x41,0x41,0x51,0x2c,0x57,0x41,0x43,0x52,0x33,0x73,0x43,0x2c,0x53,0x41,0x43,0x48,0x2c,0x30,0x42,0x41,0x47,0x44,0x34,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4d,0x41,0x41,0x41,0x2c,0x4f,0x41,0x41,0x4b,0x76,0x6e,0x43,0x2c,0x4d,0x41,0x41,0x4f,0x2c,0x43,0x41,0x41,0x45,0x77,0x6f,0x43,0x2c,0x55,0x41,0x41,0x57,0x2c,0x4f,0x41,0x41,0x51,0x54,0x2c,0x53,0x41,0x41,0x55,0x2c,0x51,0x41,0x41,0x53,0x70,0x73,0x43,0x2c,0x53,0x41,0x41,0x41,0x2c,0x45,0x41,0x43,0x6c,0x44,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x41,0x2c,0x55,0x41,0x41,0x41,0x2f,0x72,0x43,0x2c,0x53,0x41,0x41,0x51,0x2c,0x59,0x41,0x41,0x67,0x42,0x2c,0x49,0x41,0x41,0x61,0x2c,0x4f,0x41,0x41,0x58,0x30,0x72,0x43,0x2c,0x45,0x41,0x41,0x6b,0x42,0x41,0x2c,0x45,0x41,0x41,0x53,0x2c,0x57,0x41,0x45,0x6e,0x44,0x2c,0x45,0x43,0x31,0x44,0x56,0x2c,0x45,0x41,0x5a,0x77,0x42,0x6f,0x42,0x2c,0x49,0x41,0x43,0x6c,0x42,0x41,0x2c,0x47,0x41,0x41,0x65,0x41,0x2c,0x61,0x41,0x41,0x75,0x42,0x43,0x2c,0x55,0x41,0x43,0x78,0x43,0x2c,0x36,0x42,0x41,0x41,0x71,0x42,0x6a,0x72,0x42,0x2c,0x4d,0x41,0x41,0x4b,0x6b,0x72,0x42,0x2c,0x49,0x41,0x41,0x6b,0x44,0x2c,0x49,0x41,0x41,0x6a,0x44,0x2c,0x4f,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x4f,0x41,0x41,0x45,0x43,0x2c,0x45,0x41,0x41,0x4d,0x2c,0x51,0x41,0x41,0x45,0x43,0x2c,0x47,0x41,0x41,0x53,0x4c,0x2c,0x45,0x41,0x43,0x70,0x45,0x43,0x2c,0x45,0x41,0x41,0x4f,0x48,0x2c,0x47,0x41,0x43,0x50,0x49,0x2c,0x45,0x41,0x41,0x4f,0x4a,0x2c,0x47,0x41,0x43,0x50,0x4b,0x2c,0x45,0x41,0x41,0x4f,0x4c,0x2c,0x47,0x41,0x43,0x50,0x4d,0x2c,0x45,0x41,0x41,0x4f,0x4e,0x2c,0x47,0x41,0x43,0x50,0x4f,0x2c,0x45,0x41,0x41,0x51,0x50,0x2c,0x45,0x41,0x41,0x59,0x2c,0x47,0x41,0x45,0x78,0x42,0x2c,0x45,0x43,0x48,0x57,0x51,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x57,0x41,0x41,0x6f,0x42,0x39,0x31,0x43,0x2c,0x53,0x41,0x41,0x53,0x2b,0x31,0x43,0x2c,0x65,0x41,0x41,0x65,0x2c,0x53,0x41,0x43,0x70,0x44,0x7a,0x77,0x43,0x2c,0x51,0x41,0x43,0x48,0x69,0x76,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x43,0x79,0x42,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x57,0x41,0x41,0x67,0x42,0x2c,0x43,0x41,0x41,0x41,0x78,0x74,0x43,0x2c,0x55,0x41,0x43,0x66,0x2b,0x72,0x43,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x45,0x41,0x41,0x41,0x41,0x2c,0x4b,0x41,0x41,0x43,0x56,0x2c,0x45,0x41,0x41,0x47,0x2c,0x4f,0x41,0x4f,0x52,0x6f,0x43,0x22,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x22,0x3a,0x5b,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2f,0x63,0x6c,0x69,0x65,0x6e,0x74,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x6a,0x73,0x78,0x2d,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2f,0x6a,0x73,0x78,0x2d,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x2f,0x63,0x6a,0x73,0x2f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x6e,0x6f,0x64,0x65,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x62,0x6f,0x6f,0x74,0x73,0x74,0x72,0x61,0x70,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x67,0x65,0x74,0x74,0x65,0x72,0x73,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x65,0x6e,0x73,0x75,0x72,0x65,0x20,0x63,0x68,0x75,0x6e,0x6b,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x67,0x65,0x74,0x20,0x6a,0x61,0x76,0x61,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x66,0x69,0x6c,0x65,0x6e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x67,0x65,0x74,0x20,0x6d,0x69,0x6e,0x69,0x2d,0x63,0x73,0x73,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x66,0x69,0x6c,0x65,0x6e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x73,0x68,0x6f,0x72,0x74,0x68,0x61,0x6e,0x64,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x6c,0x6f,0x61,0x64,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x6d,0x61,0x6b,0x65,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x70,0x75,0x62,0x6c,0x69,0x63,0x50,0x61,0x74,0x68,0x22,0x2c,0x22,0x2e,0x2e,0x2f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2f,0x6a,0x73,0x6f,0x6e,0x70,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x22,0x2c,0x22,0x41,0x70,0x70,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x2e,0x6a,0x73,0x22,0x2c,0x22,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x5d,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x3a,0x5b,0x22,0x2f,0x2a,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x5c,0x6e,0x20,0x2a,0x20,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x5c,0x6e,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x5c,0x6e,0x20,0x2a,0x2f,0x5c,0x6e,0x2f,0x2a,0x5c,0x6e,0x20,0x4d,0x6f,0x64,0x65,0x72,0x6e,0x69,0x7a,0x72,0x20,0x33,0x2e,0x30,0x2e,0x30,0x70,0x72,0x65,0x20,0x28,0x43,0x75,0x73,0x74,0x6f,0x6d,0x20,0x42,0x75,0x69,0x6c,0x64,0x29,0x20,0x7c,0x20,0x4d,0x49,0x54,0x5c,0x6e,0x2a,0x2f,0x5c,0x6e,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x76,0x61,0x72,0x20,0x61,0x61,0x3d,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x5c,0x22,0x29,0x2c,0x63,0x61,0x3d,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x5c,0x22,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x5c,0x22,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x62,0x3d,0x5c,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x72,0x65,0x61,0x63,0x74,0x6a,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x6f,0x63,0x73,0x2f,0x65,0x72,0x72,0x6f,0x72,0x2d,0x64,0x65,0x63,0x6f,0x64,0x65,0x72,0x2e,0x68,0x74,0x6d,0x6c,0x3f,0x69,0x6e,0x76,0x61,0x72,0x69,0x61,0x6e,0x74,0x3d,0x5c,0x22,0x2b,0x61,0x2c,0x63,0x3d,0x31,0x3b,0x63,0x3c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x62,0x2b,0x3d,0x5c,0x22,0x26,0x61,0x72,0x67,0x73,0x5b,0x5d,0x3d,0x5c,0x22,0x2b,0x65,0x6e,0x63,0x6f,0x64,0x65,0x55,0x52,0x49,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x28,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x63,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x4d,0x69,0x6e,0x69,0x66,0x69,0x65,0x64,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x23,0x5c,0x22,0x2b,0x61,0x2b,0x5c,0x22,0x3b,0x20,0x76,0x69,0x73,0x69,0x74,0x20,0x5c,0x22,0x2b,0x62,0x2b,0x5c,0x22,0x20,0x66,0x6f,0x72,0x20,0x74,0x68,0x65,0x20,0x66,0x75,0x6c,0x6c,0x20,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x20,0x6f,0x72,0x20,0x75,0x73,0x65,0x20,0x74,0x68,0x65,0x20,0x6e,0x6f,0x6e,0x2d,0x6d,0x69,0x6e,0x69,0x66,0x69,0x65,0x64,0x20,0x64,0x65,0x76,0x20,0x65,0x6e,0x76,0x69,0x72,0x6f,0x6e,0x6d,0x65,0x6e,0x74,0x20,0x66,0x6f,0x72,0x20,0x66,0x75,0x6c,0x6c,0x20,0x65,0x72,0x72,0x6f,0x72,0x73,0x20,0x61,0x6e,0x64,0x20,0x61,0x64,0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x20,0x68,0x65,0x6c,0x70,0x66,0x75,0x6c,0x20,0x77,0x61,0x72,0x6e,0x69,0x6e,0x67,0x73,0x2e,0x5c,0x22,0x7d,0x76,0x61,0x72,0x20,0x64,0x61,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x2c,0x65,0x61,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x61,0x28,0x61,0x2c,0x62,0x29,0x7b,0x68,0x61,0x28,0x61,0x2c,0x62,0x29,0x3b,0x68,0x61,0x28,0x61,0x2b,0x5c,0x22,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x2c,0x62,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x61,0x28,0x61,0x2c,0x62,0x29,0x7b,0x65,0x61,0x5b,0x61,0x5d,0x3d,0x62,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x30,0x3b,0x61,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x61,0x2b,0x2b,0x29,0x64,0x61,0x2e,0x61,0x64,0x64,0x28,0x62,0x5b,0x61,0x5d,0x29,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x69,0x61,0x3d,0x21,0x28,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x7c,0x7c,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x2c,0x6a,0x61,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2c,0x6b,0x61,0x3d,0x2f,0x5e,0x5b,0x3a,0x41,0x2d,0x5a,0x5f,0x61,0x2d,0x7a,0x5c,0x5c,0x75,0x30,0x30,0x43,0x30,0x2d,0x5c,0x5c,0x75,0x30,0x30,0x44,0x36,0x5c,0x5c,0x75,0x30,0x30,0x44,0x38,0x2d,0x5c,0x5c,0x75,0x30,0x30,0x46,0x36,0x5c,0x5c,0x75,0x30,0x30,0x46,0x38,0x2d,0x5c,0x5c,0x75,0x30,0x32,0x46,0x46,0x5c,0x5c,0x75,0x30,0x33,0x37,0x30,0x2d,0x5c,0x5c,0x75,0x30,0x33,0x37,0x44,0x5c,0x5c,0x75,0x30,0x33,0x37,0x46,0x2d,0x5c,0x5c,0x75,0x31,0x46,0x46,0x46,0x5c,0x5c,0x75,0x32,0x30,0x30,0x43,0x2d,0x5c,0x5c,0x75,0x32,0x30,0x30,0x44,0x5c,0x5c,0x75,0x32,0x30,0x37,0x30,0x2d,0x5c,0x5c,0x75,0x32,0x31,0x38,0x46,0x5c,0x5c,0x75,0x32,0x43,0x30,0x30,0x2d,0x5c,0x5c,0x75,0x32,0x46,0x45,0x46,0x5c,0x5c,0x75,0x33,0x30,0x30,0x31,0x2d,0x5c,0x5c,0x75,0x44,0x37,0x46,0x46,0x5c,0x5c,0x75,0x46,0x39,0x30,0x30,0x2d,0x5c,0x5c,0x75,0x46,0x44,0x43,0x46,0x5c,0x5c,0x75,0x46,0x44,0x46,0x30,0x2d,0x5c,0x5c,0x75,0x46,0x46,0x46,0x44,0x5d,0x5b,0x3a,0x41,0x2d,0x5a,0x5f,0x61,0x2d,0x7a,0x5c,0x5c,0x75,0x30,0x30,0x43,0x30,0x2d,0x5c,0x5c,0x75,0x30,0x30,0x44,0x36,0x5c,0x5c,0x75,0x30,0x30,0x44,0x38,0x2d,0x5c,0x5c,0x75,0x30,0x30,0x46,0x36,0x5c,0x5c,0x75,0x30,0x30,0x46,0x38,0x2d,0x5c,0x5c,0x75,0x30,0x32,0x46,0x46,0x5c,0x5c,0x75,0x30,0x33,0x37,0x30,0x2d,0x5c,0x5c,0x75,0x30,0x33,0x37,0x44,0x5c,0x5c,0x75,0x30,0x33,0x37,0x46,0x2d,0x5c,0x5c,0x75,0x31,0x46,0x46,0x46,0x5c,0x5c,0x75,0x32,0x30,0x30,0x43,0x2d,0x5c,0x5c,0x75,0x32,0x30,0x30,0x44,0x5c,0x5c,0x75,0x32,0x30,0x37,0x30,0x2d,0x5c,0x5c,0x75,0x32,0x31,0x38,0x46,0x5c,0x5c,0x75,0x32,0x43,0x30,0x30,0x2d,0x5c,0x5c,0x75,0x32,0x46,0x45,0x46,0x5c,0x5c,0x75,0x33,0x30,0x30,0x31,0x2d,0x5c,0x5c,0x75,0x44,0x37,0x46,0x46,0x5c,0x5c,0x75,0x46,0x39,0x30,0x30,0x2d,0x5c,0x5c,0x75,0x46,0x44,0x43,0x46,0x5c,0x5c,0x75,0x46,0x44,0x46,0x30,0x2d,0x5c,0x5c,0x75,0x46,0x46,0x46,0x44,0x5c,0x5c,0x2d,0x2e,0x30,0x2d,0x39,0x5c,0x5c,0x75,0x30,0x30,0x42,0x37,0x5c,0x5c,0x75,0x30,0x33,0x30,0x30,0x2d,0x5c,0x5c,0x75,0x30,0x33,0x36,0x46,0x5c,0x5c,0x75,0x32,0x30,0x33,0x46,0x2d,0x5c,0x5c,0x75,0x32,0x30,0x34,0x30,0x5d,0x2a,0x24,0x2f,0x2c,0x6c,0x61,0x3d,0x5c,0x6e,0x7b,0x7d,0x2c,0x6d,0x61,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x61,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6a,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6d,0x61,0x2c,0x61,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x69,0x66,0x28,0x6a,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6c,0x61,0x2c,0x61,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x69,0x66,0x28,0x6b,0x61,0x2e,0x74,0x65,0x73,0x74,0x28,0x61,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x61,0x5b,0x61,0x5d,0x3d,0x21,0x30,0x3b,0x6c,0x61,0x5b,0x61,0x5d,0x3d,0x21,0x30,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x61,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x79,0x70,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x5c,0x22,0x3a,0x69,0x66,0x28,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x63,0x2e,0x61,0x63,0x63,0x65,0x70,0x74,0x73,0x42,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x73,0x3b,0x61,0x3d,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x30,0x2c,0x35,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x64,0x61,0x74,0x61,0x2d,0x5c,0x22,0x21,0x3d,0x3d,0x61,0x26,0x26,0x5c,0x22,0x61,0x72,0x69,0x61,0x2d,0x5c,0x22,0x21,0x3d,0x3d,0x61,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x61,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x7c,0x7c,0x70,0x61,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x69,0x66,0x28,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x2e,0x74,0x79,0x70,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3d,0x3d,0x3d,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x73,0x4e,0x61,0x4e,0x28,0x62,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x73,0x4e,0x61,0x4e,0x28,0x62,0x29,0x7c,0x7c,0x31,0x3e,0x62,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x61,0x63,0x63,0x65,0x70,0x74,0x73,0x42,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x73,0x3d,0x32,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x62,0x3b,0x74,0x68,0x69,0x73,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x3d,0x64,0x3b,0x74,0x68,0x69,0x73,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x3d,0x65,0x3b,0x74,0x68,0x69,0x73,0x2e,0x6d,0x75,0x73,0x74,0x55,0x73,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x3d,0x63,0x3b,0x74,0x68,0x69,0x73,0x2e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x3d,0x61,0x3b,0x74,0x68,0x69,0x73,0x2e,0x74,0x79,0x70,0x65,0x3d,0x62,0x3b,0x74,0x68,0x69,0x73,0x2e,0x73,0x61,0x6e,0x69,0x74,0x69,0x7a,0x65,0x55,0x52,0x4c,0x3d,0x66,0x3b,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x6d,0x70,0x74,0x79,0x53,0x74,0x72,0x69,0x6e,0x67,0x3d,0x67,0x7d,0x76,0x61,0x72,0x20,0x7a,0x3d,0x7b,0x7d,0x3b,0x5c,0x6e,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x20,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x20,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x20,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x20,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x20,0x73,0x74,0x79,0x6c,0x65,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x30,0x2c,0x21,0x31,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5b,0x5b,0x5c,0x22,0x61,0x63,0x63,0x65,0x70,0x74,0x43,0x68,0x61,0x72,0x73,0x65,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x61,0x63,0x63,0x65,0x70,0x74,0x2d,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x5c,0x22,0x5d,0x2c,0x5b,0x5c,0x22,0x63,0x6c,0x61,0x73,0x73,0x4e,0x61,0x6d,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x6c,0x61,0x73,0x73,0x5c,0x22,0x5d,0x2c,0x5b,0x5c,0x22,0x68,0x74,0x6d,0x6c,0x46,0x6f,0x72,0x5c,0x22,0x2c,0x5c,0x22,0x66,0x6f,0x72,0x5c,0x22,0x5d,0x2c,0x5b,0x5c,0x22,0x68,0x74,0x74,0x70,0x45,0x71,0x75,0x69,0x76,0x5c,0x22,0x2c,0x5c,0x22,0x68,0x74,0x74,0x70,0x2d,0x65,0x71,0x75,0x69,0x76,0x5c,0x22,0x5d,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x5b,0x30,0x5d,0x3b,0x7a,0x5b,0x62,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x62,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x61,0x5b,0x31,0x5d,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5b,0x5c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x64,0x72,0x61,0x67,0x67,0x61,0x62,0x6c,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x73,0x70,0x65,0x6c,0x6c,0x43,0x68,0x65,0x63,0x6b,0x5c,0x22,0x2c,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x32,0x2c,0x21,0x31,0x2c,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5c,0x6e,0x5b,0x5c,0x22,0x61,0x75,0x74,0x6f,0x52,0x65,0x76,0x65,0x72,0x73,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x65,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x52,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x5c,0x22,0x2c,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x41,0x6c,0x70,0x68,0x61,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x32,0x2c,0x21,0x31,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5c,0x22,0x61,0x6c,0x6c,0x6f,0x77,0x46,0x75,0x6c,0x6c,0x53,0x63,0x72,0x65,0x65,0x6e,0x20,0x61,0x73,0x79,0x6e,0x63,0x20,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x20,0x61,0x75,0x74,0x6f,0x50,0x6c,0x61,0x79,0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x64,0x65,0x66,0x65,0x72,0x20,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x20,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x50,0x69,0x63,0x74,0x75,0x72,0x65,0x49,0x6e,0x50,0x69,0x63,0x74,0x75,0x72,0x65,0x20,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x52,0x65,0x6d,0x6f,0x74,0x65,0x50,0x6c,0x61,0x79,0x62,0x61,0x63,0x6b,0x20,0x66,0x6f,0x72,0x6d,0x4e,0x6f,0x56,0x61,0x6c,0x69,0x64,0x61,0x74,0x65,0x20,0x68,0x69,0x64,0x64,0x65,0x6e,0x20,0x6c,0x6f,0x6f,0x70,0x20,0x6e,0x6f,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x6e,0x6f,0x56,0x61,0x6c,0x69,0x64,0x61,0x74,0x65,0x20,0x6f,0x70,0x65,0x6e,0x20,0x70,0x6c,0x61,0x79,0x73,0x49,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x72,0x65,0x61,0x64,0x4f,0x6e,0x6c,0x79,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x20,0x72,0x65,0x76,0x65,0x72,0x73,0x65,0x64,0x20,0x73,0x63,0x6f,0x70,0x65,0x64,0x20,0x73,0x65,0x61,0x6d,0x6c,0x65,0x73,0x73,0x20,0x69,0x74,0x65,0x6d,0x53,0x63,0x6f,0x70,0x65,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x33,0x2c,0x21,0x31,0x2c,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5c,0x6e,0x5b,0x5c,0x22,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x5c,0x22,0x2c,0x5c,0x22,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x6d,0x75,0x74,0x65,0x64,0x5c,0x22,0x2c,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x33,0x2c,0x21,0x30,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5b,0x5c,0x22,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x64,0x6f,0x77,0x6e,0x6c,0x6f,0x61,0x64,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x34,0x2c,0x21,0x31,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5b,0x5c,0x22,0x63,0x6f,0x6c,0x73,0x5c,0x22,0x2c,0x5c,0x22,0x72,0x6f,0x77,0x73,0x5c,0x22,0x2c,0x5c,0x22,0x73,0x69,0x7a,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x73,0x70,0x61,0x6e,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x36,0x2c,0x21,0x31,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5b,0x5c,0x22,0x72,0x6f,0x77,0x53,0x70,0x61,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x35,0x2c,0x21,0x31,0x2c,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x76,0x61,0x72,0x20,0x72,0x61,0x3d,0x2f,0x5b,0x5c,0x5c,0x2d,0x3a,0x5d,0x28,0x5b,0x61,0x2d,0x7a,0x5d,0x29,0x2f,0x67,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x61,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x5b,0x31,0x5d,0x2e,0x74,0x6f,0x55,0x70,0x70,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x7d,0x5c,0x6e,0x5c,0x22,0x61,0x63,0x63,0x65,0x6e,0x74,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x20,0x61,0x6c,0x69,0x67,0x6e,0x6d,0x65,0x6e,0x74,0x2d,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x20,0x61,0x72,0x61,0x62,0x69,0x63,0x2d,0x66,0x6f,0x72,0x6d,0x20,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x2d,0x73,0x68,0x69,0x66,0x74,0x20,0x63,0x61,0x70,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x20,0x63,0x6c,0x69,0x70,0x2d,0x70,0x61,0x74,0x68,0x20,0x63,0x6c,0x69,0x70,0x2d,0x72,0x75,0x6c,0x65,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x69,0x6e,0x74,0x65,0x72,0x70,0x6f,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x69,0x6e,0x74,0x65,0x72,0x70,0x6f,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x66,0x69,0x6c,0x74,0x65,0x72,0x73,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x64,0x6f,0x6d,0x69,0x6e,0x61,0x6e,0x74,0x2d,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,0x65,0x20,0x66,0x6c,0x6f,0x6f,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x66,0x6c,0x6f,0x6f,0x64,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x2d,0x61,0x64,0x6a,0x75,0x73,0x74,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,0x79,0x6c,0x65,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x76,0x61,0x72,0x69,0x61,0x6e,0x74,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x67,0x6c,0x79,0x70,0x68,0x2d,0x6e,0x61,0x6d,0x65,0x20,0x67,0x6c,0x79,0x70,0x68,0x2d,0x6f,0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x68,0x6f,0x72,0x69,0x7a,0x6f,0x6e,0x74,0x61,0x6c,0x20,0x67,0x6c,0x79,0x70,0x68,0x2d,0x6f,0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x76,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,0x20,0x68,0x6f,0x72,0x69,0x7a,0x2d,0x61,0x64,0x76,0x2d,0x78,0x20,0x68,0x6f,0x72,0x69,0x7a,0x2d,0x6f,0x72,0x69,0x67,0x69,0x6e,0x2d,0x78,0x20,0x69,0x6d,0x61,0x67,0x65,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x6c,0x65,0x74,0x74,0x65,0x72,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x20,0x6c,0x69,0x67,0x68,0x74,0x69,0x6e,0x67,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x6d,0x61,0x72,0x6b,0x65,0x72,0x2d,0x65,0x6e,0x64,0x20,0x6d,0x61,0x72,0x6b,0x65,0x72,0x2d,0x6d,0x69,0x64,0x20,0x6d,0x61,0x72,0x6b,0x65,0x72,0x2d,0x73,0x74,0x61,0x72,0x74,0x20,0x6f,0x76,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x76,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x74,0x68,0x69,0x63,0x6b,0x6e,0x65,0x73,0x73,0x20,0x70,0x61,0x69,0x6e,0x74,0x2d,0x6f,0x72,0x64,0x65,0x72,0x20,0x70,0x61,0x6e,0x6f,0x73,0x65,0x2d,0x31,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x2d,0x65,0x76,0x65,0x6e,0x74,0x73,0x20,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x2d,0x69,0x6e,0x74,0x65,0x6e,0x74,0x20,0x73,0x68,0x61,0x70,0x65,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x73,0x74,0x72,0x69,0x6b,0x65,0x74,0x68,0x72,0x6f,0x75,0x67,0x68,0x2d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x73,0x74,0x72,0x69,0x6b,0x65,0x74,0x68,0x72,0x6f,0x75,0x67,0x68,0x2d,0x74,0x68,0x69,0x63,0x6b,0x6e,0x65,0x73,0x73,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,0x68,0x61,0x72,0x72,0x61,0x79,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,0x68,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6e,0x63,0x68,0x6f,0x72,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x2d,0x74,0x68,0x69,0x63,0x6b,0x6e,0x65,0x73,0x73,0x20,0x75,0x6e,0x69,0x63,0x6f,0x64,0x65,0x2d,0x62,0x69,0x64,0x69,0x20,0x75,0x6e,0x69,0x63,0x6f,0x64,0x65,0x2d,0x72,0x61,0x6e,0x67,0x65,0x20,0x75,0x6e,0x69,0x74,0x73,0x2d,0x70,0x65,0x72,0x2d,0x65,0x6d,0x20,0x76,0x2d,0x61,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x20,0x76,0x2d,0x68,0x61,0x6e,0x67,0x69,0x6e,0x67,0x20,0x76,0x2d,0x69,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x20,0x76,0x2d,0x6d,0x61,0x74,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x20,0x76,0x65,0x63,0x74,0x6f,0x72,0x2d,0x65,0x66,0x66,0x65,0x63,0x74,0x20,0x76,0x65,0x72,0x74,0x2d,0x61,0x64,0x76,0x2d,0x79,0x20,0x76,0x65,0x72,0x74,0x2d,0x6f,0x72,0x69,0x67,0x69,0x6e,0x2d,0x78,0x20,0x76,0x65,0x72,0x74,0x2d,0x6f,0x72,0x69,0x67,0x69,0x6e,0x2d,0x79,0x20,0x77,0x6f,0x72,0x64,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x20,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0x2d,0x6d,0x6f,0x64,0x65,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x20,0x78,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x72,0x61,0x2c,0x5c,0x6e,0x73,0x61,0x29,0x3b,0x7a,0x5b,0x62,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x62,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5c,0x22,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x61,0x63,0x74,0x75,0x61,0x74,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x61,0x72,0x63,0x72,0x6f,0x6c,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x72,0x6f,0x6c,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x73,0x68,0x6f,0x77,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x74,0x69,0x74,0x6c,0x65,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x74,0x79,0x70,0x65,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x72,0x61,0x2c,0x73,0x61,0x29,0x3b,0x7a,0x5b,0x62,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x62,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x61,0x2c,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x5c,0x22,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5b,0x5c,0x22,0x78,0x6d,0x6c,0x3a,0x62,0x61,0x73,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x78,0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x5c,0x22,0x2c,0x5c,0x22,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x72,0x61,0x2c,0x73,0x61,0x29,0x3b,0x7a,0x5b,0x62,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x62,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x61,0x2c,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x58,0x4d,0x4c,0x2f,0x31,0x39,0x39,0x38,0x2f,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x5c,0x22,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5b,0x5c,0x22,0x74,0x61,0x62,0x49,0x6e,0x64,0x65,0x78,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x72,0x6f,0x73,0x73,0x4f,0x72,0x69,0x67,0x69,0x6e,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x7d,0x29,0x3b,0x5c,0x6e,0x7a,0x2e,0x78,0x6c,0x69,0x6e,0x6b,0x48,0x72,0x65,0x66,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x5c,0x22,0x78,0x6c,0x69,0x6e,0x6b,0x48,0x72,0x65,0x66,0x5c,0x22,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x5c,0x22,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x68,0x72,0x65,0x66,0x5c,0x22,0x2c,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x5c,0x22,0x2c,0x21,0x30,0x2c,0x21,0x31,0x29,0x3b,0x5b,0x5c,0x22,0x73,0x72,0x63,0x5c,0x22,0x2c,0x5c,0x22,0x68,0x72,0x65,0x66,0x5c,0x22,0x2c,0x5c,0x22,0x61,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x66,0x6f,0x72,0x6d,0x41,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x5d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x7a,0x5b,0x61,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x76,0x28,0x61,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x30,0x2c,0x21,0x30,0x29,0x7d,0x29,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x61,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x7a,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x62,0x29,0x3f,0x7a,0x5b,0x62,0x5d,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3f,0x30,0x21,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3a,0x64,0x7c,0x7c,0x21,0x28,0x32,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x7c,0x7c,0x5c,0x22,0x6f,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x5b,0x30,0x5d,0x26,0x26,0x5c,0x22,0x4f,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x5b,0x30,0x5d,0x7c,0x7c,0x5c,0x22,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x5b,0x31,0x5d,0x26,0x26,0x5c,0x22,0x4e,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x5b,0x31,0x5d,0x29,0x71,0x61,0x28,0x62,0x2c,0x63,0x2c,0x65,0x2c,0x64,0x29,0x26,0x26,0x28,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x64,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x6f,0x61,0x28,0x62,0x29,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x62,0x29,0x3a,0x61,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x62,0x2c,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x29,0x29,0x3a,0x65,0x2e,0x6d,0x75,0x73,0x74,0x55,0x73,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x3f,0x61,0x5b,0x65,0x2e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x33,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x3f,0x21,0x31,0x3a,0x5c,0x22,0x5c,0x22,0x3a,0x63,0x3a,0x28,0x62,0x3d,0x65,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x2c,0x64,0x3d,0x65,0x2e,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x62,0x29,0x3a,0x28,0x65,0x3d,0x65,0x2e,0x74,0x79,0x70,0x65,0x2c,0x63,0x3d,0x33,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x21,0x30,0x3d,0x3d,0x3d,0x63,0x3f,0x5c,0x22,0x5c,0x22,0x3a,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x2c,0x64,0x3f,0x61,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x53,0x28,0x64,0x2c,0x62,0x2c,0x63,0x29,0x3a,0x61,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x62,0x2c,0x63,0x29,0x29,0x29,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x75,0x61,0x3d,0x61,0x61,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x2c,0x76,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x29,0x2c,0x77,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x6f,0x72,0x74,0x61,0x6c,0x5c,0x22,0x29,0x2c,0x79,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x29,0x2c,0x7a,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x74,0x72,0x69,0x63,0x74,0x5f,0x6d,0x6f,0x64,0x65,0x5c,0x22,0x29,0x2c,0x41,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x5c,0x22,0x29,0x2c,0x42,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x5c,0x22,0x29,0x2c,0x43,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x5c,0x22,0x29,0x2c,0x44,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x5f,0x72,0x65,0x66,0x5c,0x22,0x29,0x2c,0x45,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x5c,0x22,0x29,0x2c,0x46,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x5f,0x6c,0x69,0x73,0x74,0x5c,0x22,0x29,0x2c,0x47,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x5c,0x22,0x29,0x2c,0x48,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6c,0x61,0x7a,0x79,0x5c,0x22,0x29,0x3b,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x63,0x6f,0x70,0x65,0x5c,0x22,0x29,0x3b,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x64,0x65,0x62,0x75,0x67,0x5f,0x74,0x72,0x61,0x63,0x65,0x5f,0x6d,0x6f,0x64,0x65,0x5c,0x22,0x29,0x3b,0x5c,0x6e,0x76,0x61,0x72,0x20,0x49,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5c,0x22,0x29,0x3b,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6c,0x65,0x67,0x61,0x63,0x79,0x5f,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x29,0x3b,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x63,0x61,0x63,0x68,0x65,0x5c,0x22,0x29,0x3b,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x74,0x72,0x61,0x63,0x69,0x6e,0x67,0x5f,0x6d,0x61,0x72,0x6b,0x65,0x72,0x5c,0x22,0x29,0x3b,0x76,0x61,0x72,0x20,0x4a,0x61,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x61,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x3d,0x4a,0x61,0x26,0x26,0x61,0x5b,0x4a,0x61,0x5d,0x7c,0x7c,0x61,0x5b,0x5c,0x22,0x40,0x40,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x5c,0x22,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x3f,0x61,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x41,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x61,0x73,0x73,0x69,0x67,0x6e,0x2c,0x4c,0x61,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x61,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x4c,0x61,0x29,0x74,0x72,0x79,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x3b,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x63,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2e,0x74,0x72,0x69,0x6d,0x28,0x29,0x2e,0x6d,0x61,0x74,0x63,0x68,0x28,0x2f,0x5c,0x5c,0x6e,0x28,0x20,0x2a,0x28,0x61,0x74,0x20,0x29,0x3f,0x29,0x2f,0x29,0x3b,0x4c,0x61,0x3d,0x62,0x26,0x26,0x62,0x5b,0x31,0x5d,0x7c,0x7c,0x5c,0x22,0x5c,0x22,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x5c,0x5c,0x6e,0x5c,0x22,0x2b,0x4c,0x61,0x2b,0x61,0x7d,0x76,0x61,0x72,0x20,0x4e,0x61,0x3d,0x21,0x31,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x61,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x21,0x61,0x7c,0x7c,0x4e,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x5c,0x22,0x3b,0x4e,0x61,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x45,0x72,0x72,0x6f,0x72,0x2e,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x53,0x74,0x61,0x63,0x6b,0x54,0x72,0x61,0x63,0x65,0x3b,0x45,0x72,0x72,0x6f,0x72,0x2e,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x53,0x74,0x61,0x63,0x6b,0x54,0x72,0x61,0x63,0x65,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x62,0x29,0x69,0x66,0x28,0x62,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x3b,0x7d,0x2c,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x62,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2c,0x5c,0x22,0x70,0x72,0x6f,0x70,0x73,0x5c,0x22,0x2c,0x7b,0x73,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x3b,0x7d,0x7d,0x29,0x2c,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x26,0x26,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x29,0x7b,0x74,0x72,0x79,0x7b,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x28,0x62,0x2c,0x5b,0x5d,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x6c,0x7d,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x28,0x61,0x2c,0x5b,0x5d,0x2c,0x62,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x74,0x72,0x79,0x7b,0x62,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x64,0x3d,0x6c,0x7d,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x62,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x74,0x72,0x79,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x3b,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x64,0x3d,0x6c,0x7d,0x61,0x28,0x29,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x69,0x66,0x28,0x6c,0x26,0x26,0x64,0x26,0x26,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x2e,0x73,0x74,0x61,0x63,0x6b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x65,0x3d,0x6c,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x5c,0x5c,0x6e,0x5c,0x22,0x29,0x2c,0x5c,0x6e,0x66,0x3d,0x64,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x5c,0x5c,0x6e,0x5c,0x22,0x29,0x2c,0x67,0x3d,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x2c,0x68,0x3d,0x66,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x3b,0x31,0x3c,0x3d,0x67,0x26,0x26,0x30,0x3c,0x3d,0x68,0x26,0x26,0x65,0x5b,0x67,0x5d,0x21,0x3d,0x3d,0x66,0x5b,0x68,0x5d,0x3b,0x29,0x68,0x2d,0x2d,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x31,0x3c,0x3d,0x67,0x26,0x26,0x30,0x3c,0x3d,0x68,0x3b,0x67,0x2d,0x2d,0x2c,0x68,0x2d,0x2d,0x29,0x69,0x66,0x28,0x65,0x5b,0x67,0x5d,0x21,0x3d,0x3d,0x66,0x5b,0x68,0x5d,0x29,0x7b,0x69,0x66,0x28,0x31,0x21,0x3d,0x3d,0x67,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x64,0x6f,0x20,0x69,0x66,0x28,0x67,0x2d,0x2d,0x2c,0x68,0x2d,0x2d,0x2c,0x30,0x3e,0x68,0x7c,0x7c,0x65,0x5b,0x67,0x5d,0x21,0x3d,0x3d,0x66,0x5b,0x68,0x5d,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x5c,0x22,0x5c,0x5c,0x6e,0x5c,0x22,0x2b,0x65,0x5b,0x67,0x5d,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x5c,0x22,0x20,0x61,0x74,0x20,0x6e,0x65,0x77,0x20,0x5c,0x22,0x2c,0x5c,0x22,0x20,0x61,0x74,0x20,0x5c,0x22,0x29,0x3b,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x26,0x26,0x6b,0x2e,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x73,0x28,0x5c,0x22,0x3c,0x61,0x6e,0x6f,0x6e,0x79,0x6d,0x6f,0x75,0x73,0x3e,0x5c,0x22,0x29,0x26,0x26,0x28,0x6b,0x3d,0x6b,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x5c,0x22,0x3c,0x61,0x6e,0x6f,0x6e,0x79,0x6d,0x6f,0x75,0x73,0x3e,0x5c,0x22,0x2c,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x31,0x3c,0x3d,0x67,0x26,0x26,0x30,0x3c,0x3d,0x68,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x7d,0x7d,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x4e,0x61,0x3d,0x21,0x31,0x2c,0x45,0x72,0x72,0x6f,0x72,0x2e,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x53,0x74,0x61,0x63,0x6b,0x54,0x72,0x61,0x63,0x65,0x3d,0x63,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x61,0x3d,0x61,0x3f,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x3a,0x5c,0x22,0x5c,0x22,0x29,0x3f,0x4d,0x61,0x28,0x61,0x29,0x3a,0x5c,0x22,0x5c,0x22,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x61,0x28,0x61,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4d,0x61,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4d,0x61,0x28,0x5c,0x22,0x4c,0x61,0x7a,0x79,0x5c,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4d,0x61,0x28,0x5c,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x5c,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4d,0x61,0x28,0x5c,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x4c,0x69,0x73,0x74,0x5c,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x4f,0x61,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x21,0x31,0x29,0x2c,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x4f,0x61,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x2c,0x21,0x31,0x29,0x2c,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x4f,0x61,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x21,0x30,0x29,0x2c,0x61,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x5c,0x22,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x61,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x79,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x77,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x50,0x6f,0x72,0x74,0x61,0x6c,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x41,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x7a,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x45,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x46,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x4c,0x69,0x73,0x74,0x5c,0x22,0x7d,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x43,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x5c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x2e,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x42,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x61,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x5c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x2e,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x44,0x61,0x3a,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3b,0x61,0x3d,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x3b,0x61,0x7c,0x7c,0x28,0x61,0x3d,0x62,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x5c,0x6e,0x62,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x5c,0x22,0x5c,0x22,0x2c,0x61,0x3d,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x61,0x3f,0x5c,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x28,0x5c,0x22,0x2b,0x61,0x2b,0x5c,0x22,0x29,0x5c,0x22,0x3a,0x5c,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x5c,0x22,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x47,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x62,0x3a,0x51,0x61,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x29,0x7c,0x7c,0x5c,0x22,0x4d,0x65,0x6d,0x6f,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x48,0x61,0x3a,0x62,0x3d,0x61,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3b,0x61,0x3d,0x61,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x61,0x28,0x61,0x28,0x62,0x29,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x61,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x32,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x43,0x61,0x63,0x68,0x65,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x62,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x5c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x2e,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x62,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x5c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x2e,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x62,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x2c,0x61,0x3d,0x61,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x5c,0x22,0x5c,0x22,0x2c,0x62,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x28,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x61,0x3f,0x5c,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x28,0x5c,0x22,0x2b,0x61,0x2b,0x5c,0x22,0x29,0x5c,0x22,0x3a,0x5c,0x22,0x46,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x5c,0x22,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x50,0x6f,0x72,0x74,0x61,0x6c,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x52,0x6f,0x6f,0x74,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x54,0x65,0x78,0x74,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x51,0x61,0x28,0x62,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x3d,0x3d,0x7a,0x61,0x3f,0x5c,0x22,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x5c,0x22,0x3a,0x5c,0x22,0x4d,0x6f,0x64,0x65,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x4f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5c,0x22,0x3b,0x5c,0x6e,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x53,0x63,0x6f,0x70,0x65,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x4c,0x69,0x73,0x74,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x54,0x72,0x61,0x63,0x69,0x6e,0x67,0x4d,0x61,0x72,0x6b,0x65,0x72,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x7c,0x7c,0x62,0x2e,0x6e,0x61,0x6d,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x61,0x28,0x61,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x5c,0x22,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x61,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x61,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x29,0x26,0x26,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x26,0x26,0x28,0x5c,0x22,0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x5c,0x22,0x72,0x61,0x64,0x69,0x6f,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x61,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x54,0x61,0x28,0x61,0x29,0x3f,0x5c,0x22,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x5c,0x22,0x3a,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x2c,0x63,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x67,0x65,0x74,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x6f,0x72,0x28,0x61,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x6f,0x72,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2c,0x62,0x29,0x2c,0x64,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x5b,0x62,0x5d,0x3b,0x69,0x66,0x28,0x21,0x61,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x62,0x29,0x26,0x26,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x2e,0x67,0x65,0x74,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x2e,0x73,0x65,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x2e,0x67,0x65,0x74,0x2c,0x66,0x3d,0x63,0x2e,0x73,0x65,0x74,0x3b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x61,0x2c,0x62,0x2c,0x7b,0x63,0x6f,0x6e,0x66,0x69,0x67,0x75,0x72,0x61,0x62,0x6c,0x65,0x3a,0x21,0x30,0x2c,0x67,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x74,0x68,0x69,0x73,0x29,0x7d,0x2c,0x73,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x64,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x3b,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x29,0x7d,0x7d,0x29,0x3b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x61,0x2c,0x62,0x2c,0x7b,0x65,0x6e,0x75,0x6d,0x65,0x72,0x61,0x62,0x6c,0x65,0x3a,0x63,0x2e,0x65,0x6e,0x75,0x6d,0x65,0x72,0x61,0x62,0x6c,0x65,0x7d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x67,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x2c,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x64,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x7d,0x2c,0x73,0x74,0x6f,0x70,0x54,0x72,0x61,0x63,0x6b,0x69,0x6e,0x67,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x61,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x3d,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x61,0x5b,0x62,0x5d,0x7d,0x7d,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x61,0x28,0x61,0x29,0x7b,0x61,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x7c,0x7c,0x28,0x61,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x3d,0x55,0x61,0x28,0x61,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x61,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x21,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x3b,0x69,0x66,0x28,0x21,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x67,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x5c,0x22,0x5c,0x22,0x3b,0x61,0x26,0x26,0x28,0x64,0x3d,0x54,0x61,0x28,0x61,0x29,0x3f,0x61,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3f,0x5c,0x22,0x74,0x72,0x75,0x65,0x5c,0x22,0x3a,0x5c,0x22,0x66,0x61,0x6c,0x73,0x65,0x5c,0x22,0x3a,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x3b,0x61,0x3d,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x21,0x3d,0x3d,0x63,0x3f,0x28,0x62,0x2e,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x28,0x61,0x29,0x2c,0x21,0x30,0x29,0x3a,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x61,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x7c,0x7c,0x28,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3f,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x61,0x63,0x74,0x69,0x76,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x61,0x2e,0x62,0x6f,0x64,0x79,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x62,0x6f,0x64,0x79,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x61,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x41,0x28,0x7b,0x7d,0x2c,0x62,0x2c,0x7b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x3f,0x63,0x3a,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x61,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3f,0x5c,0x22,0x5c,0x22,0x3a,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x2c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3f,0x62,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3b,0x63,0x3d,0x53,0x61,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3f,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3a,0x63,0x29,0x3b,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x64,0x2c,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x3a,0x63,0x2c,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x64,0x3a,0x5c,0x22,0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x72,0x61,0x64,0x69,0x6f,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x62,0x3d,0x62,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x26,0x26,0x74,0x61,0x28,0x61,0x2c,0x5c,0x22,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x5c,0x22,0x2c,0x62,0x2c,0x21,0x31,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x62,0x28,0x61,0x2c,0x62,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x53,0x61,0x28,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x29,0x69,0x66,0x28,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x5c,0x22,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7c,0x7c,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x21,0x3d,0x63,0x29,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x7d,0x65,0x6c,0x73,0x65,0x20,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x26,0x26,0x28,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x5c,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x7c,0x7c,0x5c,0x22,0x72,0x65,0x73,0x65,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x29,0x3f,0x63,0x62,0x28,0x61,0x2c,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x63,0x29,0x3a,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x5c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x5c,0x22,0x29,0x26,0x26,0x63,0x62,0x28,0x61,0x2c,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x53,0x61,0x28,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x62,0x2e,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x26,0x26,0x28,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3d,0x21,0x21,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x29,0x7c,0x7c,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x5c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x5c,0x22,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x21,0x28,0x5c,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x64,0x26,0x26,0x5c,0x22,0x72,0x65,0x73,0x65,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x64,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x62,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x3b,0x63,0x7c,0x7c,0x62,0x3d,0x3d,0x3d,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x7c,0x7c,0x28,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x62,0x29,0x3b,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x62,0x7d,0x63,0x3d,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x3b,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x29,0x3b,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3d,0x21,0x21,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x3b,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x3d,0x63,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x7c,0x7c,0x58,0x61,0x28,0x61,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x21,0x3d,0x3d,0x61,0x29,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x63,0x3f,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x3a,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x26,0x26,0x28,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x29,0x7d,0x76,0x61,0x72,0x20,0x65,0x62,0x3d,0x41,0x72,0x72,0x61,0x79,0x2e,0x69,0x73,0x41,0x72,0x72,0x61,0x79,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x69,0x66,0x28,0x62,0x29,0x7b,0x62,0x3d,0x7b,0x7d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x62,0x5b,0x5c,0x22,0x24,0x5c,0x22,0x2b,0x63,0x5b,0x65,0x5d,0x5d,0x3d,0x21,0x30,0x3b,0x66,0x6f,0x72,0x28,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x65,0x3d,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x5c,0x22,0x24,0x5c,0x22,0x2b,0x61,0x5b,0x63,0x5d,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x61,0x5b,0x63,0x5d,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x61,0x5b,0x63,0x5d,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x65,0x29,0x2c,0x65,0x26,0x26,0x64,0x26,0x26,0x28,0x61,0x5b,0x63,0x5d,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x63,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x53,0x61,0x28,0x63,0x29,0x3b,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x7b,0x69,0x66,0x28,0x61,0x5b,0x65,0x5d,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x61,0x5b,0x65,0x5d,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x3b,0x64,0x26,0x26,0x28,0x61,0x5b,0x65,0x5d,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x7c,0x7c,0x61,0x5b,0x65,0x5d,0x2e,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x7c,0x7c,0x28,0x62,0x3d,0x61,0x5b,0x65,0x5d,0x29,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x62,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3d,0x21,0x30,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x39,0x31,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x41,0x28,0x7b,0x7d,0x2c,0x62,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x63,0x29,0x7b,0x63,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3b,0x62,0x3d,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x39,0x32,0x29,0x29,0x3b,0x69,0x66,0x28,0x65,0x62,0x28,0x63,0x29,0x29,0x7b,0x69,0x66,0x28,0x31,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x39,0x33,0x29,0x29,0x3b,0x63,0x3d,0x63,0x5b,0x30,0x5d,0x7d,0x62,0x3d,0x63,0x7d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x62,0x26,0x26,0x28,0x62,0x3d,0x5c,0x22,0x5c,0x22,0x29,0x3b,0x63,0x3d,0x62,0x7d,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x3a,0x53,0x61,0x28,0x63,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x53,0x61,0x28,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x2c,0x64,0x3d,0x53,0x61,0x28,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x26,0x26,0x28,0x63,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x2c,0x63,0x21,0x3d,0x3d,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x28,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x63,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x63,0x29,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x64,0x26,0x26,0x28,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x64,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x62,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3b,0x62,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x62,0x28,0x61,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x76,0x67,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x5c,0x22,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x61,0x74,0x68,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x38,0x2f,0x4d,0x61,0x74,0x68,0x2f,0x4d,0x61,0x74,0x68,0x4d,0x4c,0x5c,0x22,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x5c,0x22,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x3f,0x6b,0x62,0x28,0x62,0x29,0x3a,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x5c,0x22,0x66,0x6f,0x72,0x65,0x69,0x67,0x6e,0x4f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x3f,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x5c,0x22,0x3a,0x61,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x6d,0x62,0x2c,0x6e,0x62,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x4d,0x53,0x41,0x70,0x70,0x26,0x26,0x4d,0x53,0x41,0x70,0x70,0x2e,0x65,0x78,0x65,0x63,0x55,0x6e,0x73,0x61,0x66,0x65,0x4c,0x6f,0x63,0x61,0x6c,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x4d,0x53,0x41,0x70,0x70,0x2e,0x65,0x78,0x65,0x63,0x55,0x6e,0x73,0x61,0x66,0x65,0x4c,0x6f,0x63,0x61,0x6c,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x28,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7d,0x29,0x7d,0x3a,0x61,0x7d,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x55,0x52,0x49,0x7c,0x7c,0x5c,0x22,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x5c,0x22,0x69,0x6e,0x20,0x61,0x29,0x61,0x2e,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x3d,0x62,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x6d,0x62,0x3d,0x6d,0x62,0x7c,0x7c,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x5c,0x22,0x64,0x69,0x76,0x5c,0x22,0x29,0x3b,0x6d,0x62,0x2e,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x3d,0x5c,0x22,0x3c,0x73,0x76,0x67,0x3e,0x5c,0x22,0x2b,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x4f,0x66,0x28,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x29,0x2b,0x5c,0x22,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x5c,0x22,0x3b,0x66,0x6f,0x72,0x28,0x62,0x3d,0x6d,0x62,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x62,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x61,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x62,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x7d,0x7d,0x29,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x63,0x26,0x26,0x63,0x3d,0x3d,0x3d,0x61,0x2e,0x6c,0x61,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x26,0x26,0x33,0x3d,0x3d,0x3d,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x3d,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x61,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x62,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x70,0x62,0x3d,0x7b,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x49,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x43,0x6f,0x75,0x6e,0x74,0x3a,0x21,0x30,0x2c,0x61,0x73,0x70,0x65,0x63,0x74,0x52,0x61,0x74,0x69,0x6f,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x4f,0x75,0x74,0x73,0x65,0x74,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x53,0x6c,0x69,0x63,0x65,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x57,0x69,0x64,0x74,0x68,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x78,0x46,0x6c,0x65,0x78,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x78,0x46,0x6c,0x65,0x78,0x47,0x72,0x6f,0x75,0x70,0x3a,0x21,0x30,0x2c,0x62,0x6f,0x78,0x4f,0x72,0x64,0x69,0x6e,0x61,0x6c,0x47,0x72,0x6f,0x75,0x70,0x3a,0x21,0x30,0x2c,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x43,0x6f,0x75,0x6e,0x74,0x3a,0x21,0x30,0x2c,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x73,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x47,0x72,0x6f,0x77,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x50,0x6f,0x73,0x69,0x74,0x69,0x76,0x65,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x53,0x68,0x72,0x69,0x6e,0x6b,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x4e,0x65,0x67,0x61,0x74,0x69,0x76,0x65,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x65,0x78,0x4f,0x72,0x64,0x65,0x72,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x41,0x72,0x65,0x61,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x45,0x6e,0x64,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x53,0x70,0x61,0x6e,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x53,0x74,0x61,0x72,0x74,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x45,0x6e,0x64,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x53,0x70,0x61,0x6e,0x3a,0x21,0x30,0x2c,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x53,0x74,0x61,0x72,0x74,0x3a,0x21,0x30,0x2c,0x66,0x6f,0x6e,0x74,0x57,0x65,0x69,0x67,0x68,0x74,0x3a,0x21,0x30,0x2c,0x6c,0x69,0x6e,0x65,0x43,0x6c,0x61,0x6d,0x70,0x3a,0x21,0x30,0x2c,0x6c,0x69,0x6e,0x65,0x48,0x65,0x69,0x67,0x68,0x74,0x3a,0x21,0x30,0x2c,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x6f,0x72,0x64,0x65,0x72,0x3a,0x21,0x30,0x2c,0x6f,0x72,0x70,0x68,0x61,0x6e,0x73,0x3a,0x21,0x30,0x2c,0x74,0x61,0x62,0x53,0x69,0x7a,0x65,0x3a,0x21,0x30,0x2c,0x77,0x69,0x64,0x6f,0x77,0x73,0x3a,0x21,0x30,0x2c,0x7a,0x49,0x6e,0x64,0x65,0x78,0x3a,0x21,0x30,0x2c,0x5c,0x6e,0x7a,0x6f,0x6f,0x6d,0x3a,0x21,0x30,0x2c,0x66,0x69,0x6c,0x6c,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x66,0x6c,0x6f,0x6f,0x64,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x6f,0x70,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x44,0x61,0x73,0x68,0x61,0x72,0x72,0x61,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x44,0x61,0x73,0x68,0x6f,0x66,0x66,0x73,0x65,0x74,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x4d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x21,0x30,0x2c,0x73,0x74,0x72,0x6f,0x6b,0x65,0x57,0x69,0x64,0x74,0x68,0x3a,0x21,0x30,0x7d,0x2c,0x71,0x62,0x3d,0x5b,0x5c,0x22,0x57,0x65,0x62,0x6b,0x69,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x6d,0x73,0x5c,0x22,0x2c,0x5c,0x22,0x4d,0x6f,0x7a,0x5c,0x22,0x2c,0x5c,0x22,0x4f,0x5c,0x22,0x5d,0x3b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x70,0x62,0x29,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x71,0x62,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x62,0x29,0x7b,0x62,0x3d,0x62,0x2b,0x61,0x2e,0x63,0x68,0x61,0x72,0x41,0x74,0x28,0x30,0x29,0x2e,0x74,0x6f,0x55,0x70,0x70,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2b,0x61,0x2e,0x73,0x75,0x62,0x73,0x74,0x72,0x69,0x6e,0x67,0x28,0x31,0x29,0x3b,0x70,0x62,0x5b,0x62,0x5d,0x3d,0x70,0x62,0x5b,0x61,0x5d,0x7d,0x29,0x7d,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x62,0x7c,0x7c,0x5c,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x7c,0x7c,0x5c,0x22,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x3f,0x5c,0x22,0x5c,0x22,0x3a,0x63,0x7c,0x7c,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x7c,0x7c,0x30,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x70,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x61,0x29,0x26,0x26,0x70,0x62,0x5b,0x61,0x5d,0x3f,0x28,0x5c,0x22,0x5c,0x22,0x2b,0x62,0x29,0x2e,0x74,0x72,0x69,0x6d,0x28,0x29,0x3a,0x62,0x2b,0x5c,0x22,0x70,0x78,0x5c,0x22,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x73,0x74,0x79,0x6c,0x65,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x20,0x69,0x6e,0x20,0x62,0x29,0x69,0x66,0x28,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x30,0x3d,0x3d,0x3d,0x63,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x5c,0x22,0x2d,0x2d,0x5c,0x22,0x29,0x2c,0x65,0x3d,0x72,0x62,0x28,0x63,0x2c,0x62,0x5b,0x63,0x5d,0x2c,0x64,0x29,0x3b,0x5c,0x22,0x66,0x6c,0x6f,0x61,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x3d,0x5c,0x22,0x63,0x73,0x73,0x46,0x6c,0x6f,0x61,0x74,0x5c,0x22,0x29,0x3b,0x64,0x3f,0x61,0x2e,0x73,0x65,0x74,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x2c,0x65,0x29,0x3a,0x61,0x5b,0x63,0x5d,0x3d,0x65,0x7d,0x7d,0x76,0x61,0x72,0x20,0x74,0x62,0x3d,0x41,0x28,0x7b,0x6d,0x65,0x6e,0x75,0x69,0x74,0x65,0x6d,0x3a,0x21,0x30,0x7d,0x2c,0x7b,0x61,0x72,0x65,0x61,0x3a,0x21,0x30,0x2c,0x62,0x61,0x73,0x65,0x3a,0x21,0x30,0x2c,0x62,0x72,0x3a,0x21,0x30,0x2c,0x63,0x6f,0x6c,0x3a,0x21,0x30,0x2c,0x65,0x6d,0x62,0x65,0x64,0x3a,0x21,0x30,0x2c,0x68,0x72,0x3a,0x21,0x30,0x2c,0x69,0x6d,0x67,0x3a,0x21,0x30,0x2c,0x69,0x6e,0x70,0x75,0x74,0x3a,0x21,0x30,0x2c,0x6b,0x65,0x79,0x67,0x65,0x6e,0x3a,0x21,0x30,0x2c,0x6c,0x69,0x6e,0x6b,0x3a,0x21,0x30,0x2c,0x6d,0x65,0x74,0x61,0x3a,0x21,0x30,0x2c,0x70,0x61,0x72,0x61,0x6d,0x3a,0x21,0x30,0x2c,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x21,0x30,0x2c,0x74,0x72,0x61,0x63,0x6b,0x3a,0x21,0x30,0x2c,0x77,0x62,0x72,0x3a,0x21,0x30,0x7d,0x29,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x62,0x29,0x7b,0x69,0x66,0x28,0x74,0x62,0x5b,0x61,0x5d,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x33,0x37,0x2c,0x61,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x36,0x30,0x29,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x7c,0x7c,0x21,0x28,0x5c,0x22,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x5c,0x22,0x69,0x6e,0x20,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x36,0x31,0x29,0x29,0x3b,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x73,0x74,0x79,0x6c,0x65,0x26,0x26,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x73,0x74,0x79,0x6c,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x36,0x32,0x29,0x29,0x3b,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x2d,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x5c,0x22,0x2d,0x5c,0x22,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x69,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x61,0x6e,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x2d,0x78,0x6d,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6c,0x6f,0x72,0x2d,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x73,0x72,0x63,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x75,0x72,0x69,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x66,0x6f,0x72,0x6d,0x61,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x63,0x65,0x2d,0x6e,0x61,0x6d,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x69,0x73,0x73,0x69,0x6e,0x67,0x2d,0x67,0x6c,0x79,0x70,0x68,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x7d,0x76,0x61,0x72,0x20,0x77,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x62,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x7c,0x7c,0x61,0x2e,0x73,0x72,0x63,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3b,0x61,0x2e,0x63,0x6f,0x72,0x72,0x65,0x73,0x70,0x6f,0x6e,0x64,0x69,0x6e,0x67,0x55,0x73,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x26,0x26,0x28,0x61,0x3d,0x61,0x2e,0x63,0x6f,0x72,0x72,0x65,0x73,0x70,0x6f,0x6e,0x64,0x69,0x6e,0x67,0x55,0x73,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x61,0x7d,0x76,0x61,0x72,0x20,0x79,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x7a,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x41,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x62,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x61,0x3d,0x43,0x62,0x28,0x61,0x29,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x79,0x62,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x38,0x30,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x62,0x26,0x26,0x28,0x62,0x3d,0x44,0x62,0x28,0x62,0x29,0x2c,0x79,0x62,0x28,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x62,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x62,0x28,0x61,0x29,0x7b,0x7a,0x62,0x3f,0x41,0x62,0x3f,0x41,0x62,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x3a,0x41,0x62,0x3d,0x5b,0x61,0x5d,0x3a,0x7a,0x62,0x3d,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x62,0x28,0x29,0x7b,0x69,0x66,0x28,0x7a,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x7a,0x62,0x2c,0x62,0x3d,0x41,0x62,0x3b,0x41,0x62,0x3d,0x7a,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x42,0x62,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x62,0x29,0x66,0x6f,0x72,0x28,0x61,0x3d,0x30,0x3b,0x61,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x61,0x2b,0x2b,0x29,0x42,0x62,0x28,0x62,0x5b,0x61,0x5d,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x28,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x62,0x28,0x29,0x7b,0x7d,0x76,0x61,0x72,0x20,0x49,0x62,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x49,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x28,0x62,0x2c,0x63,0x29,0x3b,0x49,0x62,0x3d,0x21,0x30,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x47,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x69,0x66,0x28,0x49,0x62,0x3d,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x7a,0x62,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x41,0x62,0x29,0x48,0x62,0x28,0x29,0x2c,0x46,0x62,0x28,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x62,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x44,0x62,0x28,0x63,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x3d,0x64,0x5b,0x62,0x5d,0x3b,0x61,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x44,0x6f,0x75,0x62,0x6c,0x65,0x43,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x44,0x6f,0x75,0x62,0x6c,0x65,0x43,0x6c,0x69,0x63,0x6b,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x44,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x44,0x6f,0x77,0x6e,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4d,0x6f,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4d,0x6f,0x76,0x65,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x55,0x70,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x55,0x70,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x45,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x28,0x64,0x3d,0x21,0x64,0x2e,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x29,0x7c,0x7c,0x28,0x61,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x64,0x3d,0x21,0x28,0x5c,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x29,0x29,0x3b,0x61,0x3d,0x21,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x61,0x3d,0x21,0x31,0x7d,0x69,0x66,0x28,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x63,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x5c,0x6e,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x33,0x31,0x2c,0x62,0x2c,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x7d,0x76,0x61,0x72,0x20,0x4c,0x62,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x69,0x61,0x29,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x4d,0x62,0x3d,0x7b,0x7d,0x3b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x4d,0x62,0x2c,0x5c,0x22,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x5c,0x22,0x2c,0x7b,0x67,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x4c,0x62,0x3d,0x21,0x30,0x7d,0x7d,0x29,0x3b,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x74,0x65,0x73,0x74,0x5c,0x22,0x2c,0x4d,0x62,0x2c,0x4d,0x62,0x29,0x3b,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x5c,0x22,0x74,0x65,0x73,0x74,0x5c,0x22,0x2c,0x4d,0x62,0x2c,0x4d,0x62,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x4c,0x62,0x3d,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x41,0x72,0x72,0x61,0x79,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x73,0x6c,0x69,0x63,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2c,0x33,0x29,0x3b,0x74,0x72,0x79,0x7b,0x62,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x63,0x2c,0x6c,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6d,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x6f,0x6e,0x45,0x72,0x72,0x6f,0x72,0x28,0x6d,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x4f,0x62,0x3d,0x21,0x31,0x2c,0x50,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x51,0x62,0x3d,0x21,0x31,0x2c,0x52,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x53,0x62,0x3d,0x7b,0x6f,0x6e,0x45,0x72,0x72,0x6f,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x4f,0x62,0x3d,0x21,0x30,0x3b,0x50,0x62,0x3d,0x61,0x7d,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x7b,0x4f,0x62,0x3d,0x21,0x31,0x3b,0x50,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x4e,0x62,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x53,0x62,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x62,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x7b,0x54,0x62,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x3b,0x69,0x66,0x28,0x4f,0x62,0x29,0x7b,0x69,0x66,0x28,0x4f,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x50,0x62,0x3b,0x4f,0x62,0x3d,0x21,0x31,0x3b,0x50,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x39,0x38,0x29,0x29,0x3b,0x51,0x62,0x7c,0x7c,0x28,0x51,0x62,0x3d,0x21,0x30,0x2c,0x52,0x62,0x3d,0x6c,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x62,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2c,0x63,0x3d,0x61,0x3b,0x69,0x66,0x28,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x66,0x6f,0x72,0x28,0x3b,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x29,0x62,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x61,0x3d,0x62,0x3b,0x64,0x6f,0x20,0x62,0x3d,0x61,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x34,0x30,0x39,0x38,0x29,0x26,0x26,0x28,0x63,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x2c,0x61,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x61,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x3f,0x63,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x62,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x61,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x62,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x62,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x56,0x62,0x28,0x61,0x29,0x21,0x3d,0x3d,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x62,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x21,0x62,0x29,0x7b,0x62,0x3d,0x56,0x62,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x21,0x3d,0x3d,0x61,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x7d,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2c,0x64,0x3d,0x62,0x3b,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x29,0x7b,0x64,0x3d,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x63,0x3d,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x3d,0x3d,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x66,0x6f,0x72,0x28,0x66,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x66,0x3b,0x29,0x7b,0x69,0x66,0x28,0x66,0x3d,0x3d,0x3d,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x62,0x28,0x65,0x29,0x2c,0x61,0x3b,0x69,0x66,0x28,0x66,0x3d,0x3d,0x3d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x62,0x28,0x65,0x29,0x2c,0x62,0x3b,0x66,0x3d,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x7d,0x69,0x66,0x28,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x3d,0x3d,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x63,0x3d,0x65,0x2c,0x64,0x3d,0x66,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x67,0x3d,0x21,0x31,0x2c,0x68,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x68,0x3b,0x29,0x7b,0x69,0x66,0x28,0x68,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x67,0x3d,0x21,0x30,0x3b,0x63,0x3d,0x65,0x3b,0x64,0x3d,0x66,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x68,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x67,0x3d,0x21,0x30,0x3b,0x64,0x3d,0x65,0x3b,0x63,0x3d,0x66,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x68,0x3d,0x68,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x69,0x66,0x28,0x21,0x67,0x29,0x7b,0x66,0x6f,0x72,0x28,0x68,0x3d,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x68,0x3b,0x29,0x7b,0x69,0x66,0x28,0x68,0x3d,0x3d,0x3d,0x5c,0x6e,0x63,0x29,0x7b,0x67,0x3d,0x21,0x30,0x3b,0x63,0x3d,0x66,0x3b,0x64,0x3d,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x68,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x67,0x3d,0x21,0x30,0x3b,0x64,0x3d,0x66,0x3b,0x63,0x3d,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x68,0x3d,0x68,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x69,0x66,0x28,0x21,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x38,0x39,0x29,0x29,0x3b,0x7d,0x7d,0x69,0x66,0x28,0x63,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x21,0x3d,0x3d,0x64,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x39,0x30,0x29,0x29,0x3b,0x7d,0x69,0x66,0x28,0x33,0x21,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x3d,0x3d,0x63,0x3f,0x61,0x3a,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x62,0x28,0x61,0x29,0x7b,0x61,0x3d,0x59,0x62,0x28,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x24,0x62,0x28,0x61,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x62,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x24,0x62,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x61,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x62,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x61,0x6e,0x63,0x65,0x6c,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x63,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x68,0x6f,0x75,0x6c,0x64,0x59,0x69,0x65,0x6c,0x64,0x2c,0x64,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x50,0x61,0x69,0x6e,0x74,0x2c,0x42,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x2c,0x65,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x2c,0x66,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x67,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x55,0x73,0x65,0x72,0x42,0x6c,0x6f,0x63,0x6b,0x69,0x6e,0x67,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x68,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x69,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4c,0x6f,0x77,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x6a,0x63,0x3d,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x64,0x6c,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x6b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x63,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6c,0x63,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x63,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x29,0x74,0x72,0x79,0x7b,0x6c,0x63,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x28,0x6b,0x63,0x2c,0x61,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x31,0x32,0x38,0x3d,0x3d,0x3d,0x28,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x62,0x29,0x7b,0x7d,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x6f,0x63,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x63,0x6c,0x7a,0x33,0x32,0x3f,0x4d,0x61,0x74,0x68,0x2e,0x63,0x6c,0x7a,0x33,0x32,0x3a,0x6e,0x63,0x2c,0x70,0x63,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6c,0x6f,0x67,0x2c,0x71,0x63,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x4c,0x4e,0x32,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x63,0x28,0x61,0x29,0x7b,0x61,0x3e,0x3e,0x3e,0x3d,0x30,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x3f,0x33,0x32,0x3a,0x33,0x31,0x2d,0x28,0x70,0x63,0x28,0x61,0x29,0x2f,0x71,0x63,0x7c,0x30,0x29,0x7c,0x30,0x7d,0x76,0x61,0x72,0x20,0x72,0x63,0x3d,0x36,0x34,0x2c,0x73,0x63,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x63,0x28,0x61,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x26,0x2d,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x34,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x38,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x32,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x32,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x34,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x30,0x39,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x31,0x39,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x33,0x38,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x37,0x36,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x35,0x35,0x33,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x31,0x30,0x37,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x32,0x31,0x34,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x32,0x34,0x32,0x38,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x26,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x33,0x38,0x38,0x36,0x30,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x37,0x37,0x37,0x32,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x33,0x35,0x35,0x34,0x34,0x33,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x37,0x31,0x30,0x38,0x38,0x36,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x26,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x36,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3b,0x5c,0x6e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x63,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x30,0x2c,0x65,0x3d,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x66,0x3d,0x61,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x67,0x3d,0x63,0x26,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x67,0x26,0x7e,0x65,0x3b,0x30,0x21,0x3d,0x3d,0x68,0x3f,0x64,0x3d,0x74,0x63,0x28,0x68,0x29,0x3a,0x28,0x66,0x26,0x3d,0x67,0x2c,0x30,0x21,0x3d,0x3d,0x66,0x26,0x26,0x28,0x64,0x3d,0x74,0x63,0x28,0x66,0x29,0x29,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x67,0x3d,0x63,0x26,0x7e,0x65,0x2c,0x30,0x21,0x3d,0x3d,0x67,0x3f,0x64,0x3d,0x74,0x63,0x28,0x67,0x29,0x3a,0x30,0x21,0x3d,0x3d,0x66,0x26,0x26,0x28,0x64,0x3d,0x74,0x63,0x28,0x66,0x29,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x62,0x26,0x26,0x62,0x21,0x3d,0x3d,0x64,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x26,0x65,0x29,0x26,0x26,0x28,0x65,0x3d,0x64,0x26,0x2d,0x64,0x2c,0x66,0x3d,0x62,0x26,0x2d,0x62,0x2c,0x65,0x3e,0x3d,0x66,0x7c,0x7c,0x31,0x36,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x66,0x26,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x29,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x64,0x26,0x34,0x29,0x26,0x26,0x28,0x64,0x7c,0x3d,0x63,0x26,0x31,0x36,0x29,0x3b,0x62,0x3d,0x61,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x62,0x29,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x2c,0x62,0x26,0x3d,0x64,0x3b,0x30,0x3c,0x62,0x3b,0x29,0x63,0x3d,0x33,0x31,0x2d,0x6f,0x63,0x28,0x62,0x29,0x2c,0x65,0x3d,0x31,0x3c,0x3c,0x63,0x2c,0x64,0x7c,0x3d,0x61,0x5b,0x63,0x5d,0x2c,0x62,0x26,0x3d,0x7e,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x63,0x28,0x61,0x2c,0x62,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2b,0x32,0x35,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x32,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x34,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x30,0x39,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x31,0x39,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x33,0x38,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x37,0x36,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x35,0x35,0x33,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x31,0x30,0x37,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x32,0x31,0x34,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x32,0x34,0x32,0x38,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2b,0x35,0x45,0x33,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x33,0x38,0x38,0x36,0x30,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x37,0x37,0x37,0x32,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x33,0x35,0x35,0x34,0x34,0x33,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x37,0x31,0x30,0x38,0x38,0x36,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x2d,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x2d,0x31,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x2d,0x31,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x63,0x28,0x61,0x2c,0x62,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x64,0x3d,0x61,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x65,0x3d,0x61,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x2c,0x66,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x30,0x3c,0x66,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x33,0x31,0x2d,0x6f,0x63,0x28,0x66,0x29,0x2c,0x68,0x3d,0x31,0x3c,0x3c,0x67,0x2c,0x6b,0x3d,0x65,0x5b,0x67,0x5d,0x3b,0x69,0x66,0x28,0x2d,0x31,0x3d,0x3d,0x3d,0x6b,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x68,0x26,0x63,0x29,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x28,0x68,0x26,0x64,0x29,0x29,0x65,0x5b,0x67,0x5d,0x3d,0x76,0x63,0x28,0x68,0x2c,0x62,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6b,0x3c,0x3d,0x62,0x26,0x26,0x28,0x61,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x68,0x29,0x3b,0x66,0x26,0x3d,0x7e,0x68,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x63,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x26,0x2d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x35,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x3a,0x61,0x26,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3f,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x3a,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x63,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x72,0x63,0x3b,0x72,0x63,0x3c,0x3c,0x3d,0x31,0x3b,0x30,0x3d,0x3d,0x3d,0x28,0x72,0x63,0x26,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x29,0x26,0x26,0x28,0x72,0x63,0x3d,0x36,0x34,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x63,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x62,0x3d,0x5b,0x5d,0x2c,0x63,0x3d,0x30,0x3b,0x33,0x31,0x3e,0x63,0x3b,0x63,0x2b,0x2b,0x29,0x62,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x3b,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x61,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x29,0x3b,0x61,0x3d,0x61,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x3b,0x62,0x3d,0x33,0x31,0x2d,0x6f,0x63,0x28,0x62,0x29,0x3b,0x61,0x5b,0x62,0x5d,0x3d,0x63,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x63,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x26,0x7e,0x62,0x3b,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x62,0x3b,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x61,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x61,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x62,0x3b,0x61,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x52,0x65,0x61,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x62,0x3b,0x61,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x62,0x3b,0x62,0x3d,0x61,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x3b,0x30,0x3c,0x63,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x33,0x31,0x2d,0x6f,0x63,0x28,0x63,0x29,0x2c,0x66,0x3d,0x31,0x3c,0x3c,0x65,0x3b,0x62,0x5b,0x65,0x5d,0x3d,0x30,0x3b,0x64,0x5b,0x65,0x5d,0x3d,0x2d,0x31,0x3b,0x61,0x5b,0x65,0x5d,0x3d,0x2d,0x31,0x3b,0x63,0x26,0x3d,0x7e,0x66,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x63,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x3b,0x63,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x33,0x31,0x2d,0x6f,0x63,0x28,0x63,0x29,0x2c,0x65,0x3d,0x31,0x3c,0x3c,0x64,0x3b,0x65,0x26,0x62,0x7c,0x61,0x5b,0x64,0x5d,0x26,0x62,0x26,0x26,0x28,0x61,0x5b,0x64,0x5d,0x7c,0x3d,0x62,0x29,0x3b,0x63,0x26,0x3d,0x7e,0x65,0x7d,0x7d,0x76,0x61,0x72,0x20,0x43,0x3d,0x30,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x63,0x28,0x61,0x29,0x7b,0x61,0x26,0x3d,0x2d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3c,0x61,0x3f,0x34,0x3c,0x61,0x3f,0x30,0x21,0x3d,0x3d,0x28,0x61,0x26,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x29,0x3f,0x31,0x36,0x3a,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x34,0x3a,0x31,0x7d,0x76,0x61,0x72,0x20,0x45,0x63,0x2c,0x46,0x63,0x2c,0x47,0x63,0x2c,0x48,0x63,0x2c,0x49,0x63,0x2c,0x4a,0x63,0x3d,0x21,0x31,0x2c,0x4b,0x63,0x3d,0x5b,0x5d,0x2c,0x4c,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4d,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4e,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4f,0x63,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x2c,0x50,0x63,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x2c,0x51,0x63,0x3d,0x5b,0x5d,0x2c,0x52,0x63,0x3d,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x20,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x20,0x74,0x6f,0x75,0x63,0x68,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x74,0x6f,0x75,0x63,0x68,0x65,0x6e,0x64,0x20,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x20,0x61,0x75,0x78,0x63,0x6c,0x69,0x63,0x6b,0x20,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x20,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x20,0x64,0x72,0x61,0x67,0x73,0x74,0x61,0x72,0x74,0x20,0x64,0x72,0x6f,0x70,0x20,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x20,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x20,0x63,0x6f,0x70,0x79,0x20,0x63,0x75,0x74,0x20,0x70,0x61,0x73,0x74,0x65,0x20,0x63,0x6c,0x69,0x63,0x6b,0x20,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x20,0x72,0x65,0x73,0x65,0x74,0x20,0x73,0x75,0x62,0x6d,0x69,0x74,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x63,0x28,0x61,0x2c,0x62,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x4c,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x6c,0x65,0x61,0x76,0x65,0x5c,0x22,0x3a,0x4d,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x4e,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x4f,0x63,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x62,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x67,0x6f,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6c,0x6f,0x73,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x50,0x63,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x62,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x61,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x66,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x7b,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3a,0x62,0x2c,0x64,0x6f,0x6d,0x45,0x76,0x65,0x6e,0x74,0x4e,0x61,0x6d,0x65,0x3a,0x63,0x2c,0x65,0x76,0x65,0x6e,0x74,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6c,0x61,0x67,0x73,0x3a,0x64,0x2c,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3a,0x66,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x73,0x3a,0x5b,0x65,0x5d,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x62,0x3d,0x43,0x62,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x46,0x63,0x28,0x62,0x29,0x29,0x2c,0x61,0x3b,0x61,0x2e,0x65,0x76,0x65,0x6e,0x74,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x64,0x3b,0x62,0x3d,0x61,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x2d,0x31,0x3d,0x3d,0x3d,0x62,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x65,0x29,0x26,0x26,0x62,0x2e,0x70,0x75,0x73,0x68,0x28,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4c,0x63,0x3d,0x54,0x63,0x28,0x4c,0x63,0x2c,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x2c,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4d,0x63,0x3d,0x54,0x63,0x28,0x4d,0x63,0x2c,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x2c,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4e,0x63,0x3d,0x54,0x63,0x28,0x4e,0x63,0x2c,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x2c,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x76,0x61,0x72,0x20,0x66,0x3d,0x65,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x3b,0x4f,0x63,0x2e,0x73,0x65,0x74,0x28,0x66,0x2c,0x54,0x63,0x28,0x4f,0x63,0x2e,0x67,0x65,0x74,0x28,0x66,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x67,0x6f,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x3d,0x65,0x2e,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x2c,0x50,0x63,0x2e,0x73,0x65,0x74,0x28,0x66,0x2c,0x54,0x63,0x28,0x50,0x63,0x2e,0x67,0x65,0x74,0x28,0x66,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x29,0x2c,0x21,0x30,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x63,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x57,0x63,0x28,0x61,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x56,0x62,0x28,0x62,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x69,0x66,0x28,0x62,0x3d,0x63,0x2e,0x74,0x61,0x67,0x2c,0x31,0x33,0x3d,0x3d,0x3d,0x62,0x29,0x7b,0x69,0x66,0x28,0x62,0x3d,0x57,0x62,0x28,0x63,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x61,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x62,0x3b,0x49,0x63,0x28,0x61,0x2e,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x47,0x63,0x28,0x63,0x29,0x7d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x61,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x33,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x3f,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x61,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x63,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x73,0x3b,0x30,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x59,0x63,0x28,0x61,0x2e,0x64,0x6f,0x6d,0x45,0x76,0x65,0x6e,0x74,0x4e,0x61,0x6d,0x65,0x2c,0x61,0x2e,0x65,0x76,0x65,0x6e,0x74,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6c,0x61,0x67,0x73,0x2c,0x62,0x5b,0x30,0x5d,0x2c,0x61,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x63,0x3d,0x61,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x6e,0x65,0x77,0x20,0x63,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x6f,0x72,0x28,0x63,0x2e,0x74,0x79,0x70,0x65,0x2c,0x63,0x29,0x3b,0x77,0x62,0x3d,0x64,0x3b,0x63,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x28,0x64,0x29,0x3b,0x77,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x43,0x62,0x28,0x63,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x46,0x63,0x28,0x62,0x29,0x2c,0x61,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x63,0x2c,0x21,0x31,0x3b,0x62,0x2e,0x73,0x68,0x69,0x66,0x74,0x28,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x58,0x63,0x28,0x61,0x29,0x26,0x26,0x63,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x63,0x28,0x29,0x7b,0x4a,0x63,0x3d,0x21,0x31,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4c,0x63,0x26,0x26,0x58,0x63,0x28,0x4c,0x63,0x29,0x26,0x26,0x28,0x4c,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4d,0x63,0x26,0x26,0x58,0x63,0x28,0x4d,0x63,0x29,0x26,0x26,0x28,0x4d,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4e,0x63,0x26,0x26,0x58,0x63,0x28,0x4e,0x63,0x29,0x26,0x26,0x28,0x4e,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x4f,0x63,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x5a,0x63,0x29,0x3b,0x50,0x63,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x5a,0x63,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x64,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x61,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4a,0x63,0x7c,0x7c,0x28,0x4a,0x63,0x3d,0x21,0x30,0x2c,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x28,0x63,0x61,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x2c,0x24,0x63,0x29,0x29,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x64,0x28,0x61,0x29,0x7b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x28,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x64,0x28,0x62,0x2c,0x61,0x29,0x7d,0x69,0x66,0x28,0x30,0x3c,0x4b,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x7b,0x61,0x64,0x28,0x4b,0x63,0x5b,0x30,0x5d,0x2c,0x61,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x31,0x3b,0x63,0x3c,0x4b,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x4b,0x63,0x5b,0x63,0x5d,0x3b,0x64,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x64,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4c,0x63,0x26,0x26,0x61,0x64,0x28,0x4c,0x63,0x2c,0x61,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4d,0x63,0x26,0x26,0x61,0x64,0x28,0x4d,0x63,0x2c,0x61,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4e,0x63,0x26,0x26,0x61,0x64,0x28,0x4e,0x63,0x2c,0x61,0x29,0x3b,0x4f,0x63,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x62,0x29,0x3b,0x50,0x63,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x62,0x29,0x3b,0x66,0x6f,0x72,0x28,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x51,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x64,0x3d,0x51,0x63,0x5b,0x63,0x5d,0x2c,0x64,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x64,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x51,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x63,0x3d,0x51,0x63,0x5b,0x30,0x5d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x29,0x3b,0x29,0x56,0x63,0x28,0x63,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x26,0x26,0x51,0x63,0x2e,0x73,0x68,0x69,0x66,0x74,0x28,0x29,0x7d,0x76,0x61,0x72,0x20,0x63,0x64,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x64,0x64,0x3d,0x21,0x30,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x64,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x43,0x2c,0x66,0x3d,0x63,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x63,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x72,0x79,0x7b,0x43,0x3d,0x31,0x2c,0x66,0x64,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x43,0x3d,0x65,0x2c,0x63,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x64,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x43,0x2c,0x66,0x3d,0x63,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x63,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x72,0x79,0x7b,0x43,0x3d,0x34,0x2c,0x66,0x64,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x43,0x3d,0x65,0x2c,0x63,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x64,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x64,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x59,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x29,0x68,0x64,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x69,0x64,0x2c,0x63,0x29,0x2c,0x53,0x63,0x28,0x61,0x2c,0x64,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x55,0x63,0x28,0x65,0x2c,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x29,0x64,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x53,0x63,0x28,0x61,0x2c,0x64,0x29,0x2c,0x62,0x26,0x34,0x26,0x26,0x2d,0x31,0x3c,0x52,0x63,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x61,0x29,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x43,0x62,0x28,0x65,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x45,0x63,0x28,0x66,0x29,0x3b,0x66,0x3d,0x59,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x26,0x26,0x68,0x64,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x69,0x64,0x2c,0x63,0x29,0x3b,0x69,0x66,0x28,0x66,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x65,0x3d,0x66,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x64,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x68,0x64,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x69,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x3d,0x78,0x62,0x28,0x64,0x29,0x3b,0x61,0x3d,0x57,0x63,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x69,0x66,0x28,0x62,0x3d,0x56,0x62,0x28,0x61,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x29,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x63,0x3d,0x62,0x2e,0x74,0x61,0x67,0x2c,0x31,0x33,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x61,0x3d,0x57,0x62,0x28,0x62,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x69,0x66,0x28,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x3f,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x62,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x69,0x64,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x64,0x28,0x61,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6c,0x6f,0x73,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x70,0x79,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x61,0x75,0x78,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x6f,0x70,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x61,0x73,0x74,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x61,0x75,0x73,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6c,0x61,0x79,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x72,0x61,0x74,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x72,0x65,0x73,0x65,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x72,0x65,0x73,0x69,0x7a,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x65,0x6b,0x65,0x64,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x76,0x6f,0x6c,0x75,0x6d,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x75,0x70,0x64,0x61,0x74,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x62,0x6c,0x75,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x61,0x66,0x74,0x65,0x72,0x62,0x6c,0x75,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x6c,0x75,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x75,0x6c,0x6c,0x73,0x63,0x72,0x65,0x65,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x68,0x61,0x73,0x68,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x70,0x73,0x74,0x61,0x74,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x78,0x69,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x6c,0x65,0x61,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x67,0x67,0x6c,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x77,0x68,0x65,0x65,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x65,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6c,0x65,0x61,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x65,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x34,0x3b,0x5c,0x6e,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x5c,0x22,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x63,0x28,0x29,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x66,0x63,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x67,0x63,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x34,0x3b,0x63,0x61,0x73,0x65,0x20,0x68,0x63,0x3a,0x63,0x61,0x73,0x65,0x20,0x69,0x63,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x3b,0x63,0x61,0x73,0x65,0x20,0x6a,0x63,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x7d,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x36,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6b,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6d,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x64,0x28,0x29,0x7b,0x69,0x66,0x28,0x6d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x64,0x3b,0x76,0x61,0x72,0x20,0x61,0x2c,0x62,0x3d,0x6c,0x64,0x2c,0x63,0x3d,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2c,0x64,0x2c,0x65,0x3d,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x69,0x6e,0x20,0x6b,0x64,0x3f,0x6b,0x64,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3a,0x6b,0x64,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x66,0x3d,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x30,0x3b,0x61,0x3c,0x63,0x26,0x26,0x62,0x5b,0x61,0x5d,0x3d,0x3d,0x3d,0x65,0x5b,0x61,0x5d,0x3b,0x61,0x2b,0x2b,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x63,0x2d,0x61,0x3b,0x66,0x6f,0x72,0x28,0x64,0x3d,0x31,0x3b,0x64,0x3c,0x3d,0x67,0x26,0x26,0x62,0x5b,0x63,0x2d,0x64,0x5d,0x3d,0x3d,0x3d,0x65,0x5b,0x66,0x2d,0x64,0x5d,0x3b,0x64,0x2b,0x2b,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x64,0x3d,0x65,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x61,0x2c,0x31,0x3c,0x64,0x3f,0x31,0x2d,0x64,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x64,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3b,0x5c,0x22,0x63,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x28,0x61,0x3d,0x61,0x2e,0x63,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x2c,0x30,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x31,0x33,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x61,0x3d,0x31,0x33,0x29,0x29,0x3a,0x61,0x3d,0x62,0x3b,0x31,0x30,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x61,0x3d,0x31,0x33,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x32,0x3c,0x3d,0x61,0x7c,0x7c,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x3f,0x61,0x3a,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x64,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x64,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x28,0x61,0x29,0x7b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x28,0x62,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x4e,0x61,0x6d,0x65,0x3d,0x62,0x3b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x74,0x61,0x72,0x67,0x65,0x74,0x49,0x6e,0x73,0x74,0x3d,0x65,0x3b,0x74,0x68,0x69,0x73,0x2e,0x74,0x79,0x70,0x65,0x3d,0x64,0x3b,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3d,0x66,0x3b,0x74,0x68,0x69,0x73,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x67,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x20,0x69,0x6e,0x20,0x61,0x29,0x61,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x26,0x26,0x28,0x62,0x3d,0x61,0x5b,0x63,0x5d,0x2c,0x74,0x68,0x69,0x73,0x5b,0x63,0x5d,0x3d,0x62,0x3f,0x62,0x28,0x66,0x29,0x3a,0x66,0x5b,0x63,0x5d,0x29,0x3b,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3d,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x66,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3f,0x66,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3a,0x21,0x31,0x3d,0x3d,0x3d,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x56,0x61,0x6c,0x75,0x65,0x29,0x3f,0x70,0x64,0x3a,0x71,0x64,0x3b,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x3d,0x71,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x68,0x69,0x73,0x7d,0x41,0x28,0x62,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2c,0x7b,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3b,0x61,0x26,0x26,0x28,0x61,0x2e,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x3f,0x61,0x2e,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x29,0x3a,0x5c,0x22,0x75,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x5c,0x6e,0x28,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x56,0x61,0x6c,0x75,0x65,0x3d,0x21,0x31,0x29,0x2c,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3d,0x70,0x64,0x29,0x7d,0x2c,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3b,0x61,0x26,0x26,0x28,0x61,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x3f,0x61,0x2e,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3a,0x5c,0x22,0x75,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x42,0x75,0x62,0x62,0x6c,0x65,0x26,0x26,0x28,0x61,0x2e,0x63,0x61,0x6e,0x63,0x65,0x6c,0x42,0x75,0x62,0x62,0x6c,0x65,0x3d,0x21,0x30,0x29,0x2c,0x74,0x68,0x69,0x73,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x3d,0x70,0x64,0x29,0x7d,0x2c,0x70,0x65,0x72,0x73,0x69,0x73,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x69,0x73,0x50,0x65,0x72,0x73,0x69,0x73,0x74,0x65,0x6e,0x74,0x3a,0x70,0x64,0x7d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x73,0x64,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x50,0x68,0x61,0x73,0x65,0x3a,0x30,0x2c,0x62,0x75,0x62,0x62,0x6c,0x65,0x73,0x3a,0x30,0x2c,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x3a,0x30,0x2c,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x7c,0x7c,0x44,0x61,0x74,0x65,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x7d,0x2c,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x3a,0x30,0x2c,0x69,0x73,0x54,0x72,0x75,0x73,0x74,0x65,0x64,0x3a,0x30,0x7d,0x2c,0x74,0x64,0x3d,0x72,0x64,0x28,0x73,0x64,0x29,0x2c,0x75,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x73,0x64,0x2c,0x7b,0x76,0x69,0x65,0x77,0x3a,0x30,0x2c,0x64,0x65,0x74,0x61,0x69,0x6c,0x3a,0x30,0x7d,0x29,0x2c,0x76,0x64,0x3d,0x72,0x64,0x28,0x75,0x64,0x29,0x2c,0x77,0x64,0x2c,0x78,0x64,0x2c,0x79,0x64,0x2c,0x41,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x75,0x64,0x2c,0x7b,0x73,0x63,0x72,0x65,0x65,0x6e,0x58,0x3a,0x30,0x2c,0x73,0x63,0x72,0x65,0x65,0x6e,0x59,0x3a,0x30,0x2c,0x63,0x6c,0x69,0x65,0x6e,0x74,0x58,0x3a,0x30,0x2c,0x63,0x6c,0x69,0x65,0x6e,0x74,0x59,0x3a,0x30,0x2c,0x70,0x61,0x67,0x65,0x58,0x3a,0x30,0x2c,0x70,0x61,0x67,0x65,0x59,0x3a,0x30,0x2c,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x61,0x6c,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x7a,0x64,0x2c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3a,0x30,0x2c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x73,0x3a,0x30,0x2c,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3f,0x61,0x2e,0x66,0x72,0x6f,0x6d,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x3d,0x3d,0x61,0x2e,0x73,0x72,0x63,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3f,0x61,0x2e,0x74,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x61,0x2e,0x66,0x72,0x6f,0x6d,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x61,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x7d,0x2c,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x58,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x58,0x5c,0x22,0x69,0x6e,0x5c,0x6e,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x58,0x3b,0x61,0x21,0x3d,0x3d,0x79,0x64,0x26,0x26,0x28,0x79,0x64,0x26,0x26,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3f,0x28,0x77,0x64,0x3d,0x61,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x58,0x2d,0x79,0x64,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x58,0x2c,0x78,0x64,0x3d,0x61,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x59,0x2d,0x79,0x64,0x2e,0x73,0x63,0x72,0x65,0x65,0x6e,0x59,0x29,0x3a,0x78,0x64,0x3d,0x77,0x64,0x3d,0x30,0x2c,0x79,0x64,0x3d,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x77,0x64,0x7d,0x2c,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x59,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x59,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x61,0x2e,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x59,0x3a,0x78,0x64,0x7d,0x7d,0x29,0x2c,0x42,0x64,0x3d,0x72,0x64,0x28,0x41,0x64,0x29,0x2c,0x43,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x41,0x64,0x2c,0x7b,0x64,0x61,0x74,0x61,0x54,0x72,0x61,0x6e,0x73,0x66,0x65,0x72,0x3a,0x30,0x7d,0x29,0x2c,0x44,0x64,0x3d,0x72,0x64,0x28,0x43,0x64,0x29,0x2c,0x45,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x75,0x64,0x2c,0x7b,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3a,0x30,0x7d,0x29,0x2c,0x46,0x64,0x3d,0x72,0x64,0x28,0x45,0x64,0x29,0x2c,0x47,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x73,0x64,0x2c,0x7b,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x4e,0x61,0x6d,0x65,0x3a,0x30,0x2c,0x65,0x6c,0x61,0x70,0x73,0x65,0x64,0x54,0x69,0x6d,0x65,0x3a,0x30,0x2c,0x70,0x73,0x65,0x75,0x64,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x30,0x7d,0x29,0x2c,0x48,0x64,0x3d,0x72,0x64,0x28,0x47,0x64,0x29,0x2c,0x49,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x73,0x64,0x2c,0x7b,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x61,0x2e,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x7d,0x7d,0x29,0x2c,0x4a,0x64,0x3d,0x72,0x64,0x28,0x49,0x64,0x29,0x2c,0x4b,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x73,0x64,0x2c,0x7b,0x64,0x61,0x74,0x61,0x3a,0x30,0x7d,0x29,0x2c,0x4c,0x64,0x3d,0x72,0x64,0x28,0x4b,0x64,0x29,0x2c,0x4d,0x64,0x3d,0x7b,0x45,0x73,0x63,0x3a,0x5c,0x22,0x45,0x73,0x63,0x61,0x70,0x65,0x5c,0x22,0x2c,0x5c,0x6e,0x53,0x70,0x61,0x63,0x65,0x62,0x61,0x72,0x3a,0x5c,0x22,0x20,0x5c,0x22,0x2c,0x4c,0x65,0x66,0x74,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x4c,0x65,0x66,0x74,0x5c,0x22,0x2c,0x55,0x70,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x55,0x70,0x5c,0x22,0x2c,0x52,0x69,0x67,0x68,0x74,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x52,0x69,0x67,0x68,0x74,0x5c,0x22,0x2c,0x44,0x6f,0x77,0x6e,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x44,0x6f,0x77,0x6e,0x5c,0x22,0x2c,0x44,0x65,0x6c,0x3a,0x5c,0x22,0x44,0x65,0x6c,0x65,0x74,0x65,0x5c,0x22,0x2c,0x57,0x69,0x6e,0x3a,0x5c,0x22,0x4f,0x53,0x5c,0x22,0x2c,0x4d,0x65,0x6e,0x75,0x3a,0x5c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x4d,0x65,0x6e,0x75,0x5c,0x22,0x2c,0x41,0x70,0x70,0x73,0x3a,0x5c,0x22,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x4d,0x65,0x6e,0x75,0x5c,0x22,0x2c,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x3a,0x5c,0x22,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x6f,0x63,0x6b,0x5c,0x22,0x2c,0x4d,0x6f,0x7a,0x50,0x72,0x69,0x6e,0x74,0x61,0x62,0x6c,0x65,0x4b,0x65,0x79,0x3a,0x5c,0x22,0x55,0x6e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x64,0x5c,0x22,0x7d,0x2c,0x4e,0x64,0x3d,0x7b,0x38,0x3a,0x5c,0x22,0x42,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x5c,0x22,0x2c,0x39,0x3a,0x5c,0x22,0x54,0x61,0x62,0x5c,0x22,0x2c,0x31,0x32,0x3a,0x5c,0x22,0x43,0x6c,0x65,0x61,0x72,0x5c,0x22,0x2c,0x31,0x33,0x3a,0x5c,0x22,0x45,0x6e,0x74,0x65,0x72,0x5c,0x22,0x2c,0x31,0x36,0x3a,0x5c,0x22,0x53,0x68,0x69,0x66,0x74,0x5c,0x22,0x2c,0x31,0x37,0x3a,0x5c,0x22,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x5c,0x22,0x2c,0x31,0x38,0x3a,0x5c,0x22,0x41,0x6c,0x74,0x5c,0x22,0x2c,0x31,0x39,0x3a,0x5c,0x22,0x50,0x61,0x75,0x73,0x65,0x5c,0x22,0x2c,0x32,0x30,0x3a,0x5c,0x22,0x43,0x61,0x70,0x73,0x4c,0x6f,0x63,0x6b,0x5c,0x22,0x2c,0x32,0x37,0x3a,0x5c,0x22,0x45,0x73,0x63,0x61,0x70,0x65,0x5c,0x22,0x2c,0x33,0x32,0x3a,0x5c,0x22,0x20,0x5c,0x22,0x2c,0x33,0x33,0x3a,0x5c,0x22,0x50,0x61,0x67,0x65,0x55,0x70,0x5c,0x22,0x2c,0x33,0x34,0x3a,0x5c,0x22,0x50,0x61,0x67,0x65,0x44,0x6f,0x77,0x6e,0x5c,0x22,0x2c,0x33,0x35,0x3a,0x5c,0x22,0x45,0x6e,0x64,0x5c,0x22,0x2c,0x33,0x36,0x3a,0x5c,0x22,0x48,0x6f,0x6d,0x65,0x5c,0x22,0x2c,0x33,0x37,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x4c,0x65,0x66,0x74,0x5c,0x22,0x2c,0x33,0x38,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x55,0x70,0x5c,0x22,0x2c,0x33,0x39,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x52,0x69,0x67,0x68,0x74,0x5c,0x22,0x2c,0x34,0x30,0x3a,0x5c,0x22,0x41,0x72,0x72,0x6f,0x77,0x44,0x6f,0x77,0x6e,0x5c,0x22,0x2c,0x34,0x35,0x3a,0x5c,0x22,0x49,0x6e,0x73,0x65,0x72,0x74,0x5c,0x22,0x2c,0x34,0x36,0x3a,0x5c,0x22,0x44,0x65,0x6c,0x65,0x74,0x65,0x5c,0x22,0x2c,0x31,0x31,0x32,0x3a,0x5c,0x22,0x46,0x31,0x5c,0x22,0x2c,0x31,0x31,0x33,0x3a,0x5c,0x22,0x46,0x32,0x5c,0x22,0x2c,0x31,0x31,0x34,0x3a,0x5c,0x22,0x46,0x33,0x5c,0x22,0x2c,0x31,0x31,0x35,0x3a,0x5c,0x22,0x46,0x34,0x5c,0x22,0x2c,0x31,0x31,0x36,0x3a,0x5c,0x22,0x46,0x35,0x5c,0x22,0x2c,0x31,0x31,0x37,0x3a,0x5c,0x22,0x46,0x36,0x5c,0x22,0x2c,0x31,0x31,0x38,0x3a,0x5c,0x22,0x46,0x37,0x5c,0x22,0x2c,0x5c,0x6e,0x31,0x31,0x39,0x3a,0x5c,0x22,0x46,0x38,0x5c,0x22,0x2c,0x31,0x32,0x30,0x3a,0x5c,0x22,0x46,0x39,0x5c,0x22,0x2c,0x31,0x32,0x31,0x3a,0x5c,0x22,0x46,0x31,0x30,0x5c,0x22,0x2c,0x31,0x32,0x32,0x3a,0x5c,0x22,0x46,0x31,0x31,0x5c,0x22,0x2c,0x31,0x32,0x33,0x3a,0x5c,0x22,0x46,0x31,0x32,0x5c,0x22,0x2c,0x31,0x34,0x34,0x3a,0x5c,0x22,0x4e,0x75,0x6d,0x4c,0x6f,0x63,0x6b,0x5c,0x22,0x2c,0x31,0x34,0x35,0x3a,0x5c,0x22,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x6f,0x63,0x6b,0x5c,0x22,0x2c,0x32,0x32,0x34,0x3a,0x5c,0x22,0x4d,0x65,0x74,0x61,0x5c,0x22,0x7d,0x2c,0x4f,0x64,0x3d,0x7b,0x41,0x6c,0x74,0x3a,0x5c,0x22,0x61,0x6c,0x74,0x4b,0x65,0x79,0x5c,0x22,0x2c,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x3a,0x5c,0x22,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x5c,0x22,0x2c,0x4d,0x65,0x74,0x61,0x3a,0x5c,0x22,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x5c,0x22,0x2c,0x53,0x68,0x69,0x66,0x74,0x3a,0x5c,0x22,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x5c,0x22,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x64,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3f,0x62,0x2e,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x28,0x61,0x29,0x3a,0x28,0x61,0x3d,0x4f,0x64,0x5b,0x61,0x5d,0x29,0x3f,0x21,0x21,0x62,0x5b,0x61,0x5d,0x3a,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x64,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x50,0x64,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x51,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x75,0x64,0x2c,0x7b,0x6b,0x65,0x79,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x61,0x2e,0x6b,0x65,0x79,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x4d,0x64,0x5b,0x61,0x2e,0x6b,0x65,0x79,0x5d,0x7c,0x7c,0x61,0x2e,0x6b,0x65,0x79,0x3b,0x69,0x66,0x28,0x5c,0x22,0x55,0x6e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3f,0x28,0x61,0x3d,0x6f,0x64,0x28,0x61,0x29,0x2c,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x3f,0x5c,0x22,0x45,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x66,0x72,0x6f,0x6d,0x43,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x28,0x61,0x29,0x29,0x3a,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3f,0x4e,0x64,0x5b,0x61,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x5d,0x7c,0x7c,0x5c,0x22,0x55,0x6e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x64,0x5c,0x22,0x3a,0x5c,0x22,0x5c,0x22,0x7d,0x2c,0x63,0x6f,0x64,0x65,0x3a,0x30,0x2c,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x30,0x2c,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x61,0x6c,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x72,0x65,0x70,0x65,0x61,0x74,0x3a,0x30,0x2c,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x3a,0x30,0x2c,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x7a,0x64,0x2c,0x63,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3f,0x6f,0x64,0x28,0x61,0x29,0x3a,0x30,0x7d,0x2c,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3f,0x61,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3a,0x30,0x7d,0x2c,0x77,0x68,0x69,0x63,0x68,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3d,0x3d,0x3d,0x5c,0x6e,0x61,0x2e,0x74,0x79,0x70,0x65,0x3f,0x6f,0x64,0x28,0x61,0x29,0x3a,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3f,0x61,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3a,0x30,0x7d,0x7d,0x29,0x2c,0x52,0x64,0x3d,0x72,0x64,0x28,0x51,0x64,0x29,0x2c,0x53,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x41,0x64,0x2c,0x7b,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x3a,0x30,0x2c,0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2c,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x30,0x2c,0x70,0x72,0x65,0x73,0x73,0x75,0x72,0x65,0x3a,0x30,0x2c,0x74,0x61,0x6e,0x67,0x65,0x6e,0x74,0x69,0x61,0x6c,0x50,0x72,0x65,0x73,0x73,0x75,0x72,0x65,0x3a,0x30,0x2c,0x74,0x69,0x6c,0x74,0x58,0x3a,0x30,0x2c,0x74,0x69,0x6c,0x74,0x59,0x3a,0x30,0x2c,0x74,0x77,0x69,0x73,0x74,0x3a,0x30,0x2c,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x54,0x79,0x70,0x65,0x3a,0x30,0x2c,0x69,0x73,0x50,0x72,0x69,0x6d,0x61,0x72,0x79,0x3a,0x30,0x7d,0x29,0x2c,0x54,0x64,0x3d,0x72,0x64,0x28,0x53,0x64,0x29,0x2c,0x55,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x75,0x64,0x2c,0x7b,0x74,0x6f,0x75,0x63,0x68,0x65,0x73,0x3a,0x30,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x6f,0x75,0x63,0x68,0x65,0x73,0x3a,0x30,0x2c,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x54,0x6f,0x75,0x63,0x68,0x65,0x73,0x3a,0x30,0x2c,0x61,0x6c,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x3a,0x30,0x2c,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x7a,0x64,0x7d,0x29,0x2c,0x56,0x64,0x3d,0x72,0x64,0x28,0x55,0x64,0x29,0x2c,0x57,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x73,0x64,0x2c,0x7b,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x3a,0x30,0x2c,0x65,0x6c,0x61,0x70,0x73,0x65,0x64,0x54,0x69,0x6d,0x65,0x3a,0x30,0x2c,0x70,0x73,0x65,0x75,0x64,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x30,0x7d,0x29,0x2c,0x58,0x64,0x3d,0x72,0x64,0x28,0x57,0x64,0x29,0x2c,0x59,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x41,0x64,0x2c,0x7b,0x64,0x65,0x6c,0x74,0x61,0x58,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x64,0x65,0x6c,0x74,0x61,0x58,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x61,0x2e,0x64,0x65,0x6c,0x74,0x61,0x58,0x3a,0x5c,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x58,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x2d,0x61,0x2e,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x58,0x3a,0x30,0x7d,0x2c,0x5c,0x6e,0x64,0x65,0x6c,0x74,0x61,0x59,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x64,0x65,0x6c,0x74,0x61,0x59,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x61,0x2e,0x64,0x65,0x6c,0x74,0x61,0x59,0x3a,0x5c,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x59,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x2d,0x61,0x2e,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x59,0x3a,0x5c,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x2d,0x61,0x2e,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x3a,0x30,0x7d,0x2c,0x64,0x65,0x6c,0x74,0x61,0x5a,0x3a,0x30,0x2c,0x64,0x65,0x6c,0x74,0x61,0x4d,0x6f,0x64,0x65,0x3a,0x30,0x7d,0x29,0x2c,0x5a,0x64,0x3d,0x72,0x64,0x28,0x59,0x64,0x29,0x2c,0x24,0x64,0x3d,0x5b,0x39,0x2c,0x31,0x33,0x2c,0x32,0x37,0x2c,0x33,0x32,0x5d,0x2c,0x61,0x65,0x3d,0x69,0x61,0x26,0x26,0x5c,0x22,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x76,0x65,0x6e,0x74,0x5c,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2c,0x62,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x61,0x26,0x26,0x5c,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x5c,0x22,0x69,0x6e,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x28,0x62,0x65,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x65,0x3d,0x69,0x61,0x26,0x26,0x5c,0x22,0x54,0x65,0x78,0x74,0x45,0x76,0x65,0x6e,0x74,0x5c,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x26,0x26,0x21,0x62,0x65,0x2c,0x64,0x65,0x3d,0x69,0x61,0x26,0x26,0x28,0x21,0x61,0x65,0x7c,0x7c,0x62,0x65,0x26,0x26,0x38,0x3c,0x62,0x65,0x26,0x26,0x31,0x31,0x3e,0x3d,0x62,0x65,0x29,0x2c,0x65,0x65,0x3d,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x66,0x72,0x6f,0x6d,0x43,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x28,0x33,0x32,0x29,0x2c,0x66,0x65,0x3d,0x21,0x31,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x2d,0x31,0x21,0x3d,0x3d,0x24,0x64,0x2e,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x28,0x62,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x32,0x39,0x21,0x3d,0x3d,0x62,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x65,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x64,0x65,0x74,0x61,0x69,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x5c,0x22,0x64,0x61,0x74,0x61,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x61,0x2e,0x64,0x61,0x74,0x61,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x69,0x65,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x68,0x65,0x28,0x62,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3a,0x69,0x66,0x28,0x33,0x32,0x21,0x3d,0x3d,0x62,0x2e,0x77,0x68,0x69,0x63,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x65,0x3d,0x21,0x30,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x65,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x62,0x2e,0x64,0x61,0x74,0x61,0x2c,0x61,0x3d,0x3d,0x3d,0x65,0x65,0x26,0x26,0x66,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x69,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x21,0x61,0x65,0x26,0x26,0x67,0x65,0x28,0x61,0x2c,0x62,0x29,0x3f,0x28,0x61,0x3d,0x6e,0x64,0x28,0x29,0x2c,0x6d,0x64,0x3d,0x6c,0x64,0x3d,0x6b,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x65,0x3d,0x21,0x31,0x2c,0x61,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x61,0x73,0x74,0x65,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3a,0x69,0x66,0x28,0x21,0x28,0x62,0x2e,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x7c,0x7c,0x62,0x2e,0x61,0x6c,0x74,0x4b,0x65,0x79,0x7c,0x7c,0x62,0x2e,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x29,0x7c,0x7c,0x62,0x2e,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x26,0x26,0x62,0x2e,0x61,0x6c,0x74,0x4b,0x65,0x79,0x29,0x7b,0x69,0x66,0x28,0x62,0x2e,0x63,0x68,0x61,0x72,0x26,0x26,0x31,0x3c,0x62,0x2e,0x63,0x68,0x61,0x72,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x61,0x72,0x3b,0x69,0x66,0x28,0x62,0x2e,0x77,0x68,0x69,0x63,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x66,0x72,0x6f,0x6d,0x43,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x28,0x62,0x2e,0x77,0x68,0x69,0x63,0x68,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x65,0x26,0x26,0x5c,0x22,0x6b,0x6f,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x2e,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x2e,0x64,0x61,0x74,0x61,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x6c,0x65,0x3d,0x7b,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x21,0x30,0x2c,0x64,0x61,0x74,0x65,0x3a,0x21,0x30,0x2c,0x64,0x61,0x74,0x65,0x74,0x69,0x6d,0x65,0x3a,0x21,0x30,0x2c,0x5c,0x22,0x64,0x61,0x74,0x65,0x74,0x69,0x6d,0x65,0x2d,0x6c,0x6f,0x63,0x61,0x6c,0x5c,0x22,0x3a,0x21,0x30,0x2c,0x65,0x6d,0x61,0x69,0x6c,0x3a,0x21,0x30,0x2c,0x6d,0x6f,0x6e,0x74,0x68,0x3a,0x21,0x30,0x2c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x3a,0x21,0x30,0x2c,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3a,0x21,0x30,0x2c,0x72,0x61,0x6e,0x67,0x65,0x3a,0x21,0x30,0x2c,0x73,0x65,0x61,0x72,0x63,0x68,0x3a,0x21,0x30,0x2c,0x74,0x65,0x6c,0x3a,0x21,0x30,0x2c,0x74,0x65,0x78,0x74,0x3a,0x21,0x30,0x2c,0x74,0x69,0x6d,0x65,0x3a,0x21,0x30,0x2c,0x75,0x72,0x6c,0x3a,0x21,0x30,0x2c,0x77,0x65,0x65,0x6b,0x3a,0x21,0x30,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x26,0x26,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x26,0x26,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x3f,0x21,0x21,0x6c,0x65,0x5b,0x61,0x2e,0x74,0x79,0x70,0x65,0x5d,0x3a,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x3f,0x21,0x30,0x3a,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x65,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x45,0x62,0x28,0x64,0x29,0x3b,0x62,0x3d,0x6f,0x65,0x28,0x62,0x2c,0x5c,0x22,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x29,0x3b,0x30,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x63,0x3d,0x6e,0x65,0x77,0x20,0x74,0x64,0x28,0x5c,0x22,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x64,0x29,0x2c,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x63,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x62,0x7d,0x29,0x29,0x7d,0x76,0x61,0x72,0x20,0x70,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x71,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x65,0x28,0x61,0x29,0x7b,0x73,0x65,0x28,0x61,0x2c,0x30,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x65,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x75,0x65,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x57,0x61,0x28,0x62,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x76,0x61,0x72,0x20,0x77,0x65,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x69,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x78,0x65,0x3b,0x69,0x66,0x28,0x69,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x79,0x65,0x3d,0x5c,0x22,0x6f,0x6e,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x69,0x6e,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3b,0x69,0x66,0x28,0x21,0x79,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x7a,0x65,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x5c,0x22,0x64,0x69,0x76,0x5c,0x22,0x29,0x3b,0x7a,0x65,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x5c,0x22,0x6f,0x6e,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x5c,0x22,0x29,0x3b,0x79,0x65,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x7a,0x65,0x2e,0x6f,0x6e,0x69,0x6e,0x70,0x75,0x74,0x7d,0x78,0x65,0x3d,0x79,0x65,0x7d,0x65,0x6c,0x73,0x65,0x20,0x78,0x65,0x3d,0x21,0x31,0x3b,0x77,0x65,0x3d,0x78,0x65,0x26,0x26,0x28,0x21,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x7c,0x7c,0x39,0x3c,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x65,0x28,0x29,0x7b,0x70,0x65,0x26,0x26,0x28,0x70,0x65,0x2e,0x64,0x65,0x74,0x61,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x28,0x5c,0x22,0x6f,0x6e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x42,0x65,0x29,0x2c,0x71,0x65,0x3d,0x70,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x65,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x26,0x26,0x74,0x65,0x28,0x71,0x65,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x5b,0x5d,0x3b,0x6e,0x65,0x28,0x62,0x2c,0x71,0x65,0x2c,0x61,0x2c,0x78,0x62,0x28,0x61,0x29,0x29,0x3b,0x4a,0x62,0x28,0x72,0x65,0x2c,0x62,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x65,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x3f,0x28,0x41,0x65,0x28,0x29,0x2c,0x70,0x65,0x3d,0x62,0x2c,0x71,0x65,0x3d,0x63,0x2c,0x70,0x65,0x2e,0x61,0x74,0x74,0x61,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x28,0x5c,0x22,0x6f,0x6e,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x42,0x65,0x29,0x29,0x3a,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x41,0x65,0x28,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x65,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x65,0x28,0x71,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x65,0x28,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x65,0x28,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x61,0x7c,0x7c,0x31,0x2f,0x61,0x3d,0x3d,0x3d,0x31,0x2f,0x62,0x29,0x7c,0x7c,0x61,0x21,0x3d,0x3d,0x61,0x26,0x26,0x62,0x21,0x3d,0x3d,0x62,0x7d,0x76,0x61,0x72,0x20,0x48,0x65,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x69,0x73,0x3f,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x69,0x73,0x3a,0x47,0x65,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x48,0x65,0x28,0x61,0x2c,0x62,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x61,0x29,0x2c,0x64,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x62,0x29,0x3b,0x69,0x66,0x28,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x21,0x3d,0x3d,0x64,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x66,0x6f,0x72,0x28,0x64,0x3d,0x30,0x3b,0x64,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x64,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x5b,0x64,0x5d,0x3b,0x69,0x66,0x28,0x21,0x6a,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x62,0x2c,0x65,0x29,0x7c,0x7c,0x21,0x48,0x65,0x28,0x61,0x5b,0x65,0x5d,0x2c,0x62,0x5b,0x65,0x5d,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x65,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x61,0x26,0x26,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x61,0x3d,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x4a,0x65,0x28,0x61,0x29,0x3b,0x61,0x3d,0x30,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x64,0x3b,0x63,0x3b,0x29,0x7b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x64,0x3d,0x61,0x2b,0x63,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x69,0x66,0x28,0x61,0x3c,0x3d,0x62,0x26,0x26,0x64,0x3e,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x6e,0x6f,0x64,0x65,0x3a,0x63,0x2c,0x6f,0x66,0x66,0x73,0x65,0x74,0x3a,0x62,0x2d,0x61,0x7d,0x3b,0x61,0x3d,0x64,0x7d,0x61,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x63,0x3b,0x29,0x7b,0x69,0x66,0x28,0x63,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7b,0x63,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x63,0x3d,0x63,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x63,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x63,0x3d,0x4a,0x65,0x28,0x63,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x26,0x26,0x62,0x3f,0x61,0x3d,0x3d,0x3d,0x62,0x3f,0x21,0x30,0x3a,0x61,0x26,0x26,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x21,0x31,0x3a,0x62,0x26,0x26,0x33,0x3d,0x3d,0x3d,0x62,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x4c,0x65,0x28,0x61,0x2c,0x62,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x29,0x3a,0x5c,0x22,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x73,0x5c,0x22,0x69,0x6e,0x20,0x61,0x3f,0x61,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x73,0x28,0x62,0x29,0x3a,0x61,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3f,0x21,0x21,0x28,0x61,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x28,0x62,0x29,0x26,0x31,0x36,0x29,0x3a,0x21,0x31,0x3a,0x21,0x31,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x65,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x61,0x3d,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2c,0x62,0x3d,0x58,0x61,0x28,0x29,0x3b,0x62,0x20,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x6f,0x66,0x20,0x61,0x2e,0x48,0x54,0x4d,0x4c,0x49,0x46,0x72,0x61,0x6d,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3b,0x29,0x7b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x64,0x29,0x7b,0x63,0x3d,0x21,0x31,0x7d,0x69,0x66,0x28,0x63,0x29,0x61,0x3d,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x3b,0x65,0x6c,0x73,0x65,0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,0x62,0x3d,0x58,0x61,0x28,0x61,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x65,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x26,0x26,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x26,0x26,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x26,0x26,0x28,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x5c,0x22,0x74,0x65,0x78,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x73,0x65,0x61,0x72,0x63,0x68,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x74,0x65,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x75,0x72,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x29,0x7c,0x7c,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x5c,0x22,0x74,0x72,0x75,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x65,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x4d,0x65,0x28,0x29,0x2c,0x63,0x3d,0x61,0x2e,0x66,0x6f,0x63,0x75,0x73,0x65,0x64,0x45,0x6c,0x65,0x6d,0x2c,0x64,0x3d,0x61,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x52,0x61,0x6e,0x67,0x65,0x3b,0x69,0x66,0x28,0x62,0x21,0x3d,0x3d,0x63,0x26,0x26,0x63,0x26,0x26,0x63,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x4c,0x65,0x28,0x63,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2c,0x63,0x29,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x4e,0x65,0x28,0x63,0x29,0x29,0x69,0x66,0x28,0x62,0x3d,0x64,0x2e,0x73,0x74,0x61,0x72,0x74,0x2c,0x61,0x3d,0x64,0x2e,0x65,0x6e,0x64,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x61,0x3d,0x62,0x29,0x2c,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x69,0x6e,0x20,0x63,0x29,0x63,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x3d,0x62,0x2c,0x63,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x69,0x6e,0x28,0x61,0x2c,0x63,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x61,0x3d,0x28,0x62,0x3d,0x63,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x7c,0x7c,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x26,0x26,0x62,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2c,0x61,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2c,0x66,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x69,0x6e,0x28,0x64,0x2e,0x73,0x74,0x61,0x72,0x74,0x2c,0x65,0x29,0x3b,0x64,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x64,0x2e,0x65,0x6e,0x64,0x3f,0x66,0x3a,0x4d,0x61,0x74,0x68,0x2e,0x6d,0x69,0x6e,0x28,0x64,0x2e,0x65,0x6e,0x64,0x2c,0x65,0x29,0x3b,0x21,0x61,0x2e,0x65,0x78,0x74,0x65,0x6e,0x64,0x26,0x26,0x66,0x3e,0x64,0x26,0x26,0x28,0x65,0x3d,0x64,0x2c,0x64,0x3d,0x66,0x2c,0x66,0x3d,0x65,0x29,0x3b,0x65,0x3d,0x4b,0x65,0x28,0x63,0x2c,0x66,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x4b,0x65,0x28,0x63,0x2c,0x5c,0x6e,0x64,0x29,0x3b,0x65,0x26,0x26,0x67,0x26,0x26,0x28,0x31,0x21,0x3d,0x3d,0x61,0x2e,0x72,0x61,0x6e,0x67,0x65,0x43,0x6f,0x75,0x6e,0x74,0x7c,0x7c,0x61,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x21,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x7c,0x7c,0x61,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x21,0x3d,0x3d,0x65,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x7c,0x7c,0x61,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x21,0x3d,0x3d,0x67,0x2e,0x6e,0x6f,0x64,0x65,0x7c,0x7c,0x61,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x21,0x3d,0x3d,0x67,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x26,0x26,0x28,0x62,0x3d,0x62,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x61,0x6e,0x67,0x65,0x28,0x29,0x2c,0x62,0x2e,0x73,0x65,0x74,0x53,0x74,0x61,0x72,0x74,0x28,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x2c,0x65,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x2c,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x6c,0x6c,0x52,0x61,0x6e,0x67,0x65,0x73,0x28,0x29,0x2c,0x66,0x3e,0x64,0x3f,0x28,0x61,0x2e,0x61,0x64,0x64,0x52,0x61,0x6e,0x67,0x65,0x28,0x62,0x29,0x2c,0x61,0x2e,0x65,0x78,0x74,0x65,0x6e,0x64,0x28,0x67,0x2e,0x6e,0x6f,0x64,0x65,0x2c,0x67,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x29,0x3a,0x28,0x62,0x2e,0x73,0x65,0x74,0x45,0x6e,0x64,0x28,0x67,0x2e,0x6e,0x6f,0x64,0x65,0x2c,0x67,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x29,0x2c,0x61,0x2e,0x61,0x64,0x64,0x52,0x61,0x6e,0x67,0x65,0x28,0x62,0x29,0x29,0x29,0x7d,0x62,0x3d,0x5b,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x63,0x3b,0x61,0x3d,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x29,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x62,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x61,0x2c,0x6c,0x65,0x66,0x74,0x3a,0x61,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x65,0x66,0x74,0x2c,0x74,0x6f,0x70,0x3a,0x61,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x54,0x6f,0x70,0x7d,0x29,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x2e,0x66,0x6f,0x63,0x75,0x73,0x26,0x26,0x63,0x2e,0x66,0x6f,0x63,0x75,0x73,0x28,0x29,0x3b,0x66,0x6f,0x72,0x28,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x61,0x3d,0x62,0x5b,0x63,0x5d,0x2c,0x61,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x65,0x66,0x74,0x3d,0x61,0x2e,0x6c,0x65,0x66,0x74,0x2c,0x61,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2e,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x54,0x6f,0x70,0x3d,0x61,0x2e,0x74,0x6f,0x70,0x7d,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x50,0x65,0x3d,0x69,0x61,0x26,0x26,0x5c,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x5c,0x22,0x69,0x6e,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x31,0x31,0x3e,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x2c,0x51,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x52,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x53,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x54,0x65,0x3d,0x21,0x31,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x65,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2e,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3d,0x3d,0x3d,0x63,0x3f,0x63,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3a,0x39,0x3d,0x3d,0x3d,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x63,0x3a,0x63,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3b,0x54,0x65,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x51,0x65,0x7c,0x7c,0x51,0x65,0x21,0x3d,0x3d,0x58,0x61,0x28,0x64,0x29,0x7c,0x7c,0x28,0x64,0x3d,0x51,0x65,0x2c,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x69,0x6e,0x20,0x64,0x26,0x26,0x4e,0x65,0x28,0x64,0x29,0x3f,0x64,0x3d,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x64,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x2c,0x65,0x6e,0x64,0x3a,0x64,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x7d,0x3a,0x28,0x64,0x3d,0x28,0x64,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x26,0x26,0x64,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x29,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x2c,0x64,0x3d,0x7b,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x3a,0x64,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x2c,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x3a,0x64,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x2c,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x3a,0x64,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x2c,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x3a,0x64,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x7d,0x29,0x2c,0x53,0x65,0x26,0x26,0x49,0x65,0x28,0x53,0x65,0x2c,0x64,0x29,0x7c,0x7c,0x28,0x53,0x65,0x3d,0x64,0x2c,0x64,0x3d,0x6f,0x65,0x28,0x52,0x65,0x2c,0x5c,0x22,0x6f,0x6e,0x53,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x29,0x2c,0x30,0x3c,0x64,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x62,0x3d,0x6e,0x65,0x77,0x20,0x74,0x64,0x28,0x5c,0x22,0x6f,0x6e,0x53,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x62,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x64,0x7d,0x29,0x2c,0x62,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x51,0x65,0x29,0x29,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x7b,0x7d,0x3b,0x63,0x5b,0x61,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x5d,0x3d,0x62,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3b,0x63,0x5b,0x5c,0x22,0x57,0x65,0x62,0x6b,0x69,0x74,0x5c,0x22,0x2b,0x61,0x5d,0x3d,0x5c,0x22,0x77,0x65,0x62,0x6b,0x69,0x74,0x5c,0x22,0x2b,0x62,0x3b,0x63,0x5b,0x5c,0x22,0x4d,0x6f,0x7a,0x5c,0x22,0x2b,0x61,0x5d,0x3d,0x5c,0x22,0x6d,0x6f,0x7a,0x5c,0x22,0x2b,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x7d,0x76,0x61,0x72,0x20,0x57,0x65,0x3d,0x7b,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x3a,0x56,0x65,0x28,0x5c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x29,0x2c,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x69,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x56,0x65,0x28,0x5c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x49,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x29,0x2c,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x3a,0x56,0x65,0x28,0x5c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x29,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x3a,0x56,0x65,0x28,0x5c,0x22,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x29,0x7d,0x2c,0x58,0x65,0x3d,0x7b,0x7d,0x2c,0x59,0x65,0x3d,0x7b,0x7d,0x3b,0x5c,0x6e,0x69,0x61,0x26,0x26,0x28,0x59,0x65,0x3d,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x5c,0x22,0x64,0x69,0x76,0x5c,0x22,0x29,0x2e,0x73,0x74,0x79,0x6c,0x65,0x2c,0x5c,0x22,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x45,0x76,0x65,0x6e,0x74,0x5c,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x7c,0x7c,0x28,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x57,0x65,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x57,0x65,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x69,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x57,0x65,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x2e,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x29,0x2c,0x5c,0x22,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x76,0x65,0x6e,0x74,0x5c,0x22,0x69,0x6e,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x7c,0x7c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x57,0x65,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x65,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x58,0x65,0x5b,0x61,0x5d,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x65,0x5b,0x61,0x5d,0x3b,0x69,0x66,0x28,0x21,0x57,0x65,0x5b,0x61,0x5d,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x57,0x65,0x5b,0x61,0x5d,0x2c,0x63,0x3b,0x66,0x6f,0x72,0x28,0x63,0x20,0x69,0x6e,0x20,0x62,0x29,0x69,0x66,0x28,0x62,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x63,0x29,0x26,0x26,0x63,0x20,0x69,0x6e,0x20,0x59,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x65,0x5b,0x61,0x5d,0x3d,0x62,0x5b,0x63,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x76,0x61,0x72,0x20,0x24,0x65,0x3d,0x5a,0x65,0x28,0x5c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x29,0x2c,0x61,0x66,0x3d,0x5a,0x65,0x28,0x5c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x69,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x29,0x2c,0x62,0x66,0x3d,0x5a,0x65,0x28,0x5c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x29,0x2c,0x63,0x66,0x3d,0x5a,0x65,0x28,0x5c,0x22,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x29,0x2c,0x64,0x66,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x2c,0x65,0x66,0x3d,0x5c,0x22,0x61,0x62,0x6f,0x72,0x74,0x20,0x61,0x75,0x78,0x43,0x6c,0x69,0x63,0x6b,0x20,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x63,0x61,0x6e,0x50,0x6c,0x61,0x79,0x20,0x63,0x61,0x6e,0x50,0x6c,0x61,0x79,0x54,0x68,0x72,0x6f,0x75,0x67,0x68,0x20,0x63,0x6c,0x69,0x63,0x6b,0x20,0x63,0x6c,0x6f,0x73,0x65,0x20,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x4d,0x65,0x6e,0x75,0x20,0x63,0x6f,0x70,0x79,0x20,0x63,0x75,0x74,0x20,0x64,0x72,0x61,0x67,0x20,0x64,0x72,0x61,0x67,0x45,0x6e,0x64,0x20,0x64,0x72,0x61,0x67,0x45,0x6e,0x74,0x65,0x72,0x20,0x64,0x72,0x61,0x67,0x45,0x78,0x69,0x74,0x20,0x64,0x72,0x61,0x67,0x4c,0x65,0x61,0x76,0x65,0x20,0x64,0x72,0x61,0x67,0x4f,0x76,0x65,0x72,0x20,0x64,0x72,0x61,0x67,0x53,0x74,0x61,0x72,0x74,0x20,0x64,0x72,0x6f,0x70,0x20,0x64,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x65,0x6d,0x70,0x74,0x69,0x65,0x64,0x20,0x65,0x6e,0x63,0x72,0x79,0x70,0x74,0x65,0x64,0x20,0x65,0x6e,0x64,0x65,0x64,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x67,0x6f,0x74,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x20,0x6b,0x65,0x79,0x44,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x50,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x55,0x70,0x20,0x6c,0x6f,0x61,0x64,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x44,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x53,0x74,0x61,0x72,0x74,0x20,0x6c,0x6f,0x73,0x74,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x20,0x6d,0x6f,0x75,0x73,0x65,0x44,0x6f,0x77,0x6e,0x20,0x6d,0x6f,0x75,0x73,0x65,0x4d,0x6f,0x76,0x65,0x20,0x6d,0x6f,0x75,0x73,0x65,0x4f,0x75,0x74,0x20,0x6d,0x6f,0x75,0x73,0x65,0x4f,0x76,0x65,0x72,0x20,0x6d,0x6f,0x75,0x73,0x65,0x55,0x70,0x20,0x70,0x61,0x73,0x74,0x65,0x20,0x70,0x61,0x75,0x73,0x65,0x20,0x70,0x6c,0x61,0x79,0x20,0x70,0x6c,0x61,0x79,0x69,0x6e,0x67,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x43,0x61,0x6e,0x63,0x65,0x6c,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x44,0x6f,0x77,0x6e,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4d,0x6f,0x76,0x65,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4f,0x75,0x74,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4f,0x76,0x65,0x72,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x55,0x70,0x20,0x70,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x20,0x72,0x61,0x74,0x65,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x72,0x65,0x73,0x65,0x74,0x20,0x72,0x65,0x73,0x69,0x7a,0x65,0x20,0x73,0x65,0x65,0x6b,0x65,0x64,0x20,0x73,0x65,0x65,0x6b,0x69,0x6e,0x67,0x20,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x20,0x73,0x75,0x62,0x6d,0x69,0x74,0x20,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x20,0x74,0x69,0x6d,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x20,0x74,0x6f,0x75,0x63,0x68,0x43,0x61,0x6e,0x63,0x65,0x6c,0x20,0x74,0x6f,0x75,0x63,0x68,0x45,0x6e,0x64,0x20,0x74,0x6f,0x75,0x63,0x68,0x53,0x74,0x61,0x72,0x74,0x20,0x76,0x6f,0x6c,0x75,0x6d,0x65,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x20,0x74,0x6f,0x67,0x67,0x6c,0x65,0x20,0x74,0x6f,0x75,0x63,0x68,0x4d,0x6f,0x76,0x65,0x20,0x77,0x61,0x69,0x74,0x69,0x6e,0x67,0x20,0x77,0x68,0x65,0x65,0x6c,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x66,0x28,0x61,0x2c,0x62,0x29,0x7b,0x64,0x66,0x2e,0x73,0x65,0x74,0x28,0x61,0x2c,0x62,0x29,0x3b,0x66,0x61,0x28,0x62,0x2c,0x5b,0x61,0x5d,0x29,0x7d,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x67,0x66,0x3d,0x30,0x3b,0x67,0x66,0x3c,0x65,0x66,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x67,0x66,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x66,0x3d,0x65,0x66,0x5b,0x67,0x66,0x5d,0x2c,0x6a,0x66,0x3d,0x68,0x66,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2c,0x6b,0x66,0x3d,0x68,0x66,0x5b,0x30,0x5d,0x2e,0x74,0x6f,0x55,0x70,0x70,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x2b,0x68,0x66,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x31,0x29,0x3b,0x66,0x66,0x28,0x6a,0x66,0x2c,0x5c,0x22,0x6f,0x6e,0x5c,0x22,0x2b,0x6b,0x66,0x29,0x7d,0x66,0x66,0x28,0x24,0x65,0x2c,0x5c,0x22,0x6f,0x6e,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x29,0x3b,0x66,0x66,0x28,0x61,0x66,0x2c,0x5c,0x22,0x6f,0x6e,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x49,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x29,0x3b,0x66,0x66,0x28,0x62,0x66,0x2c,0x5c,0x22,0x6f,0x6e,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x29,0x3b,0x66,0x66,0x28,0x5c,0x22,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x2c,0x5c,0x22,0x6f,0x6e,0x44,0x6f,0x75,0x62,0x6c,0x65,0x43,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x29,0x3b,0x66,0x66,0x28,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x6f,0x6e,0x46,0x6f,0x63,0x75,0x73,0x5c,0x22,0x29,0x3b,0x66,0x66,0x28,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x6f,0x6e,0x42,0x6c,0x75,0x72,0x5c,0x22,0x29,0x3b,0x66,0x66,0x28,0x63,0x66,0x2c,0x5c,0x22,0x6f,0x6e,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x29,0x3b,0x68,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x45,0x6e,0x74,0x65,0x72,0x5c,0x22,0x2c,0x5b,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x5c,0x22,0x5d,0x29,0x3b,0x68,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4c,0x65,0x61,0x76,0x65,0x5c,0x22,0x2c,0x5b,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x5c,0x22,0x5d,0x29,0x3b,0x68,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x45,0x6e,0x74,0x65,0x72,0x5c,0x22,0x2c,0x5b,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x5d,0x29,0x3b,0x5c,0x6e,0x68,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4c,0x65,0x61,0x76,0x65,0x5c,0x22,0x2c,0x5b,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x5d,0x29,0x3b,0x66,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x63,0x6c,0x69,0x63,0x6b,0x20,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x29,0x3b,0x66,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x53,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x20,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x20,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x20,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x20,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x29,0x3b,0x66,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x42,0x65,0x66,0x6f,0x72,0x65,0x49,0x6e,0x70,0x75,0x74,0x5c,0x22,0x2c,0x5b,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x2c,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x2c,0x5c,0x22,0x74,0x65,0x78,0x74,0x49,0x6e,0x70,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x70,0x61,0x73,0x74,0x65,0x5c,0x22,0x5d,0x29,0x3b,0x66,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x29,0x3b,0x66,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x29,0x3b,0x5c,0x6e,0x66,0x61,0x28,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x55,0x70,0x64,0x61,0x74,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x20,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x20,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x20,0x6b,0x65,0x79,0x75,0x70,0x20,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x66,0x3d,0x5c,0x22,0x61,0x62,0x6f,0x72,0x74,0x20,0x63,0x61,0x6e,0x70,0x6c,0x61,0x79,0x20,0x63,0x61,0x6e,0x70,0x6c,0x61,0x79,0x74,0x68,0x72,0x6f,0x75,0x67,0x68,0x20,0x64,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x65,0x6d,0x70,0x74,0x69,0x65,0x64,0x20,0x65,0x6e,0x63,0x72,0x79,0x70,0x74,0x65,0x64,0x20,0x65,0x6e,0x64,0x65,0x64,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x64,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x6d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x20,0x6c,0x6f,0x61,0x64,0x73,0x74,0x61,0x72,0x74,0x20,0x70,0x61,0x75,0x73,0x65,0x20,0x70,0x6c,0x61,0x79,0x20,0x70,0x6c,0x61,0x79,0x69,0x6e,0x67,0x20,0x70,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x20,0x72,0x61,0x74,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x72,0x65,0x73,0x69,0x7a,0x65,0x20,0x73,0x65,0x65,0x6b,0x65,0x64,0x20,0x73,0x65,0x65,0x6b,0x69,0x6e,0x67,0x20,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x20,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x20,0x74,0x69,0x6d,0x65,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x76,0x6f,0x6c,0x75,0x6d,0x65,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x77,0x61,0x69,0x74,0x69,0x6e,0x67,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x2c,0x6d,0x66,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x28,0x5c,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x20,0x63,0x6c,0x6f,0x73,0x65,0x20,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x20,0x6c,0x6f,0x61,0x64,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x20,0x74,0x6f,0x67,0x67,0x6c,0x65,0x5c,0x22,0x2e,0x73,0x70,0x6c,0x69,0x74,0x28,0x5c,0x22,0x20,0x5c,0x22,0x29,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x6c,0x66,0x29,0x29,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x66,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x75,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x2d,0x65,0x76,0x65,0x6e,0x74,0x5c,0x22,0x3b,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x63,0x3b,0x55,0x62,0x28,0x64,0x2c,0x62,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x61,0x29,0x3b,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x62,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x62,0x26,0x34,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x5b,0x63,0x5d,0x2c,0x65,0x3d,0x64,0x2e,0x65,0x76,0x65,0x6e,0x74,0x3b,0x64,0x3d,0x64,0x2e,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3b,0x61,0x3a,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x69,0x66,0x28,0x62,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x67,0x3d,0x64,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x31,0x3b,0x30,0x3c,0x3d,0x67,0x3b,0x67,0x2d,0x2d,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x64,0x5b,0x67,0x5d,0x2c,0x6b,0x3d,0x68,0x2e,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x2c,0x6c,0x3d,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3b,0x68,0x3d,0x68,0x2e,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x3b,0x69,0x66,0x28,0x6b,0x21,0x3d,0x3d,0x66,0x26,0x26,0x65,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x28,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x6e,0x66,0x28,0x65,0x2c,0x68,0x2c,0x6c,0x29,0x3b,0x66,0x3d,0x6b,0x7d,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x67,0x3d,0x30,0x3b,0x67,0x3c,0x64,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x67,0x2b,0x2b,0x29,0x7b,0x68,0x3d,0x64,0x5b,0x67,0x5d,0x3b,0x6b,0x3d,0x68,0x2e,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x3b,0x6c,0x3d,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3b,0x68,0x3d,0x68,0x2e,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x3b,0x69,0x66,0x28,0x6b,0x21,0x3d,0x3d,0x66,0x26,0x26,0x65,0x2e,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x28,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x6e,0x66,0x28,0x65,0x2c,0x68,0x2c,0x6c,0x29,0x3b,0x66,0x3d,0x6b,0x7d,0x7d,0x7d,0x69,0x66,0x28,0x51,0x62,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x61,0x3d,0x52,0x62,0x2c,0x51,0x62,0x3d,0x21,0x31,0x2c,0x52,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x3b,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x5b,0x6f,0x66,0x5d,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x3d,0x62,0x5b,0x6f,0x66,0x5d,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2b,0x5c,0x22,0x5f,0x5f,0x62,0x75,0x62,0x62,0x6c,0x65,0x5c,0x22,0x3b,0x63,0x2e,0x68,0x61,0x73,0x28,0x64,0x29,0x7c,0x7c,0x28,0x70,0x66,0x28,0x62,0x2c,0x61,0x2c,0x32,0x2c,0x21,0x31,0x29,0x2c,0x63,0x2e,0x61,0x64,0x64,0x28,0x64,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x66,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x30,0x3b,0x62,0x26,0x26,0x28,0x64,0x7c,0x3d,0x34,0x29,0x3b,0x70,0x66,0x28,0x63,0x2c,0x61,0x2c,0x64,0x2c,0x62,0x29,0x7d,0x76,0x61,0x72,0x20,0x72,0x66,0x3d,0x5c,0x22,0x5f,0x72,0x65,0x61,0x63,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x69,0x6e,0x67,0x5c,0x22,0x2b,0x4d,0x61,0x74,0x68,0x2e,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x28,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x36,0x29,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x32,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x66,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x21,0x61,0x5b,0x72,0x66,0x5d,0x29,0x7b,0x61,0x5b,0x72,0x66,0x5d,0x3d,0x21,0x30,0x3b,0x64,0x61,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x62,0x29,0x7b,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x6d,0x66,0x2e,0x68,0x61,0x73,0x28,0x62,0x29,0x7c,0x7c,0x71,0x66,0x28,0x62,0x2c,0x21,0x31,0x2c,0x61,0x29,0x2c,0x71,0x66,0x28,0x62,0x2c,0x21,0x30,0x2c,0x61,0x29,0x29,0x7d,0x29,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x39,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x61,0x3a,0x61,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x62,0x5b,0x72,0x66,0x5d,0x7c,0x7c,0x28,0x62,0x5b,0x72,0x66,0x5d,0x3d,0x21,0x30,0x2c,0x71,0x66,0x28,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x2c,0x21,0x31,0x2c,0x62,0x29,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x66,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6a,0x64,0x28,0x62,0x29,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x65,0x3d,0x65,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x65,0x3d,0x67,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x65,0x3d,0x66,0x64,0x7d,0x63,0x3d,0x65,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x63,0x2c,0x61,0x29,0x3b,0x65,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x21,0x4c,0x62,0x7c,0x7c,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x26,0x26,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x26,0x26,0x5c,0x22,0x77,0x68,0x65,0x65,0x6c,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x7c,0x7c,0x28,0x65,0x3d,0x21,0x30,0x29,0x3b,0x64,0x3f,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x65,0x3f,0x61,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x62,0x2c,0x63,0x2c,0x7b,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x3a,0x21,0x30,0x2c,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x3a,0x65,0x7d,0x29,0x3a,0x61,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x62,0x2c,0x63,0x2c,0x21,0x30,0x29,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x65,0x3f,0x61,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x62,0x2c,0x63,0x2c,0x7b,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x3a,0x65,0x7d,0x29,0x3a,0x61,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x62,0x2c,0x63,0x2c,0x21,0x31,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x64,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x64,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x26,0x31,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x26,0x32,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x61,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x64,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x67,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x69,0x66,0x28,0x68,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x38,0x3d,0x3d,0x3d,0x68,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x68,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3d,0x3d,0x3d,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x69,0x66,0x28,0x34,0x3d,0x3d,0x3d,0x67,0x29,0x66,0x6f,0x72,0x28,0x67,0x3d,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x67,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x6b,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x6b,0x29,0x69,0x66,0x28,0x6b,0x3d,0x67,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2c,0x6b,0x3d,0x3d,0x3d,0x65,0x7c,0x7c,0x38,0x3d,0x3d,0x3d,0x6b,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x6b,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3d,0x3d,0x3d,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x67,0x3d,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x3b,0x29,0x7b,0x67,0x3d,0x57,0x63,0x28,0x68,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6b,0x3d,0x67,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x6b,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x6b,0x29,0x7b,0x64,0x3d,0x66,0x3d,0x67,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x20,0x61,0x7d,0x68,0x3d,0x68,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x7d,0x64,0x3d,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x4a,0x62,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x66,0x2c,0x65,0x3d,0x78,0x62,0x28,0x63,0x29,0x2c,0x67,0x3d,0x5b,0x5d,0x3b,0x5c,0x6e,0x61,0x3a,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x64,0x66,0x2e,0x67,0x65,0x74,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x74,0x64,0x2c,0x6e,0x3d,0x61,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5c,0x22,0x3a,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x6f,0x64,0x28,0x63,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3a,0x6b,0x3d,0x52,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x5c,0x22,0x3a,0x6e,0x3d,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x5c,0x22,0x3b,0x6b,0x3d,0x46,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x6e,0x3d,0x5c,0x22,0x62,0x6c,0x75,0x72,0x5c,0x22,0x3b,0x6b,0x3d,0x46,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x62,0x6c,0x75,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x61,0x66,0x74,0x65,0x72,0x62,0x6c,0x75,0x72,0x5c,0x22,0x3a,0x6b,0x3d,0x46,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x69,0x66,0x28,0x32,0x3d,0x3d,0x3d,0x63,0x2e,0x62,0x75,0x74,0x74,0x6f,0x6e,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x61,0x75,0x78,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x62,0x6c,0x63,0x6c,0x69,0x63,0x6b,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x5c,0x22,0x3a,0x6b,0x3d,0x42,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x78,0x69,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x6c,0x65,0x61,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x6f,0x70,0x5c,0x22,0x3a,0x6b,0x3d,0x5c,0x6e,0x44,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x75,0x63,0x68,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x3a,0x6b,0x3d,0x56,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x24,0x65,0x3a,0x63,0x61,0x73,0x65,0x20,0x61,0x66,0x3a,0x63,0x61,0x73,0x65,0x20,0x62,0x66,0x3a,0x6b,0x3d,0x48,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x63,0x66,0x3a,0x6b,0x3d,0x58,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x3a,0x6b,0x3d,0x76,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x77,0x68,0x65,0x65,0x6c,0x5c,0x22,0x3a,0x6b,0x3d,0x5a,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x70,0x79,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x61,0x73,0x74,0x65,0x5c,0x22,0x3a,0x6b,0x3d,0x4a,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x67,0x6f,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6c,0x6f,0x73,0x74,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6d,0x6f,0x76,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x75,0x70,0x5c,0x22,0x3a,0x6b,0x3d,0x54,0x64,0x7d,0x76,0x61,0x72,0x20,0x74,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x62,0x26,0x34,0x29,0x2c,0x4a,0x3d,0x21,0x74,0x26,0x26,0x5c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2c,0x78,0x3d,0x74,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x3f,0x68,0x2b,0x5c,0x22,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x3a,0x6e,0x75,0x6c,0x6c,0x3a,0x68,0x3b,0x74,0x3d,0x5b,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x77,0x3d,0x64,0x2c,0x75,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5c,0x6e,0x77,0x3b,0x29,0x7b,0x75,0x3d,0x77,0x3b,0x76,0x61,0x72,0x20,0x46,0x3d,0x75,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x35,0x3d,0x3d,0x3d,0x75,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x46,0x26,0x26,0x28,0x75,0x3d,0x46,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x78,0x26,0x26,0x28,0x46,0x3d,0x4b,0x62,0x28,0x77,0x2c,0x78,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x46,0x26,0x26,0x74,0x2e,0x70,0x75,0x73,0x68,0x28,0x74,0x66,0x28,0x77,0x2c,0x46,0x2c,0x75,0x29,0x29,0x29,0x29,0x3b,0x69,0x66,0x28,0x4a,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x77,0x3d,0x77,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x30,0x3c,0x74,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x68,0x3d,0x6e,0x65,0x77,0x20,0x6b,0x28,0x68,0x2c,0x6e,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x65,0x29,0x2c,0x67,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x68,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x74,0x7d,0x29,0x29,0x7d,0x7d,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x26,0x37,0x29,0x29,0x7b,0x61,0x3a,0x7b,0x68,0x3d,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x3b,0x6b,0x3d,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x6f,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x3b,0x69,0x66,0x28,0x68,0x26,0x26,0x63,0x21,0x3d,0x3d,0x77,0x62,0x26,0x26,0x28,0x6e,0x3d,0x63,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x7c,0x7c,0x63,0x2e,0x66,0x72,0x6f,0x6d,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x26,0x26,0x28,0x57,0x63,0x28,0x6e,0x29,0x7c,0x7c,0x6e,0x5b,0x75,0x66,0x5d,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x69,0x66,0x28,0x6b,0x7c,0x7c,0x68,0x29,0x7b,0x68,0x3d,0x65,0x2e,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3d,0x3d,0x3d,0x65,0x3f,0x65,0x3a,0x28,0x68,0x3d,0x65,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x3f,0x68,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x68,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3b,0x69,0x66,0x28,0x6b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x3d,0x63,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x7c,0x7c,0x63,0x2e,0x74,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2c,0x6b,0x3d,0x64,0x2c,0x6e,0x3d,0x6e,0x3f,0x57,0x63,0x28,0x6e,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5c,0x6e,0x6e,0x26,0x26,0x28,0x4a,0x3d,0x56,0x62,0x28,0x6e,0x29,0x2c,0x6e,0x21,0x3d,0x3d,0x4a,0x7c,0x7c,0x35,0x21,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x26,0x26,0x36,0x21,0x3d,0x3d,0x6e,0x2e,0x74,0x61,0x67,0x29,0x29,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x3d,0x64,0x3b,0x69,0x66,0x28,0x6b,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x74,0x3d,0x42,0x64,0x3b,0x46,0x3d,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x4c,0x65,0x61,0x76,0x65,0x5c,0x22,0x3b,0x78,0x3d,0x5c,0x22,0x6f,0x6e,0x4d,0x6f,0x75,0x73,0x65,0x45,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3b,0x77,0x3d,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x5c,0x22,0x3b,0x69,0x66,0x28,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x6f,0x76,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x29,0x74,0x3d,0x54,0x64,0x2c,0x46,0x3d,0x5c,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x4c,0x65,0x61,0x76,0x65,0x5c,0x22,0x2c,0x78,0x3d,0x5c,0x22,0x6f,0x6e,0x50,0x6f,0x69,0x6e,0x74,0x65,0x72,0x45,0x6e,0x74,0x65,0x72,0x5c,0x22,0x2c,0x77,0x3d,0x5c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x5c,0x22,0x3b,0x4a,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6b,0x3f,0x68,0x3a,0x75,0x65,0x28,0x6b,0x29,0x3b,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x6e,0x3f,0x68,0x3a,0x75,0x65,0x28,0x6e,0x29,0x3b,0x68,0x3d,0x6e,0x65,0x77,0x20,0x74,0x28,0x46,0x2c,0x77,0x2b,0x5c,0x22,0x6c,0x65,0x61,0x76,0x65,0x5c,0x22,0x2c,0x6b,0x2c,0x63,0x2c,0x65,0x29,0x3b,0x68,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x4a,0x3b,0x68,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x75,0x3b,0x46,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x57,0x63,0x28,0x65,0x29,0x3d,0x3d,0x3d,0x64,0x26,0x26,0x28,0x74,0x3d,0x6e,0x65,0x77,0x20,0x74,0x28,0x78,0x2c,0x77,0x2b,0x5c,0x22,0x65,0x6e,0x74,0x65,0x72,0x5c,0x22,0x2c,0x6e,0x2c,0x63,0x2c,0x65,0x29,0x2c,0x74,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x75,0x2c,0x74,0x2e,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x3d,0x4a,0x2c,0x46,0x3d,0x74,0x29,0x3b,0x4a,0x3d,0x46,0x3b,0x69,0x66,0x28,0x6b,0x26,0x26,0x6e,0x29,0x62,0x3a,0x7b,0x74,0x3d,0x6b,0x3b,0x78,0x3d,0x6e,0x3b,0x77,0x3d,0x30,0x3b,0x66,0x6f,0x72,0x28,0x75,0x3d,0x74,0x3b,0x75,0x3b,0x75,0x3d,0x76,0x66,0x28,0x75,0x29,0x29,0x77,0x2b,0x2b,0x3b,0x75,0x3d,0x30,0x3b,0x66,0x6f,0x72,0x28,0x46,0x3d,0x78,0x3b,0x46,0x3b,0x46,0x3d,0x76,0x66,0x28,0x46,0x29,0x29,0x75,0x2b,0x2b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x77,0x2d,0x75,0x3b,0x29,0x74,0x3d,0x76,0x66,0x28,0x74,0x29,0x2c,0x77,0x2d,0x2d,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x75,0x2d,0x77,0x3b,0x29,0x78,0x3d,0x5c,0x6e,0x76,0x66,0x28,0x78,0x29,0x2c,0x75,0x2d,0x2d,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x77,0x2d,0x2d,0x3b,0x29,0x7b,0x69,0x66,0x28,0x74,0x3d,0x3d,0x3d,0x78,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x78,0x26,0x26,0x74,0x3d,0x3d,0x3d,0x78,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x3b,0x74,0x3d,0x76,0x66,0x28,0x74,0x29,0x3b,0x78,0x3d,0x76,0x66,0x28,0x78,0x29,0x7d,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x77,0x66,0x28,0x67,0x2c,0x68,0x2c,0x6b,0x2c,0x74,0x2c,0x21,0x31,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4a,0x26,0x26,0x77,0x66,0x28,0x67,0x2c,0x4a,0x2c,0x6e,0x2c,0x74,0x2c,0x21,0x30,0x29,0x7d,0x7d,0x7d,0x61,0x3a,0x7b,0x68,0x3d,0x64,0x3f,0x75,0x65,0x28,0x64,0x29,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3b,0x6b,0x3d,0x68,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x26,0x26,0x68,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x6b,0x7c,0x7c,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x6b,0x26,0x26,0x5c,0x22,0x66,0x69,0x6c,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x68,0x2e,0x74,0x79,0x70,0x65,0x29,0x76,0x61,0x72,0x20,0x6e,0x61,0x3d,0x76,0x65,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6d,0x65,0x28,0x68,0x29,0x29,0x69,0x66,0x28,0x77,0x65,0x29,0x6e,0x61,0x3d,0x46,0x65,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x6e,0x61,0x3d,0x44,0x65,0x3b,0x76,0x61,0x72,0x20,0x78,0x61,0x3d,0x43,0x65,0x7d,0x65,0x6c,0x73,0x65,0x28,0x6b,0x3d,0x68,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x29,0x26,0x26,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x6b,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x26,0x26,0x28,0x5c,0x22,0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,0x5c,0x22,0x3d,0x3d,0x3d,0x68,0x2e,0x74,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x72,0x61,0x64,0x69,0x6f,0x5c,0x22,0x3d,0x3d,0x3d,0x68,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x28,0x6e,0x61,0x3d,0x45,0x65,0x29,0x3b,0x69,0x66,0x28,0x6e,0x61,0x26,0x26,0x28,0x6e,0x61,0x3d,0x6e,0x61,0x28,0x61,0x2c,0x64,0x29,0x29,0x29,0x7b,0x6e,0x65,0x28,0x67,0x2c,0x6e,0x61,0x2c,0x63,0x2c,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x78,0x61,0x26,0x26,0x78,0x61,0x28,0x61,0x2c,0x68,0x2c,0x64,0x29,0x3b,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x78,0x61,0x3d,0x68,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x5c,0x6e,0x78,0x61,0x2e,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x64,0x26,0x26,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x68,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x63,0x62,0x28,0x68,0x2c,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x2c,0x68,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x7d,0x78,0x61,0x3d,0x64,0x3f,0x75,0x65,0x28,0x64,0x29,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x69,0x6e,0x5c,0x22,0x3a,0x69,0x66,0x28,0x6d,0x65,0x28,0x78,0x61,0x29,0x7c,0x7c,0x5c,0x22,0x74,0x72,0x75,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x78,0x61,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x29,0x51,0x65,0x3d,0x78,0x61,0x2c,0x52,0x65,0x3d,0x64,0x2c,0x53,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x63,0x75,0x73,0x6f,0x75,0x74,0x5c,0x22,0x3a,0x53,0x65,0x3d,0x52,0x65,0x3d,0x51,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x54,0x65,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x6d,0x65,0x6e,0x75,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6d,0x6f,0x75,0x73,0x65,0x75,0x70,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x72,0x61,0x67,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x54,0x65,0x3d,0x21,0x31,0x3b,0x55,0x65,0x28,0x67,0x2c,0x63,0x2c,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x5c,0x22,0x3a,0x69,0x66,0x28,0x50,0x65,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6b,0x65,0x79,0x75,0x70,0x5c,0x22,0x3a,0x55,0x65,0x28,0x67,0x2c,0x63,0x2c,0x65,0x29,0x7d,0x76,0x61,0x72,0x20,0x24,0x61,0x3b,0x69,0x66,0x28,0x61,0x65,0x29,0x62,0x3a,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x5c,0x22,0x3a,0x76,0x61,0x72,0x20,0x62,0x61,0x3d,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x5c,0x22,0x3a,0x62,0x61,0x3d,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x3b,0x5c,0x6e,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x75,0x70,0x64,0x61,0x74,0x65,0x5c,0x22,0x3a,0x62,0x61,0x3d,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x55,0x70,0x64,0x61,0x74,0x65,0x5c,0x22,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x7d,0x62,0x61,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x65,0x3f,0x67,0x65,0x28,0x61,0x2c,0x63,0x29,0x26,0x26,0x28,0x62,0x61,0x3d,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x29,0x3a,0x5c,0x22,0x6b,0x65,0x79,0x64,0x6f,0x77,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x32,0x32,0x39,0x3d,0x3d,0x3d,0x63,0x2e,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x26,0x26,0x28,0x62,0x61,0x3d,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x29,0x3b,0x62,0x61,0x26,0x26,0x28,0x64,0x65,0x26,0x26,0x5c,0x22,0x6b,0x6f,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x2e,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x26,0x26,0x28,0x69,0x65,0x7c,0x7c,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x61,0x3f,0x5c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x61,0x26,0x26,0x69,0x65,0x26,0x26,0x28,0x24,0x61,0x3d,0x6e,0x64,0x28,0x29,0x29,0x3a,0x28,0x6b,0x64,0x3d,0x65,0x2c,0x6c,0x64,0x3d,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x69,0x6e,0x20,0x6b,0x64,0x3f,0x6b,0x64,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3a,0x6b,0x64,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x69,0x65,0x3d,0x21,0x30,0x29,0x29,0x2c,0x78,0x61,0x3d,0x6f,0x65,0x28,0x64,0x2c,0x62,0x61,0x29,0x2c,0x30,0x3c,0x78,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x62,0x61,0x3d,0x6e,0x65,0x77,0x20,0x4c,0x64,0x28,0x62,0x61,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x65,0x29,0x2c,0x67,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x62,0x61,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x78,0x61,0x7d,0x29,0x2c,0x24,0x61,0x3f,0x62,0x61,0x2e,0x64,0x61,0x74,0x61,0x3d,0x24,0x61,0x3a,0x28,0x24,0x61,0x3d,0x68,0x65,0x28,0x63,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x24,0x61,0x26,0x26,0x28,0x62,0x61,0x2e,0x64,0x61,0x74,0x61,0x3d,0x24,0x61,0x29,0x29,0x29,0x29,0x3b,0x69,0x66,0x28,0x24,0x61,0x3d,0x63,0x65,0x3f,0x6a,0x65,0x28,0x61,0x2c,0x63,0x29,0x3a,0x6b,0x65,0x28,0x61,0x2c,0x63,0x29,0x29,0x64,0x3d,0x6f,0x65,0x28,0x64,0x2c,0x5c,0x22,0x6f,0x6e,0x42,0x65,0x66,0x6f,0x72,0x65,0x49,0x6e,0x70,0x75,0x74,0x5c,0x22,0x29,0x2c,0x5c,0x6e,0x30,0x3c,0x64,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x28,0x65,0x3d,0x6e,0x65,0x77,0x20,0x4c,0x64,0x28,0x5c,0x22,0x6f,0x6e,0x42,0x65,0x66,0x6f,0x72,0x65,0x49,0x6e,0x70,0x75,0x74,0x5c,0x22,0x2c,0x5c,0x22,0x62,0x65,0x66,0x6f,0x72,0x65,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x65,0x29,0x2c,0x67,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x65,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x64,0x7d,0x29,0x2c,0x65,0x2e,0x64,0x61,0x74,0x61,0x3d,0x24,0x61,0x29,0x7d,0x73,0x65,0x28,0x67,0x2c,0x62,0x29,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x66,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x3a,0x61,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x3a,0x62,0x2c,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x3a,0x63,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2b,0x5c,0x22,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x5c,0x22,0x2c,0x64,0x3d,0x5b,0x5d,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2c,0x66,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x35,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x28,0x65,0x3d,0x66,0x2c,0x66,0x3d,0x4b,0x62,0x28,0x61,0x2c,0x63,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x66,0x26,0x26,0x64,0x2e,0x75,0x6e,0x73,0x68,0x69,0x66,0x74,0x28,0x74,0x66,0x28,0x61,0x2c,0x66,0x2c,0x65,0x29,0x29,0x2c,0x66,0x3d,0x4b,0x62,0x28,0x61,0x2c,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x66,0x26,0x26,0x64,0x2e,0x70,0x75,0x73,0x68,0x28,0x74,0x66,0x28,0x61,0x2c,0x66,0x2c,0x65,0x29,0x29,0x29,0x3b,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x66,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x6f,0x20,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x61,0x26,0x26,0x35,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3f,0x61,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x66,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x66,0x3d,0x62,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x4e,0x61,0x6d,0x65,0x2c,0x67,0x3d,0x5b,0x5d,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x63,0x21,0x3d,0x3d,0x64,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x63,0x2c,0x6b,0x3d,0x68,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x6c,0x3d,0x68,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x6b,0x3d,0x3d,0x3d,0x64,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x35,0x3d,0x3d,0x3d,0x68,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x68,0x3d,0x6c,0x2c,0x65,0x3f,0x28,0x6b,0x3d,0x4b,0x62,0x28,0x63,0x2c,0x66,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x26,0x26,0x67,0x2e,0x75,0x6e,0x73,0x68,0x69,0x66,0x74,0x28,0x74,0x66,0x28,0x63,0x2c,0x6b,0x2c,0x68,0x29,0x29,0x29,0x3a,0x65,0x7c,0x7c,0x28,0x6b,0x3d,0x4b,0x62,0x28,0x63,0x2c,0x66,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x26,0x26,0x67,0x2e,0x70,0x75,0x73,0x68,0x28,0x74,0x66,0x28,0x63,0x2c,0x6b,0x2c,0x68,0x29,0x29,0x29,0x29,0x3b,0x63,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x30,0x21,0x3d,0x3d,0x67,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x7b,0x65,0x76,0x65,0x6e,0x74,0x3a,0x62,0x2c,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x3a,0x67,0x7d,0x29,0x7d,0x76,0x61,0x72,0x20,0x78,0x66,0x3d,0x2f,0x5c,0x5c,0x72,0x5c,0x5c,0x6e,0x3f,0x2f,0x67,0x2c,0x79,0x66,0x3d,0x2f,0x5c,0x5c,0x75,0x30,0x30,0x30,0x30,0x7c,0x5c,0x5c,0x75,0x46,0x46,0x46,0x44,0x2f,0x67,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x66,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x3f,0x61,0x3a,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x29,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x78,0x66,0x2c,0x5c,0x22,0x5c,0x5c,0x6e,0x5c,0x22,0x29,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x79,0x66,0x2c,0x5c,0x22,0x5c,0x22,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x66,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x62,0x3d,0x7a,0x66,0x28,0x62,0x29,0x3b,0x69,0x66,0x28,0x7a,0x66,0x28,0x61,0x29,0x21,0x3d,0x3d,0x62,0x26,0x26,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x32,0x35,0x29,0x29,0x3b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x66,0x28,0x29,0x7b,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x43,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x44,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x66,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x6e,0x6f,0x73,0x63,0x72,0x69,0x70,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x46,0x66,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x47,0x66,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x48,0x66,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x3f,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x4a,0x66,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x71,0x75,0x65,0x75,0x65,0x4d,0x69,0x63,0x72,0x6f,0x74,0x61,0x73,0x6b,0x3f,0x71,0x75,0x65,0x75,0x65,0x4d,0x69,0x63,0x72,0x6f,0x74,0x61,0x73,0x6b,0x3a,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x48,0x66,0x3f,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x66,0x2e,0x72,0x65,0x73,0x6f,0x6c,0x76,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x61,0x29,0x2e,0x63,0x61,0x74,0x63,0x68,0x28,0x49,0x66,0x29,0x7d,0x3a,0x46,0x66,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x66,0x28,0x61,0x29,0x7b,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x61,0x3b,0x7d,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x66,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2c,0x64,0x3d,0x30,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x63,0x29,0x3b,0x69,0x66,0x28,0x65,0x26,0x26,0x38,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x69,0x66,0x28,0x63,0x3d,0x65,0x2e,0x64,0x61,0x74,0x61,0x2c,0x5c,0x22,0x2f,0x24,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x65,0x29,0x3b,0x62,0x64,0x28,0x62,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x64,0x2d,0x2d,0x7d,0x65,0x6c,0x73,0x65,0x5c,0x22,0x24,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x5c,0x22,0x24,0x3f,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x5c,0x22,0x24,0x21,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x7c,0x7c,0x64,0x2b,0x2b,0x3b,0x63,0x3d,0x65,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x63,0x29,0x3b,0x62,0x64,0x28,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x66,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x61,0x3b,0x61,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x62,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x69,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x62,0x29,0x7b,0x62,0x3d,0x61,0x2e,0x64,0x61,0x74,0x61,0x3b,0x69,0x66,0x28,0x5c,0x22,0x24,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x5c,0x22,0x24,0x21,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x5c,0x22,0x24,0x3f,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x69,0x66,0x28,0x5c,0x22,0x2f,0x24,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x66,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x62,0x3d,0x30,0x3b,0x61,0x3b,0x29,0x7b,0x69,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x64,0x61,0x74,0x61,0x3b,0x69,0x66,0x28,0x5c,0x22,0x24,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x7c,0x7c,0x5c,0x22,0x24,0x21,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x7c,0x7c,0x5c,0x22,0x24,0x3f,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x62,0x2d,0x2d,0x7d,0x65,0x6c,0x73,0x65,0x5c,0x22,0x2f,0x24,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x62,0x2b,0x2b,0x7d,0x61,0x3d,0x61,0x2e,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x4e,0x66,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x28,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x36,0x29,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x32,0x29,0x2c,0x4f,0x66,0x3d,0x5c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x46,0x69,0x62,0x65,0x72,0x24,0x5c,0x22,0x2b,0x4e,0x66,0x2c,0x50,0x66,0x3d,0x5c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x50,0x72,0x6f,0x70,0x73,0x24,0x5c,0x22,0x2b,0x4e,0x66,0x2c,0x75,0x66,0x3d,0x5c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x24,0x5c,0x22,0x2b,0x4e,0x66,0x2c,0x6f,0x66,0x3d,0x5c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x45,0x76,0x65,0x6e,0x74,0x73,0x24,0x5c,0x22,0x2b,0x4e,0x66,0x2c,0x51,0x66,0x3d,0x5c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x24,0x5c,0x22,0x2b,0x4e,0x66,0x2c,0x52,0x66,0x3d,0x5c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x73,0x24,0x5c,0x22,0x2b,0x4e,0x66,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x63,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x5b,0x4f,0x66,0x5d,0x3b,0x69,0x66,0x28,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x63,0x3b,0x29,0x7b,0x69,0x66,0x28,0x62,0x3d,0x63,0x5b,0x75,0x66,0x5d,0x7c,0x7c,0x63,0x5b,0x4f,0x66,0x5d,0x29,0x7b,0x63,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x66,0x6f,0x72,0x28,0x61,0x3d,0x4d,0x66,0x28,0x61,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x7b,0x69,0x66,0x28,0x63,0x3d,0x61,0x5b,0x4f,0x66,0x5d,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x3b,0x61,0x3d,0x4d,0x66,0x28,0x61,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x61,0x3d,0x63,0x3b,0x63,0x3d,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x62,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x5b,0x4f,0x66,0x5d,0x7c,0x7c,0x61,0x5b,0x75,0x66,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x61,0x7c,0x7c,0x35,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x36,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x31,0x33,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x33,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x65,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x33,0x29,0x29,0x3b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x62,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x5b,0x50,0x66,0x5d,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x53,0x66,0x3d,0x5b,0x5d,0x2c,0x54,0x66,0x3d,0x2d,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x66,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x61,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x28,0x61,0x29,0x7b,0x30,0x3e,0x54,0x66,0x7c,0x7c,0x28,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x53,0x66,0x5b,0x54,0x66,0x5d,0x2c,0x53,0x66,0x5b,0x54,0x66,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x54,0x66,0x2d,0x2d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x28,0x61,0x2c,0x62,0x29,0x7b,0x54,0x66,0x2b,0x2b,0x3b,0x53,0x66,0x5b,0x54,0x66,0x5d,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x62,0x7d,0x76,0x61,0x72,0x20,0x56,0x66,0x3d,0x7b,0x7d,0x2c,0x48,0x3d,0x55,0x66,0x28,0x56,0x66,0x29,0x2c,0x57,0x66,0x3d,0x55,0x66,0x28,0x21,0x31,0x29,0x2c,0x58,0x66,0x3d,0x56,0x66,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x66,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x3b,0x69,0x66,0x28,0x21,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x56,0x66,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x64,0x26,0x26,0x64,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x55,0x6e,0x6d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x7b,0x7d,0x2c,0x66,0x3b,0x66,0x6f,0x72,0x28,0x66,0x20,0x69,0x6e,0x20,0x63,0x29,0x65,0x5b,0x66,0x5d,0x3d,0x62,0x5b,0x66,0x5d,0x3b,0x64,0x26,0x26,0x28,0x61,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x61,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x55,0x6e,0x6d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x62,0x2c,0x61,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x66,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x66,0x28,0x29,0x7b,0x45,0x28,0x57,0x66,0x29,0x3b,0x45,0x28,0x48,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x56,0x66,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x38,0x29,0x29,0x3b,0x47,0x28,0x48,0x2c,0x62,0x29,0x3b,0x47,0x28,0x57,0x66,0x2c,0x63,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x62,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x2e,0x67,0x65,0x74,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x3b,0x64,0x3d,0x64,0x2e,0x67,0x65,0x74,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x28,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x65,0x20,0x69,0x6e,0x20,0x64,0x29,0x69,0x66,0x28,0x21,0x28,0x65,0x20,0x69,0x6e,0x20,0x62,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x30,0x38,0x2c,0x52,0x61,0x28,0x61,0x29,0x7c,0x7c,0x5c,0x22,0x55,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x5c,0x22,0x2c,0x65,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x41,0x28,0x7b,0x7d,0x2c,0x63,0x2c,0x64,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x67,0x28,0x61,0x29,0x7b,0x61,0x3d,0x28,0x61,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x26,0x26,0x61,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x65,0x72,0x67,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x7c,0x7c,0x56,0x66,0x3b,0x58,0x66,0x3d,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x47,0x28,0x48,0x2c,0x61,0x29,0x3b,0x47,0x28,0x57,0x66,0x2c,0x57,0x66,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x21,0x64,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x39,0x29,0x29,0x3b,0x63,0x3f,0x28,0x61,0x3d,0x62,0x67,0x28,0x61,0x2c,0x62,0x2c,0x58,0x66,0x29,0x2c,0x64,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x65,0x72,0x67,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x61,0x2c,0x45,0x28,0x57,0x66,0x29,0x2c,0x45,0x28,0x48,0x29,0x2c,0x47,0x28,0x48,0x2c,0x61,0x29,0x29,0x3a,0x45,0x28,0x57,0x66,0x29,0x3b,0x47,0x28,0x57,0x66,0x2c,0x63,0x29,0x7d,0x76,0x61,0x72,0x20,0x65,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x67,0x3d,0x21,0x31,0x2c,0x67,0x67,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x67,0x28,0x61,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x67,0x3f,0x65,0x67,0x3d,0x5b,0x61,0x5d,0x3a,0x65,0x67,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x67,0x28,0x61,0x29,0x7b,0x66,0x67,0x3d,0x21,0x30,0x3b,0x68,0x67,0x28,0x61,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x67,0x28,0x29,0x7b,0x69,0x66,0x28,0x21,0x67,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x67,0x29,0x7b,0x67,0x67,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x61,0x3d,0x30,0x2c,0x62,0x3d,0x43,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x65,0x67,0x3b,0x66,0x6f,0x72,0x28,0x43,0x3d,0x31,0x3b,0x61,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x61,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x5b,0x61,0x5d,0x3b,0x64,0x6f,0x20,0x64,0x3d,0x64,0x28,0x21,0x30,0x29,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x7d,0x65,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x67,0x3d,0x21,0x31,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x67,0x26,0x26,0x28,0x65,0x67,0x3d,0x65,0x67,0x2e,0x73,0x6c,0x69,0x63,0x65,0x28,0x61,0x2b,0x31,0x29,0x29,0x2c,0x61,0x63,0x28,0x66,0x63,0x2c,0x6a,0x67,0x29,0x2c,0x65,0x3b,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x43,0x3d,0x62,0x2c,0x67,0x67,0x3d,0x21,0x31,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x6b,0x67,0x3d,0x5b,0x5d,0x2c,0x6c,0x67,0x3d,0x30,0x2c,0x6d,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x67,0x3d,0x30,0x2c,0x6f,0x67,0x3d,0x5b,0x5d,0x2c,0x70,0x67,0x3d,0x30,0x2c,0x71,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x67,0x3d,0x31,0x2c,0x73,0x67,0x3d,0x5c,0x22,0x5c,0x22,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x67,0x28,0x61,0x2c,0x62,0x29,0x7b,0x6b,0x67,0x5b,0x6c,0x67,0x2b,0x2b,0x5d,0x3d,0x6e,0x67,0x3b,0x6b,0x67,0x5b,0x6c,0x67,0x2b,0x2b,0x5d,0x3d,0x6d,0x67,0x3b,0x6d,0x67,0x3d,0x61,0x3b,0x6e,0x67,0x3d,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x6f,0x67,0x5b,0x70,0x67,0x2b,0x2b,0x5d,0x3d,0x72,0x67,0x3b,0x6f,0x67,0x5b,0x70,0x67,0x2b,0x2b,0x5d,0x3d,0x73,0x67,0x3b,0x6f,0x67,0x5b,0x70,0x67,0x2b,0x2b,0x5d,0x3d,0x71,0x67,0x3b,0x71,0x67,0x3d,0x61,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x72,0x67,0x3b,0x61,0x3d,0x73,0x67,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x33,0x32,0x2d,0x6f,0x63,0x28,0x64,0x29,0x2d,0x31,0x3b,0x64,0x26,0x3d,0x7e,0x28,0x31,0x3c,0x3c,0x65,0x29,0x3b,0x63,0x2b,0x3d,0x31,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x33,0x32,0x2d,0x6f,0x63,0x28,0x62,0x29,0x2b,0x65,0x3b,0x69,0x66,0x28,0x33,0x30,0x3c,0x66,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x65,0x2d,0x65,0x25,0x35,0x3b,0x66,0x3d,0x28,0x64,0x26,0x28,0x31,0x3c,0x3c,0x67,0x29,0x2d,0x31,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x3b,0x64,0x3e,0x3e,0x3d,0x67,0x3b,0x65,0x2d,0x3d,0x67,0x3b,0x72,0x67,0x3d,0x31,0x3c,0x3c,0x33,0x32,0x2d,0x6f,0x63,0x28,0x62,0x29,0x2b,0x65,0x7c,0x63,0x3c,0x3c,0x65,0x7c,0x64,0x3b,0x73,0x67,0x3d,0x66,0x2b,0x61,0x7d,0x65,0x6c,0x73,0x65,0x20,0x72,0x67,0x3d,0x31,0x3c,0x3c,0x66,0x7c,0x63,0x3c,0x3c,0x65,0x7c,0x64,0x2c,0x73,0x67,0x3d,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x67,0x28,0x61,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x26,0x26,0x28,0x74,0x67,0x28,0x61,0x2c,0x31,0x29,0x2c,0x75,0x67,0x28,0x61,0x2c,0x31,0x2c,0x30,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x67,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x61,0x3d,0x3d,0x3d,0x6d,0x67,0x3b,0x29,0x6d,0x67,0x3d,0x6b,0x67,0x5b,0x2d,0x2d,0x6c,0x67,0x5d,0x2c,0x6b,0x67,0x5b,0x6c,0x67,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x67,0x3d,0x6b,0x67,0x5b,0x2d,0x2d,0x6c,0x67,0x5d,0x2c,0x6b,0x67,0x5b,0x6c,0x67,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x61,0x3d,0x3d,0x3d,0x71,0x67,0x3b,0x29,0x71,0x67,0x3d,0x6f,0x67,0x5b,0x2d,0x2d,0x70,0x67,0x5d,0x2c,0x6f,0x67,0x5b,0x70,0x67,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x67,0x3d,0x6f,0x67,0x5b,0x2d,0x2d,0x70,0x67,0x5d,0x2c,0x6f,0x67,0x5b,0x70,0x67,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x67,0x3d,0x6f,0x67,0x5b,0x2d,0x2d,0x70,0x67,0x5d,0x2c,0x6f,0x67,0x5b,0x70,0x67,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x78,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x79,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x49,0x3d,0x21,0x31,0x2c,0x7a,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x67,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x42,0x67,0x28,0x35,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x30,0x29,0x3b,0x63,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x5c,0x22,0x44,0x45,0x4c,0x45,0x54,0x45,0x44,0x5c,0x22,0x3b,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x62,0x3b,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x62,0x3d,0x61,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x3f,0x28,0x61,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x5b,0x63,0x5d,0x2c,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x29,0x3a,0x62,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x67,0x28,0x61,0x2c,0x62,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3b,0x62,0x3d,0x31,0x21,0x3d,0x3d,0x62,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x63,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x21,0x3d,0x3d,0x62,0x2e,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x2e,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x28,0x29,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x28,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x62,0x2c,0x78,0x67,0x3d,0x61,0x2c,0x79,0x67,0x3d,0x4c,0x66,0x28,0x62,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x2c,0x21,0x30,0x29,0x3a,0x21,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x5c,0x22,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x33,0x21,0x3d,0x3d,0x62,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x28,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x62,0x2c,0x78,0x67,0x3d,0x61,0x2c,0x79,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x30,0x29,0x3a,0x21,0x31,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x38,0x21,0x3d,0x3d,0x62,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x28,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x71,0x67,0x3f,0x7b,0x69,0x64,0x3a,0x72,0x67,0x2c,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x3a,0x73,0x67,0x7d,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x62,0x2c,0x74,0x72,0x65,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x63,0x2c,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3a,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x7d,0x2c,0x63,0x3d,0x42,0x67,0x28,0x31,0x38,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x30,0x29,0x2c,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x62,0x2c,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x63,0x2c,0x78,0x67,0x3d,0x61,0x2c,0x79,0x67,0x3d,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x30,0x29,0x3a,0x21,0x31,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x67,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x67,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x49,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x79,0x67,0x3b,0x69,0x66,0x28,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x3b,0x69,0x66,0x28,0x21,0x43,0x67,0x28,0x61,0x2c,0x62,0x29,0x29,0x7b,0x69,0x66,0x28,0x44,0x67,0x28,0x61,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x31,0x38,0x29,0x29,0x3b,0x62,0x3d,0x4c,0x66,0x28,0x63,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x78,0x67,0x3b,0x62,0x26,0x26,0x43,0x67,0x28,0x61,0x2c,0x62,0x29,0x3f,0x41,0x67,0x28,0x64,0x2c,0x63,0x29,0x3a,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x2d,0x34,0x30,0x39,0x37,0x7c,0x32,0x2c,0x49,0x3d,0x21,0x31,0x2c,0x78,0x67,0x3d,0x61,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x44,0x67,0x28,0x61,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x31,0x38,0x29,0x29,0x3b,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x2d,0x34,0x30,0x39,0x37,0x7c,0x32,0x3b,0x49,0x3d,0x21,0x31,0x3b,0x78,0x67,0x3d,0x61,0x7d,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x67,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x35,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x33,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x31,0x33,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x3b,0x29,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x78,0x67,0x3d,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x67,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x61,0x21,0x3d,0x3d,0x78,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x69,0x66,0x28,0x21,0x49,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x46,0x67,0x28,0x61,0x29,0x2c,0x49,0x3d,0x21,0x30,0x2c,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x62,0x3b,0x28,0x62,0x3d,0x33,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x26,0x26,0x21,0x28,0x62,0x3d,0x35,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x26,0x26,0x28,0x62,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x62,0x3d,0x5c,0x22,0x68,0x65,0x61,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x26,0x26,0x5c,0x22,0x62,0x6f,0x64,0x79,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x26,0x26,0x21,0x45,0x66,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x29,0x29,0x3b,0x69,0x66,0x28,0x62,0x26,0x26,0x28,0x62,0x3d,0x79,0x67,0x29,0x29,0x7b,0x69,0x66,0x28,0x44,0x67,0x28,0x61,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x48,0x67,0x28,0x29,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x31,0x38,0x29,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x62,0x3b,0x29,0x41,0x67,0x28,0x61,0x2c,0x62,0x29,0x2c,0x62,0x3d,0x4c,0x66,0x28,0x62,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7d,0x46,0x67,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x21,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x37,0x29,0x29,0x3b,0x61,0x3a,0x7b,0x61,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x66,0x6f,0x72,0x28,0x62,0x3d,0x30,0x3b,0x61,0x3b,0x29,0x7b,0x69,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x64,0x61,0x74,0x61,0x3b,0x69,0x66,0x28,0x5c,0x22,0x2f,0x24,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x62,0x29,0x7b,0x79,0x67,0x3d,0x4c,0x66,0x28,0x61,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x62,0x2d,0x2d,0x7d,0x65,0x6c,0x73,0x65,0x5c,0x22,0x24,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x5c,0x22,0x24,0x21,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x26,0x26,0x5c,0x22,0x24,0x3f,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x7c,0x7c,0x62,0x2b,0x2b,0x7d,0x61,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x79,0x67,0x3d,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x79,0x67,0x3d,0x78,0x67,0x3f,0x4c,0x66,0x28,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x67,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x61,0x3d,0x79,0x67,0x3b,0x61,0x3b,0x29,0x61,0x3d,0x4c,0x66,0x28,0x61,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x67,0x28,0x29,0x7b,0x79,0x67,0x3d,0x78,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x49,0x3d,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x67,0x28,0x61,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x7a,0x67,0x3f,0x7a,0x67,0x3d,0x5b,0x61,0x5d,0x3a,0x7a,0x67,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x7d,0x76,0x61,0x72,0x20,0x4b,0x67,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x3d,0x63,0x2e,0x72,0x65,0x66,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x7b,0x69,0x66,0x28,0x63,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x29,0x7b,0x63,0x3d,0x63,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3b,0x69,0x66,0x28,0x63,0x29,0x7b,0x69,0x66,0x28,0x31,0x21,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x30,0x39,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x69,0x66,0x28,0x21,0x64,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x34,0x37,0x2c,0x61,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x2c,0x66,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x66,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x72,0x65,0x66,0x26,0x26,0x62,0x2e,0x72,0x65,0x66,0x2e,0x5f,0x73,0x74,0x72,0x69,0x6e,0x67,0x52,0x65,0x66,0x3d,0x3d,0x3d,0x66,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x72,0x65,0x66,0x3b,0x62,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x65,0x2e,0x72,0x65,0x66,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x62,0x5b,0x66,0x5d,0x3a,0x62,0x5b,0x66,0x5d,0x3d,0x61,0x7d,0x3b,0x62,0x2e,0x5f,0x73,0x74,0x72,0x69,0x6e,0x67,0x52,0x65,0x66,0x3d,0x66,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x38,0x34,0x29,0x29,0x3b,0x69,0x66,0x28,0x21,0x63,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x39,0x30,0x2c,0x61,0x29,0x29,0x3b,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x67,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x62,0x29,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x2c,0x5c,0x22,0x5b,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x5d,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x3f,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x77,0x69,0x74,0x68,0x20,0x6b,0x65,0x79,0x73,0x20,0x7b,0x5c,0x22,0x2b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x62,0x29,0x2e,0x6a,0x6f,0x69,0x6e,0x28,0x5c,0x22,0x2c,0x20,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x7d,0x5c,0x22,0x3a,0x61,0x29,0x29,0x3b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x67,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x28,0x61,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x67,0x28,0x61,0x29,0x7b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x28,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x3f,0x28,0x62,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x5b,0x63,0x5d,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x29,0x3a,0x64,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x28,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x21,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x3b,0x29,0x62,0x28,0x63,0x2c,0x64,0x29,0x2c,0x64,0x3d,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x28,0x61,0x2c,0x62,0x29,0x7b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x61,0x70,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x6b,0x65,0x79,0x3f,0x61,0x2e,0x73,0x65,0x74,0x28,0x62,0x2e,0x6b,0x65,0x79,0x2c,0x62,0x29,0x3a,0x61,0x2e,0x73,0x65,0x74,0x28,0x62,0x2e,0x69,0x6e,0x64,0x65,0x78,0x2c,0x62,0x29,0x2c,0x62,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x3d,0x50,0x67,0x28,0x61,0x2c,0x62,0x29,0x3b,0x61,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x30,0x3b,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x28,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x62,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x64,0x3b,0x69,0x66,0x28,0x21,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x2c,0x63,0x3b,0x64,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x3d,0x64,0x2e,0x69,0x6e,0x64,0x65,0x78,0x2c,0x64,0x3c,0x63,0x3f,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x2c,0x63,0x29,0x3a,0x64,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x28,0x62,0x29,0x7b,0x61,0x26,0x26,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x36,0x21,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x51,0x67,0x28,0x63,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x64,0x29,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x62,0x3b,0x62,0x3d,0x65,0x28,0x62,0x2c,0x63,0x29,0x3b,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x63,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x66,0x3d,0x3d,0x3d,0x79,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x64,0x2c,0x63,0x2e,0x6b,0x65,0x79,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x66,0x7c,0x7c,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x66,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3d,0x3d,0x3d,0x48,0x61,0x26,0x26,0x4e,0x67,0x28,0x66,0x29,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x3d,0x65,0x28,0x62,0x2c,0x63,0x2e,0x70,0x72,0x6f,0x70,0x73,0x29,0x2c,0x64,0x2e,0x72,0x65,0x66,0x3d,0x4c,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x64,0x3b,0x64,0x3d,0x52,0x67,0x28,0x63,0x2e,0x74,0x79,0x70,0x65,0x2c,0x63,0x2e,0x6b,0x65,0x79,0x2c,0x63,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x64,0x29,0x3b,0x64,0x2e,0x72,0x65,0x66,0x3d,0x4c,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x34,0x21,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x5c,0x6e,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x21,0x3d,0x3d,0x63,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x7c,0x7c,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x21,0x3d,0x3d,0x63,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x53,0x67,0x28,0x63,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x64,0x29,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x62,0x3b,0x62,0x3d,0x65,0x28,0x62,0x2c,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x5b,0x5d,0x29,0x3b,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x66,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x7c,0x7c,0x37,0x21,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x54,0x67,0x28,0x63,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x64,0x2c,0x66,0x29,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x62,0x3b,0x62,0x3d,0x65,0x28,0x62,0x2c,0x63,0x29,0x3b,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x26,0x26,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x62,0x7c,0x7c,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x51,0x67,0x28,0x5c,0x22,0x5c,0x22,0x2b,0x62,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x62,0x3b,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x76,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x3d,0x52,0x67,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x62,0x2e,0x6b,0x65,0x79,0x2c,0x62,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x63,0x29,0x2c,0x5c,0x6e,0x63,0x2e,0x72,0x65,0x66,0x3d,0x4c,0x67,0x28,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x29,0x2c,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x63,0x3b,0x63,0x61,0x73,0x65,0x20,0x77,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x53,0x67,0x28,0x62,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x48,0x61,0x3a,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x71,0x28,0x61,0x2c,0x64,0x28,0x62,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x63,0x29,0x7d,0x69,0x66,0x28,0x65,0x62,0x28,0x62,0x29,0x7c,0x7c,0x4b,0x61,0x28,0x62,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x54,0x67,0x28,0x62,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x63,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x62,0x3b,0x4d,0x67,0x28,0x61,0x2c,0x62,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x62,0x2e,0x6b,0x65,0x79,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x26,0x26,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x63,0x7c,0x7c,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x68,0x28,0x61,0x2c,0x62,0x2c,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x2c,0x64,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x76,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x65,0x3f,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x77,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x65,0x3f,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x48,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x63,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x2c,0x72,0x28,0x61,0x2c,0x5c,0x6e,0x62,0x2c,0x65,0x28,0x63,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x64,0x29,0x7d,0x69,0x66,0x28,0x65,0x62,0x28,0x63,0x29,0x7c,0x7c,0x4b,0x61,0x28,0x63,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x6d,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x4d,0x67,0x28,0x61,0x2c,0x63,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x26,0x26,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x64,0x7c,0x7c,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x61,0x2e,0x67,0x65,0x74,0x28,0x63,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x68,0x28,0x62,0x2c,0x61,0x2c,0x5c,0x22,0x5c,0x22,0x2b,0x64,0x2c,0x65,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x64,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x76,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x61,0x2e,0x67,0x65,0x74,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x2e,0x6b,0x65,0x79,0x3f,0x63,0x3a,0x64,0x2e,0x6b,0x65,0x79,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x6b,0x28,0x62,0x2c,0x61,0x2c,0x64,0x2c,0x65,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x77,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x61,0x2e,0x67,0x65,0x74,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x2e,0x6b,0x65,0x79,0x3f,0x63,0x3a,0x64,0x2e,0x6b,0x65,0x79,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x28,0x62,0x2c,0x61,0x2c,0x64,0x2c,0x65,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x48,0x61,0x3a,0x76,0x61,0x72,0x20,0x66,0x3d,0x64,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x79,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x66,0x28,0x64,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x65,0x29,0x7d,0x69,0x66,0x28,0x65,0x62,0x28,0x64,0x29,0x7c,0x7c,0x4b,0x61,0x28,0x64,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x61,0x2e,0x67,0x65,0x74,0x28,0x63,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x6d,0x28,0x62,0x2c,0x61,0x2c,0x64,0x2c,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x4d,0x67,0x28,0x62,0x2c,0x64,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x28,0x65,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x75,0x3d,0x67,0x2c,0x77,0x3d,0x67,0x3d,0x30,0x2c,0x78,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x26,0x26,0x77,0x3c,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x77,0x2b,0x2b,0x29,0x7b,0x75,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3e,0x77,0x3f,0x28,0x78,0x3d,0x75,0x2c,0x75,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x78,0x3d,0x75,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x72,0x28,0x65,0x2c,0x75,0x2c,0x68,0x5b,0x77,0x5d,0x2c,0x6b,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x26,0x26,0x28,0x75,0x3d,0x78,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x61,0x26,0x26,0x75,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x62,0x28,0x65,0x2c,0x75,0x29,0x3b,0x67,0x3d,0x66,0x28,0x6e,0x2c,0x67,0x2c,0x77,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x3f,0x6c,0x3d,0x6e,0x3a,0x6d,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x3b,0x6d,0x3d,0x6e,0x3b,0x75,0x3d,0x78,0x7d,0x69,0x66,0x28,0x77,0x3d,0x3d,0x3d,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x28,0x65,0x2c,0x75,0x29,0x2c,0x49,0x26,0x26,0x74,0x67,0x28,0x65,0x2c,0x77,0x29,0x2c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x77,0x3c,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x77,0x2b,0x2b,0x29,0x75,0x3d,0x71,0x28,0x65,0x2c,0x68,0x5b,0x77,0x5d,0x2c,0x6b,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x26,0x26,0x28,0x67,0x3d,0x66,0x28,0x75,0x2c,0x67,0x2c,0x77,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x3f,0x6c,0x3d,0x75,0x3a,0x6d,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x75,0x2c,0x6d,0x3d,0x75,0x29,0x3b,0x49,0x26,0x26,0x74,0x67,0x28,0x65,0x2c,0x77,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x7d,0x66,0x6f,0x72,0x28,0x75,0x3d,0x64,0x28,0x65,0x2c,0x75,0x29,0x3b,0x77,0x3c,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x77,0x2b,0x2b,0x29,0x78,0x3d,0x79,0x28,0x75,0x2c,0x65,0x2c,0x77,0x2c,0x68,0x5b,0x77,0x5d,0x2c,0x6b,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x78,0x26,0x26,0x28,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x78,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x75,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x5c,0x6e,0x78,0x2e,0x6b,0x65,0x79,0x3f,0x77,0x3a,0x78,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x67,0x3d,0x66,0x28,0x78,0x2c,0x67,0x2c,0x77,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x3f,0x6c,0x3d,0x78,0x3a,0x6d,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x78,0x2c,0x6d,0x3d,0x78,0x29,0x3b,0x61,0x26,0x26,0x75,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x28,0x65,0x2c,0x61,0x29,0x7d,0x29,0x3b,0x49,0x26,0x26,0x74,0x67,0x28,0x65,0x2c,0x77,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x28,0x65,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x4b,0x61,0x28,0x68,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x35,0x30,0x29,0x29,0x3b,0x68,0x3d,0x6c,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x68,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x68,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x35,0x31,0x29,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x75,0x3d,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6d,0x3d,0x67,0x2c,0x77,0x3d,0x67,0x3d,0x30,0x2c,0x78,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x3d,0x68,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x26,0x26,0x21,0x6e,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x77,0x2b,0x2b,0x2c,0x6e,0x3d,0x68,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x7b,0x6d,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3e,0x77,0x3f,0x28,0x78,0x3d,0x6d,0x2c,0x6d,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x78,0x3d,0x6d,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x76,0x61,0x72,0x20,0x74,0x3d,0x72,0x28,0x65,0x2c,0x6d,0x2c,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6b,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x26,0x26,0x28,0x6d,0x3d,0x78,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x61,0x26,0x26,0x6d,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x62,0x28,0x65,0x2c,0x6d,0x29,0x3b,0x67,0x3d,0x66,0x28,0x74,0x2c,0x67,0x2c,0x77,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x3f,0x6c,0x3d,0x74,0x3a,0x75,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x74,0x3b,0x75,0x3d,0x74,0x3b,0x6d,0x3d,0x78,0x7d,0x69,0x66,0x28,0x6e,0x2e,0x64,0x6f,0x6e,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x28,0x65,0x2c,0x5c,0x6e,0x6d,0x29,0x2c,0x49,0x26,0x26,0x74,0x67,0x28,0x65,0x2c,0x77,0x29,0x2c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x21,0x6e,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x77,0x2b,0x2b,0x2c,0x6e,0x3d,0x68,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x6e,0x3d,0x71,0x28,0x65,0x2c,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6b,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x67,0x3d,0x66,0x28,0x6e,0x2c,0x67,0x2c,0x77,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x3f,0x6c,0x3d,0x6e,0x3a,0x75,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x2c,0x75,0x3d,0x6e,0x29,0x3b,0x49,0x26,0x26,0x74,0x67,0x28,0x65,0x2c,0x77,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x7d,0x66,0x6f,0x72,0x28,0x6d,0x3d,0x64,0x28,0x65,0x2c,0x6d,0x29,0x3b,0x21,0x6e,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x77,0x2b,0x2b,0x2c,0x6e,0x3d,0x68,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x6e,0x3d,0x79,0x28,0x6d,0x2c,0x65,0x2c,0x77,0x2c,0x6e,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6b,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x26,0x26,0x28,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x6d,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x2e,0x6b,0x65,0x79,0x3f,0x77,0x3a,0x6e,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x67,0x3d,0x66,0x28,0x6e,0x2c,0x67,0x2c,0x77,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x75,0x3f,0x6c,0x3d,0x6e,0x3a,0x75,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x2c,0x75,0x3d,0x6e,0x29,0x3b,0x61,0x26,0x26,0x6d,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x28,0x65,0x2c,0x61,0x29,0x7d,0x29,0x3b,0x49,0x26,0x26,0x74,0x67,0x28,0x65,0x2c,0x77,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x28,0x61,0x2c,0x64,0x2c,0x66,0x2c,0x68,0x29,0x7b,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x66,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x79,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x66,0x3d,0x66,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x66,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x76,0x61,0x3a,0x61,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6b,0x3d,0x5c,0x6e,0x66,0x2e,0x6b,0x65,0x79,0x2c,0x6c,0x3d,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6c,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x6b,0x29,0x7b,0x6b,0x3d,0x66,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x6b,0x3d,0x3d,0x3d,0x79,0x61,0x29,0x7b,0x69,0x66,0x28,0x37,0x3d,0x3d,0x3d,0x6c,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x28,0x61,0x2c,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x64,0x3d,0x65,0x28,0x6c,0x2c,0x66,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x61,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6c,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x6b,0x7c,0x7c,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x6b,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3d,0x3d,0x3d,0x48,0x61,0x26,0x26,0x4e,0x67,0x28,0x6b,0x29,0x3d,0x3d,0x3d,0x6c,0x2e,0x74,0x79,0x70,0x65,0x29,0x7b,0x63,0x28,0x61,0x2c,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x64,0x3d,0x65,0x28,0x6c,0x2c,0x66,0x2e,0x70,0x72,0x6f,0x70,0x73,0x29,0x3b,0x64,0x2e,0x72,0x65,0x66,0x3d,0x4c,0x67,0x28,0x61,0x2c,0x6c,0x2c,0x66,0x29,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x61,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x63,0x28,0x61,0x2c,0x6c,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x6c,0x73,0x65,0x20,0x62,0x28,0x61,0x2c,0x6c,0x29,0x3b,0x6c,0x3d,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x66,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x79,0x61,0x3f,0x28,0x64,0x3d,0x54,0x67,0x28,0x66,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x68,0x2c,0x66,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x61,0x3d,0x64,0x29,0x3a,0x28,0x68,0x3d,0x52,0x67,0x28,0x66,0x2e,0x74,0x79,0x70,0x65,0x2c,0x66,0x2e,0x6b,0x65,0x79,0x2c,0x66,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x68,0x29,0x2c,0x68,0x2e,0x72,0x65,0x66,0x3d,0x4c,0x67,0x28,0x61,0x2c,0x64,0x2c,0x66,0x29,0x2c,0x68,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x61,0x3d,0x68,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x67,0x28,0x61,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x77,0x61,0x3a,0x61,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x6c,0x3d,0x66,0x2e,0x6b,0x65,0x79,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5c,0x6e,0x64,0x3b,0x29,0x7b,0x69,0x66,0x28,0x64,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x6c,0x29,0x69,0x66,0x28,0x34,0x3d,0x3d,0x3d,0x64,0x2e,0x74,0x61,0x67,0x26,0x26,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3d,0x3d,0x3d,0x66,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x26,0x26,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x3d,0x3d,0x66,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x29,0x7b,0x63,0x28,0x61,0x2c,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x64,0x3d,0x65,0x28,0x64,0x2c,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7c,0x7c,0x5b,0x5d,0x29,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x61,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x63,0x28,0x61,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x6c,0x73,0x65,0x20,0x62,0x28,0x61,0x2c,0x64,0x29,0x3b,0x64,0x3d,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x64,0x3d,0x53,0x67,0x28,0x66,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x68,0x29,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x61,0x3d,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x67,0x28,0x61,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x48,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x3d,0x66,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x2c,0x4a,0x28,0x61,0x2c,0x64,0x2c,0x6c,0x28,0x66,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x2c,0x68,0x29,0x7d,0x69,0x66,0x28,0x65,0x62,0x28,0x66,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x28,0x61,0x2c,0x64,0x2c,0x66,0x2c,0x68,0x29,0x3b,0x69,0x66,0x28,0x4b,0x61,0x28,0x66,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x28,0x61,0x2c,0x64,0x2c,0x66,0x2c,0x68,0x29,0x3b,0x4d,0x67,0x28,0x61,0x2c,0x66,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x66,0x7c,0x7c,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x3f,0x28,0x66,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x66,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x36,0x3d,0x3d,0x3d,0x64,0x2e,0x74,0x61,0x67,0x3f,0x28,0x63,0x28,0x61,0x2c,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x2c,0x64,0x3d,0x65,0x28,0x64,0x2c,0x66,0x29,0x2c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x61,0x3d,0x64,0x29,0x3a,0x5c,0x6e,0x28,0x63,0x28,0x61,0x2c,0x64,0x29,0x2c,0x64,0x3d,0x51,0x67,0x28,0x66,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x68,0x29,0x2c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x61,0x3d,0x64,0x29,0x2c,0x67,0x28,0x61,0x29,0x29,0x3a,0x63,0x28,0x61,0x2c,0x64,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4a,0x7d,0x76,0x61,0x72,0x20,0x55,0x67,0x3d,0x4f,0x67,0x28,0x21,0x30,0x29,0x2c,0x56,0x67,0x3d,0x4f,0x67,0x28,0x21,0x31,0x29,0x2c,0x57,0x67,0x3d,0x55,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x58,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x59,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x5a,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x67,0x28,0x29,0x7b,0x5a,0x67,0x3d,0x59,0x67,0x3d,0x58,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x68,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x57,0x67,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x45,0x28,0x57,0x67,0x29,0x3b,0x61,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x28,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x62,0x29,0x21,0x3d,0x3d,0x62,0x3f,0x28,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x29,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x62,0x29,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x29,0x3b,0x69,0x66,0x28,0x61,0x3d,0x3d,0x3d,0x63,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x58,0x67,0x3d,0x61,0x3b,0x5a,0x67,0x3d,0x59,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x3d,0x61,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x62,0x29,0x26,0x26,0x28,0x64,0x68,0x3d,0x21,0x30,0x29,0x2c,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x68,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3b,0x69,0x66,0x28,0x5a,0x67,0x21,0x3d,0x3d,0x61,0x29,0x69,0x66,0x28,0x61,0x3d,0x7b,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x61,0x2c,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x62,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x59,0x67,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x58,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x30,0x38,0x29,0x29,0x3b,0x59,0x67,0x3d,0x61,0x3b,0x58,0x67,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x61,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x59,0x67,0x3d,0x59,0x67,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x76,0x61,0x72,0x20,0x66,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x68,0x28,0x61,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x68,0x3f,0x66,0x68,0x3d,0x5b,0x61,0x5d,0x3a,0x66,0x68,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x62,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x28,0x63,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x63,0x2c,0x67,0x68,0x28,0x62,0x29,0x29,0x3a,0x28,0x63,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x63,0x29,0x3b,0x62,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x63,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x68,0x28,0x61,0x2c,0x64,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x29,0x3b,0x63,0x3d,0x61,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x2c,0x63,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x29,0x2c,0x63,0x3d,0x61,0x2c,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x33,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x3f,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x6a,0x68,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x68,0x28,0x61,0x29,0x7b,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x68,0x61,0x72,0x65,0x64,0x3a,0x7b,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x7d,0x2c,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x61,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x61,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x73,0x68,0x61,0x72,0x65,0x64,0x3a,0x61,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2c,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3a,0x61,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x61,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x62,0x2c,0x74,0x61,0x67,0x3a,0x30,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x3d,0x64,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x4b,0x26,0x32,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x62,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x62,0x3a,0x28,0x62,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x62,0x29,0x3b,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x68,0x28,0x61,0x2c,0x63,0x29,0x7d,0x65,0x3d,0x64,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x3f,0x28,0x62,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x62,0x2c,0x67,0x68,0x28,0x64,0x29,0x29,0x3a,0x28,0x62,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x62,0x29,0x3b,0x64,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x69,0x68,0x28,0x61,0x2c,0x63,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x62,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x62,0x3d,0x62,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x63,0x26,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x29,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3b,0x64,0x26,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x63,0x7c,0x3d,0x64,0x3b,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x3b,0x43,0x63,0x28,0x61,0x2c,0x63,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x64,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x64,0x3d,0x64,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x63,0x3d,0x3d,0x3d,0x64,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x3d,0x63,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x63,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x63,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x74,0x61,0x67,0x3a,0x63,0x2e,0x74,0x61,0x67,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x63,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x63,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x3f,0x65,0x3d,0x66,0x3d,0x67,0x3a,0x66,0x3d,0x66,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x67,0x3b,0x63,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x3f,0x65,0x3d,0x66,0x3d,0x62,0x3a,0x66,0x3d,0x66,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x62,0x7d,0x65,0x6c,0x73,0x65,0x20,0x65,0x3d,0x66,0x3d,0x62,0x3b,0x63,0x3d,0x7b,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x64,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x65,0x2c,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x66,0x2c,0x73,0x68,0x61,0x72,0x65,0x64,0x3a,0x64,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2c,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3a,0x64,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x7d,0x3b,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x63,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x61,0x3d,0x63,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x63,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x62,0x3a,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x5c,0x6e,0x62,0x3b,0x63,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x6a,0x68,0x3d,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x67,0x3d,0x65,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x68,0x3d,0x65,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x65,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x68,0x2c,0x6c,0x3d,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x3f,0x66,0x3d,0x6c,0x3a,0x67,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x3b,0x67,0x3d,0x6b,0x3b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x26,0x26,0x28,0x6d,0x3d,0x6d,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x68,0x3d,0x6d,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x2c,0x68,0x21,0x3d,0x3d,0x67,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x68,0x3f,0x6d,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x6c,0x3a,0x68,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6c,0x2c,0x6d,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x6b,0x29,0x29,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x7b,0x76,0x61,0x72,0x20,0x71,0x3d,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3b,0x67,0x3d,0x30,0x3b,0x6d,0x3d,0x6c,0x3d,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x68,0x3d,0x66,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x68,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x79,0x3d,0x68,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3b,0x69,0x66,0x28,0x28,0x64,0x26,0x72,0x29,0x3d,0x3d,0x3d,0x72,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x26,0x26,0x28,0x6d,0x3d,0x6d,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x79,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x30,0x2c,0x74,0x61,0x67,0x3a,0x68,0x2e,0x74,0x61,0x67,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x68,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x68,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x5c,0x6e,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x3b,0x61,0x3a,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x61,0x2c,0x74,0x3d,0x68,0x3b,0x72,0x3d,0x62,0x3b,0x79,0x3d,0x63,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x74,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x6e,0x3d,0x74,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x29,0x7b,0x71,0x3d,0x6e,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x79,0x2c,0x71,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x71,0x3d,0x6e,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x6e,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x2d,0x36,0x35,0x35,0x33,0x37,0x7c,0x31,0x32,0x38,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x6e,0x3d,0x74,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3b,0x72,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x3f,0x6e,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x79,0x2c,0x71,0x2c,0x72,0x29,0x3a,0x6e,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x72,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x71,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x71,0x2c,0x72,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x6a,0x68,0x3d,0x21,0x30,0x7d,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x26,0x26,0x30,0x21,0x3d,0x3d,0x68,0x2e,0x6c,0x61,0x6e,0x65,0x26,0x26,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x34,0x2c,0x72,0x3d,0x65,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x72,0x3f,0x65,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3d,0x5b,0x68,0x5d,0x3a,0x72,0x2e,0x70,0x75,0x73,0x68,0x28,0x68,0x29,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x79,0x3d,0x7b,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x3a,0x79,0x2c,0x6c,0x61,0x6e,0x65,0x3a,0x72,0x2c,0x74,0x61,0x67,0x3a,0x68,0x2e,0x74,0x61,0x67,0x2c,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x68,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x68,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x3f,0x28,0x6c,0x3d,0x6d,0x3d,0x79,0x2c,0x6b,0x3d,0x71,0x29,0x3a,0x6d,0x3d,0x6d,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x79,0x2c,0x67,0x7c,0x3d,0x72,0x3b,0x5c,0x6e,0x68,0x3d,0x68,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x68,0x29,0x69,0x66,0x28,0x68,0x3d,0x65,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x68,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x65,0x6c,0x73,0x65,0x20,0x72,0x3d,0x68,0x2c,0x68,0x3d,0x72,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x72,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x72,0x2c,0x65,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x31,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x26,0x26,0x28,0x6b,0x3d,0x71,0x29,0x3b,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x6b,0x3b,0x65,0x2e,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x6c,0x3b,0x65,0x2e,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x6d,0x3b,0x62,0x3d,0x65,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x65,0x3d,0x62,0x3b,0x64,0x6f,0x20,0x67,0x7c,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x65,0x21,0x3d,0x3d,0x62,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x26,0x26,0x28,0x65,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x29,0x3b,0x72,0x68,0x7c,0x3d,0x67,0x3b,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x67,0x3b,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x71,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x3d,0x62,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3b,0x62,0x2e,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x66,0x6f,0x72,0x28,0x62,0x3d,0x30,0x3b,0x62,0x3c,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x62,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x5b,0x62,0x5d,0x2c,0x65,0x3d,0x64,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x64,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x3d,0x63,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x39,0x31,0x2c,0x65,0x29,0x29,0x3b,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x64,0x29,0x7d,0x7d,0x7d,0x76,0x61,0x72,0x20,0x74,0x68,0x3d,0x7b,0x7d,0x2c,0x75,0x68,0x3d,0x55,0x66,0x28,0x74,0x68,0x29,0x2c,0x76,0x68,0x3d,0x55,0x66,0x28,0x74,0x68,0x29,0x2c,0x77,0x68,0x3d,0x55,0x66,0x28,0x74,0x68,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x68,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x61,0x3d,0x3d,0x3d,0x74,0x68,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x37,0x34,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x47,0x28,0x77,0x68,0x2c,0x62,0x29,0x3b,0x47,0x28,0x76,0x68,0x2c,0x61,0x29,0x3b,0x47,0x28,0x75,0x68,0x2c,0x74,0x68,0x29,0x3b,0x61,0x3d,0x62,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x62,0x3d,0x28,0x62,0x3d,0x62,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x3f,0x62,0x2e,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x55,0x52,0x49,0x3a,0x6c,0x62,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x5c,0x22,0x5c,0x22,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x61,0x3d,0x38,0x3d,0x3d,0x3d,0x61,0x3f,0x62,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x62,0x2c,0x62,0x3d,0x61,0x2e,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x55,0x52,0x49,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x3d,0x61,0x2e,0x74,0x61,0x67,0x4e,0x61,0x6d,0x65,0x2c,0x62,0x3d,0x6c,0x62,0x28,0x62,0x2c,0x61,0x29,0x7d,0x45,0x28,0x75,0x68,0x29,0x3b,0x47,0x28,0x75,0x68,0x2c,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x68,0x28,0x29,0x7b,0x45,0x28,0x75,0x68,0x29,0x3b,0x45,0x28,0x76,0x68,0x29,0x3b,0x45,0x28,0x77,0x68,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x68,0x28,0x61,0x29,0x7b,0x78,0x68,0x28,0x77,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x78,0x68,0x28,0x75,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x6c,0x62,0x28,0x62,0x2c,0x61,0x2e,0x74,0x79,0x70,0x65,0x29,0x3b,0x62,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x47,0x28,0x76,0x68,0x2c,0x61,0x29,0x2c,0x47,0x28,0x75,0x68,0x2c,0x63,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x68,0x28,0x61,0x29,0x7b,0x76,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x45,0x28,0x75,0x68,0x29,0x2c,0x45,0x28,0x76,0x68,0x29,0x29,0x7d,0x76,0x61,0x72,0x20,0x4c,0x3d,0x55,0x66,0x28,0x30,0x29,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x68,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3b,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x3d,0x63,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x7c,0x7c,0x5c,0x22,0x24,0x3f,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x2e,0x64,0x61,0x74,0x61,0x7c,0x7c,0x5c,0x22,0x24,0x21,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x2e,0x64,0x61,0x74,0x61,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x39,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x72,0x65,0x76,0x65,0x61,0x6c,0x4f,0x72,0x64,0x65,0x72,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x62,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x62,0x3d,0x3d,0x3d,0x61,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x62,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x44,0x68,0x3d,0x5b,0x5d,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x68,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x61,0x3d,0x30,0x3b,0x61,0x3c,0x44,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x61,0x2b,0x2b,0x29,0x44,0x68,0x5b,0x61,0x5d,0x2e,0x5f,0x77,0x6f,0x72,0x6b,0x49,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x50,0x72,0x69,0x6d,0x61,0x72,0x79,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x44,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3d,0x30,0x7d,0x76,0x61,0x72,0x20,0x46,0x68,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x2c,0x47,0x68,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x48,0x68,0x3d,0x30,0x2c,0x4d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x49,0x68,0x3d,0x21,0x31,0x2c,0x4a,0x68,0x3d,0x21,0x31,0x2c,0x4b,0x68,0x3d,0x30,0x2c,0x4c,0x68,0x3d,0x30,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x32,0x31,0x29,0x29,0x3b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x63,0x3c,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x69,0x66,0x28,0x21,0x48,0x65,0x28,0x61,0x5b,0x63,0x5d,0x2c,0x62,0x5b,0x63,0x5d,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x29,0x7b,0x48,0x68,0x3d,0x66,0x3b,0x4d,0x3d,0x62,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x46,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3f,0x4f,0x68,0x3a,0x50,0x68,0x3b,0x61,0x3d,0x63,0x28,0x64,0x2c,0x65,0x29,0x3b,0x69,0x66,0x28,0x4a,0x68,0x29,0x7b,0x66,0x3d,0x30,0x3b,0x64,0x6f,0x7b,0x4a,0x68,0x3d,0x21,0x31,0x3b,0x4b,0x68,0x3d,0x30,0x3b,0x69,0x66,0x28,0x32,0x35,0x3c,0x3d,0x66,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x30,0x31,0x29,0x29,0x3b,0x66,0x2b,0x3d,0x31,0x3b,0x4f,0x3d,0x4e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x46,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x51,0x68,0x3b,0x61,0x3d,0x63,0x28,0x64,0x2c,0x65,0x29,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x4a,0x68,0x29,0x7d,0x46,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x52,0x68,0x3b,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4e,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4e,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x48,0x68,0x3d,0x30,0x3b,0x4f,0x3d,0x4e,0x3d,0x4d,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x49,0x68,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x62,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x68,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x30,0x21,0x3d,0x3d,0x4b,0x68,0x3b,0x4b,0x68,0x3d,0x30,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x68,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x7b,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x71,0x75,0x65,0x75,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x4f,0x3f,0x4d,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4f,0x3d,0x61,0x3a,0x4f,0x3d,0x4f,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4f,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x68,0x28,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x4e,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x4d,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x61,0x3d,0x4e,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x4f,0x3f,0x4d,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x4f,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x4f,0x3d,0x62,0x2c,0x4e,0x3d,0x61,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x30,0x29,0x29,0x3b,0x4e,0x3d,0x61,0x3b,0x61,0x3d,0x7b,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x4e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x4e,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x2c,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3a,0x4e,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x71,0x75,0x65,0x75,0x65,0x3a,0x4e,0x2e,0x71,0x75,0x65,0x75,0x65,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x4f,0x3f,0x4d,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x4f,0x3d,0x61,0x3a,0x4f,0x3d,0x4f,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x61,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x4f,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x3f,0x62,0x28,0x61,0x29,0x3a,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x68,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x55,0x68,0x28,0x29,0x2c,0x63,0x3d,0x62,0x2e,0x71,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x31,0x29,0x29,0x3b,0x63,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3d,0x61,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x4e,0x2c,0x65,0x3d,0x64,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x66,0x3d,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x66,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x66,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x67,0x7d,0x64,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x65,0x3d,0x66,0x3b,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x66,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x3d,0x64,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3b,0x76,0x61,0x72,0x20,0x68,0x3d,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x3d,0x66,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x6c,0x2e,0x6c,0x61,0x6e,0x65,0x3b,0x69,0x66,0x28,0x28,0x48,0x68,0x26,0x6d,0x29,0x3d,0x3d,0x3d,0x6d,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x28,0x6b,0x3d,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x30,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x6c,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6c,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6c,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x2c,0x64,0x3d,0x6c,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3f,0x6c,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x61,0x28,0x64,0x2c,0x6c,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x71,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x6d,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x6c,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6c,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x5c,0x6e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6c,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6b,0x3f,0x28,0x68,0x3d,0x6b,0x3d,0x71,0x2c,0x67,0x3d,0x64,0x29,0x3a,0x6b,0x3d,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x71,0x3b,0x4d,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x6d,0x3b,0x72,0x68,0x7c,0x3d,0x6d,0x7d,0x6c,0x3d,0x6c,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6b,0x3f,0x67,0x3d,0x64,0x3a,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x68,0x3b,0x48,0x65,0x28,0x64,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7c,0x7c,0x28,0x64,0x68,0x3d,0x21,0x30,0x29,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x64,0x3b,0x62,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x67,0x3b,0x62,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6b,0x3b,0x63,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x64,0x7d,0x61,0x3d,0x63,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x65,0x3d,0x61,0x3b,0x64,0x6f,0x20,0x66,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x2c,0x4d,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x66,0x2c,0x72,0x68,0x7c,0x3d,0x66,0x2c,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x65,0x21,0x3d,0x3d,0x61,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x63,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x63,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x5d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x68,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x55,0x68,0x28,0x29,0x2c,0x63,0x3d,0x62,0x2e,0x71,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x31,0x29,0x29,0x3b,0x63,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3d,0x61,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x2c,0x65,0x3d,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x2c,0x66,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x20,0x66,0x3d,0x61,0x28,0x66,0x2c,0x67,0x2e,0x61,0x63,0x74,0x69,0x6f,0x6e,0x29,0x2c,0x67,0x3d,0x67,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x67,0x21,0x3d,0x3d,0x65,0x29,0x3b,0x48,0x65,0x28,0x66,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7c,0x7c,0x28,0x64,0x68,0x3d,0x21,0x30,0x29,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x26,0x26,0x28,0x62,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x29,0x3b,0x63,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x66,0x2c,0x64,0x5d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x68,0x28,0x29,0x7b,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x4d,0x2c,0x64,0x3d,0x55,0x68,0x28,0x29,0x2c,0x65,0x3d,0x62,0x28,0x29,0x2c,0x66,0x3d,0x21,0x48,0x65,0x28,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x29,0x3b,0x66,0x26,0x26,0x28,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x65,0x2c,0x64,0x68,0x3d,0x21,0x30,0x29,0x3b,0x64,0x3d,0x64,0x2e,0x71,0x75,0x65,0x75,0x65,0x3b,0x24,0x68,0x28,0x61,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x64,0x2c,0x61,0x29,0x2c,0x5b,0x61,0x5d,0x29,0x3b,0x69,0x66,0x28,0x64,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x21,0x3d,0x3d,0x62,0x7c,0x7c,0x66,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4f,0x26,0x26,0x4f,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x74,0x61,0x67,0x26,0x31,0x29,0x7b,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x34,0x38,0x3b,0x62,0x69,0x28,0x39,0x2c,0x63,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x62,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x51,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x34,0x39,0x29,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x48,0x68,0x26,0x33,0x30,0x29,0x7c,0x7c,0x64,0x69,0x28,0x63,0x2c,0x62,0x2c,0x65,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x33,0x38,0x34,0x3b,0x61,0x3d,0x7b,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3a,0x62,0x2c,0x76,0x61,0x6c,0x75,0x65,0x3a,0x63,0x7d,0x3b,0x62,0x3d,0x4d,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x3f,0x28,0x62,0x3d,0x7b,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x74,0x6f,0x72,0x65,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x4d,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x62,0x2c,0x62,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x3d,0x5b,0x61,0x5d,0x29,0x3a,0x28,0x63,0x3d,0x62,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x62,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x3d,0x5b,0x61,0x5d,0x3a,0x63,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3d,0x63,0x3b,0x62,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3d,0x64,0x3b,0x65,0x69,0x28,0x62,0x29,0x26,0x26,0x66,0x69,0x28,0x61,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x65,0x69,0x28,0x62,0x29,0x26,0x26,0x66,0x69,0x28,0x61,0x29,0x7d,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x69,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3b,0x61,0x3d,0x61,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x48,0x65,0x28,0x61,0x2c,0x63,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x64,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x69,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x69,0x68,0x28,0x61,0x2c,0x31,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x67,0x69,0x28,0x62,0x2c,0x61,0x2c,0x31,0x2c,0x2d,0x31,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x69,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x54,0x68,0x28,0x29,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x28,0x61,0x3d,0x61,0x28,0x29,0x29,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x62,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x61,0x3b,0x61,0x3d,0x7b,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x56,0x68,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x61,0x7d,0x3b,0x62,0x2e,0x71,0x75,0x65,0x75,0x65,0x3d,0x61,0x3b,0x61,0x3d,0x61,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3d,0x69,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x4d,0x2c,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x61,0x5d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x61,0x3d,0x7b,0x74,0x61,0x67,0x3a,0x61,0x2c,0x63,0x72,0x65,0x61,0x74,0x65,0x3a,0x62,0x2c,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3a,0x63,0x2c,0x64,0x65,0x70,0x73,0x3a,0x64,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x62,0x3d,0x4d,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x3f,0x28,0x62,0x3d,0x7b,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x74,0x6f,0x72,0x65,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x4d,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x62,0x2c,0x62,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x61,0x29,0x3a,0x28,0x63,0x3d,0x62,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x62,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x61,0x3a,0x28,0x64,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x63,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x61,0x2c,0x61,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x64,0x2c,0x62,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x61,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x69,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x68,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x54,0x68,0x28,0x29,0x3b,0x4d,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x61,0x3b,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x62,0x69,0x28,0x31,0x7c,0x62,0x2c,0x63,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x64,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x64,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x55,0x68,0x28,0x29,0x3b,0x64,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x64,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x64,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4e,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x4e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x66,0x3d,0x67,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x4d,0x68,0x28,0x64,0x2c,0x67,0x2e,0x64,0x65,0x70,0x73,0x29,0x29,0x7b,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x62,0x69,0x28,0x62,0x2c,0x63,0x2c,0x66,0x2c,0x64,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x4d,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x61,0x3b,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x62,0x69,0x28,0x31,0x7c,0x62,0x2c,0x63,0x2c,0x66,0x2c,0x64,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x69,0x28,0x38,0x33,0x39,0x30,0x36,0x35,0x36,0x2c,0x38,0x2c,0x61,0x2c,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x68,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x69,0x28,0x32,0x30,0x34,0x38,0x2c,0x38,0x2c,0x61,0x2c,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x69,0x28,0x34,0x2c,0x32,0x2c,0x61,0x2c,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x69,0x28,0x34,0x2c,0x34,0x2c,0x61,0x2c,0x62,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x61,0x28,0x29,0x2c,0x62,0x28,0x61,0x29,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x62,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x61,0x28,0x29,0x2c,0x62,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x61,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x62,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x5b,0x61,0x5d,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x69,0x28,0x34,0x2c,0x34,0x2c,0x70,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x61,0x29,0x2c,0x63,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x69,0x28,0x29,0x7b,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x55,0x68,0x28,0x29,0x3b,0x62,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x4d,0x68,0x28,0x62,0x2c,0x64,0x5b,0x31,0x5d,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x5b,0x30,0x5d,0x3b,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x61,0x2c,0x62,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x55,0x68,0x28,0x29,0x3b,0x62,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x4d,0x68,0x28,0x62,0x2c,0x64,0x5b,0x31,0x5d,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x5b,0x30,0x5d,0x3b,0x61,0x3d,0x61,0x28,0x29,0x3b,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x61,0x2c,0x62,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x48,0x68,0x26,0x32,0x31,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x26,0x26,0x28,0x61,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x21,0x31,0x2c,0x64,0x68,0x3d,0x21,0x30,0x29,0x2c,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x63,0x3b,0x48,0x65,0x28,0x63,0x2c,0x62,0x29,0x7c,0x7c,0x28,0x63,0x3d,0x79,0x63,0x28,0x29,0x2c,0x4d,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x63,0x2c,0x72,0x68,0x7c,0x3d,0x63,0x2c,0x61,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x21,0x30,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x43,0x3b,0x43,0x3d,0x30,0x21,0x3d,0x3d,0x63,0x26,0x26,0x34,0x3e,0x63,0x3f,0x63,0x3a,0x34,0x3b,0x61,0x28,0x21,0x30,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x47,0x68,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x47,0x68,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x7b,0x7d,0x3b,0x74,0x72,0x79,0x7b,0x61,0x28,0x21,0x31,0x29,0x2c,0x62,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x43,0x3d,0x63,0x2c,0x47,0x68,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x64,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x69,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x68,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x79,0x69,0x28,0x61,0x29,0x3b,0x63,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x64,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x63,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x21,0x31,0x2c,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x69,0x66,0x28,0x7a,0x69,0x28,0x61,0x29,0x29,0x41,0x69,0x28,0x62,0x2c,0x63,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x63,0x3d,0x68,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x52,0x28,0x29,0x3b,0x67,0x69,0x28,0x63,0x2c,0x61,0x2c,0x64,0x2c,0x65,0x29,0x3b,0x42,0x69,0x28,0x63,0x2c,0x62,0x2c,0x64,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x79,0x69,0x28,0x61,0x29,0x2c,0x65,0x3d,0x7b,0x6c,0x61,0x6e,0x65,0x3a,0x64,0x2c,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x63,0x2c,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x21,0x31,0x2c,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x69,0x66,0x28,0x7a,0x69,0x28,0x61,0x29,0x29,0x41,0x69,0x28,0x62,0x2c,0x65,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x7c,0x7c,0x30,0x3d,0x3d,0x3d,0x66,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x29,0x26,0x26,0x28,0x66,0x3d,0x62,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x29,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x62,0x2e,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x68,0x3d,0x66,0x28,0x67,0x2c,0x63,0x29,0x3b,0x65,0x2e,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x21,0x30,0x3b,0x65,0x2e,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x68,0x3b,0x69,0x66,0x28,0x48,0x65,0x28,0x68,0x2c,0x67,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x62,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6b,0x3f,0x28,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x2c,0x67,0x68,0x28,0x62,0x29,0x29,0x3a,0x28,0x65,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x29,0x3b,0x62,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x7d,0x63,0x3d,0x68,0x68,0x28,0x61,0x2c,0x62,0x2c,0x65,0x2c,0x64,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x65,0x3d,0x52,0x28,0x29,0x2c,0x67,0x69,0x28,0x63,0x2c,0x61,0x2c,0x64,0x2c,0x65,0x29,0x2c,0x42,0x69,0x28,0x63,0x2c,0x62,0x2c,0x64,0x29,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7a,0x69,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x3d,0x3d,0x4d,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x62,0x3d,0x3d,0x3d,0x4d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x4a,0x68,0x3d,0x49,0x68,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x62,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x62,0x3a,0x28,0x62,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x63,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x62,0x29,0x3b,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x63,0x26,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3b,0x64,0x26,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x63,0x7c,0x3d,0x64,0x3b,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x3b,0x43,0x63,0x28,0x61,0x2c,0x63,0x29,0x7d,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x52,0x68,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x68,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x50,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x50,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x50,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x50,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x50,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x50,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x50,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x50,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x50,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x50,0x2c,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x50,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x50,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x50,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x50,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x50,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x50,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x2c,0x4f,0x68,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x68,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x54,0x68,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x61,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x68,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6d,0x69,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x2e,0x63,0x6f,0x6e,0x63,0x61,0x74,0x28,0x5b,0x61,0x5d,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x69,0x28,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x2c,0x5c,0x6e,0x34,0x2c,0x70,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x61,0x29,0x2c,0x63,0x29,0x7d,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x69,0x28,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x2c,0x34,0x2c,0x61,0x2c,0x62,0x29,0x7d,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x69,0x28,0x34,0x2c,0x32,0x2c,0x61,0x2c,0x62,0x29,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x54,0x68,0x28,0x29,0x3b,0x62,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x3b,0x61,0x3d,0x61,0x28,0x29,0x3b,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5b,0x61,0x2c,0x62,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x54,0x68,0x28,0x29,0x3b,0x62,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x28,0x62,0x29,0x3a,0x62,0x3b,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x64,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x62,0x3b,0x61,0x3d,0x7b,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x61,0x2c,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x62,0x7d,0x3b,0x64,0x2e,0x71,0x75,0x65,0x75,0x65,0x3d,0x61,0x3b,0x61,0x3d,0x61,0x2e,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x3d,0x78,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x4d,0x2c,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x61,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x5c,0x6e,0x54,0x68,0x28,0x29,0x3b,0x61,0x3d,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x61,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x61,0x7d,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x68,0x69,0x2c,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x72,0x69,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x54,0x68,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x61,0x7d,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x68,0x69,0x28,0x21,0x31,0x29,0x2c,0x62,0x3d,0x61,0x5b,0x30,0x5d,0x3b,0x61,0x3d,0x76,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x5b,0x31,0x5d,0x29,0x3b,0x54,0x68,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x62,0x2c,0x61,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x4d,0x2c,0x65,0x3d,0x54,0x68,0x28,0x29,0x3b,0x69,0x66,0x28,0x49,0x29,0x7b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x30,0x37,0x29,0x29,0x3b,0x63,0x3d,0x63,0x28,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x63,0x3d,0x62,0x28,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x51,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x34,0x39,0x29,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x48,0x68,0x26,0x33,0x30,0x29,0x7c,0x7c,0x64,0x69,0x28,0x64,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x63,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x63,0x2c,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3a,0x62,0x7d,0x3b,0x65,0x2e,0x71,0x75,0x65,0x75,0x65,0x3d,0x66,0x3b,0x6d,0x69,0x28,0x61,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x2c,0x5c,0x6e,0x66,0x2c,0x61,0x29,0x2c,0x5b,0x61,0x5d,0x29,0x3b,0x64,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x34,0x38,0x3b,0x62,0x69,0x28,0x39,0x2c,0x63,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x2c,0x66,0x2c,0x63,0x2c,0x62,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x7d,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x54,0x68,0x28,0x29,0x2c,0x62,0x3d,0x51,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x3b,0x69,0x66,0x28,0x49,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x73,0x67,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x72,0x67,0x3b,0x63,0x3d,0x28,0x64,0x26,0x7e,0x28,0x31,0x3c,0x3c,0x33,0x32,0x2d,0x6f,0x63,0x28,0x64,0x29,0x2d,0x31,0x29,0x29,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x2b,0x63,0x3b,0x62,0x3d,0x5c,0x22,0x3a,0x5c,0x22,0x2b,0x62,0x2b,0x5c,0x22,0x52,0x5c,0x22,0x2b,0x63,0x3b,0x63,0x3d,0x4b,0x68,0x2b,0x2b,0x3b,0x30,0x3c,0x63,0x26,0x26,0x28,0x62,0x2b,0x3d,0x5c,0x22,0x48,0x5c,0x22,0x2b,0x63,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x29,0x3b,0x62,0x2b,0x3d,0x5c,0x22,0x3a,0x5c,0x22,0x7d,0x65,0x6c,0x73,0x65,0x20,0x63,0x3d,0x4c,0x68,0x2b,0x2b,0x2c,0x62,0x3d,0x5c,0x22,0x3a,0x5c,0x22,0x2b,0x62,0x2b,0x5c,0x22,0x72,0x5c,0x22,0x2b,0x63,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x32,0x29,0x2b,0x5c,0x22,0x3a,0x5c,0x22,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x62,0x7d,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x2c,0x50,0x68,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x68,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x73,0x69,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x68,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x24,0x68,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x71,0x69,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x69,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6f,0x69,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x74,0x69,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x57,0x68,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x6a,0x69,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x57,0x68,0x28,0x56,0x68,0x29,0x7d,0x2c,0x5c,0x6e,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x72,0x69,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x55,0x68,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x75,0x69,0x28,0x62,0x2c,0x4e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x61,0x29,0x7d,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x57,0x68,0x28,0x56,0x68,0x29,0x5b,0x30,0x5d,0x2c,0x62,0x3d,0x55,0x68,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x61,0x2c,0x62,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x59,0x68,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x5a,0x68,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x77,0x69,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x2c,0x51,0x68,0x3d,0x7b,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x68,0x2c,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x73,0x69,0x2c,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x65,0x68,0x2c,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x24,0x68,0x2c,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3a,0x71,0x69,0x2c,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x69,0x2c,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6f,0x69,0x2c,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3a,0x74,0x69,0x2c,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3a,0x58,0x68,0x2c,0x75,0x73,0x65,0x52,0x65,0x66,0x3a,0x6a,0x69,0x2c,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x68,0x28,0x56,0x68,0x29,0x7d,0x2c,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3a,0x72,0x69,0x2c,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x55,0x68,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x5c,0x6e,0x4e,0x3f,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x61,0x3a,0x75,0x69,0x28,0x62,0x2c,0x4e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x61,0x29,0x7d,0x2c,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x58,0x68,0x28,0x56,0x68,0x29,0x5b,0x30,0x5d,0x2c,0x62,0x3d,0x55,0x68,0x28,0x29,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5b,0x61,0x2c,0x62,0x5d,0x7d,0x2c,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x3a,0x59,0x68,0x2c,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3a,0x5a,0x68,0x2c,0x75,0x73,0x65,0x49,0x64,0x3a,0x77,0x69,0x2c,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x3a,0x21,0x31,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x61,0x26,0x26,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x7b,0x62,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x62,0x29,0x3b,0x61,0x3d,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x20,0x69,0x6e,0x20,0x61,0x29,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x5b,0x63,0x5d,0x26,0x26,0x28,0x62,0x5b,0x63,0x5d,0x3d,0x61,0x5b,0x63,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x62,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x63,0x3d,0x63,0x28,0x64,0x2c,0x62,0x29,0x3b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x63,0x3f,0x62,0x3a,0x41,0x28,0x7b,0x7d,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x63,0x3b,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x26,0x28,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x63,0x29,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x45,0x69,0x3d,0x7b,0x69,0x73,0x4d,0x6f,0x75,0x6e,0x74,0x65,0x64,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x28,0x61,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x29,0x3f,0x56,0x62,0x28,0x61,0x29,0x3d,0x3d,0x3d,0x61,0x3a,0x21,0x31,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x53,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x52,0x28,0x29,0x2c,0x65,0x3d,0x79,0x69,0x28,0x61,0x29,0x2c,0x66,0x3d,0x6d,0x68,0x28,0x64,0x2c,0x65,0x29,0x3b,0x66,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x62,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x63,0x29,0x3b,0x62,0x3d,0x6e,0x68,0x28,0x61,0x2c,0x66,0x2c,0x65,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x67,0x69,0x28,0x62,0x2c,0x61,0x2c,0x65,0x2c,0x64,0x29,0x2c,0x6f,0x68,0x28,0x62,0x2c,0x61,0x2c,0x65,0x29,0x29,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x52,0x28,0x29,0x2c,0x65,0x3d,0x79,0x69,0x28,0x61,0x29,0x2c,0x66,0x3d,0x6d,0x68,0x28,0x64,0x2c,0x65,0x29,0x3b,0x66,0x2e,0x74,0x61,0x67,0x3d,0x31,0x3b,0x66,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x62,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x63,0x29,0x3b,0x62,0x3d,0x6e,0x68,0x28,0x61,0x2c,0x66,0x2c,0x65,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x67,0x69,0x28,0x62,0x2c,0x61,0x2c,0x65,0x2c,0x64,0x29,0x2c,0x6f,0x68,0x28,0x62,0x2c,0x61,0x2c,0x65,0x29,0x29,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x46,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x52,0x28,0x29,0x2c,0x64,0x3d,0x5c,0x6e,0x79,0x69,0x28,0x61,0x29,0x2c,0x65,0x3d,0x6d,0x68,0x28,0x63,0x2c,0x64,0x29,0x3b,0x65,0x2e,0x74,0x61,0x67,0x3d,0x32,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x65,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x62,0x29,0x3b,0x62,0x3d,0x6e,0x68,0x28,0x61,0x2c,0x65,0x2c,0x64,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x67,0x69,0x28,0x62,0x2c,0x61,0x2c,0x64,0x2c,0x63,0x29,0x2c,0x6f,0x68,0x28,0x62,0x2c,0x61,0x2c,0x64,0x29,0x29,0x7d,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x2e,0x73,0x68,0x6f,0x75,0x6c,0x64,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x55,0x70,0x64,0x61,0x74,0x65,0x3f,0x61,0x2e,0x73,0x68,0x6f,0x75,0x6c,0x64,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x64,0x2c,0x66,0x2c,0x67,0x29,0x3a,0x62,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x26,0x26,0x62,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x69,0x73,0x50,0x75,0x72,0x65,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3f,0x21,0x49,0x65,0x28,0x63,0x2c,0x64,0x29,0x7c,0x7c,0x21,0x49,0x65,0x28,0x65,0x2c,0x66,0x29,0x3a,0x21,0x30,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x21,0x31,0x2c,0x65,0x3d,0x56,0x66,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x3b,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3f,0x66,0x3d,0x65,0x68,0x28,0x66,0x29,0x3a,0x28,0x65,0x3d,0x5a,0x66,0x28,0x62,0x29,0x3f,0x58,0x66,0x3a,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x64,0x3d,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x2c,0x66,0x3d,0x28,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x64,0x29,0x3f,0x59,0x66,0x28,0x61,0x2c,0x65,0x29,0x3a,0x56,0x66,0x29,0x3b,0x62,0x3d,0x6e,0x65,0x77,0x20,0x62,0x28,0x63,0x2c,0x66,0x29,0x3b,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x3f,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x45,0x69,0x3b,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x62,0x3b,0x62,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3d,0x61,0x3b,0x64,0x26,0x26,0x28,0x61,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x61,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x55,0x6e,0x6d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x65,0x2c,0x61,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x66,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x61,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x62,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x28,0x63,0x2c,0x64,0x29,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x62,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x28,0x63,0x2c,0x64,0x29,0x3b,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x21,0x3d,0x3d,0x61,0x26,0x26,0x45,0x69,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x62,0x2c,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x65,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x63,0x3b,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x65,0x2e,0x72,0x65,0x66,0x73,0x3d,0x7b,0x7d,0x3b,0x6b,0x68,0x28,0x61,0x29,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x3b,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3f,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x65,0x68,0x28,0x66,0x29,0x3a,0x28,0x66,0x3d,0x5a,0x66,0x28,0x62,0x29,0x3f,0x58,0x66,0x3a,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x59,0x66,0x28,0x61,0x2c,0x66,0x29,0x29,0x3b,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x66,0x3d,0x62,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x28,0x44,0x69,0x28,0x61,0x2c,0x62,0x2c,0x66,0x2c,0x63,0x29,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x7c,0x7c,0x28,0x62,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x5c,0x6e,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x65,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x65,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x2c,0x62,0x21,0x3d,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x26,0x26,0x45,0x69,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x65,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x71,0x68,0x28,0x61,0x2c,0x63,0x2c,0x65,0x2c,0x64,0x29,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x5c,0x22,0x5c,0x22,0x2c,0x64,0x3d,0x62,0x3b,0x64,0x6f,0x20,0x63,0x2b,0x3d,0x50,0x61,0x28,0x64,0x29,0x2c,0x64,0x3d,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x64,0x29,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x66,0x29,0x7b,0x65,0x3d,0x5c,0x22,0x5c,0x5c,0x6e,0x45,0x72,0x72,0x6f,0x72,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x69,0x6e,0x67,0x20,0x73,0x74,0x61,0x63,0x6b,0x3a,0x20,0x5c,0x22,0x2b,0x66,0x2e,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x2b,0x5c,0x22,0x5c,0x5c,0x6e,0x5c,0x22,0x2b,0x66,0x2e,0x73,0x74,0x61,0x63,0x6b,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x61,0x2c,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x62,0x2c,0x73,0x74,0x61,0x63,0x6b,0x3a,0x65,0x2c,0x64,0x69,0x67,0x65,0x73,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x61,0x2c,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x74,0x61,0x63,0x6b,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x3f,0x63,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x69,0x67,0x65,0x73,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x3f,0x62,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x69,0x28,0x61,0x2c,0x62,0x29,0x7b,0x74,0x72,0x79,0x7b,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x63,0x3b,0x7d,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x4d,0x69,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x57,0x65,0x61,0x6b,0x4d,0x61,0x70,0x3f,0x57,0x65,0x61,0x6b,0x4d,0x61,0x70,0x3a,0x4d,0x61,0x70,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x63,0x3d,0x6d,0x68,0x28,0x2d,0x31,0x2c,0x63,0x29,0x3b,0x63,0x2e,0x74,0x61,0x67,0x3d,0x33,0x3b,0x63,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x63,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x4f,0x69,0x7c,0x7c,0x28,0x4f,0x69,0x3d,0x21,0x30,0x2c,0x50,0x69,0x3d,0x64,0x29,0x3b,0x4c,0x69,0x28,0x61,0x2c,0x62,0x29,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x63,0x3d,0x6d,0x68,0x28,0x2d,0x31,0x2c,0x63,0x29,0x3b,0x63,0x2e,0x74,0x61,0x67,0x3d,0x33,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x63,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x28,0x65,0x29,0x7d,0x3b,0x63,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x4c,0x69,0x28,0x61,0x2c,0x62,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x26,0x26,0x28,0x63,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x4c,0x69,0x28,0x61,0x2c,0x62,0x29,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x52,0x69,0x3f,0x52,0x69,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x28,0x5b,0x74,0x68,0x69,0x73,0x5d,0x29,0x3a,0x52,0x69,0x2e,0x61,0x64,0x64,0x28,0x74,0x68,0x69,0x73,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x73,0x74,0x61,0x63,0x6b,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x28,0x62,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x7b,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x53,0x74,0x61,0x63,0x6b,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x3a,0x5c,0x22,0x5c,0x22,0x7d,0x29,0x7d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x64,0x3d,0x61,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x69,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x3b,0x64,0x2e,0x73,0x65,0x74,0x28,0x62,0x2c,0x65,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x65,0x3d,0x64,0x2e,0x67,0x65,0x74,0x28,0x62,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x65,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x2c,0x64,0x2e,0x73,0x65,0x74,0x28,0x62,0x2c,0x65,0x29,0x29,0x3b,0x65,0x2e,0x68,0x61,0x73,0x28,0x63,0x29,0x7c,0x7c,0x28,0x65,0x2e,0x61,0x64,0x64,0x28,0x63,0x29,0x2c,0x61,0x3d,0x54,0x69,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x74,0x68,0x65,0x6e,0x28,0x61,0x2c,0x61,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x69,0x28,0x61,0x29,0x7b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x62,0x3b,0x69,0x66,0x28,0x62,0x3d,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x62,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3f,0x21,0x30,0x3a,0x21,0x31,0x3a,0x21,0x30,0x3b,0x69,0x66,0x28,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x3d,0x3d,0x62,0x3f,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x3a,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x33,0x31,0x30,0x37,0x32,0x2c,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x35,0x32,0x38,0x30,0x35,0x2c,0x31,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3f,0x63,0x2e,0x74,0x61,0x67,0x3d,0x31,0x37,0x3a,0x28,0x62,0x3d,0x6d,0x68,0x28,0x2d,0x31,0x2c,0x31,0x29,0x2c,0x62,0x2e,0x74,0x61,0x67,0x3d,0x32,0x2c,0x6e,0x68,0x28,0x63,0x2c,0x62,0x2c,0x31,0x29,0x29,0x29,0x2c,0x63,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x31,0x29,0x2c,0x61,0x3b,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x3b,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x76,0x61,0x72,0x20,0x57,0x69,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x2c,0x64,0x68,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x56,0x67,0x28,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x64,0x29,0x3a,0x55,0x67,0x28,0x62,0x2c,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x63,0x2c,0x64,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x63,0x3d,0x63,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x62,0x2e,0x72,0x65,0x66,0x3b,0x63,0x68,0x28,0x62,0x2c,0x65,0x29,0x3b,0x64,0x3d,0x4e,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x66,0x2c,0x65,0x29,0x3b,0x63,0x3d,0x53,0x68,0x28,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x21,0x64,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x30,0x35,0x33,0x2c,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x7e,0x65,0x2c,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x3b,0x49,0x26,0x26,0x63,0x26,0x26,0x76,0x67,0x28,0x62,0x29,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x3b,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x63,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x26,0x26,0x21,0x61,0x6a,0x28,0x66,0x29,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x66,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x63,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x74,0x61,0x67,0x3d,0x31,0x35,0x2c,0x62,0x2e,0x74,0x79,0x70,0x65,0x3d,0x66,0x2c,0x62,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x66,0x2c,0x64,0x2c,0x65,0x29,0x3b,0x61,0x3d,0x52,0x67,0x28,0x63,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x2c,0x62,0x2c,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x65,0x29,0x3b,0x61,0x2e,0x72,0x65,0x66,0x3d,0x62,0x2e,0x72,0x65,0x66,0x3b,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x61,0x7d,0x66,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x65,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x63,0x3d,0x63,0x2e,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x3b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x3a,0x49,0x65,0x3b,0x69,0x66,0x28,0x63,0x28,0x67,0x2c,0x64,0x29,0x26,0x26,0x61,0x2e,0x72,0x65,0x66,0x3d,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x66,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7d,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x3b,0x61,0x3d,0x50,0x67,0x28,0x66,0x2c,0x64,0x29,0x3b,0x61,0x2e,0x72,0x65,0x66,0x3d,0x62,0x2e,0x72,0x65,0x66,0x3b,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x69,0x66,0x28,0x49,0x65,0x28,0x66,0x2c,0x64,0x29,0x26,0x26,0x61,0x2e,0x72,0x65,0x66,0x3d,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x66,0x29,0x69,0x66,0x28,0x64,0x68,0x3d,0x21,0x31,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x64,0x3d,0x66,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x65,0x29,0x29,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x33,0x31,0x30,0x37,0x32,0x29,0x26,0x26,0x28,0x64,0x68,0x3d,0x21,0x30,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x65,0x3d,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x5c,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x47,0x28,0x65,0x6a,0x2c,0x66,0x6a,0x29,0x2c,0x66,0x6a,0x7c,0x3d,0x63,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x63,0x26,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3f,0x66,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x63,0x3a,0x63,0x2c,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x61,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x47,0x28,0x65,0x6a,0x2c,0x66,0x6a,0x29,0x2c,0x66,0x6a,0x7c,0x3d,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x30,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3f,0x66,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x63,0x3b,0x47,0x28,0x65,0x6a,0x2c,0x66,0x6a,0x29,0x3b,0x66,0x6a,0x7c,0x3d,0x64,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5c,0x6e,0x66,0x3f,0x28,0x64,0x3d,0x66,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x63,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x64,0x3d,0x63,0x2c,0x47,0x28,0x65,0x6a,0x2c,0x66,0x6a,0x29,0x2c,0x66,0x6a,0x7c,0x3d,0x64,0x3b,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x65,0x2c,0x63,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x72,0x65,0x66,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x61,0x2e,0x72,0x65,0x66,0x21,0x3d,0x3d,0x63,0x29,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x35,0x31,0x32,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x5a,0x66,0x28,0x63,0x29,0x3f,0x58,0x66,0x3a,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x66,0x3d,0x59,0x66,0x28,0x62,0x2c,0x66,0x29,0x3b,0x63,0x68,0x28,0x62,0x2c,0x65,0x29,0x3b,0x63,0x3d,0x4e,0x68,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x66,0x2c,0x65,0x29,0x3b,0x64,0x3d,0x53,0x68,0x28,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x21,0x64,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x30,0x35,0x33,0x2c,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x7e,0x65,0x2c,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x3b,0x49,0x26,0x26,0x64,0x26,0x26,0x76,0x67,0x28,0x62,0x29,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x3b,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x5a,0x66,0x28,0x63,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x21,0x30,0x3b,0x63,0x67,0x28,0x62,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x66,0x3d,0x21,0x31,0x3b,0x63,0x68,0x28,0x62,0x2c,0x65,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x69,0x6a,0x28,0x61,0x2c,0x62,0x29,0x2c,0x47,0x69,0x28,0x62,0x2c,0x63,0x2c,0x64,0x29,0x2c,0x49,0x69,0x28,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x2c,0x64,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x68,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x67,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x68,0x3b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x67,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x6c,0x3d,0x63,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x3b,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x3f,0x6c,0x3d,0x65,0x68,0x28,0x6c,0x29,0x3a,0x28,0x6c,0x3d,0x5a,0x66,0x28,0x63,0x29,0x3f,0x58,0x66,0x3a,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x6c,0x3d,0x59,0x66,0x28,0x62,0x2c,0x6c,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x63,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x2c,0x71,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6d,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3b,0x71,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x5c,0x6e,0x28,0x68,0x21,0x3d,0x3d,0x64,0x7c,0x7c,0x6b,0x21,0x3d,0x3d,0x6c,0x29,0x26,0x26,0x48,0x69,0x28,0x62,0x2c,0x67,0x2c,0x64,0x2c,0x6c,0x29,0x3b,0x6a,0x68,0x3d,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x67,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x72,0x3b,0x71,0x68,0x28,0x62,0x2c,0x64,0x2c,0x67,0x2c,0x65,0x29,0x3b,0x6b,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x68,0x21,0x3d,0x3d,0x64,0x7c,0x7c,0x72,0x21,0x3d,0x3d,0x6b,0x7c,0x7c,0x57,0x66,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7c,0x7c,0x6a,0x68,0x3f,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6d,0x26,0x26,0x28,0x44,0x69,0x28,0x62,0x2c,0x63,0x2c,0x6d,0x2c,0x64,0x29,0x2c,0x6b,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x2c,0x28,0x68,0x3d,0x6a,0x68,0x7c,0x7c,0x46,0x69,0x28,0x62,0x2c,0x63,0x2c,0x68,0x2c,0x64,0x2c,0x72,0x2c,0x6b,0x2c,0x6c,0x29,0x29,0x3f,0x28,0x71,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x7c,0x7c,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x29,0x3a,0x5c,0x6e,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x64,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6b,0x29,0x2c,0x67,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x64,0x2c,0x67,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x6b,0x2c,0x67,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6c,0x2c,0x64,0x3d,0x68,0x29,0x3a,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x38,0x29,0x2c,0x64,0x3d,0x21,0x31,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x67,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x6c,0x68,0x28,0x61,0x2c,0x62,0x29,0x3b,0x68,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x6c,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3f,0x68,0x3a,0x43,0x69,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x68,0x29,0x3b,0x67,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x6c,0x3b,0x71,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x72,0x3d,0x67,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x6b,0x3d,0x63,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x3b,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x3f,0x6b,0x3d,0x65,0x68,0x28,0x6b,0x29,0x3a,0x28,0x6b,0x3d,0x5a,0x66,0x28,0x63,0x29,0x3f,0x58,0x66,0x3a,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x6b,0x3d,0x59,0x66,0x28,0x62,0x2c,0x6b,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x79,0x3d,0x63,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x3b,0x28,0x6d,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x79,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x29,0x7c,0x7c,0x5c,0x6e,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x28,0x68,0x21,0x3d,0x3d,0x71,0x7c,0x7c,0x72,0x21,0x3d,0x3d,0x6b,0x29,0x26,0x26,0x48,0x69,0x28,0x62,0x2c,0x67,0x2c,0x64,0x2c,0x6b,0x29,0x3b,0x6a,0x68,0x3d,0x21,0x31,0x3b,0x72,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x67,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x72,0x3b,0x71,0x68,0x28,0x62,0x2c,0x64,0x2c,0x67,0x2c,0x65,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x68,0x21,0x3d,0x3d,0x71,0x7c,0x7c,0x72,0x21,0x3d,0x3d,0x6e,0x7c,0x7c,0x57,0x66,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7c,0x7c,0x6a,0x68,0x3f,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x79,0x26,0x26,0x28,0x44,0x69,0x28,0x62,0x2c,0x63,0x2c,0x79,0x2c,0x64,0x29,0x2c,0x6e,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x2c,0x28,0x6c,0x3d,0x6a,0x68,0x7c,0x7c,0x46,0x69,0x28,0x62,0x2c,0x63,0x2c,0x6c,0x2c,0x64,0x2c,0x72,0x2c,0x6e,0x2c,0x6b,0x29,0x7c,0x7c,0x21,0x31,0x29,0x3f,0x28,0x6d,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x64,0x2c,0x6e,0x2c,0x6b,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x5c,0x6e,0x67,0x2e,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x64,0x2c,0x6e,0x2c,0x6b,0x29,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x29,0x29,0x3a,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x68,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x72,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x68,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x72,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x29,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x64,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x29,0x2c,0x67,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x64,0x2c,0x67,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x6e,0x2c,0x67,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6b,0x2c,0x64,0x3d,0x6c,0x29,0x3a,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x68,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x72,0x3d,0x3d,0x3d,0x5c,0x6e,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x67,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x7c,0x7c,0x68,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x26,0x26,0x72,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x29,0x2c,0x64,0x3d,0x21,0x31,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6a,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x66,0x2c,0x65,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x29,0x7b,0x67,0x6a,0x28,0x61,0x2c,0x62,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x3b,0x69,0x66,0x28,0x21,0x64,0x26,0x26,0x21,0x67,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x26,0x26,0x64,0x67,0x28,0x62,0x2c,0x63,0x2c,0x21,0x31,0x29,0x2c,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x66,0x29,0x3b,0x64,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x57,0x69,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x62,0x3b,0x76,0x61,0x72,0x20,0x68,0x3d,0x67,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x64,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x28,0x29,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x67,0x3f,0x28,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x55,0x67,0x28,0x62,0x2c,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x29,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x55,0x67,0x28,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x68,0x2c,0x66,0x29,0x29,0x3a,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x68,0x2c,0x66,0x29,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x3b,0x65,0x26,0x26,0x64,0x67,0x28,0x62,0x2c,0x63,0x2c,0x21,0x30,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x6a,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3f,0x61,0x67,0x28,0x61,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x21,0x3d,0x3d,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x3a,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x26,0x26,0x61,0x67,0x28,0x61,0x2c,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x21,0x31,0x29,0x3b,0x79,0x68,0x28,0x61,0x2c,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x49,0x67,0x28,0x29,0x3b,0x4a,0x67,0x28,0x65,0x29,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x35,0x36,0x3b,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x76,0x61,0x72,0x20,0x6d,0x6a,0x3d,0x7b,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x65,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3a,0x30,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x6a,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x61,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x65,0x3d,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x66,0x3d,0x21,0x31,0x2c,0x67,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x2c,0x68,0x3b,0x28,0x68,0x3d,0x67,0x29,0x7c,0x7c,0x28,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3f,0x21,0x31,0x3a,0x30,0x21,0x3d,0x3d,0x28,0x65,0x26,0x32,0x29,0x29,0x3b,0x69,0x66,0x28,0x68,0x29,0x66,0x3d,0x21,0x30,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x31,0x32,0x39,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x65,0x7c,0x3d,0x31,0x3b,0x47,0x28,0x4c,0x2c,0x65,0x26,0x31,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x45,0x67,0x28,0x62,0x29,0x3b,0x61,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x61,0x3d,0x61,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x3f,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x31,0x3a,0x5c,0x22,0x24,0x21,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x2e,0x64,0x61,0x74,0x61,0x3f,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x38,0x3a,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x67,0x3d,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3b,0x61,0x3d,0x64,0x2e,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x3f,0x28,0x64,0x3d,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x66,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x67,0x3d,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x5c,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x67,0x7d,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x64,0x26,0x31,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3f,0x28,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x66,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x5c,0x6e,0x67,0x29,0x3a,0x66,0x3d,0x70,0x6a,0x28,0x67,0x2c,0x64,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x61,0x3d,0x54,0x67,0x28,0x61,0x2c,0x64,0x2c,0x63,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2c,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x61,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x66,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x6a,0x28,0x63,0x29,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6d,0x6a,0x2c,0x61,0x29,0x3a,0x71,0x6a,0x28,0x62,0x2c,0x67,0x29,0x7d,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x68,0x3d,0x65,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x67,0x2c,0x64,0x2c,0x68,0x2c,0x65,0x2c,0x63,0x29,0x3b,0x69,0x66,0x28,0x66,0x29,0x7b,0x66,0x3d,0x64,0x2e,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3b,0x67,0x3d,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x3b,0x65,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x68,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x5c,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7d,0x3b,0x30,0x3d,0x3d,0x3d,0x28,0x67,0x26,0x31,0x29,0x26,0x26,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x21,0x3d,0x3d,0x65,0x3f,0x28,0x64,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6b,0x2c,0x62,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x64,0x3d,0x50,0x67,0x28,0x65,0x2c,0x6b,0x29,0x2c,0x64,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x65,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x3f,0x66,0x3d,0x50,0x67,0x28,0x68,0x2c,0x66,0x29,0x3a,0x28,0x66,0x3d,0x54,0x67,0x28,0x66,0x2c,0x67,0x2c,0x63,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x66,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x29,0x3b,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x5c,0x6e,0x62,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x66,0x3b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x64,0x3b,0x64,0x3d,0x66,0x3b,0x66,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x67,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x3f,0x6e,0x6a,0x28,0x63,0x29,0x3a,0x7b,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x3a,0x67,0x2e,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x63,0x2c,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x67,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x7d,0x3b,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x67,0x3b,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x7e,0x63,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6d,0x6a,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x66,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x61,0x3d,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x64,0x3d,0x50,0x67,0x28,0x66,0x2c,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x5c,0x22,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x5c,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7d,0x29,0x3b,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x28,0x64,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x29,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x63,0x3d,0x62,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x28,0x62,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x5b,0x61,0x5d,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x36,0x29,0x3a,0x63,0x2e,0x70,0x75,0x73,0x68,0x28,0x61,0x29,0x29,0x3b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x64,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x62,0x3d,0x70,0x6a,0x28,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x5c,0x22,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x5c,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x62,0x7d,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x73,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x4a,0x67,0x28,0x64,0x29,0x3b,0x55,0x67,0x28,0x62,0x2c,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x29,0x3b,0x61,0x3d,0x71,0x6a,0x28,0x62,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x3b,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x29,0x7b,0x69,0x66,0x28,0x63,0x29,0x7b,0x69,0x66,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x35,0x36,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x35,0x37,0x2c,0x64,0x3d,0x4b,0x69,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x32,0x32,0x29,0x29,0x29,0x2c,0x73,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x67,0x2c,0x64,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x3d,0x64,0x2e,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3b,0x65,0x3d,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x3b,0x64,0x3d,0x70,0x6a,0x28,0x7b,0x6d,0x6f,0x64,0x65,0x3a,0x5c,0x22,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x5c,0x22,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x7d,0x2c,0x65,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x66,0x3d,0x54,0x67,0x28,0x66,0x2c,0x65,0x2c,0x67,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x66,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x3b,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x66,0x3b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x64,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x55,0x67,0x28,0x62,0x2c,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x67,0x29,0x3b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x6a,0x28,0x67,0x29,0x3b,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6d,0x6a,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x7d,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x67,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x24,0x21,0x5c,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x64,0x61,0x74,0x61,0x29,0x7b,0x64,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x26,0x26,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x64,0x61,0x74,0x61,0x73,0x65,0x74,0x3b,0x5c,0x6e,0x69,0x66,0x28,0x64,0x29,0x76,0x61,0x72,0x20,0x68,0x3d,0x64,0x2e,0x64,0x67,0x73,0x74,0x3b,0x64,0x3d,0x68,0x3b,0x66,0x3d,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x31,0x39,0x29,0x29,0x3b,0x64,0x3d,0x4b,0x69,0x28,0x66,0x2c,0x64,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x67,0x2c,0x64,0x29,0x7d,0x68,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x67,0x26,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x3b,0x69,0x66,0x28,0x64,0x68,0x7c,0x7c,0x68,0x29,0x7b,0x64,0x3d,0x51,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x67,0x26,0x2d,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x65,0x3d,0x32,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x65,0x3d,0x38,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x32,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x34,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x30,0x39,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x31,0x39,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x33,0x38,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x32,0x37,0x36,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x35,0x35,0x33,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x31,0x30,0x37,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x36,0x32,0x31,0x34,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x32,0x34,0x32,0x38,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x33,0x38,0x38,0x36,0x30,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x37,0x37,0x37,0x32,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x33,0x35,0x35,0x34,0x34,0x33,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x37,0x31,0x30,0x38,0x38,0x36,0x34,0x3a,0x65,0x3d,0x33,0x32,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x65,0x3d,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x36,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x65,0x3d,0x30,0x7d,0x65,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x65,0x26,0x28,0x64,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x67,0x29,0x29,0x3f,0x30,0x3a,0x65,0x3b,0x5c,0x6e,0x30,0x21,0x3d,0x3d,0x65,0x26,0x26,0x65,0x21,0x3d,0x3d,0x66,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x26,0x26,0x28,0x66,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3d,0x65,0x2c,0x69,0x68,0x28,0x61,0x2c,0x65,0x29,0x2c,0x67,0x69,0x28,0x64,0x2c,0x61,0x2c,0x65,0x2c,0x2d,0x31,0x29,0x29,0x7d,0x74,0x6a,0x28,0x29,0x3b,0x64,0x3d,0x4b,0x69,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x32,0x31,0x29,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x67,0x2c,0x64,0x29,0x7d,0x69,0x66,0x28,0x5c,0x22,0x24,0x3f,0x5c,0x22,0x3d,0x3d,0x3d,0x65,0x2e,0x64,0x61,0x74,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x62,0x3d,0x75,0x6a,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x2c,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x65,0x74,0x72,0x79,0x3d,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x3d,0x66,0x2e,0x74,0x72,0x65,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x79,0x67,0x3d,0x4c,0x66,0x28,0x65,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x78,0x67,0x3d,0x62,0x3b,0x49,0x3d,0x21,0x30,0x3b,0x7a,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x6f,0x67,0x5b,0x70,0x67,0x2b,0x2b,0x5d,0x3d,0x72,0x67,0x2c,0x6f,0x67,0x5b,0x70,0x67,0x2b,0x2b,0x5d,0x3d,0x73,0x67,0x2c,0x6f,0x67,0x5b,0x70,0x67,0x2b,0x2b,0x5d,0x3d,0x71,0x67,0x2c,0x72,0x67,0x3d,0x61,0x2e,0x69,0x64,0x2c,0x73,0x67,0x3d,0x61,0x2e,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x2c,0x71,0x67,0x3d,0x62,0x29,0x3b,0x62,0x3d,0x71,0x6a,0x28,0x62,0x2c,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x29,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x30,0x39,0x36,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x76,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x64,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x29,0x3b,0x62,0x68,0x28,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x3f,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x69,0x73,0x42,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x3a,0x62,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x30,0x2c,0x6c,0x61,0x73,0x74,0x3a,0x64,0x2c,0x74,0x61,0x69,0x6c,0x3a,0x63,0x2c,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x3a,0x65,0x7d,0x3a,0x28,0x66,0x2e,0x69,0x73,0x42,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x3d,0x62,0x2c,0x66,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3d,0x30,0x2c,0x66,0x2e,0x6c,0x61,0x73,0x74,0x3d,0x64,0x2c,0x66,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x63,0x2c,0x66,0x2e,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x3d,0x65,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x78,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x65,0x3d,0x64,0x2e,0x72,0x65,0x76,0x65,0x61,0x6c,0x4f,0x72,0x64,0x65,0x72,0x2c,0x66,0x3d,0x64,0x2e,0x74,0x61,0x69,0x6c,0x3b,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x63,0x29,0x3b,0x64,0x3d,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x64,0x26,0x32,0x29,0x29,0x64,0x3d,0x64,0x26,0x31,0x7c,0x32,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x61,0x3a,0x66,0x6f,0x72,0x28,0x61,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x26,0x26,0x76,0x6a,0x28,0x61,0x2c,0x63,0x2c,0x62,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x39,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x76,0x6a,0x28,0x61,0x2c,0x63,0x2c,0x62,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x3b,0x61,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x61,0x3d,0x3d,0x3d,0x62,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x62,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x64,0x26,0x3d,0x31,0x7d,0x47,0x28,0x4c,0x2c,0x64,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x6c,0x73,0x65,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x73,0x5c,0x22,0x3a,0x63,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x61,0x3d,0x63,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x43,0x68,0x28,0x61,0x29,0x26,0x26,0x28,0x65,0x3d,0x63,0x29,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x63,0x3d,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x28,0x65,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x65,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x77,0x6a,0x28,0x62,0x2c,0x21,0x31,0x2c,0x65,0x2c,0x63,0x2c,0x66,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x5c,0x22,0x3a,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x66,0x6f,0x72,0x28,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x7b,0x61,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x43,0x68,0x28,0x61,0x29,0x29,0x7b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x61,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x63,0x3b,0x63,0x3d,0x65,0x3b,0x65,0x3d,0x61,0x7d,0x77,0x6a,0x28,0x62,0x2c,0x21,0x30,0x2c,0x63,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x6f,0x67,0x65,0x74,0x68,0x65,0x72,0x5c,0x22,0x3a,0x77,0x6a,0x28,0x62,0x2c,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x62,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x61,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x29,0x3b,0x72,0x68,0x7c,0x3d,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x63,0x26,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x21,0x3d,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x35,0x33,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x61,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x3d,0x50,0x67,0x28,0x61,0x2c,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x29,0x3b,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x63,0x3b,0x66,0x6f,0x72,0x28,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x50,0x67,0x28,0x61,0x2c,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x29,0x2c,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x3b,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x6b,0x6a,0x28,0x62,0x29,0x3b,0x49,0x67,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x41,0x68,0x28,0x62,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x5a,0x66,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x63,0x67,0x28,0x62,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x79,0x68,0x28,0x62,0x2c,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x65,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x47,0x28,0x57,0x67,0x2c,0x64,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x3b,0x64,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x64,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x47,0x28,0x4c,0x2c,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x26,0x31,0x29,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x63,0x26,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x47,0x28,0x4c,0x2c,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x26,0x31,0x29,0x3b,0x61,0x3d,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x47,0x28,0x4c,0x2c,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x26,0x31,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x64,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x63,0x26,0x5c,0x6e,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x7b,0x69,0x66,0x28,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x78,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x7d,0x65,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x47,0x28,0x4c,0x2c,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x69,0x66,0x28,0x64,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x65,0x6c,0x73,0x65,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x64,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x76,0x61,0x72,0x20,0x7a,0x6a,0x2c,0x41,0x6a,0x2c,0x42,0x6a,0x2c,0x43,0x6a,0x3b,0x5c,0x6e,0x7a,0x6a,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x29,0x61,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x34,0x21,0x3d,0x3d,0x63,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x63,0x3b,0x63,0x3d,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x63,0x3d,0x3d,0x3d,0x62,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x62,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x63,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x7d,0x3b,0x41,0x6a,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x3b,0x5c,0x6e,0x42,0x6a,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x69,0x66,0x28,0x65,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x61,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x78,0x68,0x28,0x75,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x65,0x3d,0x59,0x61,0x28,0x61,0x2c,0x65,0x29,0x3b,0x64,0x3d,0x59,0x61,0x28,0x61,0x2c,0x64,0x29,0x3b,0x66,0x3d,0x5b,0x5d,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x65,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x65,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x29,0x3b,0x64,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x64,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x29,0x3b,0x66,0x3d,0x5b,0x5d,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x65,0x3d,0x67,0x62,0x28,0x61,0x2c,0x65,0x29,0x3b,0x64,0x3d,0x67,0x62,0x28,0x61,0x2c,0x64,0x29,0x3b,0x66,0x3d,0x5b,0x5d,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x28,0x61,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x42,0x66,0x29,0x7d,0x75,0x62,0x28,0x63,0x2c,0x64,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x3b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x6c,0x20,0x69,0x6e,0x20,0x65,0x29,0x69,0x66,0x28,0x21,0x64,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6c,0x29,0x26,0x26,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6c,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x65,0x5b,0x6c,0x5d,0x29,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x79,0x6c,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x65,0x5b,0x6c,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x67,0x20,0x69,0x6e,0x20,0x68,0x29,0x68,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x67,0x29,0x26,0x26,0x5c,0x6e,0x28,0x63,0x7c,0x7c,0x28,0x63,0x3d,0x7b,0x7d,0x29,0x2c,0x63,0x5b,0x67,0x5d,0x3d,0x5c,0x22,0x5c,0x22,0x29,0x7d,0x65,0x6c,0x73,0x65,0x5c,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x5c,0x22,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x5c,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x5c,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x5c,0x22,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x5c,0x22,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x65,0x61,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6c,0x29,0x3f,0x66,0x7c,0x7c,0x28,0x66,0x3d,0x5b,0x5d,0x29,0x3a,0x28,0x66,0x3d,0x66,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x3b,0x66,0x6f,0x72,0x28,0x6c,0x20,0x69,0x6e,0x20,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x64,0x5b,0x6c,0x5d,0x3b,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x65,0x3f,0x65,0x5b,0x6c,0x5d,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x69,0x66,0x28,0x64,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6c,0x29,0x26,0x26,0x6b,0x21,0x3d,0x3d,0x68,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x68,0x29,0x29,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x79,0x6c,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x6c,0x29,0x69,0x66,0x28,0x68,0x29,0x7b,0x66,0x6f,0x72,0x28,0x67,0x20,0x69,0x6e,0x20,0x68,0x29,0x21,0x68,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x67,0x29,0x7c,0x7c,0x6b,0x26,0x26,0x6b,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x67,0x29,0x7c,0x7c,0x28,0x63,0x7c,0x7c,0x28,0x63,0x3d,0x7b,0x7d,0x29,0x2c,0x63,0x5b,0x67,0x5d,0x3d,0x5c,0x22,0x5c,0x22,0x29,0x3b,0x66,0x6f,0x72,0x28,0x67,0x20,0x69,0x6e,0x20,0x6b,0x29,0x6b,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x67,0x29,0x26,0x26,0x68,0x5b,0x67,0x5d,0x21,0x3d,0x3d,0x6b,0x5b,0x67,0x5d,0x26,0x26,0x28,0x63,0x7c,0x7c,0x28,0x63,0x3d,0x7b,0x7d,0x29,0x2c,0x63,0x5b,0x67,0x5d,0x3d,0x6b,0x5b,0x67,0x5d,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x63,0x7c,0x7c,0x28,0x66,0x7c,0x7c,0x28,0x66,0x3d,0x5b,0x5d,0x29,0x2c,0x66,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x2c,0x5c,0x6e,0x63,0x29,0x29,0x2c,0x63,0x3d,0x6b,0x3b,0x65,0x6c,0x73,0x65,0x5c,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x5c,0x22,0x3d,0x3d,0x3d,0x6c,0x3f,0x28,0x6b,0x3d,0x6b,0x3f,0x6b,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x68,0x3d,0x68,0x3f,0x68,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x26,0x26,0x68,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x28,0x66,0x3d,0x66,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x2c,0x6b,0x29,0x29,0x3a,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x6c,0x3f,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x26,0x26,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x7c,0x7c,0x28,0x66,0x3d,0x66,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x2c,0x5c,0x22,0x5c,0x22,0x2b,0x6b,0x29,0x3a,0x5c,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x5c,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x6c,0x26,0x26,0x28,0x65,0x61,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x6c,0x29,0x3f,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x26,0x26,0x5c,0x22,0x6f,0x6e,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x6c,0x26,0x26,0x44,0x28,0x5c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x2c,0x61,0x29,0x2c,0x66,0x7c,0x7c,0x68,0x3d,0x3d,0x3d,0x6b,0x7c,0x7c,0x28,0x66,0x3d,0x5b,0x5d,0x29,0x29,0x3a,0x28,0x66,0x3d,0x66,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x6c,0x2c,0x6b,0x29,0x29,0x7d,0x63,0x26,0x26,0x28,0x66,0x3d,0x66,0x7c,0x7c,0x5b,0x5d,0x29,0x2e,0x70,0x75,0x73,0x68,0x28,0x5c,0x22,0x73,0x74,0x79,0x6c,0x65,0x5c,0x22,0x2c,0x63,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x66,0x3b,0x69,0x66,0x28,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6c,0x29,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x7d,0x7d,0x3b,0x43,0x6a,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x63,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x21,0x49,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x3a,0x62,0x3d,0x61,0x2e,0x74,0x61,0x69,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x28,0x63,0x3d,0x62,0x29,0x2c,0x62,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x61,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x64,0x5c,0x22,0x3a,0x63,0x3d,0x61,0x2e,0x74,0x61,0x69,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x28,0x64,0x3d,0x63,0x29,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x64,0x3f,0x62,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x69,0x6c,0x3f,0x61,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x2e,0x74,0x61,0x69,0x6c,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x64,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x3d,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x63,0x3d,0x30,0x2c,0x64,0x3d,0x30,0x3b,0x69,0x66,0x28,0x62,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x63,0x7c,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x64,0x7c,0x3d,0x65,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x2c,0x64,0x7c,0x3d,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x65,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x3b,0x29,0x63,0x7c,0x3d,0x65,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x64,0x7c,0x3d,0x65,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x2c,0x64,0x7c,0x3d,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x2c,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x65,0x3d,0x65,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x61,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x64,0x3b,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x77,0x67,0x28,0x62,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x37,0x3a,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5a,0x66,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x24,0x66,0x28,0x29,0x2c,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x64,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x7a,0x68,0x28,0x29,0x3b,0x45,0x28,0x57,0x66,0x29,0x3b,0x45,0x28,0x48,0x29,0x3b,0x45,0x68,0x28,0x29,0x3b,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x26,0x26,0x28,0x64,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x2c,0x64,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x47,0x67,0x28,0x62,0x29,0x3f,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x3a,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x35,0x36,0x29,0x7c,0x7c,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x30,0x32,0x34,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x7a,0x67,0x26,0x26,0x28,0x46,0x6a,0x28,0x7a,0x67,0x29,0x2c,0x7a,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x29,0x3b,0x41,0x6a,0x28,0x61,0x2c,0x62,0x29,0x3b,0x53,0x28,0x62,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x42,0x68,0x28,0x62,0x29,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x78,0x68,0x28,0x77,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x5c,0x6e,0x63,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x42,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x2c,0x61,0x2e,0x72,0x65,0x66,0x21,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x35,0x31,0x32,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x21,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x36,0x29,0x29,0x3b,0x53,0x28,0x62,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x61,0x3d,0x78,0x68,0x28,0x75,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x69,0x66,0x28,0x47,0x67,0x28,0x62,0x29,0x29,0x7b,0x64,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x63,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x64,0x5b,0x4f,0x66,0x5d,0x3d,0x62,0x3b,0x64,0x5b,0x50,0x66,0x5d,0x3d,0x66,0x3b,0x61,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x69,0x61,0x6c,0x6f,0x67,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x44,0x28,0x5c,0x22,0x63,0x6c,0x6f,0x73,0x65,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x66,0x72,0x61,0x6d,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x65,0x6d,0x62,0x65,0x64,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x6c,0x6f,0x61,0x64,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x76,0x69,0x64,0x65,0x6f,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x61,0x75,0x64,0x69,0x6f,0x5c,0x22,0x3a,0x66,0x6f,0x72,0x28,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x6c,0x66,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x44,0x28,0x6c,0x66,0x5b,0x65,0x5d,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x65,0x72,0x72,0x6f,0x72,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6d,0x67,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6d,0x61,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6c,0x69,0x6e,0x6b,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x65,0x72,0x72,0x6f,0x72,0x5c,0x22,0x2c,0x5c,0x6e,0x64,0x29,0x3b,0x44,0x28,0x5c,0x22,0x6c,0x6f,0x61,0x64,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x74,0x6f,0x67,0x67,0x6c,0x65,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x5a,0x61,0x28,0x64,0x2c,0x66,0x29,0x3b,0x44,0x28,0x5c,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x64,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3a,0x21,0x21,0x66,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x7d,0x3b,0x44,0x28,0x5c,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x5c,0x22,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x68,0x62,0x28,0x64,0x2c,0x66,0x29,0x2c,0x44,0x28,0x5c,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x5c,0x22,0x2c,0x64,0x29,0x7d,0x75,0x62,0x28,0x63,0x2c,0x66,0x29,0x3b,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x67,0x20,0x69,0x6e,0x20,0x66,0x29,0x69,0x66,0x28,0x66,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x67,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x66,0x5b,0x67,0x5d,0x3b,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x67,0x3f,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x68,0x3f,0x64,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x68,0x26,0x26,0x28,0x21,0x30,0x21,0x3d,0x3d,0x66,0x2e,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x26,0x26,0x41,0x66,0x28,0x64,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x68,0x2c,0x61,0x29,0x2c,0x65,0x3d,0x5b,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5c,0x22,0x2c,0x68,0x5d,0x29,0x3a,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x68,0x26,0x26,0x64,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x21,0x3d,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x68,0x26,0x26,0x28,0x21,0x30,0x21,0x3d,0x3d,0x66,0x2e,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x26,0x26,0x41,0x66,0x28,0x64,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2c,0x5c,0x6e,0x68,0x2c,0x61,0x29,0x2c,0x65,0x3d,0x5b,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5c,0x22,0x2c,0x5c,0x22,0x5c,0x22,0x2b,0x68,0x5d,0x29,0x3a,0x65,0x61,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x67,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x68,0x26,0x26,0x5c,0x22,0x6f,0x6e,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x67,0x26,0x26,0x44,0x28,0x5c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x2c,0x64,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x56,0x61,0x28,0x64,0x29,0x3b,0x64,0x62,0x28,0x64,0x2c,0x66,0x2c,0x21,0x30,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x56,0x61,0x28,0x64,0x29,0x3b,0x6a,0x62,0x28,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x28,0x64,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x42,0x66,0x29,0x7d,0x64,0x3d,0x65,0x3b,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x67,0x3d,0x39,0x3d,0x3d,0x3d,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x65,0x3a,0x65,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x3b,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x61,0x3d,0x6b,0x62,0x28,0x63,0x29,0x29,0x3b,0x5c,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x61,0x3f,0x5c,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x3f,0x28,0x61,0x3d,0x67,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x5c,0x22,0x64,0x69,0x76,0x5c,0x22,0x29,0x2c,0x61,0x2e,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x3d,0x5c,0x22,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x5c,0x5c,0x78,0x33,0x63,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x5c,0x22,0x2c,0x61,0x3d,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x29,0x3a,0x5c,0x6e,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x2e,0x69,0x73,0x3f,0x61,0x3d,0x67,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x63,0x2c,0x7b,0x69,0x73,0x3a,0x64,0x2e,0x69,0x73,0x7d,0x29,0x3a,0x28,0x61,0x3d,0x67,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x63,0x29,0x2c,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x28,0x67,0x3d,0x61,0x2c,0x64,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3f,0x67,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3d,0x21,0x30,0x3a,0x64,0x2e,0x73,0x69,0x7a,0x65,0x26,0x26,0x28,0x67,0x2e,0x73,0x69,0x7a,0x65,0x3d,0x64,0x2e,0x73,0x69,0x7a,0x65,0x29,0x29,0x29,0x3a,0x61,0x3d,0x67,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x4e,0x53,0x28,0x61,0x2c,0x63,0x29,0x3b,0x61,0x5b,0x4f,0x66,0x5d,0x3d,0x62,0x3b,0x61,0x5b,0x50,0x66,0x5d,0x3d,0x64,0x3b,0x7a,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x21,0x31,0x2c,0x21,0x31,0x29,0x3b,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x61,0x3b,0x61,0x3a,0x7b,0x67,0x3d,0x76,0x62,0x28,0x63,0x2c,0x64,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x69,0x61,0x6c,0x6f,0x67,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x44,0x28,0x5c,0x22,0x63,0x6c,0x6f,0x73,0x65,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x65,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x66,0x72,0x61,0x6d,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x65,0x6d,0x62,0x65,0x64,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x6c,0x6f,0x61,0x64,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x65,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x76,0x69,0x64,0x65,0x6f,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x61,0x75,0x64,0x69,0x6f,0x5c,0x22,0x3a,0x66,0x6f,0x72,0x28,0x65,0x3d,0x30,0x3b,0x65,0x3c,0x6c,0x66,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x65,0x2b,0x2b,0x29,0x44,0x28,0x6c,0x66,0x5b,0x65,0x5d,0x2c,0x61,0x29,0x3b,0x65,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x65,0x72,0x72,0x6f,0x72,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x65,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6d,0x67,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6d,0x61,0x67,0x65,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6c,0x69,0x6e,0x6b,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x65,0x72,0x72,0x6f,0x72,0x5c,0x22,0x2c,0x5c,0x6e,0x61,0x29,0x3b,0x44,0x28,0x5c,0x22,0x6c,0x6f,0x61,0x64,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x65,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x5c,0x22,0x3a,0x44,0x28,0x5c,0x22,0x74,0x6f,0x67,0x67,0x6c,0x65,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x65,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x5a,0x61,0x28,0x61,0x2c,0x64,0x29,0x3b,0x65,0x3d,0x59,0x61,0x28,0x61,0x2c,0x64,0x29,0x3b,0x44,0x28,0x5c,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3a,0x65,0x3d,0x64,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x61,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3a,0x21,0x21,0x64,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x7d,0x3b,0x65,0x3d,0x41,0x28,0x7b,0x7d,0x2c,0x64,0x2c,0x7b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x7d,0x29,0x3b,0x44,0x28,0x5c,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x68,0x62,0x28,0x61,0x2c,0x64,0x29,0x3b,0x65,0x3d,0x67,0x62,0x28,0x61,0x2c,0x64,0x29,0x3b,0x44,0x28,0x5c,0x22,0x69,0x6e,0x76,0x61,0x6c,0x69,0x64,0x5c,0x22,0x2c,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x65,0x3d,0x64,0x7d,0x75,0x62,0x28,0x63,0x2c,0x65,0x29,0x3b,0x68,0x3d,0x65,0x3b,0x66,0x6f,0x72,0x28,0x66,0x20,0x69,0x6e,0x20,0x68,0x29,0x69,0x66,0x28,0x68,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x66,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x68,0x5b,0x66,0x5d,0x3b,0x5c,0x22,0x73,0x74,0x79,0x6c,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x66,0x3f,0x73,0x62,0x28,0x61,0x2c,0x6b,0x29,0x3a,0x5c,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x5c,0x22,0x3d,0x3d,0x3d,0x66,0x3f,0x28,0x6b,0x3d,0x6b,0x3f,0x6b,0x2e,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x26,0x26,0x6e,0x62,0x28,0x61,0x2c,0x6b,0x29,0x29,0x3a,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x66,0x3f,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x3f,0x28,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x21,0x3d,0x3d,0x5c,0x6e,0x63,0x7c,0x7c,0x5c,0x22,0x5c,0x22,0x21,0x3d,0x3d,0x6b,0x29,0x26,0x26,0x6f,0x62,0x28,0x61,0x2c,0x6b,0x29,0x3a,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x26,0x26,0x6f,0x62,0x28,0x61,0x2c,0x5c,0x22,0x5c,0x22,0x2b,0x6b,0x29,0x3a,0x5c,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x66,0x26,0x26,0x5c,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x66,0x26,0x26,0x5c,0x22,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x5c,0x22,0x21,0x3d,0x3d,0x66,0x26,0x26,0x28,0x65,0x61,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x66,0x29,0x3f,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x26,0x26,0x5c,0x22,0x6f,0x6e,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x3d,0x3d,0x3d,0x66,0x26,0x26,0x44,0x28,0x5c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x5c,0x22,0x2c,0x61,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x6b,0x26,0x26,0x74,0x61,0x28,0x61,0x2c,0x66,0x2c,0x6b,0x2c,0x67,0x29,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x56,0x61,0x28,0x61,0x29,0x3b,0x64,0x62,0x28,0x61,0x2c,0x64,0x2c,0x21,0x31,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x56,0x61,0x28,0x61,0x29,0x3b,0x6a,0x62,0x28,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x64,0x2e,0x76,0x61,0x6c,0x75,0x65,0x26,0x26,0x61,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x5c,0x22,0x76,0x61,0x6c,0x75,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x5c,0x22,0x2b,0x53,0x61,0x28,0x64,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x61,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3d,0x21,0x21,0x64,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3b,0x66,0x3d,0x64,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x66,0x3f,0x66,0x62,0x28,0x61,0x2c,0x21,0x21,0x64,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x66,0x2c,0x21,0x31,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x64,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x26,0x26,0x66,0x62,0x28,0x61,0x2c,0x21,0x21,0x64,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x64,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x2c,0x5c,0x6e,0x21,0x30,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x26,0x26,0x28,0x61,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x42,0x66,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x64,0x3d,0x21,0x21,0x64,0x2e,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6d,0x67,0x5c,0x22,0x3a,0x64,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x64,0x3d,0x21,0x31,0x7d,0x7d,0x64,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x35,0x31,0x32,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x30,0x39,0x37,0x31,0x35,0x32,0x29,0x7d,0x53,0x28,0x62,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x69,0x66,0x28,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x43,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x64,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x36,0x29,0x29,0x3b,0x63,0x3d,0x78,0x68,0x28,0x77,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x78,0x68,0x28,0x75,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x69,0x66,0x28,0x47,0x67,0x28,0x62,0x29,0x29,0x7b,0x64,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x63,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x64,0x5b,0x4f,0x66,0x5d,0x3d,0x62,0x3b,0x69,0x66,0x28,0x66,0x3d,0x64,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x21,0x3d,0x3d,0x63,0x29,0x69,0x66,0x28,0x61,0x3d,0x5c,0x6e,0x78,0x67,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x41,0x66,0x28,0x64,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x2c,0x63,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x21,0x30,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x26,0x26,0x41,0x66,0x28,0x64,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x2c,0x63,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x7d,0x66,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x64,0x3d,0x28,0x39,0x3d,0x3d,0x3d,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x63,0x3a,0x63,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x54,0x65,0x78,0x74,0x4e,0x6f,0x64,0x65,0x28,0x64,0x29,0x2c,0x64,0x5b,0x4f,0x66,0x5d,0x3d,0x62,0x2c,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x64,0x7d,0x53,0x28,0x62,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x45,0x28,0x4c,0x29,0x3b,0x64,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x69,0x66,0x28,0x49,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x79,0x67,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x48,0x67,0x28,0x29,0x2c,0x49,0x67,0x28,0x29,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x39,0x38,0x35,0x36,0x30,0x2c,0x66,0x3d,0x21,0x31,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x66,0x3d,0x47,0x67,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x5c,0x6e,0x61,0x29,0x7b,0x69,0x66,0x28,0x21,0x66,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x38,0x29,0x29,0x3b,0x66,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3f,0x66,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x21,0x66,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x37,0x29,0x29,0x3b,0x66,0x5b,0x4f,0x66,0x5d,0x3d,0x62,0x7d,0x65,0x6c,0x73,0x65,0x20,0x49,0x67,0x28,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x26,0x26,0x28,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x3b,0x53,0x28,0x62,0x29,0x3b,0x66,0x3d,0x21,0x31,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x7a,0x67,0x26,0x26,0x28,0x46,0x6a,0x28,0x7a,0x67,0x29,0x2c,0x7a,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x2c,0x66,0x3d,0x21,0x30,0x3b,0x69,0x66,0x28,0x21,0x66,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x36,0x35,0x35,0x33,0x36,0x3f,0x62,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x2c,0x62,0x3b,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x3b,0x64,0x21,0x3d,0x3d,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x26,0x26,0x64,0x26,0x26,0x28,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x38,0x31,0x39,0x32,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x28,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x26,0x31,0x29,0x3f,0x30,0x3d,0x3d,0x3d,0x54,0x26,0x26,0x28,0x54,0x3d,0x33,0x29,0x3a,0x74,0x6a,0x28,0x29,0x29,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x3b,0x53,0x28,0x62,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x7a,0x68,0x28,0x29,0x2c,0x5c,0x6e,0x41,0x6a,0x28,0x61,0x2c,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x73,0x66,0x28,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x2c,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x68,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x2c,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5a,0x66,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x24,0x66,0x28,0x29,0x2c,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x45,0x28,0x4c,0x29,0x3b,0x66,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x3b,0x67,0x3d,0x66,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x29,0x69,0x66,0x28,0x64,0x29,0x44,0x6a,0x28,0x66,0x2c,0x21,0x31,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x54,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x66,0x6f,0x72,0x28,0x61,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x7b,0x67,0x3d,0x43,0x68,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x29,0x7b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x3b,0x44,0x6a,0x28,0x66,0x2c,0x21,0x31,0x29,0x3b,0x64,0x3d,0x67,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x64,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x3b,0x62,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x3b,0x64,0x3d,0x63,0x3b,0x66,0x6f,0x72,0x28,0x63,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x66,0x3d,0x63,0x2c,0x61,0x3d,0x64,0x2c,0x66,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x36,0x2c,0x5c,0x6e,0x67,0x3d,0x66,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x3f,0x28,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x2c,0x66,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x61,0x2c,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3a,0x28,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x67,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x2c,0x66,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x67,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x67,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x66,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x66,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x67,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x67,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x66,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x67,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x66,0x2e,0x74,0x79,0x70,0x65,0x3d,0x67,0x2e,0x74,0x79,0x70,0x65,0x2c,0x61,0x3d,0x67,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x2c,0x66,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x7b,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x61,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x7d,0x29,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x47,0x28,0x4c,0x2c,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x26,0x31,0x7c,0x32,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x61,0x3d,0x5c,0x6e,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x2e,0x74,0x61,0x69,0x6c,0x26,0x26,0x42,0x28,0x29,0x3e,0x47,0x6a,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x64,0x3d,0x21,0x30,0x2c,0x44,0x6a,0x28,0x66,0x2c,0x21,0x31,0x29,0x2c,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x29,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x21,0x64,0x29,0x69,0x66,0x28,0x61,0x3d,0x43,0x68,0x28,0x67,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x69,0x66,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x64,0x3d,0x21,0x30,0x2c,0x63,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x63,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x34,0x29,0x2c,0x44,0x6a,0x28,0x66,0x2c,0x21,0x30,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x66,0x2e,0x74,0x61,0x69,0x6c,0x26,0x26,0x5c,0x22,0x68,0x69,0x64,0x64,0x65,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x66,0x2e,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x26,0x26,0x21,0x67,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x21,0x49,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x7d,0x65,0x6c,0x73,0x65,0x20,0x32,0x2a,0x42,0x28,0x29,0x2d,0x66,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3e,0x47,0x6a,0x26,0x26,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x32,0x38,0x2c,0x64,0x3d,0x21,0x30,0x2c,0x44,0x6a,0x28,0x66,0x2c,0x21,0x31,0x29,0x2c,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x29,0x3b,0x66,0x2e,0x69,0x73,0x42,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x3f,0x28,0x67,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x67,0x29,0x3a,0x28,0x63,0x3d,0x66,0x2e,0x6c,0x61,0x73,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x67,0x3a,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x67,0x2c,0x66,0x2e,0x6c,0x61,0x73,0x74,0x3d,0x67,0x29,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x2e,0x74,0x61,0x69,0x6c,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3d,0x66,0x2e,0x74,0x61,0x69,0x6c,0x2c,0x66,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x3d,0x5c,0x6e,0x62,0x2c,0x66,0x2e,0x74,0x61,0x69,0x6c,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x66,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3d,0x42,0x28,0x29,0x2c,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x3d,0x4c,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x47,0x28,0x4c,0x2c,0x64,0x3f,0x63,0x26,0x31,0x7c,0x32,0x3a,0x63,0x26,0x31,0x29,0x2c,0x62,0x3b,0x53,0x28,0x62,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x6a,0x28,0x29,0x2c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x38,0x31,0x39,0x32,0x29,0x2c,0x64,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x3f,0x30,0x21,0x3d,0x3d,0x28,0x66,0x6a,0x26,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x34,0x29,0x26,0x26,0x28,0x53,0x28,0x62,0x29,0x2c,0x62,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x36,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x38,0x31,0x39,0x32,0x29,0x29,0x3a,0x53,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x35,0x36,0x2c,0x62,0x2e,0x74,0x61,0x67,0x29,0x29,0x3b,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x77,0x67,0x28,0x62,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5a,0x66,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x29,0x26,0x26,0x24,0x66,0x28,0x29,0x2c,0x61,0x3d,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x2c,0x61,0x26,0x36,0x35,0x35,0x33,0x36,0x3f,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x61,0x26,0x2d,0x36,0x35,0x35,0x33,0x37,0x7c,0x31,0x32,0x38,0x2c,0x62,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x7a,0x68,0x28,0x29,0x2c,0x45,0x28,0x57,0x66,0x29,0x2c,0x45,0x28,0x48,0x29,0x2c,0x45,0x68,0x28,0x29,0x2c,0x61,0x3d,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x61,0x26,0x36,0x35,0x35,0x33,0x36,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x61,0x26,0x31,0x32,0x38,0x29,0x3f,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x61,0x26,0x2d,0x36,0x35,0x35,0x33,0x37,0x7c,0x31,0x32,0x38,0x2c,0x62,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x42,0x68,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x45,0x28,0x4c,0x29,0x3b,0x61,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x34,0x30,0x29,0x29,0x3b,0x49,0x67,0x28,0x29,0x7d,0x61,0x3d,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x26,0x36,0x35,0x35,0x33,0x36,0x3f,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x61,0x26,0x2d,0x36,0x35,0x35,0x33,0x37,0x7c,0x31,0x32,0x38,0x2c,0x62,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x45,0x28,0x4c,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x7a,0x68,0x28,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x68,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x48,0x6a,0x28,0x29,0x2c,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x76,0x61,0x72,0x20,0x4a,0x6a,0x3d,0x21,0x31,0x2c,0x55,0x3d,0x21,0x31,0x2c,0x4b,0x6a,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x57,0x65,0x61,0x6b,0x53,0x65,0x74,0x3f,0x57,0x65,0x61,0x6b,0x53,0x65,0x74,0x3a,0x53,0x65,0x74,0x2c,0x56,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x72,0x65,0x66,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x29,0x74,0x72,0x79,0x7b,0x63,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x64,0x29,0x7b,0x57,0x28,0x61,0x2c,0x62,0x2c,0x64,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x63,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x74,0x72,0x79,0x7b,0x63,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x64,0x29,0x7b,0x57,0x28,0x61,0x2c,0x62,0x2c,0x64,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x4e,0x6a,0x3d,0x21,0x31,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x43,0x66,0x3d,0x64,0x64,0x3b,0x61,0x3d,0x4d,0x65,0x28,0x29,0x3b,0x69,0x66,0x28,0x4e,0x65,0x28,0x61,0x29,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x5c,0x22,0x69,0x6e,0x20,0x61,0x29,0x76,0x61,0x72,0x20,0x63,0x3d,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x61,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x2c,0x65,0x6e,0x64,0x3a,0x61,0x2e,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x7d,0x3b,0x65,0x6c,0x73,0x65,0x20,0x61,0x3a,0x7b,0x63,0x3d,0x28,0x63,0x3d,0x61,0x2e,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x29,0x26,0x26,0x63,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x7c,0x7c,0x77,0x69,0x6e,0x64,0x6f,0x77,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x26,0x26,0x63,0x2e,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x3b,0x69,0x66,0x28,0x64,0x26,0x26,0x30,0x21,0x3d,0x3d,0x64,0x2e,0x72,0x61,0x6e,0x67,0x65,0x43,0x6f,0x75,0x6e,0x74,0x29,0x7b,0x63,0x3d,0x64,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x2e,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x2c,0x66,0x3d,0x64,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x3b,0x64,0x3d,0x64,0x2e,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x3b,0x74,0x72,0x79,0x7b,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x2c,0x66,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x46,0x29,0x7b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x76,0x61,0x72,0x20,0x67,0x3d,0x30,0x2c,0x68,0x3d,0x2d,0x31,0x2c,0x6b,0x3d,0x2d,0x31,0x2c,0x6c,0x3d,0x30,0x2c,0x6d,0x3d,0x30,0x2c,0x71,0x3d,0x61,0x2c,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x79,0x3b,0x3b,0x29,0x7b,0x71,0x21,0x3d,0x3d,0x63,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x65,0x26,0x26,0x33,0x21,0x3d,0x3d,0x71,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x28,0x68,0x3d,0x67,0x2b,0x65,0x29,0x3b,0x71,0x21,0x3d,0x3d,0x66,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x64,0x26,0x26,0x33,0x21,0x3d,0x3d,0x71,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x28,0x6b,0x3d,0x67,0x2b,0x64,0x29,0x3b,0x33,0x3d,0x3d,0x3d,0x71,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x28,0x67,0x2b,0x3d,0x5c,0x6e,0x71,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x28,0x79,0x3d,0x71,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x72,0x3d,0x71,0x3b,0x71,0x3d,0x79,0x7d,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x71,0x3d,0x3d,0x3d,0x61,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x3b,0x72,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x2b,0x2b,0x6c,0x3d,0x3d,0x3d,0x65,0x26,0x26,0x28,0x68,0x3d,0x67,0x29,0x3b,0x72,0x3d,0x3d,0x3d,0x66,0x26,0x26,0x2b,0x2b,0x6d,0x3d,0x3d,0x3d,0x64,0x26,0x26,0x28,0x6b,0x3d,0x67,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x28,0x79,0x3d,0x71,0x2e,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x71,0x3d,0x72,0x3b,0x72,0x3d,0x71,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x7d,0x71,0x3d,0x79,0x7d,0x63,0x3d,0x2d,0x31,0x3d,0x3d,0x3d,0x68,0x7c,0x7c,0x2d,0x31,0x3d,0x3d,0x3d,0x6b,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x68,0x2c,0x65,0x6e,0x64,0x3a,0x6b,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x63,0x3d,0x63,0x7c,0x7c,0x7b,0x73,0x74,0x61,0x72,0x74,0x3a,0x30,0x2c,0x65,0x6e,0x64,0x3a,0x30,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x44,0x66,0x3d,0x7b,0x66,0x6f,0x63,0x75,0x73,0x65,0x64,0x45,0x6c,0x65,0x6d,0x3a,0x61,0x2c,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x52,0x61,0x6e,0x67,0x65,0x3a,0x63,0x7d,0x3b,0x64,0x64,0x3d,0x21,0x31,0x3b,0x66,0x6f,0x72,0x28,0x56,0x3d,0x62,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x69,0x66,0x28,0x62,0x3d,0x56,0x2c,0x61,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x31,0x30,0x32,0x38,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2c,0x56,0x3d,0x61,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x62,0x3d,0x56,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x30,0x32,0x34,0x29,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x5c,0x6e,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x4a,0x3d,0x6e,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x78,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x77,0x3d,0x78,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3f,0x74,0x3a,0x43,0x69,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x74,0x29,0x2c,0x4a,0x29,0x3b,0x78,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x77,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x75,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x31,0x3d,0x3d,0x3d,0x75,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x75,0x2e,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x5c,0x22,0x5c,0x22,0x3a,0x39,0x3d,0x3d,0x3d,0x75,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x75,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x26,0x26,0x75,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x75,0x2e,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x33,0x29,0x29,0x3b,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x46,0x29,0x7b,0x57,0x28,0x62,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x46,0x29,0x7d,0x61,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x56,0x3d,0x61,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x56,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x6e,0x3d,0x4e,0x6a,0x3b,0x4e,0x6a,0x3d,0x21,0x31,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x3f,0x64,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x3d,0x64,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x7b,0x69,0x66,0x28,0x28,0x65,0x2e,0x74,0x61,0x67,0x26,0x61,0x29,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x65,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3b,0x65,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x66,0x26,0x26,0x4d,0x6a,0x28,0x62,0x2c,0x63,0x2c,0x66,0x29,0x7d,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x65,0x21,0x3d,0x3d,0x64,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x6a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x62,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x62,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x62,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x3d,0x62,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x7b,0x69,0x66,0x28,0x28,0x63,0x2e,0x74,0x61,0x67,0x26,0x61,0x29,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x3b,0x63,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3d,0x64,0x28,0x29,0x7d,0x63,0x3d,0x63,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x63,0x21,0x3d,0x3d,0x62,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x6a,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x72,0x65,0x66,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x61,0x3d,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x61,0x3d,0x63,0x7d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x3f,0x62,0x28,0x61,0x29,0x3a,0x62,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x61,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x6a,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x53,0x6a,0x28,0x62,0x29,0x29,0x3b,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x35,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x28,0x62,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x62,0x5b,0x4f,0x66,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x62,0x5b,0x50,0x66,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x62,0x5b,0x6f,0x66,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x62,0x5b,0x51,0x66,0x5d,0x2c,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x62,0x5b,0x52,0x66,0x5d,0x29,0x29,0x3b,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x6a,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x35,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x6a,0x28,0x61,0x29,0x7b,0x61,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x3b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x54,0x6a,0x28,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x35,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x36,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x31,0x38,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x29,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x20,0x61,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7c,0x7c,0x34,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x20,0x61,0x3b,0x65,0x6c,0x73,0x65,0x20,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x61,0x2c,0x61,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x69,0x66,0x28,0x21,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x56,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x64,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x64,0x29,0x61,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x62,0x3f,0x38,0x3d,0x3d,0x3d,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x63,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x61,0x2c,0x62,0x29,0x3a,0x63,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x61,0x2c,0x62,0x29,0x3a,0x28,0x38,0x3d,0x3d,0x3d,0x63,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x28,0x62,0x3d,0x63,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2c,0x62,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x61,0x2c,0x63,0x29,0x29,0x3a,0x28,0x62,0x3d,0x63,0x2c,0x62,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x61,0x29,0x29,0x2c,0x63,0x3d,0x63,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x7c,0x7c,0x28,0x62,0x2e,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x3d,0x42,0x66,0x29,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x34,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x61,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x29,0x66,0x6f,0x72,0x28,0x56,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x56,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x64,0x7c,0x7c,0x36,0x3d,0x3d,0x3d,0x64,0x29,0x61,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x62,0x3f,0x63,0x2e,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x28,0x61,0x2c,0x62,0x29,0x3a,0x63,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x61,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x34,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x61,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x29,0x66,0x6f,0x72,0x28,0x57,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3b,0x29,0x57,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x61,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x76,0x61,0x72,0x20,0x58,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x58,0x6a,0x3d,0x21,0x31,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x66,0x6f,0x72,0x28,0x63,0x3d,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x5a,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x6c,0x63,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x63,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x29,0x74,0x72,0x79,0x7b,0x6c,0x63,0x2e,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x28,0x6b,0x63,0x2c,0x63,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x68,0x29,0x7b,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x63,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x55,0x7c,0x7c,0x4c,0x6a,0x28,0x63,0x2c,0x62,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x76,0x61,0x72,0x20,0x64,0x3d,0x58,0x2c,0x65,0x3d,0x58,0x6a,0x3b,0x58,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x58,0x3d,0x64,0x3b,0x58,0x6a,0x3d,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x58,0x26,0x26,0x28,0x58,0x6a,0x3f,0x28,0x61,0x3d,0x58,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x38,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x63,0x29,0x3a,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x63,0x29,0x29,0x3a,0x58,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x38,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x58,0x26,0x26,0x28,0x58,0x6a,0x3f,0x28,0x61,0x3d,0x58,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x38,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x4b,0x66,0x28,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2c,0x63,0x29,0x3a,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x4b,0x66,0x28,0x61,0x2c,0x63,0x29,0x2c,0x62,0x64,0x28,0x61,0x29,0x29,0x3a,0x4b,0x66,0x28,0x58,0x2c,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x64,0x3d,0x58,0x3b,0x65,0x3d,0x58,0x6a,0x3b,0x58,0x3d,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x58,0x6a,0x3d,0x21,0x30,0x3b,0x5c,0x6e,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x58,0x3d,0x64,0x3b,0x58,0x6a,0x3d,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x69,0x66,0x28,0x21,0x55,0x26,0x26,0x28,0x64,0x3d,0x63,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x64,0x3d,0x64,0x2e,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x29,0x29,0x7b,0x65,0x3d,0x64,0x3d,0x64,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x65,0x2c,0x67,0x3d,0x66,0x2e,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x3b,0x66,0x3d,0x66,0x2e,0x74,0x61,0x67,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x67,0x26,0x26,0x28,0x30,0x21,0x3d,0x3d,0x28,0x66,0x26,0x32,0x29,0x3f,0x4d,0x6a,0x28,0x63,0x2c,0x62,0x2c,0x67,0x29,0x3a,0x30,0x21,0x3d,0x3d,0x28,0x66,0x26,0x34,0x29,0x26,0x26,0x4d,0x6a,0x28,0x63,0x2c,0x62,0x2c,0x67,0x29,0x29,0x3b,0x65,0x3d,0x65,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x65,0x21,0x3d,0x3d,0x64,0x29,0x7d,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x66,0x28,0x21,0x55,0x26,0x26,0x28,0x4c,0x6a,0x28,0x63,0x2c,0x62,0x29,0x2c,0x64,0x3d,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x29,0x29,0x74,0x72,0x79,0x7b,0x64,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x64,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x68,0x29,0x7b,0x57,0x28,0x63,0x2c,0x62,0x2c,0x68,0x29,0x7d,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x3f,0x28,0x55,0x3d,0x28,0x64,0x3d,0x55,0x29,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5c,0x6e,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x55,0x3d,0x64,0x29,0x3a,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x59,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6b,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x65,0x77,0x20,0x4b,0x6a,0x29,0x3b,0x62,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x62,0x29,0x3b,0x63,0x2e,0x68,0x61,0x73,0x28,0x62,0x29,0x7c,0x7c,0x28,0x63,0x2e,0x61,0x64,0x64,0x28,0x62,0x29,0x2c,0x62,0x2e,0x74,0x68,0x65,0x6e,0x28,0x64,0x2c,0x64,0x29,0x29,0x7d,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x64,0x3d,0x30,0x3b,0x64,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x64,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x5b,0x64,0x5d,0x3b,0x74,0x72,0x79,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x2c,0x67,0x3d,0x62,0x2c,0x68,0x3d,0x67,0x3b,0x61,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x3b,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x68,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x58,0x3d,0x68,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x58,0x6a,0x3d,0x21,0x31,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x58,0x3d,0x68,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x58,0x6a,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x58,0x3d,0x68,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x58,0x6a,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x68,0x3d,0x68,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x58,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x30,0x29,0x29,0x3b,0x5a,0x6a,0x28,0x66,0x2c,0x67,0x2c,0x65,0x29,0x3b,0x58,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x58,0x6a,0x3d,0x21,0x31,0x3b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x28,0x6b,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x65,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6c,0x29,0x7b,0x57,0x28,0x65,0x2c,0x62,0x2c,0x6c,0x29,0x7d,0x7d,0x69,0x66,0x28,0x62,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x35,0x34,0x29,0x66,0x6f,0x72,0x28,0x62,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3b,0x29,0x64,0x6b,0x28,0x62,0x2c,0x61,0x29,0x2c,0x62,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x64,0x3d,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x64,0x26,0x34,0x29,0x7b,0x74,0x72,0x79,0x7b,0x50,0x6a,0x28,0x33,0x2c,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x2c,0x51,0x6a,0x28,0x33,0x2c,0x61,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x74,0x72,0x79,0x7b,0x50,0x6a,0x28,0x35,0x2c,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x64,0x26,0x35,0x31,0x32,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x4c,0x6a,0x28,0x63,0x2c,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x64,0x26,0x35,0x31,0x32,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x4c,0x6a,0x28,0x63,0x2c,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x69,0x66,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x33,0x32,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x74,0x72,0x79,0x7b,0x6f,0x62,0x28,0x65,0x2c,0x5c,0x22,0x5c,0x22,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x7d,0x69,0x66,0x28,0x64,0x26,0x34,0x26,0x26,0x28,0x65,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x65,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3a,0x66,0x2c,0x68,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6b,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x5c,0x6e,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x29,0x74,0x72,0x79,0x7b,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x68,0x26,0x26,0x5c,0x22,0x72,0x61,0x64,0x69,0x6f,0x5c,0x22,0x3d,0x3d,0x3d,0x66,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x66,0x2e,0x6e,0x61,0x6d,0x65,0x26,0x26,0x61,0x62,0x28,0x65,0x2c,0x66,0x29,0x3b,0x76,0x62,0x28,0x68,0x2c,0x67,0x29,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x76,0x62,0x28,0x68,0x2c,0x66,0x29,0x3b,0x66,0x6f,0x72,0x28,0x67,0x3d,0x30,0x3b,0x67,0x3c,0x6b,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x67,0x2b,0x3d,0x32,0x29,0x7b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x6b,0x5b,0x67,0x5d,0x2c,0x71,0x3d,0x6b,0x5b,0x67,0x2b,0x31,0x5d,0x3b,0x5c,0x22,0x73,0x74,0x79,0x6c,0x65,0x5c,0x22,0x3d,0x3d,0x3d,0x6d,0x3f,0x73,0x62,0x28,0x65,0x2c,0x71,0x29,0x3a,0x5c,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x5c,0x22,0x3d,0x3d,0x3d,0x6d,0x3f,0x6e,0x62,0x28,0x65,0x2c,0x71,0x29,0x3a,0x5c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x6d,0x3f,0x6f,0x62,0x28,0x65,0x2c,0x71,0x29,0x3a,0x74,0x61,0x28,0x65,0x2c,0x6d,0x2c,0x71,0x2c,0x6c,0x29,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x68,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x62,0x62,0x28,0x65,0x2c,0x66,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x69,0x62,0x28,0x65,0x2c,0x66,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x76,0x61,0x72,0x20,0x72,0x3d,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3b,0x65,0x2e,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x2e,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3d,0x21,0x21,0x66,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3b,0x76,0x61,0x72,0x20,0x79,0x3d,0x66,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x79,0x3f,0x66,0x62,0x28,0x65,0x2c,0x21,0x21,0x66,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x79,0x2c,0x21,0x31,0x29,0x3a,0x72,0x21,0x3d,0x3d,0x21,0x21,0x66,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x66,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3f,0x66,0x62,0x28,0x65,0x2c,0x21,0x21,0x66,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x5c,0x6e,0x66,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x2c,0x21,0x30,0x29,0x3a,0x66,0x62,0x28,0x65,0x2c,0x21,0x21,0x66,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x66,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x3f,0x5b,0x5d,0x3a,0x5c,0x22,0x5c,0x22,0x2c,0x21,0x31,0x29,0x29,0x7d,0x65,0x5b,0x50,0x66,0x5d,0x3d,0x66,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x64,0x26,0x34,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x32,0x29,0x29,0x3b,0x65,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x66,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x74,0x72,0x79,0x7b,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x3d,0x66,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x64,0x26,0x34,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x74,0x72,0x79,0x7b,0x62,0x64,0x28,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x65,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x65,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x38,0x31,0x39,0x32,0x26,0x26,0x28,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x73,0x48,0x69,0x64,0x64,0x65,0x6e,0x3d,0x66,0x2c,0x21,0x66,0x7c,0x7c,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x28,0x66,0x6b,0x3d,0x42,0x28,0x29,0x29,0x29,0x3b,0x64,0x26,0x34,0x26,0x26,0x61,0x6b,0x28,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x6d,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x3f,0x28,0x55,0x3d,0x28,0x6c,0x3d,0x55,0x29,0x7c,0x7c,0x6d,0x2c,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x2c,0x55,0x3d,0x6c,0x29,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x64,0x26,0x38,0x31,0x39,0x32,0x29,0x7b,0x6c,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x28,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x69,0x73,0x48,0x69,0x64,0x64,0x65,0x6e,0x3d,0x6c,0x29,0x26,0x26,0x21,0x6d,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x66,0x6f,0x72,0x28,0x56,0x3d,0x61,0x2c,0x6d,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x3b,0x29,0x7b,0x66,0x6f,0x72,0x28,0x71,0x3d,0x56,0x3d,0x6d,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x72,0x3d,0x56,0x3b,0x79,0x3d,0x72,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x72,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x50,0x6a,0x28,0x34,0x2c,0x72,0x2c,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x4c,0x6a,0x28,0x72,0x2c,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x72,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x29,0x7b,0x64,0x3d,0x72,0x3b,0x63,0x3d,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x62,0x3d,0x64,0x2c,0x6e,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x5c,0x6e,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x2e,0x73,0x74,0x61,0x74,0x65,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x6e,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x64,0x2c,0x63,0x2c,0x74,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x4c,0x6a,0x28,0x72,0x2c,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7b,0x67,0x6b,0x28,0x71,0x29,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x79,0x3f,0x28,0x79,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x72,0x2c,0x56,0x3d,0x79,0x29,0x3a,0x67,0x6b,0x28,0x71,0x29,0x7d,0x6d,0x3d,0x6d,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x61,0x3a,0x66,0x6f,0x72,0x28,0x6d,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x71,0x3d,0x61,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x35,0x3d,0x3d,0x3d,0x71,0x2e,0x74,0x61,0x67,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x29,0x7b,0x6d,0x3d,0x71,0x3b,0x74,0x72,0x79,0x7b,0x65,0x3d,0x71,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6c,0x3f,0x28,0x66,0x3d,0x65,0x2e,0x73,0x74,0x79,0x6c,0x65,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x2e,0x73,0x65,0x74,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x3f,0x66,0x2e,0x73,0x65,0x74,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x5c,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x5c,0x22,0x2c,0x5c,0x22,0x6e,0x6f,0x6e,0x65,0x5c,0x22,0x2c,0x5c,0x22,0x69,0x6d,0x70,0x6f,0x72,0x74,0x61,0x6e,0x74,0x5c,0x22,0x29,0x3a,0x66,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3d,0x5c,0x22,0x6e,0x6f,0x6e,0x65,0x5c,0x22,0x29,0x3a,0x28,0x68,0x3d,0x71,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x6b,0x3d,0x71,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x2e,0x73,0x74,0x79,0x6c,0x65,0x2c,0x67,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x6b,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x5c,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x5c,0x22,0x29,0x3f,0x6b,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x68,0x2e,0x73,0x74,0x79,0x6c,0x65,0x2e,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3d,0x5c,0x6e,0x72,0x62,0x28,0x5c,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x5c,0x22,0x2c,0x67,0x29,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x36,0x3d,0x3d,0x3d,0x71,0x2e,0x74,0x61,0x67,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x29,0x74,0x72,0x79,0x7b,0x71,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x3d,0x6c,0x3f,0x5c,0x22,0x5c,0x22,0x3a,0x71,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x74,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x74,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x28,0x32,0x32,0x21,0x3d,0x3d,0x71,0x2e,0x74,0x61,0x67,0x26,0x26,0x32,0x33,0x21,0x3d,0x3d,0x71,0x2e,0x74,0x61,0x67,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x71,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x71,0x3d,0x3d,0x3d,0x61,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x71,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x7b,0x71,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x71,0x3b,0x71,0x3d,0x71,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x69,0x66,0x28,0x71,0x3d,0x3d,0x3d,0x61,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x71,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x71,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x71,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x61,0x29,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x6d,0x3d,0x3d,0x3d,0x71,0x26,0x26,0x28,0x6d,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x71,0x3d,0x71,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x6d,0x3d,0x3d,0x3d,0x71,0x26,0x26,0x28,0x6d,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x71,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x71,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x71,0x3d,0x71,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x61,0x29,0x3b,0x65,0x6b,0x28,0x61,0x29,0x3b,0x64,0x26,0x34,0x26,0x26,0x61,0x6b,0x28,0x61,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x63,0x6b,0x28,0x62,0x2c,0x5c,0x6e,0x61,0x29,0x2c,0x65,0x6b,0x28,0x61,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x6b,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3b,0x69,0x66,0x28,0x62,0x26,0x32,0x29,0x7b,0x74,0x72,0x79,0x7b,0x61,0x3a,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x7b,0x69,0x66,0x28,0x54,0x6a,0x28,0x63,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x63,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x30,0x29,0x29,0x3b,0x7d,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x64,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x64,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x33,0x32,0x26,0x26,0x28,0x6f,0x62,0x28,0x65,0x2c,0x5c,0x22,0x5c,0x22,0x29,0x2c,0x64,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x33,0x33,0x29,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x55,0x6a,0x28,0x61,0x29,0x3b,0x57,0x6a,0x28,0x61,0x2c,0x66,0x2c,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x76,0x61,0x72,0x20,0x67,0x3d,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2c,0x68,0x3d,0x55,0x6a,0x28,0x61,0x29,0x3b,0x56,0x6a,0x28,0x61,0x2c,0x68,0x2c,0x67,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x31,0x29,0x29,0x3b,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x57,0x28,0x61,0x2c,0x61,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x6b,0x29,0x7d,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x33,0x7d,0x62,0x26,0x34,0x30,0x39,0x36,0x26,0x26,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x34,0x30,0x39,0x37,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x56,0x3d,0x61,0x3b,0x69,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x64,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x56,0x2c,0x66,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x32,0x32,0x3d,0x3d,0x3d,0x65,0x2e,0x74,0x61,0x67,0x26,0x26,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x4a,0x6a,0x3b,0x69,0x66,0x28,0x21,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x65,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x7c,0x7c,0x55,0x3b,0x68,0x3d,0x4a,0x6a,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x55,0x3b,0x4a,0x6a,0x3d,0x67,0x3b,0x69,0x66,0x28,0x28,0x55,0x3d,0x6b,0x29,0x26,0x26,0x21,0x6c,0x29,0x66,0x6f,0x72,0x28,0x56,0x3d,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x67,0x3d,0x56,0x2c,0x6b,0x3d,0x67,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x32,0x32,0x3d,0x3d,0x3d,0x67,0x2e,0x74,0x61,0x67,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3f,0x6a,0x6b,0x28,0x65,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x3f,0x28,0x6b,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x67,0x2c,0x56,0x3d,0x6b,0x29,0x3a,0x6a,0x6b,0x28,0x65,0x29,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3b,0x29,0x56,0x3d,0x66,0x2c,0x69,0x6b,0x28,0x66,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x66,0x3d,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x56,0x3d,0x65,0x3b,0x4a,0x6a,0x3d,0x68,0x3b,0x55,0x3d,0x6c,0x7d,0x6b,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x30,0x21,0x3d,0x3d,0x28,0x65,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x38,0x37,0x37,0x32,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3f,0x28,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x65,0x2c,0x56,0x3d,0x66,0x29,0x3a,0x6b,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x6b,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x56,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x38,0x37,0x37,0x32,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x38,0x37,0x37,0x32,0x29,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x55,0x7c,0x7c,0x51,0x6a,0x28,0x35,0x2c,0x62,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x34,0x26,0x26,0x21,0x55,0x29,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x29,0x64,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3f,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3a,0x43,0x69,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x29,0x3b,0x64,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x65,0x2c,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x64,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x29,0x7d,0x76,0x61,0x72,0x20,0x66,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x73,0x68,0x28,0x62,0x2c,0x66,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x67,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x29,0x7b,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x63,0x3d,0x5c,0x6e,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x73,0x68,0x28,0x62,0x2c,0x67,0x2c,0x63,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x68,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x34,0x29,0x7b,0x63,0x3d,0x68,0x3b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x6b,0x2e,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x26,0x26,0x63,0x2e,0x66,0x6f,0x63,0x75,0x73,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6d,0x67,0x5c,0x22,0x3a,0x6b,0x2e,0x73,0x72,0x63,0x26,0x26,0x28,0x63,0x2e,0x73,0x72,0x63,0x3d,0x6b,0x2e,0x73,0x72,0x63,0x29,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x6c,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x29,0x7b,0x76,0x61,0x72,0x20,0x71,0x3d,0x6d,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x71,0x26,0x26,0x62,0x64,0x28,0x71,0x29,0x7d,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x35,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x5c,0x6e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x36,0x33,0x29,0x29,0x3b,0x7d,0x55,0x7c,0x7c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x35,0x31,0x32,0x26,0x26,0x52,0x6a,0x28,0x62,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x72,0x29,0x7b,0x57,0x28,0x62,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x72,0x29,0x7d,0x7d,0x69,0x66,0x28,0x62,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x56,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x63,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x56,0x3d,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x56,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x6b,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x56,0x3b,0x69,0x66,0x28,0x62,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x56,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x56,0x3d,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x56,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x6b,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x56,0x3b,0x74,0x72,0x79,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x51,0x6a,0x28,0x34,0x2c,0x62,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x57,0x28,0x62,0x2c,0x63,0x2c,0x6b,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x64,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x28,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x57,0x28,0x62,0x2c,0x65,0x2c,0x6b,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x66,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x52,0x6a,0x28,0x62,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x57,0x28,0x62,0x2c,0x66,0x2c,0x6b,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x76,0x61,0x72,0x20,0x67,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x52,0x6a,0x28,0x62,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x57,0x28,0x62,0x2c,0x67,0x2c,0x6b,0x29,0x7d,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x57,0x28,0x62,0x2c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x6b,0x29,0x7d,0x69,0x66,0x28,0x62,0x3d,0x3d,0x3d,0x61,0x29,0x7b,0x56,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x76,0x61,0x72,0x20,0x68,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x68,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x56,0x3d,0x68,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x56,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x6c,0x6b,0x3d,0x4d,0x61,0x74,0x68,0x2e,0x63,0x65,0x69,0x6c,0x2c,0x6d,0x6b,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x2c,0x6e,0x6b,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x2c,0x6f,0x6b,0x3d,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x4b,0x3d,0x30,0x2c,0x51,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x59,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x5a,0x3d,0x30,0x2c,0x66,0x6a,0x3d,0x30,0x2c,0x65,0x6a,0x3d,0x55,0x66,0x28,0x30,0x29,0x2c,0x54,0x3d,0x30,0x2c,0x70,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x68,0x3d,0x30,0x2c,0x71,0x6b,0x3d,0x30,0x2c,0x72,0x6b,0x3d,0x30,0x2c,0x73,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x66,0x6b,0x3d,0x30,0x2c,0x47,0x6a,0x3d,0x49,0x6e,0x66,0x69,0x6e,0x69,0x74,0x79,0x2c,0x75,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4f,0x69,0x3d,0x21,0x31,0x2c,0x50,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x52,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x76,0x6b,0x3d,0x21,0x31,0x2c,0x77,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x78,0x6b,0x3d,0x30,0x2c,0x79,0x6b,0x3d,0x30,0x2c,0x7a,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x41,0x6b,0x3d,0x2d,0x31,0x2c,0x42,0x6b,0x3d,0x30,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x3f,0x42,0x28,0x29,0x3a,0x2d,0x31,0x21,0x3d,0x3d,0x41,0x6b,0x3f,0x41,0x6b,0x3a,0x41,0x6b,0x3d,0x42,0x28,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x79,0x69,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x4b,0x26,0x32,0x29,0x26,0x26,0x30,0x21,0x3d,0x3d,0x5a,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5a,0x26,0x2d,0x5a,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4b,0x67,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x42,0x6b,0x26,0x26,0x28,0x42,0x6b,0x3d,0x79,0x63,0x28,0x29,0x29,0x2c,0x42,0x6b,0x3b,0x61,0x3d,0x43,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x61,0x3d,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x65,0x76,0x65,0x6e,0x74,0x3b,0x61,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x3f,0x31,0x36,0x3a,0x6a,0x64,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x35,0x30,0x3c,0x79,0x6b,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x79,0x6b,0x3d,0x30,0x2c,0x7a,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x38,0x35,0x29,0x29,0x3b,0x41,0x63,0x28,0x61,0x2c,0x63,0x2c,0x64,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x4b,0x26,0x32,0x29,0x7c,0x7c,0x61,0x21,0x3d,0x3d,0x51,0x29,0x61,0x3d,0x3d,0x3d,0x51,0x26,0x26,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x4b,0x26,0x32,0x29,0x26,0x26,0x28,0x71,0x6b,0x7c,0x3d,0x63,0x29,0x2c,0x34,0x3d,0x3d,0x3d,0x54,0x26,0x26,0x43,0x6b,0x28,0x61,0x2c,0x5a,0x29,0x29,0x2c,0x44,0x6b,0x28,0x61,0x2c,0x64,0x29,0x2c,0x31,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x4b,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x28,0x47,0x6a,0x3d,0x42,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x66,0x67,0x26,0x26,0x6a,0x67,0x28,0x29,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x44,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3b,0x77,0x63,0x28,0x61,0x2c,0x62,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x75,0x63,0x28,0x61,0x2c,0x61,0x3d,0x3d,0x3d,0x51,0x3f,0x5a,0x3a,0x30,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x64,0x29,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x62,0x63,0x28,0x63,0x29,0x2c,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x30,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x62,0x3d,0x64,0x26,0x2d,0x64,0x2c,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x26,0x26,0x62,0x63,0x28,0x63,0x29,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x62,0x29,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x3f,0x69,0x67,0x28,0x45,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x29,0x3a,0x68,0x67,0x28,0x45,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x29,0x2c,0x4a,0x66,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x26,0x26,0x6a,0x67,0x28,0x29,0x7d,0x29,0x2c,0x63,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x44,0x63,0x28,0x64,0x29,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x3d,0x66,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x3d,0x67,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x63,0x3d,0x68,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x33,0x36,0x38,0x37,0x30,0x39,0x31,0x32,0x3a,0x63,0x3d,0x6a,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x63,0x3d,0x68,0x63,0x7d,0x63,0x3d,0x46,0x6b,0x28,0x63,0x2c,0x47,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x29,0x7d,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x62,0x3b,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x63,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x41,0x6b,0x3d,0x2d,0x31,0x3b,0x42,0x6b,0x3d,0x30,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x32,0x37,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x48,0x6b,0x28,0x29,0x26,0x26,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x21,0x3d,0x3d,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x75,0x63,0x28,0x61,0x2c,0x61,0x3d,0x3d,0x3d,0x51,0x3f,0x5a,0x3a,0x30,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x64,0x26,0x33,0x30,0x29,0x7c,0x7c,0x30,0x21,0x3d,0x3d,0x28,0x64,0x26,0x61,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x29,0x7c,0x7c,0x62,0x29,0x62,0x3d,0x49,0x6b,0x28,0x61,0x2c,0x64,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x62,0x3d,0x64,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x4b,0x3b,0x4b,0x7c,0x3d,0x32,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x4a,0x6b,0x28,0x29,0x3b,0x69,0x66,0x28,0x51,0x21,0x3d,0x3d,0x61,0x7c,0x7c,0x5a,0x21,0x3d,0x3d,0x62,0x29,0x75,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x47,0x6a,0x3d,0x42,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x4b,0x6b,0x28,0x61,0x2c,0x62,0x29,0x3b,0x64,0x6f,0x20,0x74,0x72,0x79,0x7b,0x4c,0x6b,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x68,0x29,0x7b,0x4d,0x6b,0x28,0x61,0x2c,0x68,0x29,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x31,0x29,0x3b,0x24,0x67,0x28,0x29,0x3b,0x6d,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x66,0x3b,0x4b,0x3d,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x59,0x3f,0x62,0x3d,0x30,0x3a,0x28,0x51,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x5a,0x3d,0x30,0x2c,0x62,0x3d,0x54,0x29,0x7d,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x32,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x65,0x3d,0x78,0x63,0x28,0x61,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x64,0x3d,0x65,0x2c,0x62,0x3d,0x4e,0x6b,0x28,0x61,0x2c,0x65,0x29,0x29,0x29,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x62,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x63,0x3d,0x70,0x6b,0x2c,0x4b,0x6b,0x28,0x61,0x2c,0x30,0x29,0x2c,0x43,0x6b,0x28,0x61,0x2c,0x64,0x29,0x2c,0x44,0x6b,0x28,0x61,0x2c,0x42,0x28,0x29,0x29,0x2c,0x63,0x3b,0x69,0x66,0x28,0x36,0x3d,0x3d,0x3d,0x62,0x29,0x43,0x6b,0x28,0x61,0x2c,0x64,0x29,0x3b,0x5c,0x6e,0x65,0x6c,0x73,0x65,0x7b,0x65,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x64,0x26,0x33,0x30,0x29,0x26,0x26,0x21,0x4f,0x6b,0x28,0x65,0x29,0x26,0x26,0x28,0x62,0x3d,0x49,0x6b,0x28,0x61,0x2c,0x64,0x29,0x2c,0x32,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x66,0x3d,0x78,0x63,0x28,0x61,0x29,0x2c,0x30,0x21,0x3d,0x3d,0x66,0x26,0x26,0x28,0x64,0x3d,0x66,0x2c,0x62,0x3d,0x4e,0x6b,0x28,0x61,0x2c,0x66,0x29,0x29,0x29,0x2c,0x31,0x3d,0x3d,0x3d,0x62,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x63,0x3d,0x70,0x6b,0x2c,0x4b,0x6b,0x28,0x61,0x2c,0x30,0x29,0x2c,0x43,0x6b,0x28,0x61,0x2c,0x64,0x29,0x2c,0x44,0x6b,0x28,0x61,0x2c,0x42,0x28,0x29,0x29,0x2c,0x63,0x3b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x65,0x3b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x64,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x34,0x35,0x29,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x50,0x6b,0x28,0x61,0x2c,0x74,0x6b,0x2c,0x75,0x6b,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x43,0x6b,0x28,0x61,0x2c,0x64,0x29,0x3b,0x69,0x66,0x28,0x28,0x64,0x26,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x29,0x3d,0x3d,0x3d,0x64,0x26,0x26,0x28,0x62,0x3d,0x66,0x6b,0x2b,0x35,0x30,0x30,0x2d,0x42,0x28,0x29,0x2c,0x31,0x30,0x3c,0x62,0x29,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x75,0x63,0x28,0x61,0x2c,0x30,0x29,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x65,0x3d,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x28,0x65,0x26,0x64,0x29,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x52,0x28,0x29,0x3b,0x61,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x61,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x46,0x66,0x28,0x50,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x74,0x6b,0x2c,0x75,0x6b,0x29,0x2c,0x62,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x50,0x6b,0x28,0x61,0x2c,0x74,0x6b,0x2c,0x75,0x6b,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x43,0x6b,0x28,0x61,0x2c,0x64,0x29,0x3b,0x69,0x66,0x28,0x28,0x64,0x26,0x34,0x31,0x39,0x34,0x32,0x34,0x30,0x29,0x3d,0x3d,0x3d,0x5c,0x6e,0x64,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x62,0x3d,0x61,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x3b,0x66,0x6f,0x72,0x28,0x65,0x3d,0x2d,0x31,0x3b,0x30,0x3c,0x64,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x33,0x31,0x2d,0x6f,0x63,0x28,0x64,0x29,0x3b,0x66,0x3d,0x31,0x3c,0x3c,0x67,0x3b,0x67,0x3d,0x62,0x5b,0x67,0x5d,0x3b,0x67,0x3e,0x65,0x26,0x26,0x28,0x65,0x3d,0x67,0x29,0x3b,0x64,0x26,0x3d,0x7e,0x66,0x7d,0x64,0x3d,0x65,0x3b,0x64,0x3d,0x42,0x28,0x29,0x2d,0x64,0x3b,0x64,0x3d,0x28,0x31,0x32,0x30,0x3e,0x64,0x3f,0x31,0x32,0x30,0x3a,0x34,0x38,0x30,0x3e,0x64,0x3f,0x34,0x38,0x30,0x3a,0x31,0x30,0x38,0x30,0x3e,0x64,0x3f,0x31,0x30,0x38,0x30,0x3a,0x31,0x39,0x32,0x30,0x3e,0x64,0x3f,0x31,0x39,0x32,0x30,0x3a,0x33,0x45,0x33,0x3e,0x64,0x3f,0x33,0x45,0x33,0x3a,0x34,0x33,0x32,0x30,0x3e,0x64,0x3f,0x34,0x33,0x32,0x30,0x3a,0x31,0x39,0x36,0x30,0x2a,0x6c,0x6b,0x28,0x64,0x2f,0x31,0x39,0x36,0x30,0x29,0x29,0x2d,0x64,0x3b,0x69,0x66,0x28,0x31,0x30,0x3c,0x64,0x29,0x7b,0x61,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x46,0x66,0x28,0x50,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x74,0x6b,0x2c,0x75,0x6b,0x29,0x2c,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x50,0x6b,0x28,0x61,0x2c,0x74,0x6b,0x2c,0x75,0x6b,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x50,0x6b,0x28,0x61,0x2c,0x74,0x6b,0x2c,0x75,0x6b,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x32,0x39,0x29,0x29,0x3b,0x7d,0x7d,0x7d,0x44,0x6b,0x28,0x61,0x2c,0x42,0x28,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x3d,0x3d,0x63,0x3f,0x47,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x73,0x6b,0x3b,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x26,0x26,0x28,0x4b,0x6b,0x28,0x61,0x2c,0x62,0x29,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x35,0x36,0x29,0x3b,0x61,0x3d,0x49,0x6b,0x28,0x61,0x2c,0x62,0x29,0x3b,0x32,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x62,0x3d,0x74,0x6b,0x2c,0x74,0x6b,0x3d,0x63,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x46,0x6a,0x28,0x62,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x6a,0x28,0x61,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x74,0x6b,0x3f,0x74,0x6b,0x3d,0x61,0x3a,0x74,0x6b,0x2e,0x70,0x75,0x73,0x68,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x6b,0x2c,0x61,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x6b,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x3b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x36,0x33,0x38,0x34,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x63,0x3d,0x63,0x2e,0x73,0x74,0x6f,0x72,0x65,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x64,0x3d,0x30,0x3b,0x64,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x64,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x63,0x5b,0x64,0x5d,0x2c,0x66,0x3d,0x65,0x2e,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x3b,0x65,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x21,0x48,0x65,0x28,0x66,0x28,0x29,0x2c,0x65,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x67,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x7d,0x7d,0x63,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x62,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x31,0x36,0x33,0x38,0x34,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2c,0x62,0x3d,0x63,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x62,0x3d,0x3d,0x3d,0x61,0x29,0x62,0x72,0x65,0x61,0x6b,0x3b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7c,0x7c,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x3b,0x62,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x62,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x30,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x43,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x62,0x26,0x3d,0x7e,0x72,0x6b,0x3b,0x62,0x26,0x3d,0x7e,0x71,0x6b,0x3b,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x3b,0x61,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x3d,0x7e,0x62,0x3b,0x66,0x6f,0x72,0x28,0x61,0x3d,0x61,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x3b,0x30,0x3c,0x62,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x33,0x31,0x2d,0x6f,0x63,0x28,0x62,0x29,0x2c,0x64,0x3d,0x31,0x3c,0x3c,0x63,0x3b,0x61,0x5b,0x63,0x5d,0x3d,0x2d,0x31,0x3b,0x62,0x26,0x3d,0x7e,0x64,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x6b,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x32,0x37,0x29,0x29,0x3b,0x48,0x6b,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x75,0x63,0x28,0x61,0x2c,0x30,0x29,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x26,0x31,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x44,0x6b,0x28,0x61,0x2c,0x42,0x28,0x29,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x49,0x6b,0x28,0x61,0x2c,0x62,0x29,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x32,0x3d,0x3d,0x3d,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x78,0x63,0x28,0x61,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x62,0x3d,0x64,0x2c,0x63,0x3d,0x4e,0x6b,0x28,0x61,0x2c,0x64,0x29,0x29,0x7d,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x63,0x3d,0x70,0x6b,0x2c,0x4b,0x6b,0x28,0x61,0x2c,0x30,0x29,0x2c,0x43,0x6b,0x28,0x61,0x2c,0x62,0x29,0x2c,0x44,0x6b,0x28,0x61,0x2c,0x42,0x28,0x29,0x29,0x2c,0x63,0x3b,0x69,0x66,0x28,0x36,0x3d,0x3d,0x3d,0x63,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x34,0x35,0x29,0x29,0x3b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x62,0x3b,0x50,0x6b,0x28,0x61,0x2c,0x74,0x6b,0x2c,0x75,0x6b,0x29,0x3b,0x44,0x6b,0x28,0x61,0x2c,0x42,0x28,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x4b,0x3b,0x4b,0x7c,0x3d,0x31,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x28,0x62,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x4b,0x3d,0x63,0x2c,0x30,0x3d,0x3d,0x3d,0x4b,0x26,0x26,0x28,0x47,0x6a,0x3d,0x42,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x66,0x67,0x26,0x26,0x6a,0x67,0x28,0x29,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x6b,0x28,0x61,0x29,0x7b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x77,0x6b,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x77,0x6b,0x2e,0x74,0x61,0x67,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x26,0x26,0x48,0x6b,0x28,0x29,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x4b,0x3b,0x4b,0x7c,0x3d,0x31,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x64,0x3d,0x43,0x3b,0x74,0x72,0x79,0x7b,0x69,0x66,0x28,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x43,0x3d,0x31,0x2c,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x43,0x3d,0x64,0x2c,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x63,0x2c,0x4b,0x3d,0x62,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x26,0x26,0x6a,0x67,0x28,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x6a,0x28,0x29,0x7b,0x66,0x6a,0x3d,0x65,0x6a,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x45,0x28,0x65,0x6a,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3b,0x2d,0x31,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x61,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x2d,0x31,0x2c,0x47,0x66,0x28,0x63,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x59,0x29,0x66,0x6f,0x72,0x28,0x63,0x3d,0x59,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x3b,0x77,0x67,0x28,0x64,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x64,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x64,0x3d,0x64,0x2e,0x74,0x79,0x70,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x64,0x26,0x26,0x24,0x66,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x7a,0x68,0x28,0x29,0x3b,0x45,0x28,0x57,0x66,0x29,0x3b,0x45,0x28,0x48,0x29,0x3b,0x45,0x68,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x42,0x68,0x28,0x64,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x7a,0x68,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x45,0x28,0x4c,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x45,0x28,0x4c,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x61,0x68,0x28,0x64,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x33,0x3a,0x48,0x6a,0x28,0x29,0x7d,0x63,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x51,0x3d,0x61,0x3b,0x59,0x3d,0x61,0x3d,0x50,0x67,0x28,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x5a,0x3d,0x66,0x6a,0x3d,0x62,0x3b,0x54,0x3d,0x30,0x3b,0x70,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x6b,0x3d,0x71,0x6b,0x3d,0x72,0x68,0x3d,0x30,0x3b,0x74,0x6b,0x3d,0x73,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x68,0x29,0x7b,0x66,0x6f,0x72,0x28,0x62,0x3d,0x5c,0x6e,0x30,0x3b,0x62,0x3c,0x66,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x62,0x2b,0x2b,0x29,0x69,0x66,0x28,0x63,0x3d,0x66,0x68,0x5b,0x62,0x5d,0x2c,0x64,0x3d,0x63,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x29,0x7b,0x63,0x2e,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x66,0x3d,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x66,0x2e,0x6e,0x65,0x78,0x74,0x3b,0x66,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x65,0x3b,0x64,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x67,0x7d,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x64,0x7d,0x66,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x59,0x3b,0x74,0x72,0x79,0x7b,0x24,0x67,0x28,0x29,0x3b,0x46,0x68,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x52,0x68,0x3b,0x69,0x66,0x28,0x49,0x68,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x64,0x3d,0x4d,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x2e,0x71,0x75,0x65,0x75,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x65,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x64,0x3d,0x64,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x49,0x68,0x3d,0x21,0x31,0x7d,0x48,0x68,0x3d,0x30,0x3b,0x4f,0x3d,0x4e,0x3d,0x4d,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x4a,0x68,0x3d,0x21,0x31,0x3b,0x4b,0x68,0x3d,0x30,0x3b,0x6e,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x7b,0x54,0x3d,0x31,0x3b,0x70,0x6b,0x3d,0x62,0x3b,0x59,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x61,0x3a,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x2c,0x67,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x68,0x3d,0x63,0x2c,0x6b,0x3d,0x62,0x3b,0x62,0x3d,0x5a,0x3b,0x68,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x33,0x32,0x37,0x36,0x38,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6b,0x2e,0x74,0x68,0x65,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x6b,0x2c,0x6d,0x3d,0x68,0x2c,0x71,0x3d,0x6d,0x2e,0x74,0x61,0x67,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x6d,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x26,0x26,0x28,0x30,0x3d,0x3d,0x3d,0x71,0x7c,0x7c,0x31,0x31,0x3d,0x3d,0x3d,0x71,0x7c,0x7c,0x31,0x35,0x3d,0x3d,0x3d,0x71,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6d,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x72,0x3f,0x28,0x6d,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x72,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2c,0x6d,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x72,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x5c,0x6e,0x6d,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x72,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x29,0x3a,0x28,0x6d,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x6d,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x76,0x61,0x72,0x20,0x79,0x3d,0x55,0x69,0x28,0x67,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x79,0x29,0x7b,0x79,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x2d,0x32,0x35,0x37,0x3b,0x56,0x69,0x28,0x79,0x2c,0x67,0x2c,0x68,0x2c,0x66,0x2c,0x62,0x29,0x3b,0x79,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x26,0x26,0x53,0x69,0x28,0x66,0x2c,0x6c,0x2c,0x62,0x29,0x3b,0x62,0x3d,0x79,0x3b,0x6b,0x3d,0x6c,0x3b,0x76,0x61,0x72,0x20,0x6e,0x3d,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x65,0x77,0x20,0x53,0x65,0x74,0x3b,0x74,0x2e,0x61,0x64,0x64,0x28,0x6b,0x29,0x3b,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x74,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6e,0x2e,0x61,0x64,0x64,0x28,0x6b,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x26,0x31,0x29,0x29,0x7b,0x53,0x69,0x28,0x66,0x2c,0x6c,0x2c,0x62,0x29,0x3b,0x74,0x6a,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x6b,0x3d,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x32,0x36,0x29,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x49,0x26,0x26,0x68,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x7b,0x76,0x61,0x72,0x20,0x4a,0x3d,0x55,0x69,0x28,0x67,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4a,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x28,0x4a,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x36,0x35,0x35,0x33,0x36,0x29,0x26,0x26,0x28,0x4a,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x32,0x35,0x36,0x29,0x3b,0x56,0x69,0x28,0x4a,0x2c,0x67,0x2c,0x68,0x2c,0x66,0x2c,0x62,0x29,0x3b,0x4a,0x67,0x28,0x4a,0x69,0x28,0x6b,0x2c,0x68,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x7d,0x66,0x3d,0x6b,0x3d,0x4a,0x69,0x28,0x6b,0x2c,0x68,0x29,0x3b,0x34,0x21,0x3d,0x3d,0x54,0x26,0x26,0x28,0x54,0x3d,0x32,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x73,0x6b,0x3f,0x73,0x6b,0x3d,0x5b,0x66,0x5d,0x3a,0x73,0x6b,0x2e,0x70,0x75,0x73,0x68,0x28,0x66,0x29,0x3b,0x66,0x3d,0x67,0x3b,0x64,0x6f,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x66,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x66,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x3b,0x5c,0x6e,0x62,0x26,0x3d,0x2d,0x62,0x3b,0x66,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x3b,0x76,0x61,0x72,0x20,0x78,0x3d,0x4e,0x69,0x28,0x66,0x2c,0x6b,0x2c,0x62,0x29,0x3b,0x70,0x68,0x28,0x66,0x2c,0x78,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x68,0x3d,0x6b,0x3b,0x76,0x61,0x72,0x20,0x77,0x3d,0x66,0x2e,0x74,0x79,0x70,0x65,0x2c,0x75,0x3d,0x66,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x66,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x26,0x26,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x75,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x75,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x52,0x69,0x7c,0x7c,0x21,0x52,0x69,0x2e,0x68,0x61,0x73,0x28,0x75,0x29,0x29,0x29,0x29,0x7b,0x66,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x36,0x35,0x35,0x33,0x36,0x3b,0x62,0x26,0x3d,0x2d,0x62,0x3b,0x66,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x62,0x3b,0x76,0x61,0x72,0x20,0x46,0x3d,0x51,0x69,0x28,0x66,0x2c,0x68,0x2c,0x62,0x29,0x3b,0x70,0x68,0x28,0x66,0x2c,0x46,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x7d,0x66,0x3d,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x7d,0x53,0x6b,0x28,0x63,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6e,0x61,0x29,0x7b,0x62,0x3d,0x6e,0x61,0x3b,0x59,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x59,0x3d,0x63,0x3d,0x63,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x3b,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x7d,0x62,0x72,0x65,0x61,0x6b,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x31,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x6b,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x6d,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x6d,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x52,0x68,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x52,0x68,0x3a,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6a,0x28,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x54,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x54,0x7c,0x7c,0x32,0x3d,0x3d,0x3d,0x54,0x29,0x54,0x3d,0x34,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x51,0x7c,0x7c,0x30,0x3d,0x3d,0x3d,0x28,0x72,0x68,0x26,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x71,0x6b,0x26,0x32,0x36,0x38,0x34,0x33,0x35,0x34,0x35,0x35,0x29,0x7c,0x7c,0x43,0x6b,0x28,0x51,0x2c,0x5a,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x4b,0x3b,0x4b,0x7c,0x3d,0x32,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x4a,0x6b,0x28,0x29,0x3b,0x69,0x66,0x28,0x51,0x21,0x3d,0x3d,0x61,0x7c,0x7c,0x5a,0x21,0x3d,0x3d,0x62,0x29,0x75,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4b,0x6b,0x28,0x61,0x2c,0x62,0x29,0x3b,0x64,0x6f,0x20,0x74,0x72,0x79,0x7b,0x54,0x6b,0x28,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x4d,0x6b,0x28,0x61,0x2c,0x65,0x29,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x31,0x29,0x3b,0x24,0x67,0x28,0x29,0x3b,0x4b,0x3d,0x63,0x3b,0x6d,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x59,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x36,0x31,0x29,0x29,0x3b,0x51,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x5a,0x3d,0x30,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x54,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x6b,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x59,0x3b,0x29,0x55,0x6b,0x28,0x59,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4c,0x6b,0x28,0x29,0x7b,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x59,0x26,0x26,0x21,0x63,0x63,0x28,0x29,0x3b,0x29,0x55,0x6b,0x28,0x59,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x55,0x6b,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x56,0x6b,0x28,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x2c,0x61,0x2c,0x66,0x6a,0x29,0x3b,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x3f,0x53,0x6b,0x28,0x61,0x29,0x3a,0x59,0x3d,0x62,0x3b,0x6e,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x6b,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x62,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x61,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x33,0x32,0x37,0x36,0x38,0x29,0x29,0x7b,0x69,0x66,0x28,0x63,0x3d,0x45,0x6a,0x28,0x63,0x2c,0x62,0x2c,0x66,0x6a,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x59,0x3d,0x63,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x63,0x3d,0x49,0x6a,0x28,0x63,0x2c,0x62,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x3d,0x33,0x32,0x37,0x36,0x37,0x3b,0x59,0x3d,0x63,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x33,0x32,0x37,0x36,0x38,0x2c,0x61,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x61,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x54,0x3d,0x36,0x3b,0x59,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x62,0x3d,0x62,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x59,0x3d,0x62,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x59,0x3d,0x62,0x3d,0x61,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x3b,0x30,0x3d,0x3d,0x3d,0x54,0x26,0x26,0x28,0x54,0x3d,0x35,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x43,0x2c,0x65,0x3d,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x74,0x72,0x79,0x7b,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x43,0x3d,0x31,0x2c,0x57,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x65,0x2c,0x43,0x3d,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x64,0x6f,0x20,0x48,0x6b,0x28,0x29,0x3b,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x77,0x6b,0x29,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x32,0x37,0x29,0x29,0x3b,0x63,0x3d,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x69,0x66,0x28,0x63,0x3d,0x3d,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x37,0x37,0x29,0x29,0x3b,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x30,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x63,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x42,0x63,0x28,0x61,0x2c,0x66,0x29,0x3b,0x61,0x3d,0x3d,0x3d,0x51,0x26,0x26,0x28,0x59,0x3d,0x51,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x5a,0x3d,0x30,0x29,0x3b,0x30,0x3d,0x3d,0x3d,0x28,0x63,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x32,0x30,0x36,0x34,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x30,0x36,0x34,0x29,0x7c,0x7c,0x76,0x6b,0x7c,0x7c,0x28,0x76,0x6b,0x3d,0x21,0x30,0x2c,0x46,0x6b,0x28,0x68,0x63,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x48,0x6b,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x29,0x3b,0x66,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x35,0x39,0x39,0x30,0x29,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x63,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x31,0x35,0x39,0x39,0x30,0x29,0x7c,0x7c,0x66,0x29,0x7b,0x66,0x3d,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x5c,0x6e,0x76,0x61,0x72,0x20,0x67,0x3d,0x43,0x3b,0x43,0x3d,0x31,0x3b,0x76,0x61,0x72,0x20,0x68,0x3d,0x4b,0x3b,0x4b,0x7c,0x3d,0x34,0x3b,0x6e,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x4f,0x6a,0x28,0x61,0x2c,0x63,0x29,0x3b,0x64,0x6b,0x28,0x63,0x2c,0x61,0x29,0x3b,0x4f,0x65,0x28,0x44,0x66,0x29,0x3b,0x64,0x64,0x3d,0x21,0x21,0x43,0x66,0x3b,0x44,0x66,0x3d,0x43,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x63,0x3b,0x68,0x6b,0x28,0x63,0x2c,0x61,0x2c,0x65,0x29,0x3b,0x64,0x63,0x28,0x29,0x3b,0x4b,0x3d,0x68,0x3b,0x43,0x3d,0x67,0x3b,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x7d,0x65,0x6c,0x73,0x65,0x20,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x63,0x3b,0x76,0x6b,0x26,0x26,0x28,0x76,0x6b,0x3d,0x21,0x31,0x2c,0x77,0x6b,0x3d,0x61,0x2c,0x78,0x6b,0x3d,0x65,0x29,0x3b,0x66,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x30,0x3d,0x3d,0x3d,0x66,0x26,0x26,0x28,0x52,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x6d,0x63,0x28,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x64,0x29,0x3b,0x44,0x6b,0x28,0x61,0x2c,0x42,0x28,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x66,0x6f,0x72,0x28,0x64,0x3d,0x61,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x2c,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x62,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x63,0x2b,0x2b,0x29,0x65,0x3d,0x62,0x5b,0x63,0x5d,0x2c,0x64,0x28,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x7b,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x53,0x74,0x61,0x63,0x6b,0x3a,0x65,0x2e,0x73,0x74,0x61,0x63,0x6b,0x2c,0x64,0x69,0x67,0x65,0x73,0x74,0x3a,0x65,0x2e,0x64,0x69,0x67,0x65,0x73,0x74,0x7d,0x29,0x3b,0x69,0x66,0x28,0x4f,0x69,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x4f,0x69,0x3d,0x21,0x31,0x2c,0x61,0x3d,0x50,0x69,0x2c,0x50,0x69,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x78,0x6b,0x26,0x31,0x29,0x26,0x26,0x30,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x26,0x26,0x48,0x6b,0x28,0x29,0x3b,0x66,0x3d,0x61,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x30,0x21,0x3d,0x3d,0x28,0x66,0x26,0x31,0x29,0x3f,0x61,0x3d,0x3d,0x3d,0x7a,0x6b,0x3f,0x79,0x6b,0x2b,0x2b,0x3a,0x28,0x79,0x6b,0x3d,0x30,0x2c,0x7a,0x6b,0x3d,0x61,0x29,0x3a,0x79,0x6b,0x3d,0x30,0x3b,0x6a,0x67,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x6b,0x28,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x77,0x6b,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x44,0x63,0x28,0x78,0x6b,0x29,0x2c,0x62,0x3d,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x63,0x3d,0x43,0x3b,0x74,0x72,0x79,0x7b,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x43,0x3d,0x31,0x36,0x3e,0x61,0x3f,0x31,0x36,0x3a,0x61,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x77,0x6b,0x29,0x76,0x61,0x72,0x20,0x64,0x3d,0x21,0x31,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x61,0x3d,0x77,0x6b,0x3b,0x77,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x78,0x6b,0x3d,0x30,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x33,0x31,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x4b,0x3b,0x4b,0x7c,0x3d,0x34,0x3b,0x66,0x6f,0x72,0x28,0x56,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x56,0x2c,0x67,0x3d,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x56,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x36,0x29,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x66,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6b,0x3d,0x30,0x3b,0x6b,0x3c,0x68,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x6b,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x68,0x5b,0x6b,0x5d,0x3b,0x66,0x6f,0x72,0x28,0x56,0x3d,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x56,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6d,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x50,0x6a,0x28,0x38,0x2c,0x6d,0x2c,0x66,0x29,0x7d,0x76,0x61,0x72,0x20,0x71,0x3d,0x6d,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x71,0x29,0x71,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x6d,0x2c,0x56,0x3d,0x71,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x6d,0x3d,0x56,0x3b,0x76,0x61,0x72,0x20,0x72,0x3d,0x6d,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x2c,0x79,0x3d,0x6d,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x53,0x6a,0x28,0x6d,0x29,0x3b,0x69,0x66,0x28,0x6d,0x3d,0x3d,0x3d,0x5c,0x6e,0x6c,0x29,0x7b,0x56,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x72,0x29,0x7b,0x72,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x79,0x3b,0x56,0x3d,0x72,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x56,0x3d,0x79,0x7d,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6e,0x3d,0x66,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6e,0x29,0x7b,0x76,0x61,0x72,0x20,0x74,0x3d,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x7b,0x6e,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x64,0x6f,0x7b,0x76,0x61,0x72,0x20,0x4a,0x3d,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x74,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x3d,0x4a,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x74,0x29,0x7d,0x7d,0x56,0x3d,0x66,0x7d,0x7d,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x66,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x32,0x30,0x36,0x34,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x29,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x66,0x2c,0x56,0x3d,0x67,0x3b,0x65,0x6c,0x73,0x65,0x20,0x62,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x66,0x3d,0x56,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x66,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x30,0x34,0x38,0x29,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x66,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x50,0x6a,0x28,0x39,0x2c,0x66,0x2c,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x29,0x7d,0x76,0x61,0x72,0x20,0x78,0x3d,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x78,0x29,0x7b,0x78,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x56,0x3d,0x78,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x7d,0x56,0x3d,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x76,0x61,0x72,0x20,0x77,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x66,0x6f,0x72,0x28,0x56,0x3d,0x77,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x67,0x3d,0x56,0x3b,0x76,0x61,0x72,0x20,0x75,0x3d,0x67,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x67,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x26,0x32,0x30,0x36,0x34,0x29,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x5c,0x6e,0x75,0x29,0x75,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x67,0x2c,0x56,0x3d,0x75,0x3b,0x65,0x6c,0x73,0x65,0x20,0x62,0x3a,0x66,0x6f,0x72,0x28,0x67,0x3d,0x77,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x56,0x3b,0x29,0x7b,0x68,0x3d,0x56,0x3b,0x69,0x66,0x28,0x30,0x21,0x3d,0x3d,0x28,0x68,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x30,0x34,0x38,0x29,0x29,0x74,0x72,0x79,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x68,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x51,0x6a,0x28,0x39,0x2c,0x68,0x29,0x7d,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6e,0x61,0x29,0x7b,0x57,0x28,0x68,0x2c,0x68,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x6e,0x61,0x29,0x7d,0x69,0x66,0x28,0x68,0x3d,0x3d,0x3d,0x67,0x29,0x7b,0x56,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x7d,0x76,0x61,0x72,0x20,0x46,0x3d,0x68,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x46,0x29,0x7b,0x46,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x68,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x56,0x3d,0x46,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x62,0x7d,0x56,0x3d,0x68,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x4b,0x3d,0x65,0x3b,0x6a,0x67,0x28,0x29,0x3b,0x69,0x66,0x28,0x6c,0x63,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6c,0x63,0x2e,0x6f,0x6e,0x50,0x6f,0x73,0x74,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x29,0x74,0x72,0x79,0x7b,0x6c,0x63,0x2e,0x6f,0x6e,0x50,0x6f,0x73,0x74,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x28,0x6b,0x63,0x2c,0x61,0x29,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x6e,0x61,0x29,0x7b,0x7d,0x64,0x3d,0x21,0x30,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x43,0x3d,0x63,0x2c,0x6f,0x6b,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x62,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x62,0x3d,0x4a,0x69,0x28,0x63,0x2c,0x62,0x29,0x3b,0x62,0x3d,0x4e,0x69,0x28,0x61,0x2c,0x62,0x2c,0x31,0x29,0x3b,0x61,0x3d,0x6e,0x68,0x28,0x61,0x2c,0x62,0x2c,0x31,0x29,0x3b,0x62,0x3d,0x52,0x28,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x41,0x63,0x28,0x61,0x2c,0x31,0x2c,0x62,0x29,0x2c,0x44,0x6b,0x28,0x61,0x2c,0x62,0x29,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x57,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x58,0x6b,0x28,0x61,0x2c,0x61,0x2c,0x63,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3b,0x29,0x7b,0x69,0x66,0x28,0x33,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x58,0x6b,0x28,0x62,0x2c,0x61,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x62,0x2e,0x74,0x79,0x70,0x65,0x2e,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x7c,0x7c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x2e,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x26,0x26,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x52,0x69,0x7c,0x7c,0x21,0x52,0x69,0x2e,0x68,0x61,0x73,0x28,0x64,0x29,0x29,0x29,0x7b,0x61,0x3d,0x4a,0x69,0x28,0x63,0x2c,0x61,0x29,0x3b,0x61,0x3d,0x51,0x69,0x28,0x62,0x2c,0x61,0x2c,0x31,0x29,0x3b,0x62,0x3d,0x6e,0x68,0x28,0x62,0x2c,0x61,0x2c,0x31,0x29,0x3b,0x61,0x3d,0x52,0x28,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x41,0x63,0x28,0x62,0x2c,0x31,0x2c,0x61,0x29,0x2c,0x44,0x6b,0x28,0x62,0x2c,0x61,0x29,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x7d,0x62,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x64,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x62,0x29,0x3b,0x62,0x3d,0x52,0x28,0x29,0x3b,0x61,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x61,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x26,0x63,0x3b,0x51,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x28,0x5a,0x26,0x63,0x29,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x28,0x34,0x3d,0x3d,0x3d,0x54,0x7c,0x7c,0x33,0x3d,0x3d,0x3d,0x54,0x26,0x26,0x28,0x5a,0x26,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x29,0x3d,0x3d,0x3d,0x5a,0x26,0x26,0x35,0x30,0x30,0x3e,0x42,0x28,0x29,0x2d,0x66,0x6b,0x3f,0x4b,0x6b,0x28,0x61,0x2c,0x30,0x29,0x3a,0x72,0x6b,0x7c,0x3d,0x63,0x29,0x3b,0x44,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x59,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x30,0x3d,0x3d,0x3d,0x62,0x26,0x26,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x26,0x31,0x29,0x3f,0x62,0x3d,0x31,0x3a,0x28,0x62,0x3d,0x73,0x63,0x2c,0x73,0x63,0x3c,0x3c,0x3d,0x31,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x73,0x63,0x26,0x31,0x33,0x30,0x30,0x32,0x33,0x34,0x32,0x34,0x29,0x26,0x26,0x28,0x73,0x63,0x3d,0x34,0x31,0x39,0x34,0x33,0x30,0x34,0x29,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x52,0x28,0x29,0x3b,0x61,0x3d,0x69,0x68,0x28,0x61,0x2c,0x62,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x41,0x63,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x2c,0x44,0x6b,0x28,0x61,0x2c,0x63,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x75,0x6a,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2c,0x63,0x3d,0x30,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x63,0x3d,0x62,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x29,0x3b,0x59,0x6b,0x28,0x61,0x2c,0x63,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x30,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x76,0x61,0x72,0x20,0x64,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x28,0x63,0x3d,0x65,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x64,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x31,0x34,0x29,0x29,0x3b,0x7d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x64,0x2e,0x64,0x65,0x6c,0x65,0x74,0x65,0x28,0x62,0x29,0x3b,0x59,0x6b,0x28,0x61,0x2c,0x63,0x29,0x7d,0x76,0x61,0x72,0x20,0x56,0x6b,0x3b,0x5c,0x6e,0x56,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x69,0x66,0x28,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x21,0x3d,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x7c,0x7c,0x57,0x66,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x64,0x68,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x28,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x26,0x63,0x29,0x26,0x26,0x30,0x3d,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x32,0x38,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x68,0x3d,0x21,0x31,0x2c,0x79,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x64,0x68,0x3d,0x30,0x21,0x3d,0x3d,0x28,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x33,0x31,0x30,0x37,0x32,0x29,0x3f,0x21,0x30,0x3a,0x21,0x31,0x7d,0x65,0x6c,0x73,0x65,0x20,0x64,0x68,0x3d,0x21,0x31,0x2c,0x49,0x26,0x26,0x30,0x21,0x3d,0x3d,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x30,0x34,0x38,0x35,0x37,0x36,0x29,0x26,0x26,0x75,0x67,0x28,0x62,0x2c,0x6e,0x67,0x2c,0x62,0x2e,0x69,0x6e,0x64,0x65,0x78,0x29,0x3b,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x76,0x61,0x72,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x6a,0x28,0x61,0x2c,0x62,0x29,0x3b,0x61,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x59,0x66,0x28,0x62,0x2c,0x48,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x63,0x68,0x28,0x62,0x2c,0x63,0x29,0x3b,0x65,0x3d,0x4e,0x68,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x64,0x2c,0x61,0x2c,0x65,0x2c,0x63,0x29,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x53,0x68,0x28,0x29,0x3b,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x3b,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x65,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3f,0x28,0x62,0x2e,0x74,0x61,0x67,0x3d,0x31,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x2c,0x5a,0x66,0x28,0x64,0x29,0x3f,0x28,0x66,0x3d,0x21,0x30,0x2c,0x63,0x67,0x28,0x62,0x29,0x29,0x3a,0x66,0x3d,0x21,0x31,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x3f,0x65,0x2e,0x73,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6b,0x68,0x28,0x62,0x29,0x2c,0x65,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x45,0x69,0x2c,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x65,0x2c,0x65,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3d,0x62,0x2c,0x49,0x69,0x28,0x62,0x2c,0x64,0x2c,0x61,0x2c,0x63,0x29,0x2c,0x62,0x3d,0x6a,0x6a,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x64,0x2c,0x21,0x30,0x2c,0x66,0x2c,0x63,0x29,0x29,0x3a,0x28,0x62,0x2e,0x74,0x61,0x67,0x3d,0x30,0x2c,0x49,0x26,0x26,0x66,0x26,0x26,0x76,0x67,0x28,0x62,0x29,0x2c,0x58,0x69,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x65,0x2c,0x63,0x29,0x2c,0x62,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x36,0x3a,0x64,0x3d,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3b,0x61,0x3a,0x7b,0x69,0x6a,0x28,0x61,0x2c,0x62,0x29,0x3b,0x61,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x65,0x3d,0x64,0x2e,0x5f,0x69,0x6e,0x69,0x74,0x3b,0x64,0x3d,0x65,0x28,0x64,0x2e,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x29,0x3b,0x62,0x2e,0x74,0x79,0x70,0x65,0x3d,0x64,0x3b,0x65,0x3d,0x62,0x2e,0x74,0x61,0x67,0x3d,0x5a,0x6b,0x28,0x64,0x29,0x3b,0x61,0x3d,0x43,0x69,0x28,0x64,0x2c,0x61,0x29,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x65,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x62,0x3d,0x63,0x6a,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x64,0x2c,0x61,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x62,0x3d,0x68,0x6a,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x64,0x2c,0x61,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x62,0x3d,0x59,0x69,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x64,0x2c,0x61,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x62,0x3d,0x24,0x69,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x64,0x2c,0x43,0x69,0x28,0x64,0x2e,0x74,0x79,0x70,0x65,0x2c,0x61,0x29,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x30,0x36,0x2c,0x5c,0x6e,0x64,0x2c,0x5c,0x22,0x5c,0x22,0x29,0x29,0x3b,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x30,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x65,0x3d,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x64,0x3f,0x65,0x3a,0x43,0x69,0x28,0x64,0x2c,0x65,0x29,0x2c,0x63,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x65,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x65,0x3d,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x64,0x3f,0x65,0x3a,0x43,0x69,0x28,0x64,0x2c,0x65,0x29,0x2c,0x68,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x65,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x61,0x3a,0x7b,0x6b,0x6a,0x28,0x62,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x38,0x37,0x29,0x29,0x3b,0x64,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x66,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x65,0x3d,0x66,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3b,0x6c,0x68,0x28,0x61,0x2c,0x62,0x29,0x3b,0x71,0x68,0x28,0x62,0x2c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x64,0x3d,0x67,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3b,0x69,0x66,0x28,0x66,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x69,0x66,0x28,0x66,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x64,0x2c,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x21,0x31,0x2c,0x63,0x61,0x63,0x68,0x65,0x3a,0x67,0x2e,0x63,0x61,0x63,0x68,0x65,0x2c,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x42,0x6f,0x75,0x6e,0x64,0x61,0x72,0x69,0x65,0x73,0x3a,0x67,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x42,0x6f,0x75,0x6e,0x64,0x61,0x72,0x69,0x65,0x73,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x67,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x7d,0x2c,0x62,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x2e,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x5c,0x6e,0x66,0x2c,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x32,0x35,0x36,0x29,0x7b,0x65,0x3d,0x4a,0x69,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x32,0x33,0x29,0x29,0x2c,0x62,0x29,0x3b,0x62,0x3d,0x6c,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x63,0x2c,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x64,0x21,0x3d,0x3d,0x65,0x29,0x7b,0x65,0x3d,0x4a,0x69,0x28,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x32,0x34,0x29,0x29,0x2c,0x62,0x29,0x3b,0x62,0x3d,0x6c,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x63,0x2c,0x65,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x79,0x67,0x3d,0x4c,0x66,0x28,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x29,0x2c,0x78,0x67,0x3d,0x62,0x2c,0x49,0x3d,0x21,0x30,0x2c,0x7a,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x3d,0x56,0x67,0x28,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x63,0x3b,0x63,0x3b,0x29,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x2d,0x33,0x7c,0x34,0x30,0x39,0x36,0x2c,0x63,0x3d,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x49,0x67,0x28,0x29,0x3b,0x69,0x66,0x28,0x64,0x3d,0x3d,0x3d,0x65,0x29,0x7b,0x62,0x3d,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x63,0x29,0x7d,0x62,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x41,0x68,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x45,0x67,0x28,0x62,0x29,0x2c,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x3f,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x67,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x45,0x66,0x28,0x64,0x2c,0x65,0x29,0x3f,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x45,0x66,0x28,0x64,0x2c,0x66,0x29,0x26,0x26,0x28,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x33,0x32,0x29,0x2c,0x5c,0x6e,0x67,0x6a,0x28,0x61,0x2c,0x62,0x29,0x2c,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x67,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x36,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x26,0x26,0x45,0x67,0x28,0x62,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x79,0x68,0x28,0x62,0x2c,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x29,0x2c,0x64,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x55,0x67,0x28,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x64,0x2c,0x63,0x29,0x3a,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x31,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x65,0x3d,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x64,0x3f,0x65,0x3a,0x43,0x69,0x28,0x64,0x2c,0x65,0x29,0x2c,0x59,0x69,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x65,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x38,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x63,0x29,0x2c,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x30,0x3a,0x61,0x3a,0x7b,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2e,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x65,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3b,0x66,0x3d,0x62,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x5c,0x6e,0x67,0x3d,0x65,0x2e,0x76,0x61,0x6c,0x75,0x65,0x3b,0x47,0x28,0x57,0x67,0x2c,0x64,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x29,0x3b,0x64,0x2e,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3d,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x69,0x66,0x28,0x48,0x65,0x28,0x66,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x67,0x29,0x29,0x7b,0x69,0x66,0x28,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x3d,0x3d,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x26,0x26,0x21,0x57,0x66,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x7b,0x62,0x3d,0x5a,0x69,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x66,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x26,0x26,0x28,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x62,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x66,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x29,0x7b,0x67,0x3d,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6b,0x3d,0x68,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6b,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x3d,0x3d,0x64,0x29,0x7b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x66,0x2e,0x74,0x61,0x67,0x29,0x7b,0x6b,0x3d,0x6d,0x68,0x28,0x2d,0x31,0x2c,0x63,0x26,0x2d,0x63,0x29,0x3b,0x6b,0x2e,0x74,0x61,0x67,0x3d,0x32,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x66,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6c,0x29,0x7b,0x6c,0x3d,0x6c,0x2e,0x73,0x68,0x61,0x72,0x65,0x64,0x3b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x6c,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x6d,0x3f,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6b,0x3a,0x28,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6d,0x2e,0x6e,0x65,0x78,0x74,0x2c,0x6d,0x2e,0x6e,0x65,0x78,0x74,0x3d,0x6b,0x29,0x3b,0x6c,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x3d,0x6b,0x7d,0x7d,0x66,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x63,0x3b,0x6b,0x3d,0x66,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6b,0x26,0x26,0x28,0x6b,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x63,0x29,0x3b,0x62,0x68,0x28,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x2c,0x5c,0x6e,0x63,0x2c,0x62,0x29,0x3b,0x68,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x63,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x6b,0x3d,0x6b,0x2e,0x6e,0x65,0x78,0x74,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x30,0x3d,0x3d,0x3d,0x66,0x2e,0x74,0x61,0x67,0x29,0x67,0x3d,0x66,0x2e,0x74,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x38,0x3d,0x3d,0x3d,0x66,0x2e,0x74,0x61,0x67,0x29,0x7b,0x67,0x3d,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x34,0x31,0x29,0x29,0x3b,0x67,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x63,0x3b,0x68,0x3d,0x67,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x26,0x26,0x28,0x68,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x7c,0x3d,0x63,0x29,0x3b,0x62,0x68,0x28,0x67,0x2c,0x63,0x2c,0x62,0x29,0x3b,0x67,0x3d,0x66,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x7d,0x65,0x6c,0x73,0x65,0x20,0x67,0x3d,0x66,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x29,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x66,0x3b,0x65,0x6c,0x73,0x65,0x20,0x66,0x6f,0x72,0x28,0x67,0x3d,0x66,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x67,0x3b,0x29,0x7b,0x69,0x66,0x28,0x67,0x3d,0x3d,0x3d,0x62,0x29,0x7b,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x66,0x3d,0x67,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x66,0x29,0x7b,0x66,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x67,0x3d,0x66,0x3b,0x62,0x72,0x65,0x61,0x6b,0x7d,0x67,0x3d,0x67,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x66,0x3d,0x67,0x7d,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x65,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x63,0x29,0x3b,0x62,0x3d,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x3b,0x63,0x61,0x73,0x65,0x20,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x64,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x63,0x68,0x28,0x62,0x2c,0x63,0x29,0x2c,0x65,0x3d,0x65,0x68,0x28,0x65,0x29,0x2c,0x64,0x3d,0x64,0x28,0x65,0x29,0x2c,0x62,0x2e,0x66,0x6c,0x61,0x67,0x73,0x7c,0x3d,0x31,0x2c,0x58,0x69,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x63,0x29,0x2c,0x5c,0x6e,0x62,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x34,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x3d,0x43,0x69,0x28,0x64,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x29,0x2c,0x65,0x3d,0x43,0x69,0x28,0x64,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x29,0x2c,0x24,0x69,0x28,0x61,0x2c,0x62,0x2c,0x64,0x2c,0x65,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x37,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x3d,0x62,0x2e,0x74,0x79,0x70,0x65,0x2c,0x65,0x3d,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x2c,0x65,0x3d,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x3d,0x3d,0x64,0x3f,0x65,0x3a,0x43,0x69,0x28,0x64,0x2c,0x65,0x29,0x2c,0x69,0x6a,0x28,0x61,0x2c,0x62,0x29,0x2c,0x62,0x2e,0x74,0x61,0x67,0x3d,0x31,0x2c,0x5a,0x66,0x28,0x64,0x29,0x3f,0x28,0x61,0x3d,0x21,0x30,0x2c,0x63,0x67,0x28,0x62,0x29,0x29,0x3a,0x61,0x3d,0x21,0x31,0x2c,0x63,0x68,0x28,0x62,0x2c,0x63,0x29,0x2c,0x47,0x69,0x28,0x62,0x2c,0x64,0x2c,0x65,0x29,0x2c,0x49,0x69,0x28,0x62,0x2c,0x64,0x2c,0x65,0x2c,0x63,0x29,0x2c,0x6a,0x6a,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x2c,0x64,0x2c,0x21,0x30,0x2c,0x61,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x39,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x78,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x32,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x35,0x36,0x2c,0x62,0x2e,0x74,0x61,0x67,0x29,0x29,0x3b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x63,0x28,0x61,0x2c,0x62,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x24,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x74,0x61,0x67,0x3d,0x61,0x3b,0x74,0x68,0x69,0x73,0x2e,0x6b,0x65,0x79,0x3d,0x63,0x3b,0x74,0x68,0x69,0x73,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x74,0x68,0x69,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x3d,0x74,0x68,0x69,0x73,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x74,0x79,0x70,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x68,0x69,0x73,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x30,0x3b,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x66,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x62,0x3b,0x74,0x68,0x69,0x73,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x68,0x69,0x73,0x2e,0x6d,0x6f,0x64,0x65,0x3d,0x64,0x3b,0x74,0x68,0x69,0x73,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x30,0x3b,0x74,0x68,0x69,0x73,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x74,0x68,0x69,0x73,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x42,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x65,0x77,0x20,0x24,0x6b,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6a,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x21,0x61,0x7c,0x7c,0x21,0x61,0x2e,0x69,0x73,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5a,0x6b,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x6a,0x28,0x61,0x29,0x3f,0x31,0x3a,0x30,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3b,0x69,0x66,0x28,0x61,0x3d,0x3d,0x3d,0x44,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x31,0x3b,0x69,0x66,0x28,0x61,0x3d,0x3d,0x3d,0x47,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x31,0x34,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x32,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x50,0x67,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x63,0x3f,0x28,0x63,0x3d,0x42,0x67,0x28,0x61,0x2e,0x74,0x61,0x67,0x2c,0x62,0x2c,0x61,0x2e,0x6b,0x65,0x79,0x2c,0x61,0x2e,0x6d,0x6f,0x64,0x65,0x29,0x2c,0x63,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x61,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x2c,0x63,0x2e,0x74,0x79,0x70,0x65,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x63,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2c,0x63,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x61,0x2c,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x3d,0x63,0x29,0x3a,0x28,0x63,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x3d,0x62,0x2c,0x63,0x2e,0x74,0x79,0x70,0x65,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x63,0x2e,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x3d,0x30,0x2c,0x63,0x2e,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x63,0x2e,0x66,0x6c,0x61,0x67,0x73,0x3d,0x61,0x2e,0x66,0x6c,0x61,0x67,0x73,0x26,0x31,0x34,0x36,0x38,0x30,0x30,0x36,0x34,0x3b,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3b,0x63,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3b,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x3b,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x3b,0x63,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x63,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3d,0x61,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x3b,0x62,0x3d,0x61,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3b,0x63,0x2e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x7b,0x6c,0x61,0x6e,0x65,0x73,0x3a,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x2c,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x62,0x2e,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x7d,0x3b,0x5c,0x6e,0x63,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3d,0x61,0x2e,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x3b,0x63,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3d,0x61,0x2e,0x69,0x6e,0x64,0x65,0x78,0x3b,0x63,0x2e,0x72,0x65,0x66,0x3d,0x61,0x2e,0x72,0x65,0x66,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x32,0x3b,0x64,0x3d,0x61,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x61,0x6a,0x28,0x61,0x29,0x26,0x26,0x28,0x67,0x3d,0x31,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x67,0x3d,0x35,0x3b,0x65,0x6c,0x73,0x65,0x20,0x61,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x79,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x54,0x67,0x28,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x65,0x2c,0x66,0x2c,0x62,0x29,0x3b,0x63,0x61,0x73,0x65,0x20,0x7a,0x61,0x3a,0x67,0x3d,0x38,0x3b,0x65,0x7c,0x3d,0x38,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x41,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x42,0x67,0x28,0x31,0x32,0x2c,0x63,0x2c,0x62,0x2c,0x65,0x7c,0x32,0x29,0x2c,0x61,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x41,0x61,0x2c,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x66,0x2c,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x45,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x42,0x67,0x28,0x31,0x33,0x2c,0x63,0x2c,0x62,0x2c,0x65,0x29,0x2c,0x61,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x45,0x61,0x2c,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x66,0x2c,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x46,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3d,0x42,0x67,0x28,0x31,0x39,0x2c,0x63,0x2c,0x62,0x2c,0x65,0x29,0x2c,0x61,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x46,0x61,0x2c,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x66,0x2c,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x49,0x61,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x70,0x6a,0x28,0x63,0x2c,0x65,0x2c,0x66,0x2c,0x62,0x29,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x42,0x61,0x3a,0x67,0x3d,0x31,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x43,0x61,0x3a,0x67,0x3d,0x39,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x44,0x61,0x3a,0x67,0x3d,0x31,0x31,0x3b,0x5c,0x6e,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x47,0x61,0x3a,0x67,0x3d,0x31,0x34,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x48,0x61,0x3a,0x67,0x3d,0x31,0x36,0x3b,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x33,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x61,0x3f,0x61,0x3a,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x2c,0x5c,0x22,0x5c,0x22,0x29,0x29,0x3b,0x7d,0x62,0x3d,0x42,0x67,0x28,0x67,0x2c,0x63,0x2c,0x62,0x2c,0x65,0x29,0x3b,0x62,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x61,0x3b,0x62,0x2e,0x74,0x79,0x70,0x65,0x3d,0x64,0x3b,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x66,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x61,0x3d,0x42,0x67,0x28,0x37,0x2c,0x61,0x2c,0x64,0x2c,0x62,0x29,0x3b,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x6a,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x61,0x3d,0x42,0x67,0x28,0x32,0x32,0x2c,0x61,0x2c,0x64,0x2c,0x62,0x29,0x3b,0x61,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x3d,0x49,0x61,0x3b,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x3b,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x7b,0x69,0x73,0x48,0x69,0x64,0x64,0x65,0x6e,0x3a,0x21,0x31,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x61,0x3d,0x42,0x67,0x28,0x36,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x29,0x3b,0x61,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x67,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x62,0x3d,0x42,0x67,0x28,0x34,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3f,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x5b,0x5d,0x2c,0x61,0x2e,0x6b,0x65,0x79,0x2c,0x62,0x29,0x3b,0x62,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x63,0x3b,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x7b,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x61,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x2c,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x61,0x2e,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x74,0x61,0x67,0x3d,0x62,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3d,0x61,0x3b,0x74,0x68,0x69,0x73,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x68,0x69,0x73,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x2d,0x31,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x30,0x3b,0x74,0x68,0x69,0x73,0x2e,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x3d,0x7a,0x63,0x28,0x30,0x29,0x3b,0x74,0x68,0x69,0x73,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x3d,0x7a,0x63,0x28,0x2d,0x31,0x29,0x3b,0x74,0x68,0x69,0x73,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x52,0x65,0x61,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x74,0x68,0x69,0x73,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x3d,0x30,0x3b,0x74,0x68,0x69,0x73,0x2e,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x3d,0x7a,0x63,0x28,0x30,0x29,0x3b,0x74,0x68,0x69,0x73,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x3d,0x64,0x3b,0x74,0x68,0x69,0x73,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x3d,0x65,0x3b,0x74,0x68,0x69,0x73,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x3d,0x5c,0x6e,0x6e,0x75,0x6c,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x7b,0x61,0x3d,0x6e,0x65,0x77,0x20,0x61,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x68,0x2c,0x6b,0x29,0x3b,0x31,0x3d,0x3d,0x3d,0x62,0x3f,0x28,0x62,0x3d,0x31,0x2c,0x21,0x30,0x3d,0x3d,0x3d,0x66,0x26,0x26,0x28,0x62,0x7c,0x3d,0x38,0x29,0x29,0x3a,0x62,0x3d,0x30,0x3b,0x66,0x3d,0x42,0x67,0x28,0x33,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x62,0x29,0x3b,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3d,0x66,0x3b,0x66,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3d,0x61,0x3b,0x66,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x64,0x2c,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x3a,0x63,0x2c,0x63,0x61,0x63,0x68,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x42,0x6f,0x75,0x6e,0x64,0x61,0x72,0x69,0x65,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x6b,0x68,0x28,0x66,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x33,0x3c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x33,0x5d,0x3f,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x33,0x5d,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x77,0x61,0x2c,0x6b,0x65,0x79,0x3a,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x64,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x5c,0x22,0x5c,0x22,0x2b,0x64,0x2c,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3a,0x61,0x2c,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3a,0x62,0x2c,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x63,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x64,0x6c,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x21,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x56,0x66,0x3b,0x61,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x61,0x3a,0x7b,0x69,0x66,0x28,0x56,0x62,0x28,0x61,0x29,0x21,0x3d,0x3d,0x61,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x37,0x30,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x3b,0x64,0x6f,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x62,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x69,0x66,0x28,0x5a,0x66,0x28,0x62,0x2e,0x74,0x79,0x70,0x65,0x29,0x29,0x7b,0x62,0x3d,0x62,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x2e,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x65,0x72,0x67,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3b,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x7d,0x62,0x3d,0x62,0x2e,0x72,0x65,0x74,0x75,0x72,0x6e,0x7d,0x77,0x68,0x69,0x6c,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x37,0x31,0x29,0x29,0x3b,0x7d,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x3b,0x69,0x66,0x28,0x5a,0x66,0x28,0x63,0x29,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x67,0x28,0x61,0x2c,0x63,0x2c,0x62,0x29,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x7b,0x61,0x3d,0x62,0x6c,0x28,0x63,0x2c,0x64,0x2c,0x21,0x30,0x2c,0x61,0x2c,0x65,0x2c,0x66,0x2c,0x67,0x2c,0x68,0x2c,0x6b,0x29,0x3b,0x61,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x64,0x6c,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x63,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x64,0x3d,0x52,0x28,0x29,0x3b,0x65,0x3d,0x79,0x69,0x28,0x63,0x29,0x3b,0x66,0x3d,0x6d,0x68,0x28,0x64,0x2c,0x65,0x29,0x3b,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3f,0x62,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x6e,0x68,0x28,0x63,0x2c,0x66,0x2c,0x65,0x29,0x3b,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6c,0x61,0x6e,0x65,0x73,0x3d,0x65,0x3b,0x41,0x63,0x28,0x61,0x2c,0x65,0x2c,0x64,0x29,0x3b,0x44,0x6b,0x28,0x61,0x2c,0x64,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x62,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2c,0x66,0x3d,0x52,0x28,0x29,0x2c,0x67,0x3d,0x79,0x69,0x28,0x65,0x29,0x3b,0x63,0x3d,0x64,0x6c,0x28,0x63,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3f,0x62,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x63,0x3a,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x63,0x3b,0x62,0x3d,0x6d,0x68,0x28,0x66,0x2c,0x67,0x29,0x3b,0x62,0x2e,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3d,0x7b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3a,0x61,0x7d,0x3b,0x64,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x64,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x64,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x64,0x26,0x26,0x28,0x62,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x64,0x29,0x3b,0x61,0x3d,0x6e,0x68,0x28,0x65,0x2c,0x62,0x2c,0x67,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x28,0x67,0x69,0x28,0x61,0x2c,0x65,0x2c,0x67,0x2c,0x66,0x29,0x2c,0x6f,0x68,0x28,0x61,0x2c,0x65,0x2c,0x67,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x67,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x6c,0x28,0x61,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x69,0x66,0x28,0x21,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x63,0x68,0x69,0x6c,0x64,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x6c,0x28,0x61,0x2c,0x62,0x29,0x7b,0x61,0x3d,0x61,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x2e,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3b,0x61,0x2e,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x3d,0x30,0x21,0x3d,0x3d,0x63,0x26,0x26,0x63,0x3c,0x62,0x3f,0x63,0x3a,0x62,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x6c,0x28,0x61,0x2c,0x62,0x29,0x7b,0x68,0x6c,0x28,0x61,0x2c,0x62,0x29,0x3b,0x28,0x61,0x3d,0x61,0x2e,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x29,0x26,0x26,0x68,0x6c,0x28,0x61,0x2c,0x62,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6a,0x6c,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x7d,0x76,0x61,0x72,0x20,0x6b,0x6c,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x45,0x72,0x72,0x6f,0x72,0x3f,0x72,0x65,0x70,0x6f,0x72,0x74,0x45,0x72,0x72,0x6f,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x61,0x29,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6c,0x6c,0x28,0x61,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3d,0x61,0x7d,0x5c,0x6e,0x6d,0x6c,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3d,0x6c,0x6c,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x30,0x39,0x29,0x29,0x3b,0x66,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x3b,0x6d,0x6c,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x3d,0x6c,0x6c,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x3b,0x52,0x6b,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x66,0x6c,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x29,0x3b,0x62,0x5b,0x75,0x66,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6d,0x6c,0x28,0x61,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x3d,0x61,0x7d,0x5c,0x6e,0x6d,0x6c,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x48,0x63,0x28,0x29,0x3b,0x61,0x3d,0x7b,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x74,0x61,0x72,0x67,0x65,0x74,0x3a,0x61,0x2c,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3a,0x62,0x7d,0x3b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x63,0x3d,0x30,0x3b,0x63,0x3c,0x51,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x30,0x21,0x3d,0x3d,0x62,0x26,0x26,0x62,0x3c,0x51,0x63,0x5b,0x63,0x5d,0x2e,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3b,0x63,0x2b,0x2b,0x29,0x3b,0x51,0x63,0x2e,0x73,0x70,0x6c,0x69,0x63,0x65,0x28,0x63,0x2c,0x30,0x2c,0x61,0x29,0x3b,0x30,0x3d,0x3d,0x3d,0x63,0x26,0x26,0x56,0x63,0x28,0x61,0x29,0x7d,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x6c,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x21,0x61,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x39,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x31,0x31,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x6c,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x28,0x21,0x61,0x7c,0x7c,0x31,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x39,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x31,0x31,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x26,0x26,0x28,0x38,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x7c,0x7c,0x5c,0x22,0x20,0x72,0x65,0x61,0x63,0x74,0x2d,0x6d,0x6f,0x75,0x6e,0x74,0x2d,0x70,0x6f,0x69,0x6e,0x74,0x2d,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x20,0x5c,0x22,0x21,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x70,0x6c,0x28,0x29,0x7b,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x65,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x64,0x3b,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x67,0x6c,0x28,0x67,0x29,0x3b,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x61,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x67,0x3d,0x65,0x6c,0x28,0x62,0x2c,0x64,0x2c,0x61,0x2c,0x30,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x2c,0x5c,0x22,0x5c,0x22,0x2c,0x70,0x6c,0x29,0x3b,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x67,0x3b,0x61,0x5b,0x75,0x66,0x5d,0x3d,0x67,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x73,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x61,0x29,0x3b,0x52,0x6b,0x28,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x67,0x7d,0x66,0x6f,0x72,0x28,0x3b,0x65,0x3d,0x61,0x2e,0x6c,0x61,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x3b,0x29,0x61,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x65,0x29,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x64,0x3b,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x67,0x6c,0x28,0x6b,0x29,0x3b,0x68,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x61,0x29,0x7d,0x7d,0x76,0x61,0x72,0x20,0x6b,0x3d,0x62,0x6c,0x28,0x61,0x2c,0x30,0x2c,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x21,0x31,0x2c,0x21,0x31,0x2c,0x5c,0x22,0x5c,0x22,0x2c,0x70,0x6c,0x29,0x3b,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x6b,0x3b,0x61,0x5b,0x75,0x66,0x5d,0x3d,0x6b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x73,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x61,0x29,0x3b,0x52,0x6b,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x66,0x6c,0x28,0x62,0x2c,0x6b,0x2c,0x63,0x2c,0x64,0x29,0x7d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x72,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x2c,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x66,0x3d,0x63,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3b,0x69,0x66,0x28,0x66,0x29,0x7b,0x76,0x61,0x72,0x20,0x67,0x3d,0x66,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x68,0x3d,0x65,0x3b,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x67,0x6c,0x28,0x67,0x29,0x3b,0x68,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x61,0x29,0x7d,0x7d,0x66,0x6c,0x28,0x62,0x2c,0x67,0x2c,0x61,0x2c,0x65,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x67,0x3d,0x71,0x6c,0x28,0x63,0x2c,0x62,0x2c,0x61,0x2c,0x65,0x2c,0x64,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x67,0x6c,0x28,0x67,0x29,0x7d,0x45,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x69,0x66,0x28,0x62,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x2e,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x74,0x63,0x28,0x62,0x2e,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x29,0x3b,0x30,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x43,0x63,0x28,0x62,0x2c,0x63,0x7c,0x31,0x29,0x2c,0x44,0x6b,0x28,0x62,0x2c,0x42,0x28,0x29,0x29,0x2c,0x30,0x3d,0x3d,0x3d,0x28,0x4b,0x26,0x36,0x29,0x26,0x26,0x28,0x47,0x6a,0x3d,0x42,0x28,0x29,0x2b,0x35,0x30,0x30,0x2c,0x6a,0x67,0x28,0x29,0x29,0x29,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x31,0x33,0x3a,0x52,0x6b,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x69,0x68,0x28,0x61,0x2c,0x31,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x52,0x28,0x29,0x3b,0x67,0x69,0x28,0x62,0x2c,0x61,0x2c,0x31,0x2c,0x63,0x29,0x7d,0x7d,0x29,0x2c,0x69,0x6c,0x28,0x61,0x2c,0x31,0x29,0x7d,0x7d,0x3b,0x5c,0x6e,0x46,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x69,0x68,0x28,0x61,0x2c,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x52,0x28,0x29,0x3b,0x67,0x69,0x28,0x62,0x2c,0x61,0x2c,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x2c,0x63,0x29,0x7d,0x69,0x6c,0x28,0x61,0x2c,0x31,0x33,0x34,0x32,0x31,0x37,0x37,0x32,0x38,0x29,0x7d,0x7d,0x3b,0x47,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x31,0x33,0x3d,0x3d,0x3d,0x61,0x2e,0x74,0x61,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x79,0x69,0x28,0x61,0x29,0x2c,0x63,0x3d,0x69,0x68,0x28,0x61,0x2c,0x62,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x52,0x28,0x29,0x3b,0x67,0x69,0x28,0x63,0x2c,0x61,0x2c,0x62,0x2c,0x64,0x29,0x7d,0x69,0x6c,0x28,0x61,0x2c,0x62,0x29,0x7d,0x7d,0x3b,0x48,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x43,0x7d,0x3b,0x49,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x43,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x43,0x3d,0x61,0x2c,0x62,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x43,0x3d,0x63,0x7d,0x7d,0x3b,0x5c,0x6e,0x79,0x62,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x62,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5c,0x22,0x3a,0x62,0x62,0x28,0x61,0x2c,0x63,0x29,0x3b,0x62,0x3d,0x63,0x2e,0x6e,0x61,0x6d,0x65,0x3b,0x69,0x66,0x28,0x5c,0x22,0x72,0x61,0x64,0x69,0x6f,0x5c,0x22,0x3d,0x3d,0x3d,0x63,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x29,0x7b,0x66,0x6f,0x72,0x28,0x63,0x3d,0x61,0x3b,0x63,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x29,0x63,0x3d,0x63,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3b,0x63,0x3d,0x63,0x2e,0x71,0x75,0x65,0x72,0x79,0x53,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x41,0x6c,0x6c,0x28,0x5c,0x22,0x69,0x6e,0x70,0x75,0x74,0x5b,0x6e,0x61,0x6d,0x65,0x3d,0x5c,0x22,0x2b,0x4a,0x53,0x4f,0x4e,0x2e,0x73,0x74,0x72,0x69,0x6e,0x67,0x69,0x66,0x79,0x28,0x5c,0x22,0x5c,0x22,0x2b,0x62,0x29,0x2b,0x27,0x5d,0x5b,0x74,0x79,0x70,0x65,0x3d,0x5c,0x22,0x72,0x61,0x64,0x69,0x6f,0x5c,0x22,0x5d,0x27,0x29,0x3b,0x66,0x6f,0x72,0x28,0x62,0x3d,0x30,0x3b,0x62,0x3c,0x63,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x62,0x2b,0x2b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x5b,0x62,0x5d,0x3b,0x69,0x66,0x28,0x64,0x21,0x3d,0x3d,0x61,0x26,0x26,0x64,0x2e,0x66,0x6f,0x72,0x6d,0x3d,0x3d,0x3d,0x61,0x2e,0x66,0x6f,0x72,0x6d,0x29,0x7b,0x76,0x61,0x72,0x20,0x65,0x3d,0x44,0x62,0x28,0x64,0x29,0x3b,0x69,0x66,0x28,0x21,0x65,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x39,0x30,0x29,0x29,0x3b,0x57,0x61,0x28,0x64,0x29,0x3b,0x62,0x62,0x28,0x64,0x2c,0x65,0x29,0x7d,0x7d,0x7d,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x5c,0x22,0x3a,0x69,0x62,0x28,0x61,0x2c,0x63,0x29,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x5c,0x22,0x3a,0x62,0x3d,0x63,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x26,0x26,0x66,0x62,0x28,0x61,0x2c,0x21,0x21,0x63,0x2e,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x2c,0x62,0x2c,0x21,0x31,0x29,0x7d,0x7d,0x3b,0x47,0x62,0x3d,0x51,0x6b,0x3b,0x48,0x62,0x3d,0x52,0x6b,0x3b,0x5c,0x6e,0x76,0x61,0x72,0x20,0x73,0x6c,0x3d,0x7b,0x75,0x73,0x69,0x6e,0x67,0x43,0x6c,0x69,0x65,0x6e,0x74,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x3a,0x21,0x31,0x2c,0x45,0x76,0x65,0x6e,0x74,0x73,0x3a,0x5b,0x43,0x62,0x2c,0x75,0x65,0x2c,0x44,0x62,0x2c,0x45,0x62,0x2c,0x46,0x62,0x2c,0x51,0x6b,0x5d,0x7d,0x2c,0x74,0x6c,0x3d,0x7b,0x66,0x69,0x6e,0x64,0x46,0x69,0x62,0x65,0x72,0x42,0x79,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x3a,0x57,0x63,0x2c,0x62,0x75,0x6e,0x64,0x6c,0x65,0x54,0x79,0x70,0x65,0x3a,0x30,0x2c,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3a,0x5c,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x5c,0x22,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x4e,0x61,0x6d,0x65,0x3a,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x5c,0x22,0x7d,0x3b,0x5c,0x6e,0x76,0x61,0x72,0x20,0x75,0x6c,0x3d,0x7b,0x62,0x75,0x6e,0x64,0x6c,0x65,0x54,0x79,0x70,0x65,0x3a,0x74,0x6c,0x2e,0x62,0x75,0x6e,0x64,0x6c,0x65,0x54,0x79,0x70,0x65,0x2c,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3a,0x74,0x6c,0x2e,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x4e,0x61,0x6d,0x65,0x3a,0x74,0x6c,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x4e,0x61,0x6d,0x65,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x43,0x6f,0x6e,0x66,0x69,0x67,0x3a,0x74,0x6c,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x43,0x6f,0x6e,0x66,0x69,0x67,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x44,0x65,0x6c,0x65,0x74,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x52,0x65,0x6e,0x61,0x6d,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x44,0x65,0x6c,0x65,0x74,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x52,0x65,0x6e,0x61,0x6d,0x65,0x50,0x61,0x74,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x65,0x74,0x45,0x72,0x72,0x6f,0x72,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x65,0x74,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x52,0x65,0x66,0x3a,0x75,0x61,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x2c,0x66,0x69,0x6e,0x64,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x42,0x79,0x46,0x69,0x62,0x65,0x72,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x61,0x3d,0x5a,0x62,0x28,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x7d,0x2c,0x66,0x69,0x6e,0x64,0x46,0x69,0x62,0x65,0x72,0x42,0x79,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x3a,0x74,0x6c,0x2e,0x66,0x69,0x6e,0x64,0x46,0x69,0x62,0x65,0x72,0x42,0x79,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x7c,0x7c,0x5c,0x6e,0x6a,0x6c,0x2c,0x66,0x69,0x6e,0x64,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x73,0x46,0x6f,0x72,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x52,0x6f,0x6f,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x73,0x65,0x74,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x46,0x69,0x62,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x72,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3a,0x5c,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x2d,0x6e,0x65,0x78,0x74,0x2d,0x66,0x31,0x33,0x33,0x38,0x66,0x38,0x30,0x38,0x30,0x2d,0x32,0x30,0x32,0x34,0x30,0x34,0x32,0x36,0x5c,0x22,0x7d,0x3b,0x69,0x66,0x28,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x29,0x7b,0x76,0x61,0x72,0x20,0x76,0x6c,0x3d,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x3b,0x69,0x66,0x28,0x21,0x76,0x6c,0x2e,0x69,0x73,0x44,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x26,0x26,0x76,0x6c,0x2e,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x73,0x46,0x69,0x62,0x65,0x72,0x29,0x74,0x72,0x79,0x7b,0x6b,0x63,0x3d,0x76,0x6c,0x2e,0x69,0x6e,0x6a,0x65,0x63,0x74,0x28,0x75,0x6c,0x29,0x2c,0x6c,0x63,0x3d,0x76,0x6c,0x7d,0x63,0x61,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x7d,0x7d,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x3d,0x73,0x6c,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x50,0x6f,0x72,0x74,0x61,0x6c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x32,0x3c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x32,0x5d,0x3f,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x32,0x5d,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x21,0x6e,0x6c,0x28,0x62,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x21,0x6e,0x6c,0x28,0x61,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x39,0x39,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x21,0x31,0x2c,0x64,0x3d,0x5c,0x22,0x5c,0x22,0x2c,0x65,0x3d,0x6b,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x26,0x26,0x28,0x21,0x30,0x3d,0x3d,0x3d,0x62,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x26,0x26,0x28,0x63,0x3d,0x21,0x30,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x26,0x26,0x28,0x64,0x3d,0x62,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x26,0x26,0x28,0x65,0x3d,0x62,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x29,0x29,0x3b,0x62,0x3d,0x62,0x6c,0x28,0x61,0x2c,0x31,0x2c,0x21,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x63,0x2c,0x21,0x31,0x2c,0x64,0x2c,0x65,0x29,0x3b,0x61,0x5b,0x75,0x66,0x5d,0x3d,0x62,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x73,0x66,0x28,0x38,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x3f,0x61,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x3a,0x61,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x65,0x77,0x20,0x6c,0x6c,0x28,0x62,0x29,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x66,0x69,0x6e,0x64,0x44,0x4f,0x4d,0x4e,0x6f,0x64,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x3b,0x69,0x66,0x28,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x31,0x38,0x38,0x29,0x29,0x3b,0x61,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x61,0x29,0x2e,0x6a,0x6f,0x69,0x6e,0x28,0x5c,0x22,0x2c,0x5c,0x22,0x29,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x36,0x38,0x2c,0x61,0x29,0x29,0x3b,0x7d,0x61,0x3d,0x5a,0x62,0x28,0x62,0x29,0x3b,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x2e,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x66,0x6c,0x75,0x73,0x68,0x53,0x79,0x6e,0x63,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x52,0x6b,0x28,0x61,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x21,0x6f,0x6c,0x28,0x62,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x6c,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x62,0x2c,0x21,0x30,0x2c,0x63,0x29,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x21,0x6e,0x6c,0x28,0x61,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x30,0x35,0x29,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x26,0x26,0x63,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x53,0x6f,0x75,0x72,0x63,0x65,0x73,0x7c,0x7c,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x3d,0x21,0x31,0x2c,0x66,0x3d,0x5c,0x22,0x5c,0x22,0x2c,0x67,0x3d,0x6b,0x6c,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x26,0x26,0x28,0x21,0x30,0x3d,0x3d,0x3d,0x63,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x26,0x26,0x28,0x65,0x3d,0x21,0x30,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x26,0x26,0x28,0x66,0x3d,0x63,0x2e,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x63,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x26,0x26,0x28,0x67,0x3d,0x63,0x2e,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x29,0x29,0x3b,0x62,0x3d,0x65,0x6c,0x28,0x62,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x31,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x3f,0x63,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x65,0x2c,0x21,0x31,0x2c,0x66,0x2c,0x67,0x29,0x3b,0x61,0x5b,0x75,0x66,0x5d,0x3d,0x62,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3b,0x73,0x66,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x64,0x29,0x66,0x6f,0x72,0x28,0x61,0x3d,0x30,0x3b,0x61,0x3c,0x64,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x61,0x2b,0x2b,0x29,0x63,0x3d,0x64,0x5b,0x61,0x5d,0x2c,0x65,0x3d,0x63,0x2e,0x5f,0x67,0x65,0x74,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x2c,0x65,0x3d,0x65,0x28,0x63,0x2e,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x62,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x3f,0x62,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x3d,0x5b,0x63,0x2c,0x65,0x5d,0x3a,0x62,0x2e,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x2c,0x5c,0x6e,0x65,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x65,0x77,0x20,0x6d,0x6c,0x28,0x62,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x69,0x66,0x28,0x21,0x6f,0x6c,0x28,0x62,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x6c,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x62,0x2c,0x21,0x31,0x2c,0x63,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x41,0x74,0x4e,0x6f,0x64,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x21,0x6f,0x6c,0x28,0x61,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x34,0x30,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3f,0x28,0x52,0x6b,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x6c,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x2c,0x21,0x31,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x5b,0x75,0x66,0x5d,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x29,0x7d,0x29,0x2c,0x21,0x30,0x29,0x3a,0x21,0x31,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x62,0x61,0x74,0x63,0x68,0x65,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x73,0x3d,0x51,0x6b,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x6e,0x64,0x65,0x72,0x53,0x75,0x62,0x74,0x72,0x65,0x65,0x49,0x6e,0x74,0x6f,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x64,0x29,0x7b,0x69,0x66,0x28,0x21,0x6f,0x6c,0x28,0x63,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x32,0x30,0x30,0x29,0x29,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x61,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x70,0x28,0x33,0x38,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x72,0x6c,0x28,0x61,0x2c,0x62,0x2c,0x63,0x2c,0x21,0x31,0x2c,0x64,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x5c,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x2d,0x6e,0x65,0x78,0x74,0x2d,0x66,0x31,0x33,0x33,0x38,0x66,0x38,0x30,0x38,0x30,0x2d,0x32,0x30,0x32,0x34,0x30,0x34,0x32,0x36,0x5c,0x22,0x3b,0x5c,0x6e,0x22,0x2c,0x22,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x5c,0x6e,0x5c,0x6e,0x76,0x61,0x72,0x20,0x6d,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x27,0x29,0x3b,0x5c,0x6e,0x69,0x66,0x20,0x28,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x2e,0x65,0x6e,0x76,0x2e,0x4e,0x4f,0x44,0x45,0x5f,0x45,0x4e,0x56,0x20,0x3d,0x3d,0x3d,0x20,0x27,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x27,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x20,0x3d,0x20,0x6d,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3b,0x5c,0x6e,0x20,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x20,0x3d,0x20,0x6d,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x3b,0x5c,0x6e,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x76,0x61,0x72,0x20,0x69,0x20,0x3d,0x20,0x6d,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x3b,0x5c,0x6e,0x20,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x20,0x3d,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x63,0x2c,0x20,0x6f,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x69,0x2e,0x75,0x73,0x69,0x6e,0x67,0x43,0x6c,0x69,0x65,0x6e,0x74,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x20,0x3d,0x20,0x74,0x72,0x75,0x65,0x3b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x74,0x72,0x79,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x28,0x63,0x2c,0x20,0x6f,0x29,0x3b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x7d,0x20,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x2e,0x75,0x73,0x69,0x6e,0x67,0x43,0x6c,0x69,0x65,0x6e,0x74,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x20,0x3d,0x20,0x66,0x61,0x6c,0x73,0x65,0x3b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x7d,0x5c,0x6e,0x20,0x20,0x7d,0x3b,0x5c,0x6e,0x20,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x20,0x3d,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x63,0x2c,0x20,0x68,0x2c,0x20,0x6f,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x69,0x2e,0x75,0x73,0x69,0x6e,0x67,0x43,0x6c,0x69,0x65,0x6e,0x74,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x20,0x3d,0x20,0x74,0x72,0x75,0x65,0x3b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x74,0x72,0x79,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x2e,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x28,0x63,0x2c,0x20,0x68,0x2c,0x20,0x6f,0x29,0x3b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x7d,0x20,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x2e,0x75,0x73,0x69,0x6e,0x67,0x43,0x6c,0x69,0x65,0x6e,0x74,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x20,0x3d,0x20,0x66,0x61,0x6c,0x73,0x65,0x3b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x7d,0x5c,0x6e,0x20,0x20,0x7d,0x3b,0x5c,0x6e,0x7d,0x5c,0x6e,0x22,0x2c,0x22,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x5c,0x6e,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x28,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x2f,0x2a,0x20,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x20,0x2a,0x2f,0x5c,0x6e,0x20,0x20,0x69,0x66,0x20,0x28,0x5c,0x6e,0x20,0x20,0x20,0x20,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x20,0x3d,0x3d,0x3d,0x20,0x27,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x27,0x20,0x7c,0x7c,0x5c,0x6e,0x20,0x20,0x20,0x20,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x2e,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x20,0x21,0x3d,0x3d,0x20,0x27,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x27,0x5c,0x6e,0x20,0x20,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x5c,0x6e,0x20,0x20,0x7d,0x5c,0x6e,0x20,0x20,0x69,0x66,0x20,0x28,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x2e,0x65,0x6e,0x76,0x2e,0x4e,0x4f,0x44,0x45,0x5f,0x45,0x4e,0x56,0x20,0x21,0x3d,0x3d,0x20,0x27,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x27,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x54,0x68,0x69,0x73,0x20,0x62,0x72,0x61,0x6e,0x63,0x68,0x20,0x69,0x73,0x20,0x75,0x6e,0x72,0x65,0x61,0x63,0x68,0x61,0x62,0x6c,0x65,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x63,0x61,0x6c,0x6c,0x65,0x64,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x69,0x6e,0x20,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x62,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x63,0x6f,0x6e,0x64,0x69,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,0x74,0x72,0x75,0x65,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x69,0x6e,0x20,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,0x65,0x6e,0x74,0x2e,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x54,0x68,0x65,0x72,0x65,0x66,0x6f,0x72,0x65,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x62,0x72,0x61,0x6e,0x63,0x68,0x20,0x69,0x73,0x20,0x73,0x74,0x69,0x6c,0x6c,0x20,0x68,0x65,0x72,0x65,0x2c,0x20,0x64,0x65,0x61,0x64,0x20,0x63,0x6f,0x64,0x65,0x20,0x65,0x6c,0x69,0x6d,0x69,0x6e,0x61,0x74,0x69,0x6f,0x6e,0x20,0x77,0x61,0x73,0x6e,0x27,0x74,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x70,0x72,0x6f,0x70,0x65,0x72,0x6c,0x79,0x20,0x61,0x70,0x70,0x6c,0x69,0x65,0x64,0x2e,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x44,0x6f,0x6e,0x27,0x74,0x20,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x74,0x68,0x65,0x20,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x2e,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x44,0x65,0x76,0x54,0x6f,0x6f,0x6c,0x73,0x20,0x72,0x65,0x6c,0x69,0x65,0x73,0x20,0x6f,0x6e,0x20,0x69,0x74,0x2e,0x20,0x41,0x6c,0x73,0x6f,0x20,0x6d,0x61,0x6b,0x65,0x20,0x73,0x75,0x72,0x65,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x74,0x68,0x69,0x73,0x20,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x20,0x64,0x6f,0x65,0x73,0x6e,0x27,0x74,0x20,0x6f,0x63,0x63,0x75,0x72,0x20,0x65,0x6c,0x73,0x65,0x77,0x68,0x65,0x72,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x69,0x73,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x6f,0x72,0x20,0x69,0x74,0x20,0x77,0x69,0x6c,0x6c,0x20,0x63,0x61,0x75,0x73,0x65,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x61,0x20,0x66,0x61,0x6c,0x73,0x65,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x76,0x65,0x2e,0x5c,0x6e,0x20,0x20,0x20,0x20,0x74,0x68,0x72,0x6f,0x77,0x20,0x6e,0x65,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x27,0x5e,0x5f,0x5e,0x27,0x29,0x3b,0x5c,0x6e,0x20,0x20,0x7d,0x5c,0x6e,0x20,0x20,0x74,0x72,0x79,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x56,0x65,0x72,0x69,0x66,0x79,0x20,0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x61,0x62,0x6f,0x76,0x65,0x20,0x68,0x61,0x73,0x20,0x62,0x65,0x65,0x6e,0x20,0x64,0x65,0x61,0x64,0x20,0x63,0x6f,0x64,0x65,0x20,0x65,0x6c,0x69,0x6d,0x69,0x6e,0x61,0x74,0x65,0x64,0x20,0x28,0x44,0x43,0x45,0x27,0x64,0x29,0x2e,0x5c,0x6e,0x20,0x20,0x20,0x20,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x2e,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x28,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x29,0x3b,0x5c,0x6e,0x20,0x20,0x7d,0x20,0x63,0x61,0x74,0x63,0x68,0x20,0x28,0x65,0x72,0x72,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x44,0x65,0x76,0x54,0x6f,0x6f,0x6c,0x73,0x20,0x73,0x68,0x6f,0x75,0x6c,0x64,0x6e,0x27,0x74,0x20,0x63,0x72,0x61,0x73,0x68,0x20,0x52,0x65,0x61,0x63,0x74,0x2c,0x20,0x6e,0x6f,0x20,0x6d,0x61,0x74,0x74,0x65,0x72,0x20,0x77,0x68,0x61,0x74,0x2e,0x5c,0x6e,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x57,0x65,0x20,0x73,0x68,0x6f,0x75,0x6c,0x64,0x20,0x73,0x74,0x69,0x6c,0x6c,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x20,0x69,0x6e,0x20,0x63,0x61,0x73,0x65,0x20,0x77,0x65,0x20,0x62,0x72,0x65,0x61,0x6b,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6f,0x64,0x65,0x2e,0x5c,0x6e,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x65,0x72,0x72,0x29,0x3b,0x5c,0x6e,0x20,0x20,0x7d,0x5c,0x6e,0x7d,0x5c,0x6e,0x5c,0x6e,0x69,0x66,0x20,0x28,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x2e,0x65,0x6e,0x76,0x2e,0x4e,0x4f,0x44,0x45,0x5f,0x45,0x4e,0x56,0x20,0x3d,0x3d,0x3d,0x20,0x27,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x27,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x2f,0x2f,0x20,0x44,0x43,0x45,0x20,0x63,0x68,0x65,0x63,0x6b,0x20,0x73,0x68,0x6f,0x75,0x6c,0x64,0x20,0x68,0x61,0x70,0x70,0x65,0x6e,0x20,0x62,0x65,0x66,0x6f,0x72,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x44,0x4f,0x4d,0x20,0x62,0x75,0x6e,0x64,0x6c,0x65,0x20,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x73,0x20,0x73,0x6f,0x20,0x74,0x68,0x61,0x74,0x5c,0x6e,0x20,0x20,0x2f,0x2f,0x20,0x44,0x65,0x76,0x54,0x6f,0x6f,0x6c,0x73,0x20,0x63,0x61,0x6e,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x20,0x62,0x61,0x64,0x20,0x6d,0x69,0x6e,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x64,0x75,0x72,0x69,0x6e,0x67,0x20,0x69,0x6e,0x6a,0x65,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x5c,0x6e,0x20,0x20,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x28,0x29,0x3b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2e,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,0x65,0x6e,0x74,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x5c,0x6e,0x22,0x2c,0x22,0x2f,0x2a,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x5c,0x6e,0x20,0x2a,0x20,0x72,0x65,0x61,0x63,0x74,0x2d,0x6a,0x73,0x78,0x2d,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x5c,0x6e,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x5c,0x6e,0x20,0x2a,0x2f,0x5c,0x6e,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x5c,0x22,0x29,0x2c,0x6b,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x29,0x2c,0x6c,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x29,0x2c,0x6d,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2c,0x6e,0x3d,0x66,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x2e,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x2c,0x70,0x3d,0x7b,0x6b,0x65,0x79,0x3a,0x21,0x30,0x2c,0x72,0x65,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x65,0x6c,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x21,0x30,0x7d,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x71,0x28,0x63,0x2c,0x61,0x2c,0x67,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x2c,0x64,0x3d,0x7b,0x7d,0x2c,0x65,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x67,0x26,0x26,0x28,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x67,0x29,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x2e,0x6b,0x65,0x79,0x29,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x61,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x68,0x3d,0x61,0x2e,0x72,0x65,0x66,0x29,0x3b,0x66,0x6f,0x72,0x28,0x62,0x20,0x69,0x6e,0x20,0x61,0x29,0x6d,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x61,0x2c,0x62,0x29,0x26,0x26,0x21,0x70,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x62,0x29,0x26,0x26,0x28,0x64,0x5b,0x62,0x5d,0x3d,0x61,0x5b,0x62,0x5d,0x29,0x3b,0x69,0x66,0x28,0x63,0x26,0x26,0x63,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x66,0x6f,0x72,0x28,0x62,0x20,0x69,0x6e,0x20,0x61,0x3d,0x63,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x2c,0x61,0x29,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x64,0x5b,0x62,0x5d,0x26,0x26,0x28,0x64,0x5b,0x62,0x5d,0x3d,0x61,0x5b,0x62,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x6b,0x2c,0x74,0x79,0x70,0x65,0x3a,0x63,0x2c,0x6b,0x65,0x79,0x3a,0x65,0x2c,0x72,0x65,0x66,0x3a,0x68,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x64,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x6e,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7d,0x7d,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x3d,0x6c,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x6a,0x73,0x78,0x3d,0x71,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x6a,0x73,0x78,0x73,0x3d,0x71,0x3b,0x5c,0x6e,0x22,0x2c,0x22,0x2f,0x2a,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x5c,0x6e,0x20,0x2a,0x20,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x5c,0x6e,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x5c,0x6e,0x20,0x2a,0x2f,0x5c,0x6e,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x29,0x2c,0x6e,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x6f,0x72,0x74,0x61,0x6c,0x5c,0x22,0x29,0x2c,0x70,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x5c,0x22,0x29,0x2c,0x71,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x74,0x72,0x69,0x63,0x74,0x5f,0x6d,0x6f,0x64,0x65,0x5c,0x22,0x29,0x2c,0x72,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x5c,0x22,0x29,0x2c,0x74,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x5c,0x22,0x29,0x2c,0x75,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x5c,0x22,0x29,0x2c,0x76,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x5f,0x72,0x65,0x66,0x5c,0x22,0x29,0x2c,0x77,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x73,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x5c,0x22,0x29,0x2c,0x78,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6d,0x65,0x6d,0x6f,0x5c,0x22,0x29,0x2c,0x79,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x66,0x6f,0x72,0x28,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x2e,0x6c,0x61,0x7a,0x79,0x5c,0x22,0x29,0x2c,0x7a,0x3d,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x41,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x61,0x3d,0x7a,0x26,0x26,0x61,0x5b,0x7a,0x5d,0x7c,0x7c,0x61,0x5b,0x5c,0x22,0x40,0x40,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x5c,0x22,0x5d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x3f,0x61,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x42,0x3d,0x7b,0x69,0x73,0x4d,0x6f,0x75,0x6e,0x74,0x65,0x64,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x21,0x31,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x46,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x2c,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x53,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x7d,0x2c,0x43,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x61,0x73,0x73,0x69,0x67,0x6e,0x2c,0x44,0x3d,0x7b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x45,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x61,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x62,0x3b,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x66,0x73,0x3d,0x44,0x3b,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x65,0x7c,0x7c,0x42,0x7d,0x45,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x69,0x73,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x7b,0x7d,0x3b,0x5c,0x6e,0x45,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x73,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x5c,0x22,0x73,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x28,0x2e,0x2e,0x2e,0x29,0x3a,0x20,0x74,0x61,0x6b,0x65,0x73,0x20,0x61,0x6e,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6f,0x66,0x20,0x73,0x74,0x61,0x74,0x65,0x20,0x76,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x73,0x20,0x74,0x6f,0x20,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x6f,0x72,0x20,0x61,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x73,0x20,0x61,0x6e,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6f,0x66,0x20,0x73,0x74,0x61,0x74,0x65,0x20,0x76,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x73,0x2e,0x5c,0x22,0x29,0x3b,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x53,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x2c,0x62,0x2c,0x5c,0x22,0x73,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x5c,0x22,0x29,0x7d,0x3b,0x45,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x66,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x2e,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x46,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x2c,0x5c,0x22,0x66,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x5c,0x22,0x29,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x46,0x28,0x29,0x7b,0x7d,0x46,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x3d,0x45,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x74,0x68,0x69,0x73,0x2e,0x70,0x72,0x6f,0x70,0x73,0x3d,0x61,0x3b,0x74,0x68,0x69,0x73,0x2e,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x62,0x3b,0x74,0x68,0x69,0x73,0x2e,0x72,0x65,0x66,0x73,0x3d,0x44,0x3b,0x74,0x68,0x69,0x73,0x2e,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x3d,0x65,0x7c,0x7c,0x42,0x7d,0x76,0x61,0x72,0x20,0x48,0x3d,0x47,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x3d,0x6e,0x65,0x77,0x20,0x46,0x3b,0x5c,0x6e,0x48,0x2e,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x6f,0x72,0x3d,0x47,0x3b,0x43,0x28,0x48,0x2c,0x45,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x29,0x3b,0x48,0x2e,0x69,0x73,0x50,0x75,0x72,0x65,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x49,0x3d,0x41,0x72,0x72,0x61,0x79,0x2e,0x69,0x73,0x41,0x72,0x72,0x61,0x79,0x2c,0x4a,0x3d,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2c,0x4b,0x3d,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x4c,0x3d,0x7b,0x6b,0x65,0x79,0x3a,0x21,0x30,0x2c,0x72,0x65,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x65,0x6c,0x66,0x3a,0x21,0x30,0x2c,0x5f,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x3a,0x21,0x30,0x7d,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x2c,0x63,0x3d,0x7b,0x7d,0x2c,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x68,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x29,0x66,0x6f,0x72,0x28,0x64,0x20,0x69,0x6e,0x20,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x68,0x3d,0x62,0x2e,0x72,0x65,0x66,0x29,0x2c,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x6b,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x62,0x2e,0x6b,0x65,0x79,0x29,0x2c,0x62,0x29,0x4a,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x62,0x2c,0x64,0x29,0x26,0x26,0x21,0x4c,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x64,0x29,0x26,0x26,0x28,0x63,0x5b,0x64,0x5d,0x3d,0x62,0x5b,0x64,0x5d,0x29,0x3b,0x76,0x61,0x72,0x20,0x67,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x32,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x67,0x29,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x65,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x3c,0x67,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x66,0x3d,0x41,0x72,0x72,0x61,0x79,0x28,0x67,0x29,0x2c,0x6d,0x3d,0x30,0x3b,0x6d,0x3c,0x67,0x3b,0x6d,0x2b,0x2b,0x29,0x66,0x5b,0x6d,0x5d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x6d,0x2b,0x32,0x5d,0x3b,0x63,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x66,0x7d,0x69,0x66,0x28,0x61,0x26,0x26,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x66,0x6f,0x72,0x28,0x64,0x20,0x69,0x6e,0x20,0x67,0x3d,0x61,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x2c,0x67,0x29,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x63,0x5b,0x64,0x5d,0x26,0x26,0x28,0x63,0x5b,0x64,0x5d,0x3d,0x67,0x5b,0x64,0x5d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x6c,0x2c,0x74,0x79,0x70,0x65,0x3a,0x61,0x2c,0x6b,0x65,0x79,0x3a,0x6b,0x2c,0x72,0x65,0x66,0x3a,0x68,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x63,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x4b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x6c,0x2c,0x74,0x79,0x70,0x65,0x3a,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6b,0x65,0x79,0x3a,0x62,0x2c,0x72,0x65,0x66,0x3a,0x61,0x2e,0x72,0x65,0x66,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x61,0x2e,0x70,0x72,0x6f,0x70,0x73,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x61,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4f,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x61,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3d,0x3d,0x3d,0x6c,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x65,0x73,0x63,0x61,0x70,0x65,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x7b,0x5c,0x22,0x3d,0x5c,0x22,0x3a,0x5c,0x22,0x3d,0x30,0x5c,0x22,0x2c,0x5c,0x22,0x3a,0x5c,0x22,0x3a,0x5c,0x22,0x3d,0x32,0x5c,0x22,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x24,0x5c,0x22,0x2b,0x61,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x2f,0x5b,0x3d,0x3a,0x5d,0x2f,0x67,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x5b,0x61,0x5d,0x7d,0x29,0x7d,0x76,0x61,0x72,0x20,0x50,0x3d,0x2f,0x5c,0x5c,0x2f,0x2b,0x2f,0x67,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x51,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x61,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x61,0x2e,0x6b,0x65,0x79,0x3f,0x65,0x73,0x63,0x61,0x70,0x65,0x28,0x5c,0x22,0x5c,0x22,0x2b,0x61,0x2e,0x6b,0x65,0x79,0x29,0x3a,0x62,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x33,0x36,0x29,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x28,0x61,0x2c,0x62,0x2c,0x65,0x2c,0x64,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x6b,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x61,0x3b,0x69,0x66,0x28,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x3d,0x3d,0x3d,0x6b,0x7c,0x7c,0x5c,0x22,0x62,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x6b,0x29,0x61,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x68,0x3d,0x21,0x31,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x29,0x68,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x6b,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x5c,0x22,0x3a,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3a,0x68,0x3d,0x21,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x2e,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x6c,0x3a,0x63,0x61,0x73,0x65,0x20,0x6e,0x3a,0x68,0x3d,0x21,0x30,0x7d,0x7d,0x69,0x66,0x28,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x68,0x3d,0x61,0x2c,0x63,0x3d,0x63,0x28,0x68,0x29,0x2c,0x61,0x3d,0x5c,0x22,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x3f,0x5c,0x22,0x2e,0x5c,0x22,0x2b,0x51,0x28,0x68,0x2c,0x30,0x29,0x3a,0x64,0x2c,0x49,0x28,0x63,0x29,0x3f,0x28,0x65,0x3d,0x5c,0x22,0x5c,0x22,0x2c,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x61,0x26,0x26,0x28,0x65,0x3d,0x61,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x50,0x2c,0x5c,0x22,0x24,0x26,0x2f,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x2f,0x5c,0x22,0x29,0x2c,0x52,0x28,0x63,0x2c,0x62,0x2c,0x65,0x2c,0x5c,0x22,0x5c,0x22,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x29,0x29,0x3a,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x63,0x26,0x26,0x28,0x4f,0x28,0x63,0x29,0x26,0x26,0x28,0x63,0x3d,0x4e,0x28,0x63,0x2c,0x65,0x2b,0x28,0x21,0x63,0x2e,0x6b,0x65,0x79,0x7c,0x7c,0x68,0x26,0x26,0x68,0x2e,0x6b,0x65,0x79,0x3d,0x3d,0x3d,0x63,0x2e,0x6b,0x65,0x79,0x3f,0x5c,0x22,0x5c,0x22,0x3a,0x28,0x5c,0x22,0x5c,0x22,0x2b,0x63,0x2e,0x6b,0x65,0x79,0x29,0x2e,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x28,0x50,0x2c,0x5c,0x22,0x24,0x26,0x2f,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x2f,0x5c,0x22,0x29,0x2b,0x61,0x29,0x29,0x2c,0x62,0x2e,0x70,0x75,0x73,0x68,0x28,0x63,0x29,0x29,0x2c,0x31,0x3b,0x68,0x3d,0x30,0x3b,0x64,0x3d,0x5c,0x22,0x5c,0x22,0x3d,0x3d,0x3d,0x64,0x3f,0x5c,0x22,0x2e,0x5c,0x22,0x3a,0x64,0x2b,0x5c,0x22,0x3a,0x5c,0x22,0x3b,0x69,0x66,0x28,0x49,0x28,0x61,0x29,0x29,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x67,0x3d,0x30,0x3b,0x67,0x3c,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x67,0x2b,0x2b,0x29,0x7b,0x6b,0x3d,0x5c,0x6e,0x61,0x5b,0x67,0x5d,0x3b,0x76,0x61,0x72,0x20,0x66,0x3d,0x64,0x2b,0x51,0x28,0x6b,0x2c,0x67,0x29,0x3b,0x68,0x2b,0x3d,0x52,0x28,0x6b,0x2c,0x62,0x2c,0x65,0x2c,0x66,0x2c,0x63,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x66,0x3d,0x41,0x28,0x61,0x29,0x2c,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x66,0x29,0x66,0x6f,0x72,0x28,0x61,0x3d,0x66,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x61,0x29,0x2c,0x67,0x3d,0x30,0x3b,0x21,0x28,0x6b,0x3d,0x61,0x2e,0x6e,0x65,0x78,0x74,0x28,0x29,0x29,0x2e,0x64,0x6f,0x6e,0x65,0x3b,0x29,0x6b,0x3d,0x6b,0x2e,0x76,0x61,0x6c,0x75,0x65,0x2c,0x66,0x3d,0x64,0x2b,0x51,0x28,0x6b,0x2c,0x67,0x2b,0x2b,0x29,0x2c,0x68,0x2b,0x3d,0x52,0x28,0x6b,0x2c,0x62,0x2c,0x65,0x2c,0x66,0x2c,0x63,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x6b,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x62,0x3d,0x53,0x74,0x72,0x69,0x6e,0x67,0x28,0x61,0x29,0x2c,0x45,0x72,0x72,0x6f,0x72,0x28,0x5c,0x22,0x4f,0x62,0x6a,0x65,0x63,0x74,0x73,0x20,0x61,0x72,0x65,0x20,0x6e,0x6f,0x74,0x20,0x76,0x61,0x6c,0x69,0x64,0x20,0x61,0x73,0x20,0x61,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x63,0x68,0x69,0x6c,0x64,0x20,0x28,0x66,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x5c,0x22,0x2b,0x28,0x5c,0x22,0x5b,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x5d,0x5c,0x22,0x3d,0x3d,0x3d,0x62,0x3f,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x77,0x69,0x74,0x68,0x20,0x6b,0x65,0x79,0x73,0x20,0x7b,0x5c,0x22,0x2b,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x61,0x29,0x2e,0x6a,0x6f,0x69,0x6e,0x28,0x5c,0x22,0x2c,0x20,0x5c,0x22,0x29,0x2b,0x5c,0x22,0x7d,0x5c,0x22,0x3a,0x62,0x29,0x2b,0x5c,0x22,0x29,0x2e,0x20,0x49,0x66,0x20,0x79,0x6f,0x75,0x20,0x6d,0x65,0x61,0x6e,0x74,0x20,0x74,0x6f,0x20,0x72,0x65,0x6e,0x64,0x65,0x72,0x20,0x61,0x20,0x63,0x6f,0x6c,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x66,0x20,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2c,0x20,0x75,0x73,0x65,0x20,0x61,0x6e,0x20,0x61,0x72,0x72,0x61,0x79,0x20,0x69,0x6e,0x73,0x74,0x65,0x61,0x64,0x2e,0x5c,0x22,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x68,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x53,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x61,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x5b,0x5d,0x2c,0x63,0x3d,0x30,0x3b,0x52,0x28,0x61,0x2c,0x64,0x2c,0x5c,0x22,0x5c,0x22,0x2c,0x5c,0x22,0x5c,0x22,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x65,0x2c,0x61,0x2c,0x63,0x2b,0x2b,0x29,0x7d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x64,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x54,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x2d,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3b,0x62,0x3d,0x62,0x28,0x29,0x3b,0x62,0x2e,0x74,0x68,0x65,0x6e,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x62,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x7c,0x7c,0x2d,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x29,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3d,0x31,0x2c,0x61,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3d,0x62,0x7d,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x62,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x7c,0x7c,0x2d,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x29,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3d,0x32,0x2c,0x61,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3d,0x62,0x7d,0x29,0x3b,0x2d,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x26,0x26,0x28,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3d,0x30,0x2c,0x61,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3d,0x62,0x29,0x7d,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x61,0x2e,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3b,0x74,0x68,0x72,0x6f,0x77,0x20,0x61,0x2e,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3b,0x7d,0x5c,0x6e,0x76,0x61,0x72,0x20,0x55,0x3d,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x56,0x3d,0x7b,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x2c,0x57,0x3d,0x7b,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x3a,0x55,0x2c,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x3a,0x56,0x2c,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x3a,0x4b,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x58,0x28,0x29,0x7b,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x5c,0x22,0x61,0x63,0x74,0x28,0x2e,0x2e,0x2e,0x29,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x20,0x69,0x6e,0x20,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x20,0x62,0x75,0x69,0x6c,0x64,0x73,0x20,0x6f,0x66,0x20,0x52,0x65,0x61,0x63,0x74,0x2e,0x5c,0x22,0x29,0x3b,0x7d,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x7b,0x6d,0x61,0x70,0x3a,0x53,0x2c,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x53,0x28,0x61,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x62,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x7d,0x2c,0x65,0x29,0x7d,0x2c,0x63,0x6f,0x75,0x6e,0x74,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x30,0x3b,0x53,0x28,0x61,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x62,0x2b,0x2b,0x7d,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x2c,0x74,0x6f,0x41,0x72,0x72,0x61,0x79,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x53,0x28,0x61,0x2c,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x29,0x7c,0x7c,0x5b,0x5d,0x7d,0x2c,0x6f,0x6e,0x6c,0x79,0x3a,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x21,0x4f,0x28,0x61,0x29,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x5c,0x22,0x52,0x65,0x61,0x63,0x74,0x2e,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x2e,0x6f,0x6e,0x6c,0x79,0x20,0x65,0x78,0x70,0x65,0x63,0x74,0x65,0x64,0x20,0x74,0x6f,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x20,0x61,0x20,0x73,0x69,0x6e,0x67,0x6c,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x20,0x63,0x68,0x69,0x6c,0x64,0x2e,0x5c,0x22,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x45,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x3d,0x70,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x3d,0x72,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x50,0x75,0x72,0x65,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x3d,0x47,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x3d,0x71,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x3d,0x77,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x3d,0x57,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x61,0x63,0x74,0x3d,0x58,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x6c,0x6f,0x6e,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x61,0x7c,0x7c,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x29,0x74,0x68,0x72,0x6f,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x5c,0x22,0x52,0x65,0x61,0x63,0x74,0x2e,0x63,0x6c,0x6f,0x6e,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x2e,0x2e,0x2e,0x29,0x3a,0x20,0x54,0x68,0x65,0x20,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x20,0x6d,0x75,0x73,0x74,0x20,0x62,0x65,0x20,0x61,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x2c,0x20,0x62,0x75,0x74,0x20,0x79,0x6f,0x75,0x20,0x70,0x61,0x73,0x73,0x65,0x64,0x20,0x5c,0x22,0x2b,0x61,0x2b,0x5c,0x22,0x2e,0x5c,0x22,0x29,0x3b,0x76,0x61,0x72,0x20,0x64,0x3d,0x43,0x28,0x7b,0x7d,0x2c,0x61,0x2e,0x70,0x72,0x6f,0x70,0x73,0x29,0x2c,0x63,0x3d,0x61,0x2e,0x6b,0x65,0x79,0x2c,0x6b,0x3d,0x61,0x2e,0x72,0x65,0x66,0x2c,0x68,0x3d,0x61,0x2e,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x62,0x29,0x7b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x72,0x65,0x66,0x26,0x26,0x28,0x6b,0x3d,0x62,0x2e,0x72,0x65,0x66,0x2c,0x68,0x3d,0x4b,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x29,0x3b,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x62,0x2e,0x6b,0x65,0x79,0x26,0x26,0x28,0x63,0x3d,0x5c,0x22,0x5c,0x22,0x2b,0x62,0x2e,0x6b,0x65,0x79,0x29,0x3b,0x69,0x66,0x28,0x61,0x2e,0x74,0x79,0x70,0x65,0x26,0x26,0x61,0x2e,0x74,0x79,0x70,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x29,0x76,0x61,0x72,0x20,0x67,0x3d,0x61,0x2e,0x74,0x79,0x70,0x65,0x2e,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x3b,0x66,0x6f,0x72,0x28,0x66,0x20,0x69,0x6e,0x20,0x62,0x29,0x4a,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x62,0x2c,0x66,0x29,0x26,0x26,0x21,0x4c,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x66,0x29,0x26,0x26,0x28,0x64,0x5b,0x66,0x5d,0x3d,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x5b,0x66,0x5d,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x67,0x3f,0x67,0x5b,0x66,0x5d,0x3a,0x62,0x5b,0x66,0x5d,0x29,0x7d,0x76,0x61,0x72,0x20,0x66,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2d,0x32,0x3b,0x69,0x66,0x28,0x31,0x3d,0x3d,0x3d,0x66,0x29,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x65,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x31,0x3c,0x66,0x29,0x7b,0x67,0x3d,0x41,0x72,0x72,0x61,0x79,0x28,0x66,0x29,0x3b,0x5c,0x6e,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6d,0x3d,0x30,0x3b,0x6d,0x3c,0x66,0x3b,0x6d,0x2b,0x2b,0x29,0x67,0x5b,0x6d,0x5d,0x3d,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x5b,0x6d,0x2b,0x32,0x5d,0x3b,0x64,0x2e,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x3d,0x67,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x6c,0x2c,0x74,0x79,0x70,0x65,0x3a,0x61,0x2e,0x74,0x79,0x70,0x65,0x2c,0x6b,0x65,0x79,0x3a,0x63,0x2c,0x72,0x65,0x66,0x3a,0x6b,0x2c,0x70,0x72,0x6f,0x70,0x73,0x3a,0x64,0x2c,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x3a,0x68,0x7d,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x61,0x3d,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x75,0x2c,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x61,0x2c,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x32,0x3a,0x61,0x2c,0x5f,0x74,0x68,0x72,0x65,0x61,0x64,0x43,0x6f,0x75,0x6e,0x74,0x3a,0x30,0x2c,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x4e,0x61,0x6d,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x61,0x2e,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x3d,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x74,0x2c,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3a,0x61,0x7d,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x3d,0x61,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x4d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x46,0x61,0x63,0x74,0x6f,0x72,0x79,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x4d,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x61,0x29,0x3b,0x62,0x2e,0x74,0x79,0x70,0x65,0x3d,0x61,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x65,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x7d,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x76,0x2c,0x72,0x65,0x6e,0x64,0x65,0x72,0x3a,0x61,0x7d,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x69,0x73,0x56,0x61,0x6c,0x69,0x64,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x3d,0x4f,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x6c,0x61,0x7a,0x79,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x79,0x2c,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x3a,0x7b,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x3a,0x2d,0x31,0x2c,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x3a,0x61,0x7d,0x2c,0x5f,0x69,0x6e,0x69,0x74,0x3a,0x54,0x7d,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x6d,0x65,0x6d,0x6f,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x7b,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x3a,0x78,0x2c,0x74,0x79,0x70,0x65,0x3a,0x61,0x2c,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x3a,0x76,0x6f,0x69,0x64,0x20,0x30,0x3d,0x3d,0x3d,0x62,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x62,0x7d,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x56,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x56,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x7b,0x7d,0x3b,0x74,0x72,0x79,0x7b,0x61,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x56,0x2e,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x62,0x7d,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x61,0x63,0x74,0x3d,0x58,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x28,0x61,0x2c,0x62,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x28,0x61,0x29,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x28,0x61,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x28,0x61,0x2c,0x62,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x49,0x64,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x49,0x64,0x28,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x28,0x61,0x2c,0x62,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x28,0x61,0x2c,0x62,0x29,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x28,0x61,0x2c,0x62,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x52,0x65,0x66,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x52,0x65,0x66,0x28,0x61,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x61,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x28,0x61,0x2c,0x62,0x2c,0x65,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x55,0x2e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2e,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x5c,0x22,0x31,0x38,0x2e,0x33,0x2e,0x31,0x5c,0x22,0x3b,0x5c,0x6e,0x22,0x2c,0x22,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x5c,0x6e,0x5c,0x6e,0x69,0x66,0x20,0x28,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x2e,0x65,0x6e,0x76,0x2e,0x4e,0x4f,0x44,0x45,0x5f,0x45,0x4e,0x56,0x20,0x3d,0x3d,0x3d,0x20,0x27,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x27,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2e,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,0x65,0x6e,0x74,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x5c,0x6e,0x22,0x2c,0x22,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x5c,0x6e,0x5c,0x6e,0x69,0x66,0x20,0x28,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x2e,0x65,0x6e,0x76,0x2e,0x4e,0x4f,0x44,0x45,0x5f,0x45,0x4e,0x56,0x20,0x3d,0x3d,0x3d,0x20,0x27,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x27,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x6a,0x73,0x78,0x2d,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x72,0x65,0x61,0x63,0x74,0x2d,0x6a,0x73,0x78,0x2d,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,0x65,0x6e,0x74,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x5c,0x6e,0x22,0x2c,0x22,0x2f,0x2a,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x40,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x52,0x65,0x61,0x63,0x74,0x5c,0x6e,0x20,0x2a,0x20,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29,0x20,0x46,0x61,0x63,0x65,0x62,0x6f,0x6f,0x6b,0x2c,0x20,0x49,0x6e,0x63,0x2e,0x20,0x61,0x6e,0x64,0x20,0x69,0x74,0x73,0x20,0x61,0x66,0x66,0x69,0x6c,0x69,0x61,0x74,0x65,0x73,0x2e,0x5c,0x6e,0x20,0x2a,0x5c,0x6e,0x20,0x2a,0x20,0x54,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4d,0x49,0x54,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x5c,0x6e,0x20,0x2a,0x20,0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x6f,0x6f,0x74,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x74,0x72,0x65,0x65,0x2e,0x5c,0x6e,0x20,0x2a,0x2f,0x5c,0x6e,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x61,0x2e,0x70,0x75,0x73,0x68,0x28,0x62,0x29,0x3b,0x61,0x3a,0x66,0x6f,0x72,0x28,0x3b,0x30,0x3c,0x63,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x63,0x2d,0x31,0x3e,0x3e,0x3e,0x31,0x2c,0x65,0x3d,0x61,0x5b,0x64,0x5d,0x3b,0x69,0x66,0x28,0x30,0x3c,0x67,0x28,0x65,0x2c,0x62,0x29,0x29,0x61,0x5b,0x64,0x5d,0x3d,0x62,0x2c,0x61,0x5b,0x63,0x5d,0x3d,0x65,0x2c,0x63,0x3d,0x64,0x3b,0x65,0x6c,0x73,0x65,0x20,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x68,0x28,0x61,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3f,0x6e,0x75,0x6c,0x6c,0x3a,0x61,0x5b,0x30,0x5d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x6b,0x28,0x61,0x29,0x7b,0x69,0x66,0x28,0x30,0x3d,0x3d,0x3d,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x29,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x61,0x5b,0x30,0x5d,0x2c,0x63,0x3d,0x61,0x2e,0x70,0x6f,0x70,0x28,0x29,0x3b,0x69,0x66,0x28,0x63,0x21,0x3d,0x3d,0x62,0x29,0x7b,0x61,0x5b,0x30,0x5d,0x3d,0x63,0x3b,0x61,0x3a,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x64,0x3d,0x30,0x2c,0x65,0x3d,0x61,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x2c,0x77,0x3d,0x65,0x3e,0x3e,0x3e,0x31,0x3b,0x64,0x3c,0x77,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x32,0x2a,0x28,0x64,0x2b,0x31,0x29,0x2d,0x31,0x2c,0x43,0x3d,0x61,0x5b,0x6d,0x5d,0x2c,0x6e,0x3d,0x6d,0x2b,0x31,0x2c,0x78,0x3d,0x61,0x5b,0x6e,0x5d,0x3b,0x69,0x66,0x28,0x30,0x3e,0x67,0x28,0x43,0x2c,0x63,0x29,0x29,0x6e,0x3c,0x65,0x26,0x26,0x30,0x3e,0x67,0x28,0x78,0x2c,0x43,0x29,0x3f,0x28,0x61,0x5b,0x64,0x5d,0x3d,0x78,0x2c,0x61,0x5b,0x6e,0x5d,0x3d,0x63,0x2c,0x64,0x3d,0x6e,0x29,0x3a,0x28,0x61,0x5b,0x64,0x5d,0x3d,0x43,0x2c,0x61,0x5b,0x6d,0x5d,0x3d,0x63,0x2c,0x64,0x3d,0x6d,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x6e,0x3c,0x65,0x26,0x26,0x30,0x3e,0x67,0x28,0x78,0x2c,0x63,0x29,0x29,0x61,0x5b,0x64,0x5d,0x3d,0x78,0x2c,0x61,0x5b,0x6e,0x5d,0x3d,0x63,0x2c,0x64,0x3d,0x6e,0x3b,0x65,0x6c,0x73,0x65,0x20,0x62,0x72,0x65,0x61,0x6b,0x20,0x61,0x7d,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x67,0x28,0x61,0x2c,0x62,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x61,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x2d,0x62,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x21,0x3d,0x3d,0x63,0x3f,0x63,0x3a,0x61,0x2e,0x69,0x64,0x2d,0x62,0x2e,0x69,0x64,0x7d,0x69,0x66,0x28,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x26,0x26,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x2e,0x6e,0x6f,0x77,0x29,0x7b,0x76,0x61,0x72,0x20,0x6c,0x3d,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x70,0x3d,0x44,0x61,0x74,0x65,0x2c,0x71,0x3d,0x70,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x70,0x2e,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x71,0x7d,0x7d,0x76,0x61,0x72,0x20,0x72,0x3d,0x5b,0x5d,0x2c,0x74,0x3d,0x5b,0x5d,0x2c,0x75,0x3d,0x31,0x2c,0x76,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x79,0x3d,0x33,0x2c,0x7a,0x3d,0x21,0x31,0x2c,0x41,0x3d,0x21,0x31,0x2c,0x42,0x3d,0x21,0x31,0x2c,0x44,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x45,0x3d,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3f,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x3a,0x6e,0x75,0x6c,0x6c,0x2c,0x46,0x3d,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x73,0x65,0x74,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x3f,0x73,0x65,0x74,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x3a,0x6e,0x75,0x6c,0x6c,0x3b,0x5c,0x6e,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x26,0x26,0x76,0x6f,0x69,0x64,0x20,0x30,0x21,0x3d,0x3d,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x2e,0x69,0x73,0x49,0x6e,0x70,0x75,0x74,0x50,0x65,0x6e,0x64,0x69,0x6e,0x67,0x26,0x26,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x2e,0x69,0x73,0x49,0x6e,0x70,0x75,0x74,0x50,0x65,0x6e,0x64,0x69,0x6e,0x67,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x2e,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x29,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x47,0x28,0x61,0x29,0x7b,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x62,0x3d,0x68,0x28,0x74,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x3b,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x62,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x29,0x6b,0x28,0x74,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x62,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3c,0x3d,0x61,0x29,0x6b,0x28,0x74,0x29,0x2c,0x62,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3d,0x62,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x2c,0x66,0x28,0x72,0x2c,0x62,0x29,0x3b,0x65,0x6c,0x73,0x65,0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,0x62,0x3d,0x68,0x28,0x74,0x29,0x7d,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x48,0x28,0x61,0x29,0x7b,0x42,0x3d,0x21,0x31,0x3b,0x47,0x28,0x61,0x29,0x3b,0x69,0x66,0x28,0x21,0x41,0x29,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x68,0x28,0x72,0x29,0x29,0x41,0x3d,0x21,0x30,0x2c,0x49,0x28,0x4a,0x29,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x68,0x28,0x74,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x62,0x26,0x26,0x4b,0x28,0x48,0x2c,0x62,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x61,0x29,0x7d,0x7d,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4a,0x28,0x61,0x2c,0x62,0x29,0x7b,0x41,0x3d,0x21,0x31,0x3b,0x42,0x26,0x26,0x28,0x42,0x3d,0x21,0x31,0x2c,0x45,0x28,0x4c,0x29,0x2c,0x4c,0x3d,0x2d,0x31,0x29,0x3b,0x7a,0x3d,0x21,0x30,0x3b,0x76,0x61,0x72,0x20,0x63,0x3d,0x79,0x3b,0x74,0x72,0x79,0x7b,0x47,0x28,0x62,0x29,0x3b,0x66,0x6f,0x72,0x28,0x76,0x3d,0x68,0x28,0x72,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x76,0x26,0x26,0x28,0x21,0x28,0x76,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x3e,0x62,0x29,0x7c,0x7c,0x61,0x26,0x26,0x21,0x4d,0x28,0x29,0x29,0x3b,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x76,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x64,0x29,0x7b,0x76,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x79,0x3d,0x76,0x2e,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x3b,0x76,0x61,0x72,0x20,0x65,0x3d,0x64,0x28,0x76,0x2e,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x3c,0x3d,0x62,0x29,0x3b,0x62,0x3d,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x3b,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x65,0x3f,0x76,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x65,0x3a,0x76,0x3d,0x3d,0x3d,0x68,0x28,0x72,0x29,0x26,0x26,0x6b,0x28,0x72,0x29,0x3b,0x47,0x28,0x62,0x29,0x7d,0x65,0x6c,0x73,0x65,0x20,0x6b,0x28,0x72,0x29,0x3b,0x76,0x3d,0x68,0x28,0x72,0x29,0x7d,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x76,0x29,0x76,0x61,0x72,0x20,0x77,0x3d,0x21,0x30,0x3b,0x65,0x6c,0x73,0x65,0x7b,0x76,0x61,0x72,0x20,0x6d,0x3d,0x68,0x28,0x74,0x29,0x3b,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x6d,0x26,0x26,0x4b,0x28,0x48,0x2c,0x6d,0x2e,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x2d,0x62,0x29,0x3b,0x77,0x3d,0x21,0x31,0x7d,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x77,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x76,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x79,0x3d,0x63,0x2c,0x7a,0x3d,0x21,0x31,0x7d,0x7d,0x76,0x61,0x72,0x20,0x4e,0x3d,0x21,0x31,0x2c,0x4f,0x3d,0x6e,0x75,0x6c,0x6c,0x2c,0x4c,0x3d,0x2d,0x31,0x2c,0x50,0x3d,0x35,0x2c,0x51,0x3d,0x2d,0x31,0x3b,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4d,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x2d,0x51,0x3c,0x50,0x3f,0x21,0x31,0x3a,0x21,0x30,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x52,0x28,0x29,0x7b,0x69,0x66,0x28,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x4f,0x29,0x7b,0x76,0x61,0x72,0x20,0x61,0x3d,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x3b,0x51,0x3d,0x61,0x3b,0x76,0x61,0x72,0x20,0x62,0x3d,0x21,0x30,0x3b,0x74,0x72,0x79,0x7b,0x62,0x3d,0x4f,0x28,0x21,0x30,0x2c,0x61,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x62,0x3f,0x53,0x28,0x29,0x3a,0x28,0x4e,0x3d,0x21,0x31,0x2c,0x4f,0x3d,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x4e,0x3d,0x21,0x31,0x7d,0x76,0x61,0x72,0x20,0x53,0x3b,0x69,0x66,0x28,0x5c,0x22,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x46,0x29,0x53,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x46,0x28,0x52,0x29,0x7d,0x3b,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x28,0x5c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x5c,0x22,0x21,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x29,0x7b,0x76,0x61,0x72,0x20,0x54,0x3d,0x6e,0x65,0x77,0x20,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x2c,0x55,0x3d,0x54,0x2e,0x70,0x6f,0x72,0x74,0x32,0x3b,0x54,0x2e,0x70,0x6f,0x72,0x74,0x31,0x2e,0x6f,0x6e,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x3d,0x52,0x3b,0x53,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x55,0x2e,0x70,0x6f,0x73,0x74,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x7d,0x7d,0x65,0x6c,0x73,0x65,0x20,0x53,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x44,0x28,0x52,0x2c,0x30,0x29,0x7d,0x3b,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x49,0x28,0x61,0x29,0x7b,0x4f,0x3d,0x61,0x3b,0x4e,0x7c,0x7c,0x28,0x4e,0x3d,0x21,0x30,0x2c,0x53,0x28,0x29,0x29,0x7d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x4b,0x28,0x61,0x2c,0x62,0x29,0x7b,0x4c,0x3d,0x44,0x28,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x61,0x28,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x29,0x7d,0x2c,0x62,0x29,0x7d,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x64,0x6c,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x35,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x31,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4c,0x6f,0x77,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x34,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x33,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x50,0x72,0x6f,0x66,0x69,0x6c,0x69,0x6e,0x67,0x3d,0x6e,0x75,0x6c,0x6c,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x55,0x73,0x65,0x72,0x42,0x6c,0x6f,0x63,0x6b,0x69,0x6e,0x67,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x32,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x61,0x6e,0x63,0x65,0x6c,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x61,0x2e,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x6e,0x75,0x6c,0x6c,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x45,0x78,0x65,0x63,0x75,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x41,0x7c,0x7c,0x7a,0x7c,0x7c,0x28,0x41,0x3d,0x21,0x30,0x2c,0x49,0x28,0x4a,0x29,0x29,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x66,0x6f,0x72,0x63,0x65,0x46,0x72,0x61,0x6d,0x65,0x52,0x61,0x74,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x30,0x3e,0x61,0x7c,0x7c,0x31,0x32,0x35,0x3c,0x61,0x3f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x65,0x72,0x72,0x6f,0x72,0x28,0x5c,0x22,0x66,0x6f,0x72,0x63,0x65,0x46,0x72,0x61,0x6d,0x65,0x52,0x61,0x74,0x65,0x20,0x74,0x61,0x6b,0x65,0x73,0x20,0x61,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x76,0x65,0x20,0x69,0x6e,0x74,0x20,0x62,0x65,0x74,0x77,0x65,0x65,0x6e,0x20,0x30,0x20,0x61,0x6e,0x64,0x20,0x31,0x32,0x35,0x2c,0x20,0x66,0x6f,0x72,0x63,0x69,0x6e,0x67,0x20,0x66,0x72,0x61,0x6d,0x65,0x20,0x72,0x61,0x74,0x65,0x73,0x20,0x68,0x69,0x67,0x68,0x65,0x72,0x20,0x74,0x68,0x61,0x6e,0x20,0x31,0x32,0x35,0x20,0x66,0x70,0x73,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x5c,0x22,0x29,0x3a,0x50,0x3d,0x30,0x3c,0x61,0x3f,0x4d,0x61,0x74,0x68,0x2e,0x66,0x6c,0x6f,0x6f,0x72,0x28,0x31,0x45,0x33,0x2f,0x61,0x29,0x3a,0x35,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x79,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x46,0x69,0x72,0x73,0x74,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x68,0x28,0x72,0x29,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x65,0x78,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x79,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x76,0x61,0x72,0x20,0x62,0x3d,0x33,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x62,0x3d,0x79,0x7d,0x76,0x61,0x72,0x20,0x63,0x3d,0x79,0x3b,0x79,0x3d,0x62,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x79,0x3d,0x63,0x7d,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x70,0x61,0x75,0x73,0x65,0x45,0x78,0x65,0x63,0x75,0x74,0x69,0x6f,0x6e,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x50,0x61,0x69,0x6e,0x74,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x7d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x75,0x6e,0x57,0x69,0x74,0x68,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x29,0x7b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x63,0x61,0x73,0x65,0x20,0x33,0x3a,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x61,0x3d,0x33,0x7d,0x76,0x61,0x72,0x20,0x63,0x3d,0x79,0x3b,0x79,0x3d,0x61,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x62,0x28,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x79,0x3d,0x63,0x7d,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x2c,0x62,0x2c,0x63,0x29,0x7b,0x76,0x61,0x72,0x20,0x64,0x3d,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x28,0x29,0x3b,0x5c,0x22,0x6f,0x62,0x6a,0x65,0x63,0x74,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x26,0x26,0x6e,0x75,0x6c,0x6c,0x21,0x3d,0x3d,0x63,0x3f,0x28,0x63,0x3d,0x63,0x2e,0x64,0x65,0x6c,0x61,0x79,0x2c,0x63,0x3d,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x3d,0x3d,0x3d,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x63,0x26,0x26,0x30,0x3c,0x63,0x3f,0x64,0x2b,0x63,0x3a,0x64,0x29,0x3a,0x63,0x3d,0x64,0x3b,0x73,0x77,0x69,0x74,0x63,0x68,0x28,0x61,0x29,0x7b,0x63,0x61,0x73,0x65,0x20,0x31,0x3a,0x76,0x61,0x72,0x20,0x65,0x3d,0x2d,0x31,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x32,0x3a,0x65,0x3d,0x32,0x35,0x30,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x35,0x3a,0x65,0x3d,0x31,0x30,0x37,0x33,0x37,0x34,0x31,0x38,0x32,0x33,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x63,0x61,0x73,0x65,0x20,0x34,0x3a,0x65,0x3d,0x31,0x45,0x34,0x3b,0x62,0x72,0x65,0x61,0x6b,0x3b,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x3a,0x65,0x3d,0x35,0x45,0x33,0x7d,0x65,0x3d,0x63,0x2b,0x65,0x3b,0x61,0x3d,0x7b,0x69,0x64,0x3a,0x75,0x2b,0x2b,0x2c,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3a,0x62,0x2c,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x3a,0x61,0x2c,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x3a,0x63,0x2c,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x3a,0x65,0x2c,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3a,0x2d,0x31,0x7d,0x3b,0x63,0x3e,0x64,0x3f,0x28,0x61,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3d,0x63,0x2c,0x66,0x28,0x74,0x2c,0x61,0x29,0x2c,0x6e,0x75,0x6c,0x6c,0x3d,0x3d,0x3d,0x68,0x28,0x72,0x29,0x26,0x26,0x61,0x3d,0x3d,0x3d,0x68,0x28,0x74,0x29,0x26,0x26,0x28,0x42,0x3f,0x28,0x45,0x28,0x4c,0x29,0x2c,0x4c,0x3d,0x2d,0x31,0x29,0x3a,0x42,0x3d,0x21,0x30,0x2c,0x4b,0x28,0x48,0x2c,0x63,0x2d,0x64,0x29,0x29,0x29,0x3a,0x28,0x61,0x2e,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x3d,0x65,0x2c,0x66,0x28,0x72,0x2c,0x61,0x29,0x2c,0x41,0x7c,0x7c,0x7a,0x7c,0x7c,0x28,0x41,0x3d,0x21,0x30,0x2c,0x49,0x28,0x4a,0x29,0x29,0x29,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x7d,0x3b,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x68,0x6f,0x75,0x6c,0x64,0x59,0x69,0x65,0x6c,0x64,0x3d,0x4d,0x3b,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2e,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x77,0x72,0x61,0x70,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x3d,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x61,0x29,0x7b,0x76,0x61,0x72,0x20,0x62,0x3d,0x79,0x3b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x7b,0x76,0x61,0x72,0x20,0x63,0x3d,0x79,0x3b,0x79,0x3d,0x62,0x3b,0x74,0x72,0x79,0x7b,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x2e,0x61,0x70,0x70,0x6c,0x79,0x28,0x74,0x68,0x69,0x73,0x2c,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x29,0x7d,0x66,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x7b,0x79,0x3d,0x63,0x7d,0x7d,0x7d,0x3b,0x5c,0x6e,0x22,0x2c,0x22,0x27,0x75,0x73,0x65,0x20,0x73,0x74,0x72,0x69,0x63,0x74,0x27,0x3b,0x5c,0x6e,0x5c,0x6e,0x69,0x66,0x20,0x28,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x2e,0x65,0x6e,0x76,0x2e,0x4e,0x4f,0x44,0x45,0x5f,0x45,0x4e,0x56,0x20,0x3d,0x3d,0x3d,0x20,0x27,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x27,0x29,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x2e,0x70,0x72,0x6f,0x64,0x75,0x63,0x74,0x69,0x6f,0x6e,0x2e,0x6d,0x69,0x6e,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x5c,0x6e,0x20,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x3d,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x2e,0x2f,0x63,0x6a,0x73,0x2f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x72,0x2e,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,0x65,0x6e,0x74,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x5c,0x6e,0x7d,0x5c,0x6e,0x22,0x2c,0x22,0x2f,0x2f,0x20,0x54,0x68,0x65,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x63,0x61,0x63,0x68,0x65,0x5c,0x6e,0x76,0x61,0x72,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x5f,0x63,0x61,0x63,0x68,0x65,0x5f,0x5f,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x54,0x68,0x65,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x6e,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x28,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x43,0x68,0x65,0x63,0x6b,0x20,0x69,0x66,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x69,0x73,0x20,0x69,0x6e,0x20,0x63,0x61,0x63,0x68,0x65,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x63,0x61,0x63,0x68,0x65,0x64,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x3d,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x5f,0x63,0x61,0x63,0x68,0x65,0x5f,0x5f,0x5b,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x69,0x66,0x20,0x28,0x63,0x61,0x63,0x68,0x65,0x64,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x21,0x3d,0x3d,0x20,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x63,0x61,0x63,0x68,0x65,0x64,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3b,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x43,0x72,0x65,0x61,0x74,0x65,0x20,0x61,0x20,0x6e,0x65,0x77,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x28,0x61,0x6e,0x64,0x20,0x70,0x75,0x74,0x20,0x69,0x74,0x20,0x69,0x6e,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x63,0x61,0x63,0x68,0x65,0x29,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x3d,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x5f,0x63,0x61,0x63,0x68,0x65,0x5f,0x5f,0x5b,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x5d,0x20,0x3d,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x69,0x64,0x20,0x6e,0x65,0x65,0x64,0x65,0x64,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x6c,0x6f,0x61,0x64,0x65,0x64,0x20,0x6e,0x65,0x65,0x64,0x65,0x64,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3a,0x20,0x7b,0x7d,0x5c,0x6e,0x5c,0x74,0x7d,0x3b,0x5c,0x6e,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x45,0x78,0x65,0x63,0x75,0x74,0x65,0x20,0x74,0x68,0x65,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x6e,0x5c,0x74,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x5f,0x5f,0x5b,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x5d,0x28,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2c,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2c,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x29,0x3b,0x5c,0x6e,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x52,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,0x68,0x65,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x5c,0x6e,0x5c,0x74,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x2e,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x3b,0x5c,0x6e,0x7d,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x65,0x78,0x70,0x6f,0x73,0x65,0x20,0x74,0x68,0x65,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x5f,0x5f,0x29,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6d,0x20,0x3d,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x5f,0x5f,0x3b,0x5c,0x6e,0x5c,0x6e,0x22,0x2c,0x22,0x2f,0x2f,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x67,0x65,0x74,0x74,0x65,0x72,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x73,0x20,0x66,0x6f,0x72,0x20,0x68,0x61,0x72,0x6d,0x6f,0x6e,0x79,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x64,0x20,0x3d,0x20,0x28,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2c,0x20,0x64,0x65,0x66,0x69,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x6b,0x65,0x79,0x20,0x69,0x6e,0x20,0x64,0x65,0x66,0x69,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6f,0x28,0x64,0x65,0x66,0x69,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x6b,0x65,0x79,0x29,0x20,0x26,0x26,0x20,0x21,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6f,0x28,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2c,0x20,0x6b,0x65,0x79,0x29,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2c,0x20,0x6b,0x65,0x79,0x2c,0x20,0x7b,0x20,0x65,0x6e,0x75,0x6d,0x65,0x72,0x61,0x62,0x6c,0x65,0x3a,0x20,0x74,0x72,0x75,0x65,0x2c,0x20,0x67,0x65,0x74,0x3a,0x20,0x64,0x65,0x66,0x69,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x5b,0x6b,0x65,0x79,0x5d,0x20,0x7d,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x7d,0x3b,0x22,0x2c,0x22,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x66,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x5c,0x6e,0x2f,0x2f,0x20,0x54,0x68,0x69,0x73,0x20,0x66,0x69,0x6c,0x65,0x20,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x73,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x74,0x68,0x65,0x20,0x65,0x6e,0x74,0x72,0x79,0x20,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x5c,0x6e,0x2f,0x2f,0x20,0x54,0x68,0x65,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x66,0x6f,0x72,0x20,0x61,0x64,0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x73,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x65,0x20,0x3d,0x20,0x28,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x2e,0x61,0x6c,0x6c,0x28,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x6b,0x65,0x79,0x73,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x66,0x29,0x2e,0x72,0x65,0x64,0x75,0x63,0x65,0x28,0x28,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x73,0x2c,0x20,0x6b,0x65,0x79,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x66,0x5b,0x6b,0x65,0x79,0x5d,0x28,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x2c,0x20,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x73,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x73,0x3b,0x5c,0x6e,0x5c,0x74,0x7d,0x2c,0x20,0x5b,0x5d,0x29,0x29,0x3b,0x5c,0x6e,0x7d,0x3b,0x22,0x2c,0x22,0x2f,0x2f,0x20,0x54,0x68,0x69,0x73,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6c,0x6c,0x6f,0x77,0x20,0x74,0x6f,0x20,0x72,0x65,0x66,0x65,0x72,0x65,0x6e,0x63,0x65,0x20,0x61,0x73,0x79,0x6e,0x63,0x20,0x63,0x68,0x75,0x6e,0x6b,0x73,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x75,0x20,0x3d,0x20,0x28,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x75,0x72,0x6c,0x20,0x66,0x6f,0x72,0x20,0x66,0x69,0x6c,0x65,0x6e,0x61,0x6d,0x65,0x73,0x20,0x62,0x61,0x73,0x65,0x64,0x20,0x6f,0x6e,0x20,0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,0x5c,0x6e,0x5c,0x74,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5c,0x22,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x6a,0x73,0x2f,0x5c,0x22,0x20,0x2b,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x20,0x2b,0x20,0x5c,0x22,0x2e,0x5c,0x22,0x20,0x2b,0x20,0x5c,0x22,0x37,0x62,0x62,0x33,0x64,0x63,0x62,0x33,0x5c,0x22,0x20,0x2b,0x20,0x5c,0x22,0x2e,0x63,0x68,0x75,0x6e,0x6b,0x2e,0x6a,0x73,0x5c,0x22,0x3b,0x5c,0x6e,0x7d,0x3b,0x22,0x2c,0x22,0x2f,0x2f,0x20,0x54,0x68,0x69,0x73,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x61,0x6c,0x6c,0x6f,0x77,0x20,0x74,0x6f,0x20,0x72,0x65,0x66,0x65,0x72,0x65,0x6e,0x63,0x65,0x20,0x61,0x73,0x79,0x6e,0x63,0x20,0x63,0x68,0x75,0x6e,0x6b,0x73,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6d,0x69,0x6e,0x69,0x43,0x73,0x73,0x46,0x20,0x3d,0x20,0x28,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x75,0x72,0x6c,0x20,0x66,0x6f,0x72,0x20,0x66,0x69,0x6c,0x65,0x6e,0x61,0x6d,0x65,0x73,0x20,0x62,0x61,0x73,0x65,0x64,0x20,0x6f,0x6e,0x20,0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,0x5c,0x6e,0x5c,0x74,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x3b,0x5c,0x6e,0x7d,0x3b,0x22,0x2c,0x22,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6f,0x20,0x3d,0x20,0x28,0x6f,0x62,0x6a,0x2c,0x20,0x70,0x72,0x6f,0x70,0x29,0x20,0x3d,0x3e,0x20,0x28,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x2e,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x6f,0x62,0x6a,0x2c,0x20,0x70,0x72,0x6f,0x70,0x29,0x29,0x22,0x2c,0x22,0x76,0x61,0x72,0x20,0x69,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x5c,0x6e,0x76,0x61,0x72,0x20,0x64,0x61,0x74,0x61,0x57,0x65,0x62,0x70,0x61,0x63,0x6b,0x50,0x72,0x65,0x66,0x69,0x78,0x20,0x3d,0x20,0x5c,0x22,0x77,0x65,0x62,0x75,0x69,0x2d,0x72,0x65,0x61,0x63,0x74,0x2d,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3a,0x5c,0x22,0x3b,0x5c,0x6e,0x2f,0x2f,0x20,0x6c,0x6f,0x61,0x64,0x53,0x63,0x72,0x69,0x70,0x74,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6f,0x20,0x6c,0x6f,0x61,0x64,0x20,0x61,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x76,0x69,0x61,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x74,0x61,0x67,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6c,0x20,0x3d,0x20,0x28,0x75,0x72,0x6c,0x2c,0x20,0x64,0x6f,0x6e,0x65,0x2c,0x20,0x6b,0x65,0x79,0x2c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x69,0x66,0x28,0x69,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5b,0x75,0x72,0x6c,0x5d,0x29,0x20,0x7b,0x20,0x69,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5b,0x75,0x72,0x6c,0x5d,0x2e,0x70,0x75,0x73,0x68,0x28,0x64,0x6f,0x6e,0x65,0x29,0x3b,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x20,0x7d,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x2c,0x20,0x6e,0x65,0x65,0x64,0x41,0x74,0x74,0x61,0x63,0x68,0x3b,0x5c,0x6e,0x5c,0x74,0x69,0x66,0x28,0x6b,0x65,0x79,0x20,0x21,0x3d,0x3d,0x20,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x20,0x3d,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x42,0x79,0x54,0x61,0x67,0x4e,0x61,0x6d,0x65,0x28,0x5c,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x5c,0x22,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x66,0x6f,0x72,0x28,0x76,0x61,0x72,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x73,0x20,0x3d,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x5b,0x69,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x73,0x2e,0x67,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x5c,0x22,0x73,0x72,0x63,0x5c,0x22,0x29,0x20,0x3d,0x3d,0x20,0x75,0x72,0x6c,0x20,0x7c,0x7c,0x20,0x73,0x2e,0x67,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x5c,0x22,0x64,0x61,0x74,0x61,0x2d,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5c,0x22,0x29,0x20,0x3d,0x3d,0x20,0x64,0x61,0x74,0x61,0x57,0x65,0x62,0x70,0x61,0x63,0x6b,0x50,0x72,0x65,0x66,0x69,0x78,0x20,0x2b,0x20,0x6b,0x65,0x79,0x29,0x20,0x7b,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x3d,0x20,0x73,0x3b,0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,0x20,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x69,0x66,0x28,0x21,0x73,0x63,0x72,0x69,0x70,0x74,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x6e,0x65,0x65,0x64,0x41,0x74,0x74,0x61,0x63,0x68,0x20,0x3d,0x20,0x74,0x72,0x75,0x65,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x3d,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x28,0x27,0x73,0x63,0x72,0x69,0x70,0x74,0x27,0x29,0x3b,0x5c,0x6e,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x20,0x3d,0x20,0x27,0x75,0x74,0x66,0x2d,0x38,0x27,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x20,0x3d,0x20,0x31,0x32,0x30,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x69,0x66,0x20,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6e,0x63,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x5c,0x22,0x6e,0x6f,0x6e,0x63,0x65,0x5c,0x22,0x2c,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6e,0x63,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x5c,0x22,0x64,0x61,0x74,0x61,0x2d,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5c,0x22,0x2c,0x20,0x64,0x61,0x74,0x61,0x57,0x65,0x62,0x70,0x61,0x63,0x6b,0x50,0x72,0x65,0x66,0x69,0x78,0x20,0x2b,0x20,0x6b,0x65,0x79,0x29,0x3b,0x5c,0x6e,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x73,0x72,0x63,0x20,0x3d,0x20,0x75,0x72,0x6c,0x3b,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x69,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5b,0x75,0x72,0x6c,0x5d,0x20,0x3d,0x20,0x5b,0x64,0x6f,0x6e,0x65,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x6f,0x6e,0x53,0x63,0x72,0x69,0x70,0x74,0x43,0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x20,0x3d,0x20,0x28,0x70,0x72,0x65,0x76,0x2c,0x20,0x65,0x76,0x65,0x6e,0x74,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x61,0x76,0x6f,0x69,0x64,0x20,0x6d,0x65,0x6d,0x20,0x6c,0x65,0x61,0x6b,0x73,0x20,0x69,0x6e,0x20,0x49,0x45,0x2e,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x6f,0x6e,0x65,0x72,0x72,0x6f,0x72,0x20,0x3d,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x20,0x3d,0x20,0x6e,0x75,0x6c,0x6c,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x64,0x6f,0x6e,0x65,0x46,0x6e,0x73,0x20,0x3d,0x20,0x69,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5b,0x75,0x72,0x6c,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x64,0x65,0x6c,0x65,0x74,0x65,0x20,0x69,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5b,0x75,0x72,0x6c,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x20,0x26,0x26,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x2e,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x28,0x73,0x63,0x72,0x69,0x70,0x74,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x64,0x6f,0x6e,0x65,0x46,0x6e,0x73,0x20,0x26,0x26,0x20,0x64,0x6f,0x6e,0x65,0x46,0x6e,0x73,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x28,0x66,0x6e,0x29,0x20,0x3d,0x3e,0x20,0x28,0x66,0x6e,0x28,0x65,0x76,0x65,0x6e,0x74,0x29,0x29,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x70,0x72,0x65,0x76,0x29,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x70,0x72,0x65,0x76,0x28,0x65,0x76,0x65,0x6e,0x74,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x20,0x3d,0x20,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x6f,0x6e,0x53,0x63,0x72,0x69,0x70,0x74,0x43,0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x20,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x2c,0x20,0x7b,0x20,0x74,0x79,0x70,0x65,0x3a,0x20,0x27,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x27,0x2c,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x3a,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x7d,0x29,0x2c,0x20,0x31,0x32,0x30,0x30,0x30,0x30,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x6f,0x6e,0x65,0x72,0x72,0x6f,0x72,0x20,0x3d,0x20,0x6f,0x6e,0x53,0x63,0x72,0x69,0x70,0x74,0x43,0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x6f,0x6e,0x65,0x72,0x72,0x6f,0x72,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x20,0x3d,0x20,0x6f,0x6e,0x53,0x63,0x72,0x69,0x70,0x74,0x43,0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x20,0x73,0x63,0x72,0x69,0x70,0x74,0x2e,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x6e,0x65,0x65,0x64,0x41,0x74,0x74,0x61,0x63,0x68,0x20,0x26,0x26,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x68,0x65,0x61,0x64,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x28,0x73,0x63,0x72,0x69,0x70,0x74,0x29,0x3b,0x5c,0x6e,0x7d,0x3b,0x22,0x2c,0x22,0x2f,0x2f,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x5f,0x5f,0x65,0x73,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x20,0x6f,0x6e,0x20,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x72,0x20,0x3d,0x20,0x28,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x69,0x66,0x28,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x20,0x21,0x3d,0x3d,0x20,0x27,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x27,0x20,0x26,0x26,0x20,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x54,0x61,0x67,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2c,0x20,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x2e,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x54,0x61,0x67,0x2c,0x20,0x7b,0x20,0x76,0x61,0x6c,0x75,0x65,0x3a,0x20,0x27,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x27,0x20,0x7d,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x4f,0x62,0x6a,0x65,0x63,0x74,0x2e,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x28,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x2c,0x20,0x27,0x5f,0x5f,0x65,0x73,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x27,0x2c,0x20,0x7b,0x20,0x76,0x61,0x6c,0x75,0x65,0x3a,0x20,0x74,0x72,0x75,0x65,0x20,0x7d,0x29,0x3b,0x5c,0x6e,0x7d,0x3b,0x22,0x2c,0x22,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x70,0x20,0x3d,0x20,0x5c,0x22,0x2f,0x5c,0x22,0x3b,0x22,0x2c,0x22,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x62,0x61,0x73,0x65,0x55,0x52,0x49,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x74,0x6f,0x20,0x73,0x74,0x6f,0x72,0x65,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x20,0x61,0x6e,0x64,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x20,0x63,0x68,0x75,0x6e,0x6b,0x73,0x5c,0x6e,0x2f,0x2f,0x20,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x20,0x3d,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6e,0x6f,0x74,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x2c,0x20,0x6e,0x75,0x6c,0x6c,0x20,0x3d,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x70,0x72,0x65,0x6c,0x6f,0x61,0x64,0x65,0x64,0x2f,0x70,0x72,0x65,0x66,0x65,0x74,0x63,0x68,0x65,0x64,0x5c,0x6e,0x2f,0x2f,0x20,0x5b,0x72,0x65,0x73,0x6f,0x6c,0x76,0x65,0x2c,0x20,0x72,0x65,0x6a,0x65,0x63,0x74,0x2c,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x5d,0x20,0x3d,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x2c,0x20,0x30,0x20,0x3d,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x5c,0x6e,0x76,0x61,0x72,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x20,0x3d,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x37,0x39,0x32,0x3a,0x20,0x30,0x5c,0x6e,0x7d,0x3b,0x5c,0x6e,0x5c,0x6e,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x66,0x2e,0x6a,0x20,0x3d,0x20,0x28,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x2c,0x20,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x73,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x4a,0x53,0x4f,0x4e,0x50,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x20,0x66,0x6f,0x72,0x20,0x6a,0x61,0x76,0x61,0x73,0x63,0x72,0x69,0x70,0x74,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x20,0x3d,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6f,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x2c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x20,0x3f,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x5d,0x20,0x3a,0x20,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x20,0x21,0x3d,0x3d,0x20,0x30,0x29,0x20,0x7b,0x20,0x2f,0x2f,0x20,0x30,0x20,0x6d,0x65,0x61,0x6e,0x73,0x20,0x5c,0x22,0x61,0x6c,0x72,0x65,0x61,0x64,0x79,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x5c,0x22,0x2e,0x5c,0x6e,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x61,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x20,0x6d,0x65,0x61,0x6e,0x73,0x20,0x5c,0x22,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x6c,0x79,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x5c,0x22,0x2e,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x5b,0x32,0x5d,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x74,0x72,0x75,0x65,0x29,0x20,0x7b,0x20,0x2f,0x2f,0x20,0x61,0x6c,0x6c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x73,0x20,0x68,0x61,0x76,0x65,0x20,0x4a,0x53,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x73,0x65,0x74,0x75,0x70,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x20,0x69,0x6e,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x63,0x61,0x63,0x68,0x65,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x20,0x3d,0x20,0x6e,0x65,0x77,0x20,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x28,0x28,0x72,0x65,0x73,0x6f,0x6c,0x76,0x65,0x2c,0x20,0x72,0x65,0x6a,0x65,0x63,0x74,0x29,0x20,0x3d,0x3e,0x20,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x20,0x3d,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x5d,0x20,0x3d,0x20,0x5b,0x72,0x65,0x73,0x6f,0x6c,0x76,0x65,0x2c,0x20,0x72,0x65,0x6a,0x65,0x63,0x74,0x5d,0x29,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x73,0x2e,0x70,0x75,0x73,0x68,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x5b,0x32,0x5d,0x20,0x3d,0x20,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x29,0x3b,0x5c,0x6e,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x73,0x74,0x61,0x72,0x74,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x75,0x72,0x6c,0x20,0x3d,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x70,0x20,0x2b,0x20,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x75,0x28,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x2f,0x2f,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x62,0x65,0x66,0x6f,0x72,0x65,0x20,0x73,0x74,0x61,0x63,0x6b,0x20,0x75,0x6e,0x77,0x6f,0x75,0x6e,0x64,0x20,0x74,0x6f,0x20,0x67,0x65,0x74,0x20,0x75,0x73,0x65,0x66,0x75,0x6c,0x20,0x73,0x74,0x61,0x63,0x6b,0x74,0x72,0x61,0x63,0x65,0x20,0x6c,0x61,0x74,0x65,0x72,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x3d,0x20,0x6e,0x65,0x77,0x20,0x45,0x72,0x72,0x6f,0x72,0x28,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x45,0x6e,0x64,0x65,0x64,0x20,0x3d,0x20,0x28,0x65,0x76,0x65,0x6e,0x74,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6f,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x2c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x20,0x3d,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x20,0x21,0x3d,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x5d,0x20,0x3d,0x20,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x65,0x72,0x72,0x6f,0x72,0x54,0x79,0x70,0x65,0x20,0x3d,0x20,0x65,0x76,0x65,0x6e,0x74,0x20,0x26,0x26,0x20,0x28,0x65,0x76,0x65,0x6e,0x74,0x2e,0x74,0x79,0x70,0x65,0x20,0x3d,0x3d,0x3d,0x20,0x27,0x6c,0x6f,0x61,0x64,0x27,0x20,0x3f,0x20,0x27,0x6d,0x69,0x73,0x73,0x69,0x6e,0x67,0x27,0x20,0x3a,0x20,0x65,0x76,0x65,0x6e,0x74,0x2e,0x74,0x79,0x70,0x65,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x76,0x61,0x72,0x20,0x72,0x65,0x61,0x6c,0x53,0x72,0x63,0x20,0x3d,0x20,0x65,0x76,0x65,0x6e,0x74,0x20,0x26,0x26,0x20,0x65,0x76,0x65,0x6e,0x74,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x20,0x26,0x26,0x20,0x65,0x76,0x65,0x6e,0x74,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x73,0x72,0x63,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x65,0x72,0x72,0x6f,0x72,0x2e,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x20,0x3d,0x20,0x27,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x27,0x20,0x2b,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x20,0x2b,0x20,0x27,0x20,0x66,0x61,0x69,0x6c,0x65,0x64,0x2e,0x5c,0x5c,0x6e,0x28,0x27,0x20,0x2b,0x20,0x65,0x72,0x72,0x6f,0x72,0x54,0x79,0x70,0x65,0x20,0x2b,0x20,0x27,0x3a,0x20,0x27,0x20,0x2b,0x20,0x72,0x65,0x61,0x6c,0x53,0x72,0x63,0x20,0x2b,0x20,0x27,0x29,0x27,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x65,0x72,0x72,0x6f,0x72,0x2e,0x6e,0x61,0x6d,0x65,0x20,0x3d,0x20,0x27,0x43,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x45,0x72,0x72,0x6f,0x72,0x27,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x65,0x72,0x72,0x6f,0x72,0x2e,0x74,0x79,0x70,0x65,0x20,0x3d,0x20,0x65,0x72,0x72,0x6f,0x72,0x54,0x79,0x70,0x65,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x65,0x72,0x72,0x6f,0x72,0x2e,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x20,0x3d,0x20,0x72,0x65,0x61,0x6c,0x53,0x72,0x63,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x5b,0x31,0x5d,0x28,0x65,0x72,0x72,0x6f,0x72,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x7d,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6c,0x28,0x75,0x72,0x6c,0x2c,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x45,0x6e,0x64,0x65,0x64,0x2c,0x20,0x5c,0x22,0x63,0x68,0x75,0x6e,0x6b,0x2d,0x5c,0x22,0x20,0x2b,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x2c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x7d,0x3b,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x70,0x72,0x65,0x66,0x65,0x74,0x63,0x68,0x69,0x6e,0x67,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x70,0x72,0x65,0x6c,0x6f,0x61,0x64,0x65,0x64,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x48,0x4d,0x52,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x48,0x4d,0x52,0x20,0x6d,0x61,0x6e,0x69,0x66,0x65,0x73,0x74,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x6e,0x6f,0x20,0x6f,0x6e,0x20,0x63,0x68,0x75,0x6e,0x6b,0x73,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x5c,0x6e,0x5c,0x6e,0x2f,0x2f,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x20,0x61,0x20,0x4a,0x53,0x4f,0x4e,0x50,0x20,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x20,0x66,0x6f,0x72,0x20,0x63,0x68,0x75,0x6e,0x6b,0x20,0x6c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x5c,0x6e,0x76,0x61,0x72,0x20,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x4a,0x73,0x6f,0x6e,0x70,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x20,0x3d,0x20,0x28,0x70,0x61,0x72,0x65,0x6e,0x74,0x43,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x64,0x61,0x74,0x61,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x73,0x20,0x3d,0x20,0x64,0x61,0x74,0x61,0x5b,0x30,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x6d,0x6f,0x72,0x65,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x20,0x3d,0x20,0x64,0x61,0x74,0x61,0x5b,0x31,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x20,0x3d,0x20,0x64,0x61,0x74,0x61,0x5b,0x32,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x61,0x64,0x64,0x20,0x5c,0x22,0x6d,0x6f,0x72,0x65,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x5c,0x22,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x2c,0x5c,0x6e,0x5c,0x74,0x2f,0x2f,0x20,0x74,0x68,0x65,0x6e,0x20,0x66,0x6c,0x61,0x67,0x20,0x61,0x6c,0x6c,0x20,0x5c,0x22,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x73,0x5c,0x22,0x20,0x61,0x73,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x20,0x61,0x6e,0x64,0x20,0x66,0x69,0x72,0x65,0x20,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x5c,0x6e,0x5c,0x74,0x76,0x61,0x72,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x2c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x2c,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x5c,0x6e,0x5c,0x74,0x69,0x66,0x28,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x73,0x2e,0x73,0x6f,0x6d,0x65,0x28,0x28,0x69,0x64,0x29,0x20,0x3d,0x3e,0x20,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x69,0x64,0x5d,0x20,0x21,0x3d,0x3d,0x20,0x30,0x29,0x29,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x66,0x6f,0x72,0x28,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x20,0x69,0x6e,0x20,0x6d,0x6f,0x72,0x65,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6f,0x28,0x6d,0x6f,0x72,0x65,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x2c,0x20,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x29,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6d,0x5b,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x5d,0x20,0x3d,0x20,0x6d,0x6f,0x72,0x65,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x5b,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x29,0x20,0x76,0x61,0x72,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x20,0x3d,0x20,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x69,0x66,0x28,0x70,0x61,0x72,0x65,0x6e,0x74,0x43,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x29,0x20,0x70,0x61,0x72,0x65,0x6e,0x74,0x43,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x64,0x61,0x74,0x61,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x66,0x6f,0x72,0x28,0x3b,0x69,0x20,0x3c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x73,0x2e,0x6c,0x65,0x6e,0x67,0x74,0x68,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x20,0x3d,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x73,0x5b,0x69,0x5d,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x69,0x66,0x28,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x2e,0x6f,0x28,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x2c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x29,0x20,0x26,0x26,0x20,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x5d,0x29,0x20,0x7b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x5c,0x74,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x5d,0x5b,0x30,0x5d,0x28,0x29,0x3b,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x74,0x5c,0x74,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x5b,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x5d,0x20,0x3d,0x20,0x30,0x3b,0x5c,0x6e,0x5c,0x74,0x7d,0x5c,0x6e,0x5c,0x6e,0x7d,0x5c,0x6e,0x5c,0x6e,0x76,0x61,0x72,0x20,0x63,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x3d,0x20,0x73,0x65,0x6c,0x66,0x5b,0x5c,0x22,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x43,0x68,0x75,0x6e,0x6b,0x77,0x65,0x62,0x75,0x69,0x5f,0x72,0x65,0x61,0x63,0x74,0x5f,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x5c,0x22,0x5d,0x20,0x3d,0x20,0x73,0x65,0x6c,0x66,0x5b,0x5c,0x22,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x43,0x68,0x75,0x6e,0x6b,0x77,0x65,0x62,0x75,0x69,0x5f,0x72,0x65,0x61,0x63,0x74,0x5f,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x5c,0x22,0x5d,0x20,0x7c,0x7c,0x20,0x5b,0x5d,0x3b,0x5c,0x6e,0x63,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x2e,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x28,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x4a,0x73,0x6f,0x6e,0x70,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x20,0x30,0x29,0x29,0x3b,0x5c,0x6e,0x63,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x2e,0x70,0x75,0x73,0x68,0x20,0x3d,0x20,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x4a,0x73,0x6f,0x6e,0x70,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x2e,0x62,0x69,0x6e,0x64,0x28,0x6e,0x75,0x6c,0x6c,0x2c,0x20,0x63,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x2e,0x70,0x75,0x73,0x68,0x2e,0x62,0x69,0x6e,0x64,0x28,0x63,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x29,0x29,0x3b,0x22,0x2c,0x22,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x52,0x65,0x61,0x63,0x74,0x2c,0x20,0x7b,0x20,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x20,0x7d,0x20,0x66,0x72,0x6f,0x6d,0x20,0x5c,0x22,0x72,0x65,0x61,0x63,0x74,0x5c,0x22,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x63,0x6f,0x6e,0x73,0x74,0x20,0x41,0x70,0x70,0x20,0x3d,0x20,0x28,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5b,0x76,0x61,0x6c,0x75,0x65,0x31,0x2c,0x20,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x31,0x5d,0x20,0x3d,0x20,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x27,0x27,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5b,0x76,0x61,0x6c,0x75,0x65,0x32,0x2c,0x20,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x32,0x5d,0x20,0x3d,0x20,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x27,0x27,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5b,0x72,0x65,0x73,0x75,0x6c,0x74,0x2c,0x20,0x73,0x65,0x74,0x52,0x65,0x73,0x75,0x6c,0x74,0x5d,0x20,0x3d,0x20,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x63,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x65,0x53,0x75,0x6d,0x20,0x3d,0x20,0x28,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x73,0x75,0x6d,0x20,0x3d,0x20,0x70,0x61,0x72,0x73,0x65,0x46,0x6c,0x6f,0x61,0x74,0x28,0x76,0x61,0x6c,0x75,0x65,0x31,0x20,0x7c,0x7c,0x20,0x30,0x29,0x20,0x2b,0x20,0x70,0x61,0x72,0x73,0x65,0x46,0x6c,0x6f,0x61,0x74,0x28,0x76,0x61,0x6c,0x75,0x65,0x32,0x20,0x7c,0x7c,0x20,0x30,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x73,0x65,0x74,0x52,0x65,0x73,0x75,0x6c,0x74,0x28,0x73,0x75,0x6d,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x7d,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x27,0x32,0x30,0x70,0x78,0x27,0x2c,0x20,0x66,0x6f,0x6e,0x74,0x46,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x27,0x41,0x72,0x69,0x61,0x6c,0x2c,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x27,0x20,0x7d,0x7d,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x5c,0x22,0x6c,0x6f,0x67,0x6f,0x31,0x39,0x32,0x2e,0x70,0x6e,0x67,0x5c,0x22,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x5c,0x22,0x36,0x34,0x5c,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x5c,0x22,0x36,0x34,0x5c,0x22,0x3e,0x3c,0x2f,0x69,0x6d,0x67,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x68,0x32,0x3e,0x57,0x65,0x62,0x55,0x49,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x45,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3c,0x2f,0x68,0x32,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x42,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x27,0x31,0x30,0x70,0x78,0x27,0x20,0x7d,0x7d,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x6c,0x61,0x62,0x65,0x6c,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x49,0x6e,0x70,0x75,0x74,0x20,0x31,0x3a,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x6c,0x61,0x62,0x65,0x6c,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x79,0x70,0x65,0x3d,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x7b,0x76,0x61,0x6c,0x75,0x65,0x31,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x3d,0x7b,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x31,0x28,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x4c,0x65,0x66,0x74,0x3a,0x20,0x27,0x31,0x30,0x70,0x78,0x27,0x2c,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x27,0x35,0x70,0x78,0x27,0x2c,0x20,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x20,0x27,0x31,0x36,0x70,0x78,0x27,0x20,0x7d,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x42,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x27,0x31,0x30,0x70,0x78,0x27,0x20,0x7d,0x7d,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x6c,0x61,0x62,0x65,0x6c,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x49,0x6e,0x70,0x75,0x74,0x20,0x32,0x3a,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x6c,0x61,0x62,0x65,0x6c,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x79,0x70,0x65,0x3d,0x5c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x5c,0x22,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x7b,0x76,0x61,0x6c,0x75,0x65,0x32,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x3d,0x7b,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x32,0x28,0x65,0x2e,0x74,0x61,0x72,0x67,0x65,0x74,0x2e,0x76,0x61,0x6c,0x75,0x65,0x29,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x4c,0x65,0x66,0x74,0x3a,0x20,0x27,0x31,0x30,0x70,0x78,0x27,0x2c,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x27,0x35,0x70,0x78,0x27,0x2c,0x20,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x20,0x27,0x31,0x36,0x70,0x78,0x27,0x20,0x7d,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x3d,0x7b,0x63,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x65,0x53,0x75,0x6d,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x27,0x31,0x30,0x70,0x78,0x20,0x32,0x30,0x70,0x78,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x27,0x23,0x34,0x43,0x41,0x46,0x35,0x30,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x27,0x77,0x68,0x69,0x74,0x65,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x20,0x27,0x31,0x36,0x70,0x78,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x27,0x6e,0x6f,0x6e,0x65,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x27,0x35,0x70,0x78,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x27,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x52,0x69,0x67,0x68,0x74,0x3a,0x20,0x27,0x31,0x30,0x70,0x78,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x65,0x20,0x28,0x52,0x65,0x61,0x63,0x74,0x20,0x46,0x72,0x6f,0x6e,0x74,0x65,0x6e,0x64,0x29,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x5c,0x22,0x45,0x78,0x69,0x74,0x5c,0x22,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x27,0x31,0x30,0x70,0x78,0x20,0x32,0x30,0x70,0x78,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x27,0x23,0x66,0x34,0x34,0x33,0x33,0x36,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x27,0x77,0x68,0x69,0x74,0x65,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x20,0x27,0x31,0x36,0x70,0x78,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x27,0x6e,0x6f,0x6e,0x65,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x27,0x35,0x70,0x78,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x27,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x27,0x2c,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x45,0x78,0x69,0x74,0x20,0x28,0x57,0x65,0x62,0x55,0x49,0x20,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x29,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x7b,0x7b,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x54,0x6f,0x70,0x3a,0x20,0x27,0x32,0x30,0x70,0x78,0x27,0x2c,0x20,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x3a,0x20,0x27,0x31,0x38,0x70,0x78,0x27,0x20,0x7d,0x7d,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x52,0x65,0x73,0x75,0x6c,0x74,0x3a,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x20,0x7b,0x72,0x65,0x73,0x75,0x6c,0x74,0x20,0x21,0x3d,0x3d,0x20,0x6e,0x75,0x6c,0x6c,0x20,0x3f,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x20,0x3a,0x20,0x27,0x4e,0x2f,0x41,0x27,0x7d,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x7d,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x41,0x70,0x70,0x3b,0x5c,0x72,0x5c,0x6e,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x20,0x3d,0x20,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x69,0x66,0x20,0x28,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x20,0x26,0x26,0x20,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x20,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x6f,0x66,0x20,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x29,0x20,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x69,0x6d,0x70,0x6f,0x72,0x74,0x28,0x27,0x77,0x65,0x62,0x2d,0x76,0x69,0x74,0x61,0x6c,0x73,0x27,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x7b,0x20,0x67,0x65,0x74,0x43,0x4c,0x53,0x2c,0x20,0x67,0x65,0x74,0x46,0x49,0x44,0x2c,0x20,0x67,0x65,0x74,0x46,0x43,0x50,0x2c,0x20,0x67,0x65,0x74,0x4c,0x43,0x50,0x2c,0x20,0x67,0x65,0x74,0x54,0x54,0x46,0x42,0x20,0x7d,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x65,0x74,0x43,0x4c,0x53,0x28,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x65,0x74,0x46,0x49,0x44,0x28,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x65,0x74,0x46,0x43,0x50,0x28,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x65,0x74,0x4c,0x43,0x50,0x28,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x65,0x74,0x54,0x54,0x46,0x42,0x28,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x7d,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x7d,0x5c,0x72,0x5c,0x6e,0x7d,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x65,0x78,0x70,0x6f,0x72,0x74,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x3b,0x5c,0x72,0x5c,0x6e,0x22,0x2c,0x22,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x52,0x65,0x61,0x63,0x74,0x20,0x66,0x72,0x6f,0x6d,0x20,0x27,0x72,0x65,0x61,0x63,0x74,0x27,0x3b,0x5c,0x72,0x5c,0x6e,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x52,0x65,0x61,0x63,0x74,0x44,0x4f,0x4d,0x20,0x66,0x72,0x6f,0x6d,0x20,0x27,0x72,0x65,0x61,0x63,0x74,0x2d,0x64,0x6f,0x6d,0x2f,0x63,0x6c,0x69,0x65,0x6e,0x74,0x27,0x3b,0x5c,0x72,0x5c,0x6e,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x27,0x2e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x27,0x3b,0x5c,0x72,0x5c,0x6e,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x41,0x70,0x70,0x20,0x66,0x72,0x6f,0x6d,0x20,0x27,0x2e,0x2f,0x41,0x70,0x70,0x27,0x3b,0x5c,0x72,0x5c,0x6e,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x20,0x66,0x72,0x6f,0x6d,0x20,0x27,0x2e,0x2f,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x27,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x6f,0x6f,0x74,0x20,0x3d,0x20,0x52,0x65,0x61,0x63,0x74,0x44,0x4f,0x4d,0x2e,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x28,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x27,0x72,0x6f,0x6f,0x74,0x27,0x29,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x72,0x6f,0x6f,0x74,0x2e,0x72,0x65,0x6e,0x64,0x65,0x72,0x28,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x3c,0x52,0x65,0x61,0x63,0x74,0x2e,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x20,0x20,0x3c,0x41,0x70,0x70,0x20,0x2f,0x3e,0x5c,0x72,0x5c,0x6e,0x20,0x20,0x3c,0x2f,0x52,0x65,0x61,0x63,0x74,0x2e,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x3e,0x5c,0x72,0x5c,0x6e,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x5c,0x72,0x5c,0x6e,0x2f,0x2f,0x20,0x49,0x66,0x20,0x79,0x6f,0x75,0x20,0x77,0x61,0x6e,0x74,0x20,0x74,0x6f,0x20,0x73,0x74,0x61,0x72,0x74,0x20,0x6d,0x65,0x61,0x73,0x75,0x72,0x69,0x6e,0x67,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x20,0x69,0x6e,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x70,0x70,0x2c,0x20,0x70,0x61,0x73,0x73,0x20,0x61,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x5c,0x72,0x5c,0x6e,0x2f,0x2f,0x20,0x74,0x6f,0x20,0x6c,0x6f,0x67,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x73,0x20,0x28,0x66,0x6f,0x72,0x20,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3a,0x20,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x28,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x29,0x29,0x5c,0x72,0x5c,0x6e,0x2f,0x2f,0x20,0x6f,0x72,0x20,0x73,0x65,0x6e,0x64,0x20,0x74,0x6f,0x20,0x61,0x6e,0x20,0x61,0x6e,0x61,0x6c,0x79,0x74,0x69,0x63,0x73,0x20,0x65,0x6e,0x64,0x70,0x6f,0x69,0x6e,0x74,0x2e,0x20,0x4c,0x65,0x61,0x72,0x6e,0x20,0x6d,0x6f,0x72,0x65,0x3a,0x20,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x62,0x69,0x74,0x2e,0x6c,0x79,0x2f,0x43,0x52,0x41,0x2d,0x76,0x69,0x74,0x61,0x6c,0x73,0x5c,0x72,0x5c,0x6e,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x28,0x29,0x3b,0x5c,0x72,0x5c,0x6e,0x22,0x5d,0x2c,0x22,0x6e,0x61,0x6d,0x65,0x73,0x22,0x3a,0x5b,0x22,0x61,0x61,0x22,0x2c,0x22,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x22,0x2c,0x22,0x63,0x61,0x22,0x2c,0x22,0x70,0x22,0x2c,0x22,0x61,0x22,0x2c,0x22,0x62,0x22,0x2c,0x22,0x63,0x22,0x2c,0x22,0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74,0x73,0x22,0x2c,0x22,0x6c,0x65,0x6e,0x67,0x74,0x68,0x22,0x2c,0x22,0x65,0x6e,0x63,0x6f,0x64,0x65,0x55,0x52,0x49,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x22,0x2c,0x22,0x64,0x61,0x22,0x2c,0x22,0x53,0x65,0x74,0x22,0x2c,0x22,0x65,0x61,0x22,0x2c,0x22,0x66,0x61,0x22,0x2c,0x22,0x68,0x61,0x22,0x2c,0x22,0x61,0x64,0x64,0x22,0x2c,0x22,0x69,0x61,0x22,0x2c,0x22,0x77,0x69,0x6e,0x64,0x6f,0x77,0x22,0x2c,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x6a,0x61,0x22,0x2c,0x22,0x4f,0x62,0x6a,0x65,0x63,0x74,0x22,0x2c,0x22,0x70,0x72,0x6f,0x74,0x6f,0x74,0x79,0x70,0x65,0x22,0x2c,0x22,0x68,0x61,0x73,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x22,0x2c,0x22,0x6b,0x61,0x22,0x2c,0x22,0x6c,0x61,0x22,0x2c,0x22,0x6d,0x61,0x22,0x2c,0x22,0x76,0x22,0x2c,0x22,0x64,0x22,0x2c,0x22,0x65,0x22,0x2c,0x22,0x66,0x22,0x2c,0x22,0x67,0x22,0x2c,0x22,0x74,0x68,0x69,0x73,0x22,0x2c,0x22,0x61,0x63,0x63,0x65,0x70,0x74,0x73,0x42,0x6f,0x6f,0x6c,0x65,0x61,0x6e,0x73,0x22,0x2c,0x22,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x22,0x2c,0x22,0x6d,0x75,0x73,0x74,0x55,0x73,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x22,0x2c,0x22,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x74,0x79,0x70,0x65,0x22,0x2c,0x22,0x73,0x61,0x6e,0x69,0x74,0x69,0x7a,0x65,0x55,0x52,0x4c,0x22,0x2c,0x22,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x6d,0x70,0x74,0x79,0x53,0x74,0x72,0x69,0x6e,0x67,0x22,0x2c,0x22,0x7a,0x22,0x2c,0x22,0x73,0x70,0x6c,0x69,0x74,0x22,0x2c,0x22,0x66,0x6f,0x72,0x45,0x61,0x63,0x68,0x22,0x2c,0x22,0x74,0x6f,0x4c,0x6f,0x77,0x65,0x72,0x43,0x61,0x73,0x65,0x22,0x2c,0x22,0x72,0x61,0x22,0x2c,0x22,0x73,0x61,0x22,0x2c,0x22,0x74,0x6f,0x55,0x70,0x70,0x65,0x72,0x43,0x61,0x73,0x65,0x22,0x2c,0x22,0x74,0x61,0x22,0x2c,0x22,0x73,0x6c,0x69,0x63,0x65,0x22,0x2c,0x22,0x70,0x61,0x22,0x2c,0x22,0x69,0x73,0x4e,0x61,0x4e,0x22,0x2c,0x22,0x71,0x61,0x22,0x2c,0x22,0x63,0x61,0x6c,0x6c,0x22,0x2c,0x22,0x74,0x65,0x73,0x74,0x22,0x2c,0x22,0x6f,0x61,0x22,0x2c,0x22,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x22,0x2c,0x22,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x22,0x2c,0x22,0x73,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x4e,0x53,0x22,0x2c,0x22,0x72,0x65,0x70,0x6c,0x61,0x63,0x65,0x22,0x2c,0x22,0x78,0x6c,0x69,0x6e,0x6b,0x48,0x72,0x65,0x66,0x22,0x2c,0x22,0x75,0x61,0x22,0x2c,0x22,0x5f,0x5f,0x53,0x45,0x43,0x52,0x45,0x54,0x5f,0x49,0x4e,0x54,0x45,0x52,0x4e,0x41,0x4c,0x53,0x5f,0x44,0x4f,0x5f,0x4e,0x4f,0x54,0x5f,0x55,0x53,0x45,0x5f,0x4f,0x52,0x5f,0x59,0x4f,0x55,0x5f,0x57,0x49,0x4c,0x4c,0x5f,0x42,0x45,0x5f,0x46,0x49,0x52,0x45,0x44,0x22,0x2c,0x22,0x76,0x61,0x22,0x2c,0x22,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x22,0x2c,0x22,0x66,0x6f,0x72,0x22,0x2c,0x22,0x77,0x61,0x22,0x2c,0x22,0x79,0x61,0x22,0x2c,0x22,0x7a,0x61,0x22,0x2c,0x22,0x41,0x61,0x22,0x2c,0x22,0x42,0x61,0x22,0x2c,0x22,0x43,0x61,0x22,0x2c,0x22,0x44,0x61,0x22,0x2c,0x22,0x45,0x61,0x22,0x2c,0x22,0x46,0x61,0x22,0x2c,0x22,0x47,0x61,0x22,0x2c,0x22,0x48,0x61,0x22,0x2c,0x22,0x49,0x61,0x22,0x2c,0x22,0x4a,0x61,0x22,0x2c,0x22,0x69,0x74,0x65,0x72,0x61,0x74,0x6f,0x72,0x22,0x2c,0x22,0x4b,0x61,0x22,0x2c,0x22,0x4c,0x61,0x22,0x2c,0x22,0x41,0x22,0x2c,0x22,0x61,0x73,0x73,0x69,0x67,0x6e,0x22,0x2c,0x22,0x4d,0x61,0x22,0x2c,0x22,0x45,0x72,0x72,0x6f,0x72,0x22,0x2c,0x22,0x73,0x74,0x61,0x63,0x6b,0x22,0x2c,0x22,0x74,0x72,0x69,0x6d,0x22,0x2c,0x22,0x6d,0x61,0x74,0x63,0x68,0x22,0x2c,0x22,0x4e,0x61,0x22,0x2c,0x22,0x4f,0x61,0x22,0x2c,0x22,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x53,0x74,0x61,0x63,0x6b,0x54,0x72,0x61,0x63,0x65,0x22,0x2c,0x22,0x64,0x65,0x66,0x69,0x6e,0x65,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x22,0x2c,0x22,0x73,0x65,0x74,0x22,0x2c,0x22,0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x22,0x2c,0x22,0x6c,0x22,0x2c,0x22,0x68,0x22,0x2c,0x22,0x6b,0x22,0x2c,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x73,0x22,0x2c,0x22,0x6e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x50,0x61,0x22,0x2c,0x22,0x74,0x61,0x67,0x22,0x2c,0x22,0x72,0x65,0x6e,0x64,0x65,0x72,0x22,0x2c,0x22,0x51,0x61,0x22,0x2c,0x22,0x24,0x24,0x74,0x79,0x70,0x65,0x6f,0x66,0x22,0x2c,0x22,0x5f,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x5f,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x22,0x5f,0x69,0x6e,0x69,0x74,0x22,0x2c,0x22,0x52,0x61,0x22,0x2c,0x22,0x53,0x61,0x22,0x2c,0x22,0x54,0x61,0x22,0x2c,0x22,0x6e,0x6f,0x64,0x65,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x56,0x61,0x22,0x2c,0x22,0x5f,0x76,0x61,0x6c,0x75,0x65,0x54,0x72,0x61,0x63,0x6b,0x65,0x72,0x22,0x2c,0x22,0x67,0x65,0x74,0x4f,0x77,0x6e,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x6f,0x72,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x73,0x74,0x72,0x75,0x63,0x74,0x6f,0x72,0x22,0x2c,0x22,0x67,0x65,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x66,0x69,0x67,0x75,0x72,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x65,0x6e,0x75,0x6d,0x65,0x72,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x67,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x73,0x74,0x6f,0x70,0x54,0x72,0x61,0x63,0x6b,0x69,0x6e,0x67,0x22,0x2c,0x22,0x55,0x61,0x22,0x2c,0x22,0x57,0x61,0x22,0x2c,0x22,0x63,0x68,0x65,0x63,0x6b,0x65,0x64,0x22,0x2c,0x22,0x76,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x58,0x61,0x22,0x2c,0x22,0x61,0x63,0x74,0x69,0x76,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x62,0x6f,0x64,0x79,0x22,0x2c,0x22,0x59,0x61,0x22,0x2c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x22,0x2c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x5f,0x77,0x72,0x61,0x70,0x70,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x43,0x68,0x65,0x63,0x6b,0x65,0x64,0x22,0x2c,0x22,0x5a,0x61,0x22,0x2c,0x22,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x64,0x22,0x2c,0x22,0x61,0x62,0x22,0x2c,0x22,0x62,0x62,0x22,0x2c,0x22,0x63,0x62,0x22,0x2c,0x22,0x64,0x62,0x22,0x2c,0x22,0x6f,0x77,0x6e,0x65,0x72,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x65,0x62,0x22,0x2c,0x22,0x41,0x72,0x72,0x61,0x79,0x22,0x2c,0x22,0x69,0x73,0x41,0x72,0x72,0x61,0x79,0x22,0x2c,0x22,0x66,0x62,0x22,0x2c,0x22,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x73,0x22,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x22,0x2c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x22,0x2c,0x22,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x22,0x2c,0x22,0x67,0x62,0x22,0x2c,0x22,0x64,0x61,0x6e,0x67,0x65,0x72,0x6f,0x75,0x73,0x6c,0x79,0x53,0x65,0x74,0x49,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x22,0x2c,0x22,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x2c,0x22,0x68,0x62,0x22,0x2c,0x22,0x69,0x62,0x22,0x2c,0x22,0x6a,0x62,0x22,0x2c,0x22,0x74,0x65,0x78,0x74,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x2c,0x22,0x6b,0x62,0x22,0x2c,0x22,0x6c,0x62,0x22,0x2c,0x22,0x6d,0x62,0x22,0x2c,0x22,0x6e,0x62,0x22,0x2c,0x22,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x55,0x52,0x49,0x22,0x2c,0x22,0x69,0x6e,0x6e,0x65,0x72,0x48,0x54,0x4d,0x4c,0x22,0x2c,0x22,0x76,0x61,0x6c,0x75,0x65,0x4f,0x66,0x22,0x2c,0x22,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x22,0x2c,0x22,0x66,0x69,0x72,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x22,0x2c,0x22,0x72,0x65,0x6d,0x6f,0x76,0x65,0x43,0x68,0x69,0x6c,0x64,0x22,0x2c,0x22,0x61,0x70,0x70,0x65,0x6e,0x64,0x43,0x68,0x69,0x6c,0x64,0x22,0x2c,0x22,0x4d,0x53,0x41,0x70,0x70,0x22,0x2c,0x22,0x65,0x78,0x65,0x63,0x55,0x6e,0x73,0x61,0x66,0x65,0x4c,0x6f,0x63,0x61,0x6c,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x6f,0x62,0x22,0x2c,0x22,0x6c,0x61,0x73,0x74,0x43,0x68,0x69,0x6c,0x64,0x22,0x2c,0x22,0x6e,0x6f,0x64,0x65,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x6e,0x6f,0x64,0x65,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x70,0x62,0x22,0x2c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x49,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x43,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x61,0x73,0x70,0x65,0x63,0x74,0x52,0x61,0x74,0x69,0x6f,0x22,0x2c,0x22,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x4f,0x75,0x74,0x73,0x65,0x74,0x22,0x2c,0x22,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x53,0x6c,0x69,0x63,0x65,0x22,0x2c,0x22,0x62,0x6f,0x72,0x64,0x65,0x72,0x49,0x6d,0x61,0x67,0x65,0x57,0x69,0x64,0x74,0x68,0x22,0x2c,0x22,0x62,0x6f,0x78,0x46,0x6c,0x65,0x78,0x22,0x2c,0x22,0x62,0x6f,0x78,0x46,0x6c,0x65,0x78,0x47,0x72,0x6f,0x75,0x70,0x22,0x2c,0x22,0x62,0x6f,0x78,0x4f,0x72,0x64,0x69,0x6e,0x61,0x6c,0x47,0x72,0x6f,0x75,0x70,0x22,0x2c,0x22,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x43,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x73,0x22,0x2c,0x22,0x66,0x6c,0x65,0x78,0x22,0x2c,0x22,0x66,0x6c,0x65,0x78,0x47,0x72,0x6f,0x77,0x22,0x2c,0x22,0x66,0x6c,0x65,0x78,0x50,0x6f,0x73,0x69,0x74,0x69,0x76,0x65,0x22,0x2c,0x22,0x66,0x6c,0x65,0x78,0x53,0x68,0x72,0x69,0x6e,0x6b,0x22,0x2c,0x22,0x66,0x6c,0x65,0x78,0x4e,0x65,0x67,0x61,0x74,0x69,0x76,0x65,0x22,0x2c,0x22,0x66,0x6c,0x65,0x78,0x4f,0x72,0x64,0x65,0x72,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x41,0x72,0x65,0x61,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x45,0x6e,0x64,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x53,0x70,0x61,0x6e,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x52,0x6f,0x77,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x45,0x6e,0x64,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x53,0x70,0x61,0x6e,0x22,0x2c,0x22,0x67,0x72,0x69,0x64,0x43,0x6f,0x6c,0x75,0x6d,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x66,0x6f,0x6e,0x74,0x57,0x65,0x69,0x67,0x68,0x74,0x22,0x2c,0x22,0x6c,0x69,0x6e,0x65,0x43,0x6c,0x61,0x6d,0x70,0x22,0x2c,0x22,0x6c,0x69,0x6e,0x65,0x48,0x65,0x69,0x67,0x68,0x74,0x22,0x2c,0x22,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x22,0x2c,0x22,0x6f,0x72,0x64,0x65,0x72,0x22,0x2c,0x22,0x6f,0x72,0x70,0x68,0x61,0x6e,0x73,0x22,0x2c,0x22,0x74,0x61,0x62,0x53,0x69,0x7a,0x65,0x22,0x2c,0x22,0x77,0x69,0x64,0x6f,0x77,0x73,0x22,0x2c,0x22,0x7a,0x49,0x6e,0x64,0x65,0x78,0x22,0x2c,0x22,0x7a,0x6f,0x6f,0x6d,0x22,0x2c,0x22,0x66,0x69,0x6c,0x6c,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x22,0x2c,0x22,0x66,0x6c,0x6f,0x6f,0x64,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x22,0x2c,0x22,0x73,0x74,0x6f,0x70,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x22,0x2c,0x22,0x73,0x74,0x72,0x6f,0x6b,0x65,0x44,0x61,0x73,0x68,0x61,0x72,0x72,0x61,0x79,0x22,0x2c,0x22,0x73,0x74,0x72,0x6f,0x6b,0x65,0x44,0x61,0x73,0x68,0x6f,0x66,0x66,0x73,0x65,0x74,0x22,0x2c,0x22,0x73,0x74,0x72,0x6f,0x6b,0x65,0x4d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x22,0x2c,0x22,0x73,0x74,0x72,0x6f,0x6b,0x65,0x4f,0x70,0x61,0x63,0x69,0x74,0x79,0x22,0x2c,0x22,0x73,0x74,0x72,0x6f,0x6b,0x65,0x57,0x69,0x64,0x74,0x68,0x22,0x2c,0x22,0x71,0x62,0x22,0x2c,0x22,0x72,0x62,0x22,0x2c,0x22,0x73,0x62,0x22,0x2c,0x22,0x73,0x74,0x79,0x6c,0x65,0x22,0x2c,0x22,0x69,0x6e,0x64,0x65,0x78,0x4f,0x66,0x22,0x2c,0x22,0x73,0x65,0x74,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x22,0x2c,0x22,0x6b,0x65,0x79,0x73,0x22,0x2c,0x22,0x63,0x68,0x61,0x72,0x41,0x74,0x22,0x2c,0x22,0x73,0x75,0x62,0x73,0x74,0x72,0x69,0x6e,0x67,0x22,0x2c,0x22,0x74,0x62,0x22,0x2c,0x22,0x6d,0x65,0x6e,0x75,0x69,0x74,0x65,0x6d,0x22,0x2c,0x22,0x61,0x72,0x65,0x61,0x22,0x2c,0x22,0x62,0x61,0x73,0x65,0x22,0x2c,0x22,0x62,0x72,0x22,0x2c,0x22,0x63,0x6f,0x6c,0x22,0x2c,0x22,0x65,0x6d,0x62,0x65,0x64,0x22,0x2c,0x22,0x68,0x72,0x22,0x2c,0x22,0x69,0x6d,0x67,0x22,0x2c,0x22,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x22,0x6b,0x65,0x79,0x67,0x65,0x6e,0x22,0x2c,0x22,0x6c,0x69,0x6e,0x6b,0x22,0x2c,0x22,0x6d,0x65,0x74,0x61,0x22,0x2c,0x22,0x70,0x61,0x72,0x61,0x6d,0x22,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x2c,0x22,0x74,0x72,0x61,0x63,0x6b,0x22,0x2c,0x22,0x77,0x62,0x72,0x22,0x2c,0x22,0x75,0x62,0x22,0x2c,0x22,0x76,0x62,0x22,0x2c,0x22,0x69,0x73,0x22,0x2c,0x22,0x77,0x62,0x22,0x2c,0x22,0x78,0x62,0x22,0x2c,0x22,0x74,0x61,0x72,0x67,0x65,0x74,0x22,0x2c,0x22,0x73,0x72,0x63,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x63,0x6f,0x72,0x72,0x65,0x73,0x70,0x6f,0x6e,0x64,0x69,0x6e,0x67,0x55,0x73,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x70,0x61,0x72,0x65,0x6e,0x74,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x79,0x62,0x22,0x2c,0x22,0x7a,0x62,0x22,0x2c,0x22,0x41,0x62,0x22,0x2c,0x22,0x42,0x62,0x22,0x2c,0x22,0x43,0x62,0x22,0x2c,0x22,0x73,0x74,0x61,0x74,0x65,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x44,0x62,0x22,0x2c,0x22,0x45,0x62,0x22,0x2c,0x22,0x70,0x75,0x73,0x68,0x22,0x2c,0x22,0x46,0x62,0x22,0x2c,0x22,0x47,0x62,0x22,0x2c,0x22,0x48,0x62,0x22,0x2c,0x22,0x49,0x62,0x22,0x2c,0x22,0x4a,0x62,0x22,0x2c,0x22,0x4b,0x62,0x22,0x2c,0x22,0x4c,0x62,0x22,0x2c,0x22,0x4d,0x62,0x22,0x2c,0x22,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x22,0x2c,0x22,0x72,0x65,0x6d,0x6f,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x22,0x2c,0x22,0x4e,0x62,0x22,0x2c,0x22,0x61,0x70,0x70,0x6c,0x79,0x22,0x2c,0x22,0x6d,0x22,0x2c,0x22,0x6f,0x6e,0x45,0x72,0x72,0x6f,0x72,0x22,0x2c,0x22,0x4f,0x62,0x22,0x2c,0x22,0x50,0x62,0x22,0x2c,0x22,0x51,0x62,0x22,0x2c,0x22,0x52,0x62,0x22,0x2c,0x22,0x53,0x62,0x22,0x2c,0x22,0x54,0x62,0x22,0x2c,0x22,0x56,0x62,0x22,0x2c,0x22,0x61,0x6c,0x74,0x65,0x72,0x6e,0x61,0x74,0x65,0x22,0x2c,0x22,0x72,0x65,0x74,0x75,0x72,0x6e,0x22,0x2c,0x22,0x66,0x6c,0x61,0x67,0x73,0x22,0x2c,0x22,0x57,0x62,0x22,0x2c,0x22,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x64,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x22,0x2c,0x22,0x58,0x62,0x22,0x2c,0x22,0x5a,0x62,0x22,0x2c,0x22,0x63,0x68,0x69,0x6c,0x64,0x22,0x2c,0x22,0x73,0x69,0x62,0x6c,0x69,0x6e,0x67,0x22,0x2c,0x22,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x22,0x2c,0x22,0x59,0x62,0x22,0x2c,0x22,0x24,0x62,0x22,0x2c,0x22,0x61,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x22,0x2c,0x22,0x62,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x61,0x6e,0x63,0x65,0x6c,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x22,0x2c,0x22,0x63,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x68,0x6f,0x75,0x6c,0x64,0x59,0x69,0x65,0x6c,0x64,0x22,0x2c,0x22,0x64,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x50,0x61,0x69,0x6e,0x74,0x22,0x2c,0x22,0x42,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x6f,0x77,0x22,0x2c,0x22,0x65,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x22,0x2c,0x22,0x66,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x67,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x55,0x73,0x65,0x72,0x42,0x6c,0x6f,0x63,0x6b,0x69,0x6e,0x67,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x68,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x69,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x4c,0x6f,0x77,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x6a,0x63,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x49,0x64,0x6c,0x65,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x6b,0x63,0x22,0x2c,0x22,0x6c,0x63,0x22,0x2c,0x22,0x6f,0x63,0x22,0x2c,0x22,0x4d,0x61,0x74,0x68,0x22,0x2c,0x22,0x63,0x6c,0x7a,0x33,0x32,0x22,0x2c,0x22,0x70,0x63,0x22,0x2c,0x22,0x71,0x63,0x22,0x2c,0x22,0x6c,0x6f,0x67,0x22,0x2c,0x22,0x4c,0x4e,0x32,0x22,0x2c,0x22,0x72,0x63,0x22,0x2c,0x22,0x73,0x63,0x22,0x2c,0x22,0x74,0x63,0x22,0x2c,0x22,0x75,0x63,0x22,0x2c,0x22,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x73,0x75,0x73,0x70,0x65,0x6e,0x64,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x70,0x69,0x6e,0x67,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x65,0x6e,0x74,0x61,0x6e,0x67,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x22,0x2c,0x22,0x76,0x63,0x22,0x2c,0x22,0x78,0x63,0x22,0x2c,0x22,0x79,0x63,0x22,0x2c,0x22,0x7a,0x63,0x22,0x2c,0x22,0x41,0x63,0x22,0x2c,0x22,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x73,0x22,0x2c,0x22,0x43,0x63,0x22,0x2c,0x22,0x43,0x22,0x2c,0x22,0x44,0x63,0x22,0x2c,0x22,0x45,0x63,0x22,0x2c,0x22,0x46,0x63,0x22,0x2c,0x22,0x47,0x63,0x22,0x2c,0x22,0x48,0x63,0x22,0x2c,0x22,0x49,0x63,0x22,0x2c,0x22,0x4a,0x63,0x22,0x2c,0x22,0x4b,0x63,0x22,0x2c,0x22,0x4c,0x63,0x22,0x2c,0x22,0x4d,0x63,0x22,0x2c,0x22,0x4e,0x63,0x22,0x2c,0x22,0x4f,0x63,0x22,0x2c,0x22,0x4d,0x61,0x70,0x22,0x2c,0x22,0x50,0x63,0x22,0x2c,0x22,0x51,0x63,0x22,0x2c,0x22,0x52,0x63,0x22,0x2c,0x22,0x53,0x63,0x22,0x2c,0x22,0x64,0x65,0x6c,0x65,0x74,0x65,0x22,0x2c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x49,0x64,0x22,0x2c,0x22,0x54,0x63,0x22,0x2c,0x22,0x6e,0x61,0x74,0x69,0x76,0x65,0x45,0x76,0x65,0x6e,0x74,0x22,0x2c,0x22,0x62,0x6c,0x6f,0x63,0x6b,0x65,0x64,0x4f,0x6e,0x22,0x2c,0x22,0x64,0x6f,0x6d,0x45,0x76,0x65,0x6e,0x74,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x65,0x76,0x65,0x6e,0x74,0x53,0x79,0x73,0x74,0x65,0x6d,0x46,0x6c,0x61,0x67,0x73,0x22,0x2c,0x22,0x74,0x61,0x72,0x67,0x65,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x73,0x22,0x2c,0x22,0x56,0x63,0x22,0x2c,0x22,0x57,0x63,0x22,0x2c,0x22,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x69,0x73,0x44,0x65,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x49,0x6e,0x66,0x6f,0x22,0x2c,0x22,0x58,0x63,0x22,0x2c,0x22,0x59,0x63,0x22,0x2c,0x22,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x22,0x2c,0x22,0x73,0x68,0x69,0x66,0x74,0x22,0x2c,0x22,0x5a,0x63,0x22,0x2c,0x22,0x24,0x63,0x22,0x2c,0x22,0x61,0x64,0x22,0x2c,0x22,0x62,0x64,0x22,0x2c,0x22,0x63,0x64,0x22,0x2c,0x22,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x42,0x61,0x74,0x63,0x68,0x43,0x6f,0x6e,0x66,0x69,0x67,0x22,0x2c,0x22,0x64,0x64,0x22,0x2c,0x22,0x65,0x64,0x22,0x2c,0x22,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x66,0x64,0x22,0x2c,0x22,0x67,0x64,0x22,0x2c,0x22,0x68,0x64,0x22,0x2c,0x22,0x69,0x64,0x22,0x2c,0x22,0x55,0x63,0x22,0x2c,0x22,0x73,0x74,0x6f,0x70,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x6a,0x64,0x22,0x2c,0x22,0x6b,0x64,0x22,0x2c,0x22,0x6c,0x64,0x22,0x2c,0x22,0x6d,0x64,0x22,0x2c,0x22,0x6e,0x64,0x22,0x2c,0x22,0x6f,0x64,0x22,0x2c,0x22,0x6b,0x65,0x79,0x43,0x6f,0x64,0x65,0x22,0x2c,0x22,0x63,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x22,0x2c,0x22,0x70,0x64,0x22,0x2c,0x22,0x71,0x64,0x22,0x2c,0x22,0x72,0x64,0x22,0x2c,0x22,0x5f,0x72,0x65,0x61,0x63,0x74,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x5f,0x74,0x61,0x72,0x67,0x65,0x74,0x49,0x6e,0x73,0x74,0x22,0x2c,0x22,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x54,0x61,0x72,0x67,0x65,0x74,0x22,0x2c,0x22,0x69,0x73,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x22,0x2c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x65,0x76,0x65,0x6e,0x74,0x65,0x64,0x22,0x2c,0x22,0x72,0x65,0x74,0x75,0x72,0x6e,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x69,0x73,0x50,0x72,0x6f,0x70,0x61,0x67,0x61,0x74,0x69,0x6f,0x6e,0x53,0x74,0x6f,0x70,0x70,0x65,0x64,0x22,0x2c,0x22,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x44,0x65,0x66,0x61,0x75,0x6c,0x74,0x22,0x2c,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x42,0x75,0x62,0x62,0x6c,0x65,0x22,0x2c,0x22,0x70,0x65,0x72,0x73,0x69,0x73,0x74,0x22,0x2c,0x22,0x69,0x73,0x50,0x65,0x72,0x73,0x69,0x73,0x74,0x65,0x6e,0x74,0x22,0x2c,0x22,0x77,0x64,0x22,0x2c,0x22,0x78,0x64,0x22,0x2c,0x22,0x79,0x64,0x22,0x2c,0x22,0x73,0x64,0x22,0x2c,0x22,0x65,0x76,0x65,0x6e,0x74,0x50,0x68,0x61,0x73,0x65,0x22,0x2c,0x22,0x62,0x75,0x62,0x62,0x6c,0x65,0x73,0x22,0x2c,0x22,0x63,0x61,0x6e,0x63,0x65,0x6c,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x74,0x69,0x6d,0x65,0x53,0x74,0x61,0x6d,0x70,0x22,0x2c,0x22,0x44,0x61,0x74,0x65,0x22,0x2c,0x22,0x6e,0x6f,0x77,0x22,0x2c,0x22,0x69,0x73,0x54,0x72,0x75,0x73,0x74,0x65,0x64,0x22,0x2c,0x22,0x74,0x64,0x22,0x2c,0x22,0x75,0x64,0x22,0x2c,0x22,0x76,0x69,0x65,0x77,0x22,0x2c,0x22,0x64,0x65,0x74,0x61,0x69,0x6c,0x22,0x2c,0x22,0x76,0x64,0x22,0x2c,0x22,0x41,0x64,0x22,0x2c,0x22,0x73,0x63,0x72,0x65,0x65,0x6e,0x58,0x22,0x2c,0x22,0x73,0x63,0x72,0x65,0x65,0x6e,0x59,0x22,0x2c,0x22,0x63,0x6c,0x69,0x65,0x6e,0x74,0x58,0x22,0x2c,0x22,0x63,0x6c,0x69,0x65,0x6e,0x74,0x59,0x22,0x2c,0x22,0x70,0x61,0x67,0x65,0x58,0x22,0x2c,0x22,0x70,0x61,0x67,0x65,0x59,0x22,0x2c,0x22,0x63,0x74,0x72,0x6c,0x4b,0x65,0x79,0x22,0x2c,0x22,0x73,0x68,0x69,0x66,0x74,0x4b,0x65,0x79,0x22,0x2c,0x22,0x61,0x6c,0x74,0x4b,0x65,0x79,0x22,0x2c,0x22,0x6d,0x65,0x74,0x61,0x4b,0x65,0x79,0x22,0x2c,0x22,0x67,0x65,0x74,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x7a,0x64,0x22,0x2c,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x2c,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x73,0x22,0x2c,0x22,0x72,0x65,0x6c,0x61,0x74,0x65,0x64,0x54,0x61,0x72,0x67,0x65,0x74,0x22,0x2c,0x22,0x66,0x72,0x6f,0x6d,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x74,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x58,0x22,0x2c,0x22,0x6d,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x59,0x22,0x2c,0x22,0x42,0x64,0x22,0x2c,0x22,0x44,0x64,0x22,0x2c,0x22,0x64,0x61,0x74,0x61,0x54,0x72,0x61,0x6e,0x73,0x66,0x65,0x72,0x22,0x2c,0x22,0x46,0x64,0x22,0x2c,0x22,0x48,0x64,0x22,0x2c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x65,0x6c,0x61,0x70,0x73,0x65,0x64,0x54,0x69,0x6d,0x65,0x22,0x2c,0x22,0x70,0x73,0x65,0x75,0x64,0x6f,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x49,0x64,0x22,0x2c,0x22,0x63,0x6c,0x69,0x70,0x62,0x6f,0x61,0x72,0x64,0x44,0x61,0x74,0x61,0x22,0x2c,0x22,0x4a,0x64,0x22,0x2c,0x22,0x4c,0x64,0x22,0x2c,0x22,0x64,0x61,0x74,0x61,0x22,0x2c,0x22,0x4d,0x64,0x22,0x2c,0x22,0x45,0x73,0x63,0x22,0x2c,0x22,0x53,0x70,0x61,0x63,0x65,0x62,0x61,0x72,0x22,0x2c,0x22,0x4c,0x65,0x66,0x74,0x22,0x2c,0x22,0x55,0x70,0x22,0x2c,0x22,0x52,0x69,0x67,0x68,0x74,0x22,0x2c,0x22,0x44,0x6f,0x77,0x6e,0x22,0x2c,0x22,0x44,0x65,0x6c,0x22,0x2c,0x22,0x57,0x69,0x6e,0x22,0x2c,0x22,0x4d,0x65,0x6e,0x75,0x22,0x2c,0x22,0x41,0x70,0x70,0x73,0x22,0x2c,0x22,0x53,0x63,0x72,0x6f,0x6c,0x6c,0x22,0x2c,0x22,0x4d,0x6f,0x7a,0x50,0x72,0x69,0x6e,0x74,0x61,0x62,0x6c,0x65,0x4b,0x65,0x79,0x22,0x2c,0x22,0x4e,0x64,0x22,0x2c,0x22,0x4f,0x64,0x22,0x2c,0x22,0x41,0x6c,0x74,0x22,0x2c,0x22,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x22,0x2c,0x22,0x4d,0x65,0x74,0x61,0x22,0x2c,0x22,0x53,0x68,0x69,0x66,0x74,0x22,0x2c,0x22,0x50,0x64,0x22,0x2c,0x22,0x51,0x64,0x22,0x2c,0x22,0x6b,0x65,0x79,0x22,0x2c,0x22,0x53,0x74,0x72,0x69,0x6e,0x67,0x22,0x2c,0x22,0x66,0x72,0x6f,0x6d,0x43,0x68,0x61,0x72,0x43,0x6f,0x64,0x65,0x22,0x2c,0x22,0x63,0x6f,0x64,0x65,0x22,0x2c,0x22,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x72,0x65,0x70,0x65,0x61,0x74,0x22,0x2c,0x22,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x22,0x2c,0x22,0x77,0x68,0x69,0x63,0x68,0x22,0x2c,0x22,0x52,0x64,0x22,0x2c,0x22,0x54,0x64,0x22,0x2c,0x22,0x77,0x69,0x64,0x74,0x68,0x22,0x2c,0x22,0x68,0x65,0x69,0x67,0x68,0x74,0x22,0x2c,0x22,0x70,0x72,0x65,0x73,0x73,0x75,0x72,0x65,0x22,0x2c,0x22,0x74,0x61,0x6e,0x67,0x65,0x6e,0x74,0x69,0x61,0x6c,0x50,0x72,0x65,0x73,0x73,0x75,0x72,0x65,0x22,0x2c,0x22,0x74,0x69,0x6c,0x74,0x58,0x22,0x2c,0x22,0x74,0x69,0x6c,0x74,0x59,0x22,0x2c,0x22,0x74,0x77,0x69,0x73,0x74,0x22,0x2c,0x22,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x69,0x73,0x50,0x72,0x69,0x6d,0x61,0x72,0x79,0x22,0x2c,0x22,0x56,0x64,0x22,0x2c,0x22,0x74,0x6f,0x75,0x63,0x68,0x65,0x73,0x22,0x2c,0x22,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x6f,0x75,0x63,0x68,0x65,0x73,0x22,0x2c,0x22,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x54,0x6f,0x75,0x63,0x68,0x65,0x73,0x22,0x2c,0x22,0x58,0x64,0x22,0x2c,0x22,0x59,0x64,0x22,0x2c,0x22,0x64,0x65,0x6c,0x74,0x61,0x58,0x22,0x2c,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x58,0x22,0x2c,0x22,0x64,0x65,0x6c,0x74,0x61,0x59,0x22,0x2c,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x59,0x22,0x2c,0x22,0x77,0x68,0x65,0x65,0x6c,0x44,0x65,0x6c,0x74,0x61,0x22,0x2c,0x22,0x64,0x65,0x6c,0x74,0x61,0x5a,0x22,0x2c,0x22,0x64,0x65,0x6c,0x74,0x61,0x4d,0x6f,0x64,0x65,0x22,0x2c,0x22,0x5a,0x64,0x22,0x2c,0x22,0x24,0x64,0x22,0x2c,0x22,0x61,0x65,0x22,0x2c,0x22,0x62,0x65,0x22,0x2c,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x4d,0x6f,0x64,0x65,0x22,0x2c,0x22,0x63,0x65,0x22,0x2c,0x22,0x64,0x65,0x22,0x2c,0x22,0x65,0x65,0x22,0x2c,0x22,0x66,0x65,0x22,0x2c,0x22,0x67,0x65,0x22,0x2c,0x22,0x68,0x65,0x22,0x2c,0x22,0x69,0x65,0x22,0x2c,0x22,0x6c,0x65,0x22,0x2c,0x22,0x63,0x6f,0x6c,0x6f,0x72,0x22,0x2c,0x22,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x64,0x61,0x74,0x65,0x74,0x69,0x6d,0x65,0x22,0x2c,0x22,0x65,0x6d,0x61,0x69,0x6c,0x22,0x2c,0x22,0x6d,0x6f,0x6e,0x74,0x68,0x22,0x2c,0x22,0x6e,0x75,0x6d,0x62,0x65,0x72,0x22,0x2c,0x22,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x22,0x2c,0x22,0x72,0x61,0x6e,0x67,0x65,0x22,0x2c,0x22,0x73,0x65,0x61,0x72,0x63,0x68,0x22,0x2c,0x22,0x74,0x65,0x6c,0x22,0x2c,0x22,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x74,0x69,0x6d,0x65,0x22,0x2c,0x22,0x75,0x72,0x6c,0x22,0x2c,0x22,0x77,0x65,0x65,0x6b,0x22,0x2c,0x22,0x6d,0x65,0x22,0x2c,0x22,0x6e,0x65,0x22,0x2c,0x22,0x6f,0x65,0x22,0x2c,0x22,0x65,0x76,0x65,0x6e,0x74,0x22,0x2c,0x22,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x73,0x22,0x2c,0x22,0x70,0x65,0x22,0x2c,0x22,0x71,0x65,0x22,0x2c,0x22,0x72,0x65,0x22,0x2c,0x22,0x73,0x65,0x22,0x2c,0x22,0x74,0x65,0x22,0x2c,0x22,0x75,0x65,0x22,0x2c,0x22,0x76,0x65,0x22,0x2c,0x22,0x77,0x65,0x22,0x2c,0x22,0x78,0x65,0x22,0x2c,0x22,0x79,0x65,0x22,0x2c,0x22,0x7a,0x65,0x22,0x2c,0x22,0x6f,0x6e,0x69,0x6e,0x70,0x75,0x74,0x22,0x2c,0x22,0x41,0x65,0x22,0x2c,0x22,0x64,0x65,0x74,0x61,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x22,0x2c,0x22,0x42,0x65,0x22,0x2c,0x22,0x43,0x65,0x22,0x2c,0x22,0x61,0x74,0x74,0x61,0x63,0x68,0x45,0x76,0x65,0x6e,0x74,0x22,0x2c,0x22,0x44,0x65,0x22,0x2c,0x22,0x45,0x65,0x22,0x2c,0x22,0x46,0x65,0x22,0x2c,0x22,0x48,0x65,0x22,0x2c,0x22,0x49,0x65,0x22,0x2c,0x22,0x4a,0x65,0x22,0x2c,0x22,0x4b,0x65,0x22,0x2c,0x22,0x6e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x6f,0x66,0x66,0x73,0x65,0x74,0x22,0x2c,0x22,0x6e,0x65,0x78,0x74,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x22,0x2c,0x22,0x4c,0x65,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x73,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x4d,0x65,0x22,0x2c,0x22,0x48,0x54,0x4d,0x4c,0x49,0x46,0x72,0x61,0x6d,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x22,0x2c,0x22,0x68,0x72,0x65,0x66,0x22,0x2c,0x22,0x4e,0x65,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x45,0x64,0x69,0x74,0x61,0x62,0x6c,0x65,0x22,0x2c,0x22,0x4f,0x65,0x22,0x2c,0x22,0x66,0x6f,0x63,0x75,0x73,0x65,0x64,0x45,0x6c,0x65,0x6d,0x22,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x52,0x61,0x6e,0x67,0x65,0x22,0x2c,0x22,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x73,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x65,0x6e,0x64,0x22,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x45,0x6e,0x64,0x22,0x2c,0x22,0x6d,0x69,0x6e,0x22,0x2c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x69,0x65,0x77,0x22,0x2c,0x22,0x67,0x65,0x74,0x53,0x65,0x6c,0x65,0x63,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x65,0x78,0x74,0x65,0x6e,0x64,0x22,0x2c,0x22,0x72,0x61,0x6e,0x67,0x65,0x43,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x61,0x6e,0x63,0x68,0x6f,0x72,0x4f,0x66,0x66,0x73,0x65,0x74,0x22,0x2c,0x22,0x66,0x6f,0x63,0x75,0x73,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x66,0x6f,0x63,0x75,0x73,0x4f,0x66,0x66,0x73,0x65,0x74,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x61,0x6e,0x67,0x65,0x22,0x2c,0x22,0x73,0x65,0x74,0x53,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x72,0x65,0x6d,0x6f,0x76,0x65,0x41,0x6c,0x6c,0x52,0x61,0x6e,0x67,0x65,0x73,0x22,0x2c,0x22,0x61,0x64,0x64,0x52,0x61,0x6e,0x67,0x65,0x22,0x2c,0x22,0x73,0x65,0x74,0x45,0x6e,0x64,0x22,0x2c,0x22,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x6c,0x65,0x66,0x74,0x22,0x2c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x4c,0x65,0x66,0x74,0x22,0x2c,0x22,0x74,0x6f,0x70,0x22,0x2c,0x22,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x54,0x6f,0x70,0x22,0x2c,0x22,0x66,0x6f,0x63,0x75,0x73,0x22,0x2c,0x22,0x50,0x65,0x22,0x2c,0x22,0x51,0x65,0x22,0x2c,0x22,0x52,0x65,0x22,0x2c,0x22,0x53,0x65,0x22,0x2c,0x22,0x54,0x65,0x22,0x2c,0x22,0x55,0x65,0x22,0x2c,0x22,0x56,0x65,0x22,0x2c,0x22,0x57,0x65,0x22,0x2c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x2c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x69,0x74,0x65,0x72,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x73,0x74,0x61,0x72,0x74,0x22,0x2c,0x22,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x6e,0x64,0x22,0x2c,0x22,0x58,0x65,0x22,0x2c,0x22,0x59,0x65,0x22,0x2c,0x22,0x5a,0x65,0x22,0x2c,0x22,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x24,0x65,0x22,0x2c,0x22,0x61,0x66,0x22,0x2c,0x22,0x62,0x66,0x22,0x2c,0x22,0x63,0x66,0x22,0x2c,0x22,0x64,0x66,0x22,0x2c,0x22,0x65,0x66,0x22,0x2c,0x22,0x66,0x66,0x22,0x2c,0x22,0x67,0x66,0x22,0x2c,0x22,0x68,0x66,0x22,0x2c,0x22,0x6c,0x66,0x22,0x2c,0x22,0x6d,0x66,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x63,0x61,0x74,0x22,0x2c,0x22,0x6e,0x66,0x22,0x2c,0x22,0x55,0x62,0x22,0x2c,0x22,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x22,0x2c,0x22,0x6c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x22,0x2c,0x22,0x44,0x22,0x2c,0x22,0x6f,0x66,0x22,0x2c,0x22,0x68,0x61,0x73,0x22,0x2c,0x22,0x70,0x66,0x22,0x2c,0x22,0x71,0x66,0x22,0x2c,0x22,0x72,0x66,0x22,0x2c,0x22,0x72,0x61,0x6e,0x64,0x6f,0x6d,0x22,0x2c,0x22,0x73,0x66,0x22,0x2c,0x22,0x62,0x69,0x6e,0x64,0x22,0x2c,0x22,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x22,0x2c,0x22,0x70,0x61,0x73,0x73,0x69,0x76,0x65,0x22,0x2c,0x22,0x6e,0x22,0x2c,0x22,0x74,0x22,0x2c,0x22,0x4a,0x22,0x2c,0x22,0x78,0x22,0x2c,0x22,0x75,0x22,0x2c,0x22,0x77,0x22,0x2c,0x22,0x46,0x22,0x2c,0x22,0x74,0x66,0x22,0x2c,0x22,0x75,0x66,0x22,0x2c,0x22,0x70,0x61,0x72,0x65,0x6e,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x22,0x2c,0x22,0x76,0x66,0x22,0x2c,0x22,0x77,0x66,0x22,0x2c,0x22,0x6e,0x61,0x22,0x2c,0x22,0x78,0x61,0x22,0x2c,0x22,0x24,0x61,0x22,0x2c,0x22,0x62,0x61,0x22,0x2c,0x22,0x6a,0x65,0x22,0x2c,0x22,0x63,0x68,0x61,0x72,0x22,0x2c,0x22,0x6b,0x65,0x22,0x2c,0x22,0x75,0x6e,0x73,0x68,0x69,0x66,0x74,0x22,0x2c,0x22,0x78,0x66,0x22,0x2c,0x22,0x79,0x66,0x22,0x2c,0x22,0x7a,0x66,0x22,0x2c,0x22,0x41,0x66,0x22,0x2c,0x22,0x42,0x66,0x22,0x2c,0x22,0x43,0x66,0x22,0x2c,0x22,0x44,0x66,0x22,0x2c,0x22,0x45,0x66,0x22,0x2c,0x22,0x5f,0x5f,0x68,0x74,0x6d,0x6c,0x22,0x2c,0x22,0x46,0x66,0x22,0x2c,0x22,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x22,0x2c,0x22,0x47,0x66,0x22,0x2c,0x22,0x63,0x6c,0x65,0x61,0x72,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x22,0x2c,0x22,0x48,0x66,0x22,0x2c,0x22,0x50,0x72,0x6f,0x6d,0x69,0x73,0x65,0x22,0x2c,0x22,0x4a,0x66,0x22,0x2c,0x22,0x71,0x75,0x65,0x75,0x65,0x4d,0x69,0x63,0x72,0x6f,0x74,0x61,0x73,0x6b,0x22,0x2c,0x22,0x72,0x65,0x73,0x6f,0x6c,0x76,0x65,0x22,0x2c,0x22,0x74,0x68,0x65,0x6e,0x22,0x2c,0x22,0x63,0x61,0x74,0x63,0x68,0x22,0x2c,0x22,0x49,0x66,0x22,0x2c,0x22,0x4b,0x66,0x22,0x2c,0x22,0x4c,0x66,0x22,0x2c,0x22,0x4d,0x66,0x22,0x2c,0x22,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x53,0x69,0x62,0x6c,0x69,0x6e,0x67,0x22,0x2c,0x22,0x4e,0x66,0x22,0x2c,0x22,0x4f,0x66,0x22,0x2c,0x22,0x50,0x66,0x22,0x2c,0x22,0x51,0x66,0x22,0x2c,0x22,0x52,0x66,0x22,0x2c,0x22,0x53,0x66,0x22,0x2c,0x22,0x54,0x66,0x22,0x2c,0x22,0x55,0x66,0x22,0x2c,0x22,0x45,0x22,0x2c,0x22,0x47,0x22,0x2c,0x22,0x56,0x66,0x22,0x2c,0x22,0x48,0x22,0x2c,0x22,0x57,0x66,0x22,0x2c,0x22,0x58,0x66,0x22,0x2c,0x22,0x59,0x66,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x22,0x2c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x55,0x6e,0x6d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x61,0x73,0x6b,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x5a,0x66,0x22,0x2c,0x22,0x63,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x73,0x22,0x2c,0x22,0x24,0x66,0x22,0x2c,0x22,0x61,0x67,0x22,0x2c,0x22,0x62,0x67,0x22,0x2c,0x22,0x67,0x65,0x74,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x63,0x67,0x22,0x2c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x4d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x4d,0x65,0x72,0x67,0x65,0x64,0x43,0x68,0x69,0x6c,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x64,0x67,0x22,0x2c,0x22,0x65,0x67,0x22,0x2c,0x22,0x66,0x67,0x22,0x2c,0x22,0x67,0x67,0x22,0x2c,0x22,0x68,0x67,0x22,0x2c,0x22,0x6a,0x67,0x22,0x2c,0x22,0x6b,0x67,0x22,0x2c,0x22,0x6c,0x67,0x22,0x2c,0x22,0x6d,0x67,0x22,0x2c,0x22,0x6e,0x67,0x22,0x2c,0x22,0x6f,0x67,0x22,0x2c,0x22,0x70,0x67,0x22,0x2c,0x22,0x71,0x67,0x22,0x2c,0x22,0x72,0x67,0x22,0x2c,0x22,0x73,0x67,0x22,0x2c,0x22,0x74,0x67,0x22,0x2c,0x22,0x75,0x67,0x22,0x2c,0x22,0x76,0x67,0x22,0x2c,0x22,0x77,0x67,0x22,0x2c,0x22,0x78,0x67,0x22,0x2c,0x22,0x79,0x67,0x22,0x2c,0x22,0x49,0x22,0x2c,0x22,0x7a,0x67,0x22,0x2c,0x22,0x41,0x67,0x22,0x2c,0x22,0x42,0x67,0x22,0x2c,0x22,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x64,0x65,0x6c,0x65,0x74,0x69,0x6f,0x6e,0x73,0x22,0x2c,0x22,0x43,0x67,0x22,0x2c,0x22,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x50,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x22,0x2c,0x22,0x74,0x72,0x65,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x72,0x65,0x74,0x72,0x79,0x4c,0x61,0x6e,0x65,0x22,0x2c,0x22,0x44,0x67,0x22,0x2c,0x22,0x6d,0x6f,0x64,0x65,0x22,0x2c,0x22,0x45,0x67,0x22,0x2c,0x22,0x46,0x67,0x22,0x2c,0x22,0x47,0x67,0x22,0x2c,0x22,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x50,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x48,0x67,0x22,0x2c,0x22,0x49,0x67,0x22,0x2c,0x22,0x4a,0x67,0x22,0x2c,0x22,0x4b,0x67,0x22,0x2c,0x22,0x4c,0x67,0x22,0x2c,0x22,0x72,0x65,0x66,0x22,0x2c,0x22,0x5f,0x6f,0x77,0x6e,0x65,0x72,0x22,0x2c,0x22,0x5f,0x73,0x74,0x72,0x69,0x6e,0x67,0x52,0x65,0x66,0x22,0x2c,0x22,0x72,0x65,0x66,0x73,0x22,0x2c,0x22,0x4d,0x67,0x22,0x2c,0x22,0x6a,0x6f,0x69,0x6e,0x22,0x2c,0x22,0x4e,0x67,0x22,0x2c,0x22,0x4f,0x67,0x22,0x2c,0x22,0x69,0x6e,0x64,0x65,0x78,0x22,0x2c,0x22,0x50,0x67,0x22,0x2c,0x22,0x51,0x67,0x22,0x2c,0x22,0x70,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x52,0x67,0x22,0x2c,0x22,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x53,0x67,0x22,0x2c,0x22,0x54,0x67,0x22,0x2c,0x22,0x71,0x22,0x2c,0x22,0x72,0x22,0x2c,0x22,0x79,0x22,0x2c,0x22,0x6e,0x65,0x78,0x74,0x22,0x2c,0x22,0x64,0x6f,0x6e,0x65,0x22,0x2c,0x22,0x55,0x67,0x22,0x2c,0x22,0x56,0x67,0x22,0x2c,0x22,0x57,0x67,0x22,0x2c,0x22,0x58,0x67,0x22,0x2c,0x22,0x59,0x67,0x22,0x2c,0x22,0x5a,0x67,0x22,0x2c,0x22,0x24,0x67,0x22,0x2c,0x22,0x61,0x68,0x22,0x2c,0x22,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x62,0x68,0x22,0x2c,0x22,0x63,0x68,0x69,0x6c,0x64,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x63,0x68,0x22,0x2c,0x22,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x69,0x65,0x73,0x22,0x2c,0x22,0x66,0x69,0x72,0x73,0x74,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x6c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x64,0x68,0x22,0x2c,0x22,0x65,0x68,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x6d,0x65,0x6d,0x6f,0x69,0x7a,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x66,0x68,0x22,0x2c,0x22,0x67,0x68,0x22,0x2c,0x22,0x68,0x68,0x22,0x2c,0x22,0x69,0x6e,0x74,0x65,0x72,0x6c,0x65,0x61,0x76,0x65,0x64,0x22,0x2c,0x22,0x69,0x68,0x22,0x2c,0x22,0x6a,0x68,0x22,0x2c,0x22,0x6b,0x68,0x22,0x2c,0x22,0x75,0x70,0x64,0x61,0x74,0x65,0x51,0x75,0x65,0x75,0x65,0x22,0x2c,0x22,0x62,0x61,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x66,0x69,0x72,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x6c,0x61,0x73,0x74,0x42,0x61,0x73,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x73,0x68,0x61,0x72,0x65,0x64,0x22,0x2c,0x22,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x22,0x2c,0x22,0x65,0x66,0x66,0x65,0x63,0x74,0x73,0x22,0x2c,0x22,0x6c,0x68,0x22,0x2c,0x22,0x6d,0x68,0x22,0x2c,0x22,0x65,0x76,0x65,0x6e,0x74,0x54,0x69,0x6d,0x65,0x22,0x2c,0x22,0x6c,0x61,0x6e,0x65,0x22,0x2c,0x22,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x22,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x22,0x2c,0x22,0x6e,0x68,0x22,0x2c,0x22,0x4b,0x22,0x2c,0x22,0x6f,0x68,0x22,0x2c,0x22,0x70,0x68,0x22,0x2c,0x22,0x71,0x68,0x22,0x2c,0x22,0x72,0x68,0x22,0x2c,0x22,0x73,0x68,0x22,0x2c,0x22,0x74,0x68,0x22,0x2c,0x22,0x75,0x68,0x22,0x2c,0x22,0x76,0x68,0x22,0x2c,0x22,0x77,0x68,0x22,0x2c,0x22,0x78,0x68,0x22,0x2c,0x22,0x79,0x68,0x22,0x2c,0x22,0x74,0x61,0x67,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x7a,0x68,0x22,0x2c,0x22,0x41,0x68,0x22,0x2c,0x22,0x42,0x68,0x22,0x2c,0x22,0x4c,0x22,0x2c,0x22,0x43,0x68,0x22,0x2c,0x22,0x72,0x65,0x76,0x65,0x61,0x6c,0x4f,0x72,0x64,0x65,0x72,0x22,0x2c,0x22,0x44,0x68,0x22,0x2c,0x22,0x45,0x68,0x22,0x2c,0x22,0x5f,0x77,0x6f,0x72,0x6b,0x49,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x50,0x72,0x69,0x6d,0x61,0x72,0x79,0x22,0x2c,0x22,0x46,0x68,0x22,0x2c,0x22,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x22,0x2c,0x22,0x47,0x68,0x22,0x2c,0x22,0x48,0x68,0x22,0x2c,0x22,0x4d,0x22,0x2c,0x22,0x4e,0x22,0x2c,0x22,0x4f,0x22,0x2c,0x22,0x49,0x68,0x22,0x2c,0x22,0x4a,0x68,0x22,0x2c,0x22,0x4b,0x68,0x22,0x2c,0x22,0x4c,0x68,0x22,0x2c,0x22,0x50,0x22,0x2c,0x22,0x4d,0x68,0x22,0x2c,0x22,0x4e,0x68,0x22,0x2c,0x22,0x4f,0x68,0x22,0x2c,0x22,0x50,0x68,0x22,0x2c,0x22,0x51,0x68,0x22,0x2c,0x22,0x52,0x68,0x22,0x2c,0x22,0x53,0x68,0x22,0x2c,0x22,0x54,0x68,0x22,0x2c,0x22,0x62,0x61,0x73,0x65,0x51,0x75,0x65,0x75,0x65,0x22,0x2c,0x22,0x71,0x75,0x65,0x75,0x65,0x22,0x2c,0x22,0x55,0x68,0x22,0x2c,0x22,0x56,0x68,0x22,0x2c,0x22,0x57,0x68,0x22,0x2c,0x22,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x22,0x2c,0x22,0x61,0x63,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x68,0x61,0x73,0x45,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x65,0x61,0x67,0x65,0x72,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x6c,0x61,0x73,0x74,0x52,0x65,0x6e,0x64,0x65,0x72,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x64,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x22,0x2c,0x22,0x58,0x68,0x22,0x2c,0x22,0x59,0x68,0x22,0x2c,0x22,0x5a,0x68,0x22,0x2c,0x22,0x24,0x68,0x22,0x2c,0x22,0x61,0x69,0x22,0x2c,0x22,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x22,0x2c,0x22,0x62,0x69,0x22,0x2c,0x22,0x63,0x69,0x22,0x2c,0x22,0x51,0x22,0x2c,0x22,0x64,0x69,0x22,0x2c,0x22,0x6c,0x61,0x73,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x22,0x2c,0x22,0x73,0x74,0x6f,0x72,0x65,0x73,0x22,0x2c,0x22,0x65,0x69,0x22,0x2c,0x22,0x66,0x69,0x22,0x2c,0x22,0x67,0x69,0x22,0x2c,0x22,0x68,0x69,0x22,0x2c,0x22,0x69,0x69,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x22,0x2c,0x22,0x64,0x65,0x73,0x74,0x72,0x6f,0x79,0x22,0x2c,0x22,0x64,0x65,0x70,0x73,0x22,0x2c,0x22,0x6a,0x69,0x22,0x2c,0x22,0x6b,0x69,0x22,0x2c,0x22,0x6c,0x69,0x22,0x2c,0x22,0x6d,0x69,0x22,0x2c,0x22,0x6e,0x69,0x22,0x2c,0x22,0x6f,0x69,0x22,0x2c,0x22,0x70,0x69,0x22,0x2c,0x22,0x71,0x69,0x22,0x2c,0x22,0x72,0x69,0x22,0x2c,0x22,0x73,0x69,0x22,0x2c,0x22,0x74,0x69,0x22,0x2c,0x22,0x75,0x69,0x22,0x2c,0x22,0x76,0x69,0x22,0x2c,0x22,0x77,0x69,0x22,0x2c,0x22,0x78,0x69,0x22,0x2c,0x22,0x79,0x69,0x22,0x2c,0x22,0x7a,0x69,0x22,0x2c,0x22,0x41,0x69,0x22,0x2c,0x22,0x52,0x22,0x2c,0x22,0x42,0x69,0x22,0x2c,0x22,0x72,0x65,0x61,0x64,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x75,0x73,0x65,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x22,0x2c,0x22,0x75,0x73,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x75,0x73,0x65,0x45,0x66,0x66,0x65,0x63,0x74,0x22,0x2c,0x22,0x75,0x73,0x65,0x49,0x6d,0x70,0x65,0x72,0x61,0x74,0x69,0x76,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x22,0x2c,0x22,0x75,0x73,0x65,0x49,0x6e,0x73,0x65,0x72,0x74,0x69,0x6f,0x6e,0x45,0x66,0x66,0x65,0x63,0x74,0x22,0x2c,0x22,0x75,0x73,0x65,0x4c,0x61,0x79,0x6f,0x75,0x74,0x45,0x66,0x66,0x65,0x63,0x74,0x22,0x2c,0x22,0x75,0x73,0x65,0x4d,0x65,0x6d,0x6f,0x22,0x2c,0x22,0x75,0x73,0x65,0x52,0x65,0x64,0x75,0x63,0x65,0x72,0x22,0x2c,0x22,0x75,0x73,0x65,0x52,0x65,0x66,0x22,0x2c,0x22,0x75,0x73,0x65,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x75,0x73,0x65,0x44,0x65,0x62,0x75,0x67,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x75,0x73,0x65,0x44,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x75,0x73,0x65,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x75,0x73,0x65,0x4d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x22,0x2c,0x22,0x75,0x73,0x65,0x53,0x79,0x6e,0x63,0x45,0x78,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x74,0x6f,0x72,0x65,0x22,0x2c,0x22,0x75,0x73,0x65,0x49,0x64,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x69,0x73,0x4e,0x65,0x77,0x52,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x22,0x2c,0x22,0x69,0x64,0x65,0x6e,0x74,0x69,0x66,0x69,0x65,0x72,0x50,0x72,0x65,0x66,0x69,0x78,0x22,0x2c,0x22,0x43,0x69,0x22,0x2c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x50,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x44,0x69,0x22,0x2c,0x22,0x45,0x69,0x22,0x2c,0x22,0x69,0x73,0x4d,0x6f,0x75,0x6e,0x74,0x65,0x64,0x22,0x2c,0x22,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x73,0x22,0x2c,0x22,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x53,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x52,0x65,0x70,0x6c,0x61,0x63,0x65,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x65,0x6e,0x71,0x75,0x65,0x75,0x65,0x46,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x46,0x69,0x22,0x2c,0x22,0x73,0x68,0x6f,0x75,0x6c,0x64,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x69,0x73,0x50,0x75,0x72,0x65,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x22,0x2c,0x22,0x47,0x69,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x73,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x75,0x70,0x64,0x61,0x74,0x65,0x72,0x22,0x2c,0x22,0x48,0x69,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0x50,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x49,0x69,0x22,0x2c,0x22,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x50,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x67,0x65,0x74,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x4d,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x4d,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x4a,0x69,0x22,0x2c,0x22,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x22,0x2c,0x22,0x64,0x69,0x67,0x65,0x73,0x74,0x22,0x2c,0x22,0x4b,0x69,0x22,0x2c,0x22,0x4c,0x69,0x22,0x2c,0x22,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x22,0x2c,0x22,0x65,0x72,0x72,0x6f,0x72,0x22,0x2c,0x22,0x4d,0x69,0x22,0x2c,0x22,0x57,0x65,0x61,0x6b,0x4d,0x61,0x70,0x22,0x2c,0x22,0x4e,0x69,0x22,0x2c,0x22,0x4f,0x69,0x22,0x2c,0x22,0x50,0x69,0x22,0x2c,0x22,0x51,0x69,0x22,0x2c,0x22,0x67,0x65,0x74,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x53,0x74,0x61,0x74,0x65,0x46,0x72,0x6f,0x6d,0x45,0x72,0x72,0x6f,0x72,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x43,0x61,0x74,0x63,0x68,0x22,0x2c,0x22,0x52,0x69,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x53,0x74,0x61,0x63,0x6b,0x22,0x2c,0x22,0x53,0x69,0x22,0x2c,0x22,0x70,0x69,0x6e,0x67,0x43,0x61,0x63,0x68,0x65,0x22,0x2c,0x22,0x54,0x69,0x22,0x2c,0x22,0x55,0x69,0x22,0x2c,0x22,0x56,0x69,0x22,0x2c,0x22,0x57,0x69,0x22,0x2c,0x22,0x52,0x65,0x61,0x63,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4f,0x77,0x6e,0x65,0x72,0x22,0x2c,0x22,0x58,0x69,0x22,0x2c,0x22,0x59,0x69,0x22,0x2c,0x22,0x5a,0x69,0x22,0x2c,0x22,0x24,0x69,0x22,0x2c,0x22,0x61,0x6a,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x61,0x72,0x65,0x22,0x2c,0x22,0x62,0x6a,0x22,0x2c,0x22,0x63,0x6a,0x22,0x2c,0x22,0x64,0x6a,0x22,0x2c,0x22,0x62,0x61,0x73,0x65,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x63,0x61,0x63,0x68,0x65,0x50,0x6f,0x6f,0x6c,0x22,0x2c,0x22,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x22,0x2c,0x22,0x65,0x6a,0x22,0x2c,0x22,0x66,0x6a,0x22,0x2c,0x22,0x67,0x6a,0x22,0x2c,0x22,0x68,0x6a,0x22,0x2c,0x22,0x69,0x6a,0x22,0x2c,0x22,0x55,0x4e,0x53,0x41,0x46,0x45,0x5f,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x44,0x69,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x6a,0x6a,0x22,0x2c,0x22,0x6b,0x6a,0x22,0x2c,0x22,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x6c,0x6a,0x22,0x2c,0x22,0x7a,0x6a,0x22,0x2c,0x22,0x41,0x6a,0x22,0x2c,0x22,0x42,0x6a,0x22,0x2c,0x22,0x43,0x6a,0x22,0x2c,0x22,0x6d,0x6a,0x22,0x2c,0x22,0x6e,0x6a,0x22,0x2c,0x22,0x6f,0x6a,0x22,0x2c,0x22,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x22,0x2c,0x22,0x70,0x6a,0x22,0x2c,0x22,0x71,0x6a,0x22,0x2c,0x22,0x73,0x6a,0x22,0x2c,0x22,0x64,0x61,0x74,0x61,0x73,0x65,0x74,0x22,0x2c,0x22,0x64,0x67,0x73,0x74,0x22,0x2c,0x22,0x74,0x6a,0x22,0x2c,0x22,0x75,0x6a,0x22,0x2c,0x22,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x65,0x74,0x72,0x79,0x22,0x2c,0x22,0x72,0x6a,0x22,0x2c,0x22,0x73,0x75,0x62,0x74,0x72,0x65,0x65,0x46,0x6c,0x61,0x67,0x73,0x22,0x2c,0x22,0x76,0x6a,0x22,0x2c,0x22,0x77,0x6a,0x22,0x2c,0x22,0x69,0x73,0x42,0x61,0x63,0x6b,0x77,0x61,0x72,0x64,0x73,0x22,0x2c,0x22,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x22,0x2c,0x22,0x72,0x65,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x53,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x22,0x2c,0x22,0x6c,0x61,0x73,0x74,0x22,0x2c,0x22,0x74,0x61,0x69,0x6c,0x22,0x2c,0x22,0x74,0x61,0x69,0x6c,0x4d,0x6f,0x64,0x65,0x22,0x2c,0x22,0x78,0x6a,0x22,0x2c,0x22,0x44,0x6a,0x22,0x2c,0x22,0x53,0x22,0x2c,0x22,0x45,0x6a,0x22,0x2c,0x22,0x46,0x6a,0x22,0x2c,0x22,0x77,0x61,0x73,0x4d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x2c,0x22,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x2c,0x22,0x73,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x57,0x61,0x72,0x6e,0x69,0x6e,0x67,0x22,0x2c,0x22,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x22,0x2c,0x22,0x6f,0x6e,0x63,0x6c,0x69,0x63,0x6b,0x22,0x2c,0x22,0x73,0x69,0x7a,0x65,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x4e,0x53,0x22,0x2c,0x22,0x61,0x75,0x74,0x6f,0x46,0x6f,0x63,0x75,0x73,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x54,0x65,0x78,0x74,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x54,0x22,0x2c,0x22,0x47,0x6a,0x22,0x2c,0x22,0x48,0x6a,0x22,0x2c,0x22,0x49,0x6a,0x22,0x2c,0x22,0x4a,0x6a,0x22,0x2c,0x22,0x55,0x22,0x2c,0x22,0x4b,0x6a,0x22,0x2c,0x22,0x57,0x65,0x61,0x6b,0x53,0x65,0x74,0x22,0x2c,0x22,0x56,0x22,0x2c,0x22,0x4c,0x6a,0x22,0x2c,0x22,0x57,0x22,0x2c,0x22,0x4d,0x6a,0x22,0x2c,0x22,0x4e,0x6a,0x22,0x2c,0x22,0x50,0x6a,0x22,0x2c,0x22,0x51,0x6a,0x22,0x2c,0x22,0x52,0x6a,0x22,0x2c,0x22,0x53,0x6a,0x22,0x2c,0x22,0x54,0x6a,0x22,0x2c,0x22,0x55,0x6a,0x22,0x2c,0x22,0x56,0x6a,0x22,0x2c,0x22,0x69,0x6e,0x73,0x65,0x72,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x22,0x2c,0x22,0x5f,0x72,0x65,0x61,0x63,0x74,0x52,0x6f,0x6f,0x74,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x22,0x2c,0x22,0x57,0x6a,0x22,0x2c,0x22,0x58,0x22,0x2c,0x22,0x58,0x6a,0x22,0x2c,0x22,0x59,0x6a,0x22,0x2c,0x22,0x5a,0x6a,0x22,0x2c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x57,0x69,0x6c,0x6c,0x55,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x61,0x6b,0x22,0x2c,0x22,0x62,0x6b,0x22,0x2c,0x22,0x63,0x6b,0x22,0x2c,0x22,0x64,0x6b,0x22,0x2c,0x22,0x65,0x6b,0x22,0x2c,0x22,0x69,0x73,0x48,0x69,0x64,0x64,0x65,0x6e,0x22,0x2c,0x22,0x66,0x6b,0x22,0x2c,0x22,0x67,0x6b,0x22,0x2c,0x22,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x22,0x2c,0x22,0x68,0x6b,0x22,0x2c,0x22,0x69,0x6b,0x22,0x2c,0x22,0x6a,0x6b,0x22,0x2c,0x22,0x6b,0x6b,0x22,0x2c,0x22,0x5f,0x5f,0x72,0x65,0x61,0x63,0x74,0x49,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x42,0x65,0x66,0x6f,0x72,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x73,0x72,0x63,0x22,0x2c,0x22,0x56,0x6b,0x22,0x2c,0x22,0x6c,0x6b,0x22,0x2c,0x22,0x63,0x65,0x69,0x6c,0x22,0x2c,0x22,0x6d,0x6b,0x22,0x2c,0x22,0x6e,0x6b,0x22,0x2c,0x22,0x6f,0x6b,0x22,0x2c,0x22,0x59,0x22,0x2c,0x22,0x5a,0x22,0x2c,0x22,0x70,0x6b,0x22,0x2c,0x22,0x71,0x6b,0x22,0x2c,0x22,0x72,0x6b,0x22,0x2c,0x22,0x73,0x6b,0x22,0x2c,0x22,0x74,0x6b,0x22,0x2c,0x22,0x49,0x6e,0x66,0x69,0x6e,0x69,0x74,0x79,0x22,0x2c,0x22,0x75,0x6b,0x22,0x2c,0x22,0x76,0x6b,0x22,0x2c,0x22,0x77,0x6b,0x22,0x2c,0x22,0x78,0x6b,0x22,0x2c,0x22,0x79,0x6b,0x22,0x2c,0x22,0x7a,0x6b,0x22,0x2c,0x22,0x41,0x6b,0x22,0x2c,0x22,0x42,0x6b,0x22,0x2c,0x22,0x43,0x6b,0x22,0x2c,0x22,0x44,0x6b,0x22,0x2c,0x22,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x73,0x22,0x2c,0x22,0x65,0x78,0x70,0x69,0x72,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x77,0x63,0x22,0x2c,0x22,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x69,0x67,0x22,0x2c,0x22,0x45,0x6b,0x22,0x2c,0x22,0x46,0x6b,0x22,0x2c,0x22,0x47,0x6b,0x22,0x2c,0x22,0x48,0x6b,0x22,0x2c,0x22,0x49,0x6b,0x22,0x2c,0x22,0x4a,0x6b,0x22,0x2c,0x22,0x4b,0x6b,0x22,0x2c,0x22,0x4c,0x6b,0x22,0x2c,0x22,0x4d,0x6b,0x22,0x2c,0x22,0x4e,0x6b,0x22,0x2c,0x22,0x4f,0x6b,0x22,0x2c,0x22,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x57,0x6f,0x72,0x6b,0x22,0x2c,0x22,0x66,0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x50,0x6b,0x22,0x2c,0x22,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x48,0x61,0x6e,0x64,0x6c,0x65,0x22,0x2c,0x22,0x51,0x6b,0x22,0x2c,0x22,0x52,0x6b,0x22,0x2c,0x22,0x53,0x6b,0x22,0x2c,0x22,0x54,0x6b,0x22,0x2c,0x22,0x55,0x6b,0x22,0x2c,0x22,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x52,0x65,0x61,0x64,0x4c,0x61,0x6e,0x65,0x73,0x22,0x2c,0x22,0x42,0x63,0x22,0x2c,0x22,0x4f,0x6a,0x22,0x2c,0x22,0x6f,0x6e,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x22,0x2c,0x22,0x6d,0x63,0x22,0x2c,0x22,0x6f,0x6e,0x52,0x65,0x63,0x6f,0x76,0x65,0x72,0x61,0x62,0x6c,0x65,0x45,0x72,0x72,0x6f,0x72,0x22,0x2c,0x22,0x57,0x6b,0x22,0x2c,0x22,0x6f,0x6e,0x50,0x6f,0x73,0x74,0x43,0x6f,0x6d,0x6d,0x69,0x74,0x46,0x69,0x62,0x65,0x72,0x52,0x6f,0x6f,0x74,0x22,0x2c,0x22,0x58,0x6b,0x22,0x2c,0x22,0x59,0x6b,0x22,0x2c,0x22,0x24,0x6b,0x22,0x2c,0x22,0x69,0x73,0x52,0x65,0x61,0x63,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x22,0x2c,0x22,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x2c,0x22,0x61,0x6c,0x22,0x2c,0x22,0x6d,0x75,0x74,0x61,0x62,0x6c,0x65,0x53,0x6f,0x75,0x72,0x63,0x65,0x45,0x61,0x67,0x65,0x72,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x44,0x61,0x74,0x61,0x22,0x2c,0x22,0x62,0x6c,0x22,0x2c,0x22,0x63,0x61,0x63,0x68,0x65,0x22,0x2c,0x22,0x70,0x65,0x6e,0x64,0x69,0x6e,0x67,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x42,0x6f,0x75,0x6e,0x64,0x61,0x72,0x69,0x65,0x73,0x22,0x2c,0x22,0x64,0x6c,0x22,0x2c,0x22,0x65,0x6c,0x22,0x2c,0x22,0x66,0x6c,0x22,0x2c,0x22,0x67,0x6c,0x22,0x2c,0x22,0x68,0x6c,0x22,0x2c,0x22,0x69,0x6c,0x22,0x2c,0x22,0x79,0x6a,0x22,0x2c,0x22,0x5a,0x6b,0x22,0x2c,0x22,0x6b,0x6c,0x22,0x2c,0x22,0x72,0x65,0x70,0x6f,0x72,0x74,0x45,0x72,0x72,0x6f,0x72,0x22,0x2c,0x22,0x6c,0x6c,0x22,0x2c,0x22,0x5f,0x69,0x6e,0x74,0x65,0x72,0x6e,0x61,0x6c,0x52,0x6f,0x6f,0x74,0x22,0x2c,0x22,0x6d,0x6c,0x22,0x2c,0x22,0x6e,0x6c,0x22,0x2c,0x22,0x6f,0x6c,0x22,0x2c,0x22,0x70,0x6c,0x22,0x2c,0x22,0x72,0x6c,0x22,0x2c,0x22,0x71,0x6c,0x22,0x2c,0x22,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x48,0x79,0x64,0x72,0x61,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x73,0x70,0x6c,0x69,0x63,0x65,0x22,0x2c,0x22,0x71,0x75,0x65,0x72,0x79,0x53,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x41,0x6c,0x6c,0x22,0x2c,0x22,0x4a,0x53,0x4f,0x4e,0x22,0x2c,0x22,0x73,0x74,0x72,0x69,0x6e,0x67,0x69,0x66,0x79,0x22,0x2c,0x22,0x66,0x6f,0x72,0x6d,0x22,0x2c,0x22,0x73,0x6c,0x22,0x2c,0x22,0x75,0x73,0x69,0x6e,0x67,0x43,0x6c,0x69,0x65,0x6e,0x74,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x22,0x2c,0x22,0x45,0x76,0x65,0x6e,0x74,0x73,0x22,0x2c,0x22,0x74,0x6c,0x22,0x2c,0x22,0x66,0x69,0x6e,0x64,0x46,0x69,0x62,0x65,0x72,0x42,0x79,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x22,0x2c,0x22,0x62,0x75,0x6e,0x64,0x6c,0x65,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x50,0x61,0x63,0x6b,0x61,0x67,0x65,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x75,0x6c,0x22,0x2c,0x22,0x72,0x65,0x6e,0x64,0x65,0x72,0x65,0x72,0x43,0x6f,0x6e,0x66,0x69,0x67,0x22,0x2c,0x22,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x44,0x65,0x6c,0x65,0x74,0x65,0x50,0x61,0x74,0x68,0x22,0x2c,0x22,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x48,0x6f,0x6f,0x6b,0x53,0x74,0x61,0x74,0x65,0x52,0x65,0x6e,0x61,0x6d,0x65,0x50,0x61,0x74,0x68,0x22,0x2c,0x22,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x22,0x2c,0x22,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x44,0x65,0x6c,0x65,0x74,0x65,0x50,0x61,0x74,0x68,0x22,0x2c,0x22,0x6f,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x50,0x72,0x6f,0x70,0x73,0x52,0x65,0x6e,0x61,0x6d,0x65,0x50,0x61,0x74,0x68,0x22,0x2c,0x22,0x73,0x65,0x74,0x45,0x72,0x72,0x6f,0x72,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x22,0x2c,0x22,0x73,0x65,0x74,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x22,0x2c,0x22,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x44,0x69,0x73,0x70,0x61,0x74,0x63,0x68,0x65,0x72,0x52,0x65,0x66,0x22,0x2c,0x22,0x66,0x69,0x6e,0x64,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x42,0x79,0x46,0x69,0x62,0x65,0x72,0x22,0x2c,0x22,0x66,0x69,0x6e,0x64,0x48,0x6f,0x73,0x74,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x73,0x46,0x6f,0x72,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x22,0x2c,0x22,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x22,0x2c,0x22,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x65,0x52,0x6f,0x6f,0x74,0x22,0x2c,0x22,0x73,0x65,0x74,0x52,0x65,0x66,0x72,0x65,0x73,0x68,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x22,0x2c,0x22,0x67,0x65,0x74,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x46,0x69,0x62,0x65,0x72,0x22,0x2c,0x22,0x72,0x65,0x63,0x6f,0x6e,0x63,0x69,0x6c,0x65,0x72,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x5f,0x5f,0x52,0x45,0x41,0x43,0x54,0x5f,0x44,0x45,0x56,0x54,0x4f,0x4f,0x4c,0x53,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x48,0x4f,0x4f,0x4b,0x5f,0x5f,0x22,0x2c,0x22,0x76,0x6c,0x22,0x2c,0x22,0x69,0x73,0x44,0x69,0x73,0x61,0x62,0x6c,0x65,0x64,0x22,0x2c,0x22,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x73,0x46,0x69,0x62,0x65,0x72,0x22,0x2c,0x22,0x69,0x6e,0x6a,0x65,0x63,0x74,0x22,0x2c,0x22,0x65,0x78,0x70,0x6f,0x72,0x74,0x73,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x50,0x6f,0x72,0x74,0x61,0x6c,0x22,0x2c,0x22,0x63,0x6c,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x73,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x22,0x2c,0x22,0x66,0x69,0x6e,0x64,0x44,0x4f,0x4d,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x66,0x6c,0x75,0x73,0x68,0x53,0x79,0x6e,0x63,0x22,0x2c,0x22,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x22,0x2c,0x22,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x52,0x6f,0x6f,0x74,0x22,0x2c,0x22,0x68,0x79,0x64,0x72,0x61,0x74,0x65,0x64,0x53,0x6f,0x75,0x72,0x63,0x65,0x73,0x22,0x2c,0x22,0x5f,0x67,0x65,0x74,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x2c,0x22,0x75,0x6e,0x6d,0x6f,0x75,0x6e,0x74,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x41,0x74,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x62,0x61,0x74,0x63,0x68,0x65,0x64,0x55,0x70,0x64,0x61,0x74,0x65,0x73,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x65,0x6e,0x64,0x65,0x72,0x53,0x75,0x62,0x74,0x72,0x65,0x65,0x49,0x6e,0x74,0x6f,0x43,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x22,0x2c,0x22,0x63,0x68,0x65,0x63,0x6b,0x44,0x43,0x45,0x22,0x2c,0x22,0x65,0x72,0x72,0x22,0x2c,0x22,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x22,0x2c,0x22,0x5f,0x5f,0x73,0x65,0x6c,0x66,0x22,0x2c,0x22,0x5f,0x5f,0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x2c,0x22,0x6a,0x73,0x78,0x22,0x2c,0x22,0x6a,0x73,0x78,0x73,0x22,0x2c,0x22,0x73,0x65,0x74,0x53,0x74,0x61,0x74,0x65,0x22,0x2c,0x22,0x66,0x6f,0x72,0x63,0x65,0x55,0x70,0x64,0x61,0x74,0x65,0x22,0x2c,0x22,0x65,0x73,0x63,0x61,0x70,0x65,0x22,0x2c,0x22,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x22,0x2c,0x22,0x5f,0x72,0x65,0x73,0x75,0x6c,0x74,0x22,0x2c,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x22,0x2c,0x22,0x43,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x22,0x2c,0x22,0x6d,0x61,0x70,0x22,0x2c,0x22,0x63,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x74,0x6f,0x41,0x72,0x72,0x61,0x79,0x22,0x2c,0x22,0x6f,0x6e,0x6c,0x79,0x22,0x2c,0x22,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x22,0x2c,0x22,0x46,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x72,0x22,0x2c,0x22,0x50,0x75,0x72,0x65,0x43,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x22,0x2c,0x22,0x53,0x74,0x72,0x69,0x63,0x74,0x4d,0x6f,0x64,0x65,0x22,0x2c,0x22,0x53,0x75,0x73,0x70,0x65,0x6e,0x73,0x65,0x22,0x2c,0x22,0x61,0x63,0x74,0x22,0x2c,0x22,0x63,0x6c,0x6f,0x6e,0x65,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x43,0x6f,0x6e,0x74,0x65,0x78,0x74,0x22,0x2c,0x22,0x5f,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x56,0x61,0x6c,0x75,0x65,0x32,0x22,0x2c,0x22,0x5f,0x74,0x68,0x72,0x65,0x61,0x64,0x43,0x6f,0x75,0x6e,0x74,0x22,0x2c,0x22,0x50,0x72,0x6f,0x76,0x69,0x64,0x65,0x72,0x22,0x2c,0x22,0x43,0x6f,0x6e,0x73,0x75,0x6d,0x65,0x72,0x22,0x2c,0x22,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x56,0x61,0x6c,0x75,0x65,0x22,0x2c,0x22,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x46,0x61,0x63,0x74,0x6f,0x72,0x79,0x22,0x2c,0x22,0x63,0x72,0x65,0x61,0x74,0x65,0x52,0x65,0x66,0x22,0x2c,0x22,0x66,0x6f,0x72,0x77,0x61,0x72,0x64,0x52,0x65,0x66,0x22,0x2c,0x22,0x69,0x73,0x56,0x61,0x6c,0x69,0x64,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x22,0x2c,0x22,0x6c,0x61,0x7a,0x79,0x22,0x2c,0x22,0x6d,0x65,0x6d,0x6f,0x22,0x2c,0x22,0x73,0x74,0x61,0x72,0x74,0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x61,0x63,0x74,0x22,0x2c,0x22,0x70,0x6f,0x70,0x22,0x2c,0x22,0x73,0x6f,0x72,0x74,0x49,0x6e,0x64,0x65,0x78,0x22,0x2c,0x22,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x61,0x6e,0x63,0x65,0x22,0x2c,0x22,0x73,0x65,0x74,0x49,0x6d,0x6d,0x65,0x64,0x69,0x61,0x74,0x65,0x22,0x2c,0x22,0x73,0x74,0x61,0x72,0x74,0x54,0x69,0x6d,0x65,0x22,0x2c,0x22,0x65,0x78,0x70,0x69,0x72,0x61,0x74,0x69,0x6f,0x6e,0x54,0x69,0x6d,0x65,0x22,0x2c,0x22,0x70,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x4c,0x65,0x76,0x65,0x6c,0x22,0x2c,0x22,0x6e,0x61,0x76,0x69,0x67,0x61,0x74,0x6f,0x72,0x22,0x2c,0x22,0x73,0x63,0x68,0x65,0x64,0x75,0x6c,0x69,0x6e,0x67,0x22,0x2c,0x22,0x69,0x73,0x49,0x6e,0x70,0x75,0x74,0x50,0x65,0x6e,0x64,0x69,0x6e,0x67,0x22,0x2c,0x22,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x22,0x2c,0x22,0x70,0x6f,0x72,0x74,0x32,0x22,0x2c,0x22,0x70,0x6f,0x72,0x74,0x31,0x22,0x2c,0x22,0x6f,0x6e,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x22,0x2c,0x22,0x70,0x6f,0x73,0x74,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x50,0x72,0x6f,0x66,0x69,0x6c,0x69,0x6e,0x67,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x45,0x78,0x65,0x63,0x75,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x66,0x6f,0x72,0x63,0x65,0x46,0x72,0x61,0x6d,0x65,0x52,0x61,0x74,0x65,0x22,0x2c,0x22,0x66,0x6c,0x6f,0x6f,0x72,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x67,0x65,0x74,0x46,0x69,0x72,0x73,0x74,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x4e,0x6f,0x64,0x65,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x6e,0x65,0x78,0x74,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x70,0x61,0x75,0x73,0x65,0x45,0x78,0x65,0x63,0x75,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x72,0x75,0x6e,0x57,0x69,0x74,0x68,0x50,0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x22,0x2c,0x22,0x64,0x65,0x6c,0x61,0x79,0x22,0x2c,0x22,0x75,0x6e,0x73,0x74,0x61,0x62,0x6c,0x65,0x5f,0x77,0x72,0x61,0x70,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x22,0x2c,0x22,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x5f,0x63,0x61,0x63,0x68,0x65,0x5f,0x5f,0x22,0x2c,0x22,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x5f,0x5f,0x22,0x2c,0x22,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x49,0x64,0x22,0x2c,0x22,0x63,0x61,0x63,0x68,0x65,0x64,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x22,0x2c,0x22,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x22,0x2c,0x22,0x5f,0x5f,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x5f,0x5f,0x22,0x2c,0x22,0x64,0x65,0x66,0x69,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x6f,0x22,0x2c,0x22,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x22,0x2c,0x22,0x61,0x6c,0x6c,0x22,0x2c,0x22,0x72,0x65,0x64,0x75,0x63,0x65,0x22,0x2c,0x22,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x73,0x22,0x2c,0x22,0x6d,0x69,0x6e,0x69,0x43,0x73,0x73,0x46,0x22,0x2c,0x22,0x6f,0x62,0x6a,0x22,0x2c,0x22,0x70,0x72,0x6f,0x70,0x22,0x2c,0x22,0x69,0x6e,0x50,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x22,0x2c,0x22,0x64,0x61,0x74,0x61,0x57,0x65,0x62,0x70,0x61,0x63,0x6b,0x50,0x72,0x65,0x66,0x69,0x78,0x22,0x2c,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x22,0x2c,0x22,0x6e,0x65,0x65,0x64,0x41,0x74,0x74,0x61,0x63,0x68,0x22,0x2c,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x22,0x2c,0x22,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x42,0x79,0x54,0x61,0x67,0x4e,0x61,0x6d,0x65,0x22,0x2c,0x22,0x69,0x22,0x2c,0x22,0x73,0x22,0x2c,0x22,0x67,0x65,0x74,0x41,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x22,0x2c,0x22,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x22,0x2c,0x22,0x74,0x69,0x6d,0x65,0x6f,0x75,0x74,0x22,0x2c,0x22,0x6e,0x63,0x22,0x2c,0x22,0x6f,0x6e,0x53,0x63,0x72,0x69,0x70,0x74,0x43,0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x22,0x2c,0x22,0x70,0x72,0x65,0x76,0x22,0x2c,0x22,0x6f,0x6e,0x65,0x72,0x72,0x6f,0x72,0x22,0x2c,0x22,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x22,0x2c,0x22,0x64,0x6f,0x6e,0x65,0x46,0x6e,0x73,0x22,0x2c,0x22,0x66,0x6e,0x22,0x2c,0x22,0x68,0x65,0x61,0x64,0x22,0x2c,0x22,0x74,0x6f,0x53,0x74,0x72,0x69,0x6e,0x67,0x54,0x61,0x67,0x22,0x2c,0x22,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x73,0x22,0x2c,0x22,0x6a,0x22,0x2c,0x22,0x69,0x6e,0x73,0x74,0x61,0x6c,0x6c,0x65,0x64,0x43,0x68,0x75,0x6e,0x6b,0x44,0x61,0x74,0x61,0x22,0x2c,0x22,0x70,0x72,0x6f,0x6d,0x69,0x73,0x65,0x22,0x2c,0x22,0x72,0x65,0x6a,0x65,0x63,0x74,0x22,0x2c,0x22,0x65,0x72,0x72,0x6f,0x72,0x54,0x79,0x70,0x65,0x22,0x2c,0x22,0x72,0x65,0x61,0x6c,0x53,0x72,0x63,0x22,0x2c,0x22,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x22,0x2c,0x22,0x77,0x65,0x62,0x70,0x61,0x63,0x6b,0x4a,0x73,0x6f,0x6e,0x70,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x22,0x2c,0x22,0x70,0x61,0x72,0x65,0x6e,0x74,0x43,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x63,0x68,0x75,0x6e,0x6b,0x49,0x64,0x73,0x22,0x2c,0x22,0x6d,0x6f,0x72,0x65,0x4d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x22,0x2c,0x22,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x22,0x2c,0x22,0x73,0x6f,0x6d,0x65,0x22,0x2c,0x22,0x63,0x68,0x75,0x6e,0x6b,0x4c,0x6f,0x61,0x64,0x69,0x6e,0x67,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x22,0x2c,0x22,0x73,0x65,0x6c,0x66,0x22,0x2c,0x22,0x41,0x70,0x70,0x22,0x2c,0x22,0x76,0x61,0x6c,0x75,0x65,0x31,0x22,0x2c,0x22,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x31,0x22,0x2c,0x22,0x76,0x61,0x6c,0x75,0x65,0x32,0x22,0x2c,0x22,0x73,0x65,0x74,0x56,0x61,0x6c,0x75,0x65,0x32,0x22,0x2c,0x22,0x72,0x65,0x73,0x75,0x6c,0x74,0x22,0x2c,0x22,0x73,0x65,0x74,0x52,0x65,0x73,0x75,0x6c,0x74,0x22,0x2c,0x22,0x5f,0x6a,0x73,0x78,0x73,0x22,0x2c,0x22,0x6d,0x61,0x72,0x67,0x69,0x6e,0x22,0x2c,0x22,0x66,0x6f,0x6e,0x74,0x46,0x61,0x6d,0x69,0x6c,0x79,0x22,0x2c,0x22,0x5f,0x6a,0x73,0x78,0x22,0x2c,0x22,0x6d,0x61,0x72,0x67,0x69,0x6e,0x42,0x6f,0x74,0x74,0x6f,0x6d,0x22,0x2c,0x22,0x6f,0x6e,0x43,0x68,0x61,0x6e,0x67,0x65,0x22,0x2c,0x22,0x6d,0x61,0x72,0x67,0x69,0x6e,0x4c,0x65,0x66,0x74,0x22,0x2c,0x22,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x22,0x2c,0x22,0x66,0x6f,0x6e,0x74,0x53,0x69,0x7a,0x65,0x22,0x2c,0x22,0x63,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x65,0x53,0x75,0x6d,0x22,0x2c,0x22,0x73,0x75,0x6d,0x22,0x2c,0x22,0x70,0x61,0x72,0x73,0x65,0x46,0x6c,0x6f,0x61,0x74,0x22,0x2c,0x22,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x22,0x2c,0x22,0x62,0x6f,0x72,0x64,0x65,0x72,0x22,0x2c,0x22,0x62,0x6f,0x72,0x64,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x22,0x2c,0x22,0x63,0x75,0x72,0x73,0x6f,0x72,0x22,0x2c,0x22,0x6d,0x61,0x72,0x67,0x69,0x6e,0x52,0x69,0x67,0x68,0x74,0x22,0x2c,0x22,0x6d,0x61,0x72,0x67,0x69,0x6e,0x54,0x6f,0x70,0x22,0x2c,0x22,0x6f,0x6e,0x50,0x65,0x72,0x66,0x45,0x6e,0x74,0x72,0x79,0x22,0x2c,0x22,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x22,0x2c,0x22,0x5f,0x72,0x65,0x66,0x22,0x2c,0x22,0x67,0x65,0x74,0x43,0x4c,0x53,0x22,0x2c,0x22,0x67,0x65,0x74,0x46,0x49,0x44,0x22,0x2c,0x22,0x67,0x65,0x74,0x46,0x43,0x50,0x22,0x2c,0x22,0x67,0x65,0x74,0x4c,0x43,0x50,0x22,0x2c,0x22,0x67,0x65,0x74,0x54,0x54,0x46,0x42,0x22,0x2c,0x22,0x52,0x65,0x61,0x63,0x74,0x44,0x4f,0x4d,0x22,0x2c,0x22,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x22,0x2c,0x22,0x52,0x65,0x61,0x63,0x74,0x22,0x2c,0x22,0x72,0x65,0x70,0x6f,0x72,0x74,0x57,0x65,0x62,0x56,0x69,0x74,0x61,0x6c,0x73,0x22,0x5d,0x2c,0x22,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x6f,0x6f,0x74,0x22,0x3a,0x22,0x22,0x7d}; + + +static const VirtualFile virtual_files[] = { + { + "/asset-manifest.json", + FILE_0, + 517 + }, + { + "/favicon.ico", + FILE_1, + 3870 + }, + { + "/index.html", + FILE_2, + 678 + }, + { + "/logo192.png", + FILE_3, + 5347 + }, + { + "/logo512.png", + FILE_4, + 9664 + }, + { + "/manifest.json", + FILE_5, + 517 + }, + { + "/robots.txt", + FILE_6, + 70 + }, + { + "/static/css/main.9fcb2d68.css", + FILE_7, + 376 + }, + { + "/static/css/main.9fcb2d68.css.map", + FILE_8, + 690 + }, + { + "/static/js/453.7bb3dcb3.chunk.js", + FILE_9, + 4538 + }, + { + "/static/js/453.7bb3dcb3.chunk.js.map", + FILE_10, + 10597 + }, + { + "/static/js/main.c5c7da37.js", + FILE_11, + 144743 + }, + { + "/static/js/main.c5c7da37.js.LICENSE.txt", + FILE_12, + 971 + }, + { + "/static/js/main.c5c7da37.js.map", + FILE_13, + 371098 + }, +}; + +static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]); + +bool virtual_file_system(const char* path, const unsigned char** file, int* length) { + for (int i = 0; i < virtual_files_count; ++i) { + if(virtual_files[i].path != NULL) { + if (strcmp(virtual_files[i].path, path) == 0) { + *file = virtual_files[i].data; + *length = virtual_files[i].length; + return true; + } + } + } + return false; +} + +const void* vfs(const char* path, int* length) { + const unsigned char* file_data; + int file_length; + + if (virtual_file_system(path, &file_data, &file_length)) { + const char* content_type = webui_get_mime_type(path); + const char* http_header_template = "HTTP/1.1 200 OK\r\n" + "Content-Type: %s\r\n" + "Content-Length: %d\r\n" + "Cache-Control: no-cache\r\n\r\n"; + int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length); + *length = header_length + file_length; + unsigned char* response = (unsigned char*) webui_malloc(*length); + snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length); + memcpy(response + header_length, file_data, file_length); + return response; + } + return NULL; +} + +#endif // VIRTUAL_FILE_SYSTEM_H diff --git a/v2/webui/examples/C/react/vfs.py b/v2/webui/examples/C/react/vfs.py new file mode 100644 index 0000000..2167b1e --- /dev/null +++ b/v2/webui/examples/C/react/vfs.py @@ -0,0 +1,101 @@ +# WebUI Library +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# WebUI Virtual File System Generator +# v2.1 + +import os +import sys + +def generate_vfs_header(directory, output_header): + files = [] + + for root, _, filenames in os.walk(directory): + for filename in filenames: + filepath = os.path.join(root, filename) + relative_path = os.path.relpath(filepath, directory) + # Ensure path starts with a slash + relative_path = '/' + relative_path.replace('\\', '/') + files.append((relative_path, filepath)) + + with open(output_header, 'w') as header: + header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n') + header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n') + + header.write('typedef struct {\n') + header.write(' const char *path;\n') + header.write(' const unsigned char *data;\n') + header.write(' int length;\n') + header.write('} VirtualFile;\n\n') + + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(f'static const unsigned char FILE_{i}[] = {{') + header.write(','.join(f'0x{byte:02x}' for byte in data)) + header.write('};\n\n') + + header.write('\nstatic const VirtualFile virtual_files[] = {\n') + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(' {\n') + header.write(f' "{relative_path}",\n') + header.write(f' FILE_{i},\n') + header.write(f' {len(data)}\n') + header.write(' },\n') + if not files: + header.write(' {NULL, NULL, 0}\n') + header.write('};\n\n') + + header.write('static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]);\n\n') + + header.write('bool virtual_file_system(const char* path, const unsigned char** file, int* length) {\n') + header.write(' for (int i = 0; i < virtual_files_count; ++i) {\n') + header.write(' if(virtual_files[i].path != NULL) {\n') + header.write(' if (strcmp(virtual_files[i].path, path) == 0) {\n') + header.write(' *file = virtual_files[i].data;\n') + header.write(' *length = virtual_files[i].length;\n') + header.write(' return true;\n') + header.write(' }\n') + header.write(' }\n') + header.write(' }\n') + header.write(' return false;\n') + header.write('}\n\n') + + header.write('const void* vfs(const char* path, int* length) {\n') + header.write(' const unsigned char* file_data;\n') + header.write(' int file_length;\n\n') + + header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n') + header.write(' const char* content_type = webui_get_mime_type(path);\n') + header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n') + header.write(' "Content-Type: %s\\r\\n"\n') + header.write(' "Content-Length: %d\\r\\n"\n') + header.write(' "Cache-Control: no-cache\\r\\n\\r\\n";\n') + header.write(' int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length);\n') + header.write(' *length = header_length + file_length;\n') + header.write(' unsigned char* response = (unsigned char*) webui_malloc(*length);\n') + header.write(' snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length);\n') + header.write(' memcpy(response + header_length, file_data, file_length);\n') + header.write(' return response;\n') + header.write(' }\n') + header.write(' return NULL;\n') + header.write('}\n\n') + + header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n') + +if __name__ == '__main__': + if len(sys.argv) != 3: + print(f'Usage: {sys.argv[0]} ') + sys.exit(1) + + directory = sys.argv[1] + output_header = sys.argv[2] + generate_vfs_header(directory, output_header) + print(f'Generated {output_header} from {directory}') diff --git a/v2/webui/examples/C/react/webui-react-example/.gitignore b/v2/webui/examples/C/react/webui-react-example/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/v2/webui/examples/C/react/webui-react-example/package-lock.json b/v2/webui/examples/C/react/webui-react-example/package-lock.json new file mode 100644 index 0000000..2458e83 --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/package-lock.json @@ -0,0 +1,19039 @@ +{ + "name": "webui-react-example", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webui-react-example", + "version": "0.1.0", + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.1.tgz", + "integrity": "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==", + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", + "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", + "license": "MIT", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", + "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-flow": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", + "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", + "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", + "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "license": "MIT" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==", + "license": "CC0-1.0" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/console/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/globals/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", + "license": "MIT", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "license": "MIT", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", + "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", + "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", + "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", + "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "license": "BSD-2-Clause" + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "license": "MIT", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", + "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", + "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "license": "CC0-1.0", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "license": "MIT" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "CC0-1.0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "license": "MIT" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "license": "BSD-2-Clause" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.63", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz", + "integrity": "sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "license": "BSD-3-Clause", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-haste-map/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "license": "MIT", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "license": "MIT" + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "license": "MIT", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "license": "MIT", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "license": "MIT", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", + "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz", + "integrity": "sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.10.0.tgz", + "integrity": "sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "license": "MIT", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", + "license": "MIT" + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", + "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "license": "CC0-1.0" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "license": "MIT" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "license": "MIT", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "license": "MIT" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "license": "MIT", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "license": "MIT", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "license": "MIT", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==", + "license": "MIT" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/v2/webui/examples/C/react/webui-react-example/package.json b/v2/webui/examples/C/react/webui-react-example/package.json new file mode 100644 index 0000000..9b91552 --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/package.json @@ -0,0 +1,38 @@ +{ + "name": "webui-react-example", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/v2/webui/examples/C/react/webui-react-example/public/favicon.ico b/v2/webui/examples/C/react/webui-react-example/public/favicon.ico new file mode 100644 index 0000000..a11777c Binary files /dev/null and b/v2/webui/examples/C/react/webui-react-example/public/favicon.ico differ diff --git a/v2/webui/examples/C/react/webui-react-example/public/index.html b/v2/webui/examples/C/react/webui-react-example/public/index.html new file mode 100644 index 0000000..930253b --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/public/index.html @@ -0,0 +1,47 @@ + + + + + + + + + + + + + WebUI React + + + +
+ + + + + + + diff --git a/v2/webui/examples/C/react/webui-react-example/public/logo192.png b/v2/webui/examples/C/react/webui-react-example/public/logo192.png new file mode 100644 index 0000000..fc44b0a Binary files /dev/null and b/v2/webui/examples/C/react/webui-react-example/public/logo192.png differ diff --git a/v2/webui/examples/C/react/webui-react-example/public/logo512.png b/v2/webui/examples/C/react/webui-react-example/public/logo512.png new file mode 100644 index 0000000..a4e47a6 Binary files /dev/null and b/v2/webui/examples/C/react/webui-react-example/public/logo512.png differ diff --git a/v2/webui/examples/C/react/webui-react-example/public/manifest.json b/v2/webui/examples/C/react/webui-react-example/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/v2/webui/examples/C/react/webui-react-example/public/robots.txt b/v2/webui/examples/C/react/webui-react-example/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/v2/webui/examples/C/react/webui-react-example/src/App.css b/v2/webui/examples/C/react/webui-react-example/src/App.css new file mode 100644 index 0000000..74b5e05 --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/App.css @@ -0,0 +1,38 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/v2/webui/examples/C/react/webui-react-example/src/App.js b/v2/webui/examples/C/react/webui-react-example/src/App.js new file mode 100644 index 0000000..cd63ea8 --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/App.js @@ -0,0 +1,75 @@ +import React, { useState } from "react"; + +const App = () => { + const [value1, setValue1] = useState(''); + const [value2, setValue2] = useState(''); + const [result, setResult] = useState(null); + + const calculateSum = () => { + const sum = parseFloat(value1 || 0) + parseFloat(value2 || 0); + setResult(sum); + }; + + return ( +
+ +

WebUI React Example

+
+ + setValue1(e.target.value)} + style={{ marginLeft: '10px', padding: '5px', fontSize: '16px' }} + /> +
+
+ + setValue2(e.target.value)} + style={{ marginLeft: '10px', padding: '5px', fontSize: '16px' }} + /> +
+ + +
+ Result: {result !== null ? result : 'N/A'} +
+
+ ); +}; + +export default App; diff --git a/v2/webui/examples/C/react/webui-react-example/src/App.test.js b/v2/webui/examples/C/react/webui-react-example/src/App.test.js new file mode 100644 index 0000000..1f03afe --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/App.test.js @@ -0,0 +1,8 @@ +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/v2/webui/examples/C/react/webui-react-example/src/index.css b/v2/webui/examples/C/react/webui-react-example/src/index.css new file mode 100644 index 0000000..0e03a9c --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/index.css @@ -0,0 +1,16 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + color: #5ed2f2; + background-color: #2a2c2e; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/v2/webui/examples/C/react/webui-react-example/src/index.js b/v2/webui/examples/C/react/webui-react-example/src/index.js new file mode 100644 index 0000000..d563c0f --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/v2/webui/examples/C/react/webui-react-example/src/logo.svg b/v2/webui/examples/C/react/webui-react-example/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/webui/examples/C/react/webui-react-example/src/reportWebVitals.js b/v2/webui/examples/C/react/webui-react-example/src/reportWebVitals.js new file mode 100644 index 0000000..5253d3a --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/v2/webui/examples/C/react/webui-react-example/src/setupTests.js b/v2/webui/examples/C/react/webui-react-example/src/setupTests.js new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/v2/webui/examples/C/react/webui-react-example/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/v2/webui/examples/C/react/webui_react.png b/v2/webui/examples/C/react/webui_react.png new file mode 100644 index 0000000..2f86dbe Binary files /dev/null and b/v2/webui/examples/C/react/webui_react.png differ diff --git a/v2/webui/examples/C/serve_a_folder/GNUmakefile b/v2/webui/examples/C/serve_a_folder/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/serve_a_folder/Makefile b/v2/webui/examples/C/serve_a_folder/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/serve_a_folder/bun_test.ts b/v2/webui/examples/C/serve_a_folder/bun_test.ts new file mode 100644 index 0000000..b55ccf9 --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/bun_test.ts @@ -0,0 +1,26 @@ +// This file gets called like follow: +// +// 1. UI `Index.html` request: +// `http://localhost:xxx/bun_test.ts?foo=123&bar=456` +// +// 2. WebUI runs command: +// `bun run "bun_test.ts" "foo=123&bar=456"` +// +// 3. Bun parses args and prints the response + +// Get Query (HTTP GET) +const args = process.argv.slice(2); +const query = args[0]; + +// Variables +let foo: string = ''; +let bar: string = ''; + +// Read Query +const params = new URLSearchParams(query); +for (const [key, value] of params.entries()) { + if (key === 'foo') foo = value; // 123 + else if (key === 'bar') bar = value; // 456 +} + +console.log('Response from Bun: ' + (parseInt(foo) + parseInt(bar))); // 579 diff --git a/v2/webui/examples/C/serve_a_folder/deno_test.ts b/v2/webui/examples/C/serve_a_folder/deno_test.ts new file mode 100644 index 0000000..7ab370d --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/deno_test.ts @@ -0,0 +1,29 @@ +// This file gets called like follow: +// +// 1. UI `Index.html` request: +// `http://localhost:xxx/deno_test.ts?foo=123&bar=456` +// +// 2. WebUI runs command: +// `deno run --allow-all --unstable "deno_test.ts" "foo=123&bar=456"` +// +// 3. Deno parse args and print the response + +// Import parse() +import { parse } from 'https://deno.land/std/flags/mod.ts'; + +// Get Query (HTTP GET) +const args = parse(Deno.args); +const query = args._[0] as string; + +// Variables +let foo: string = ''; +let bar: string = ''; + +// Read Query +const params = new URLSearchParams(query); +for (const [key, value] of params.entries()) { + if (key == 'foo') foo = value; // 123 + else if (key == 'bar') bar = value; // 456 +} + +console.log('Response from Deno: ' + (parseInt(foo) + parseInt(bar))); // 579 diff --git a/v2/webui/examples/C/serve_a_folder/favicon.ico b/v2/webui/examples/C/serve_a_folder/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/serve_a_folder/favicon.ico differ diff --git a/v2/webui/examples/C/serve_a_folder/icon.rc b/v2/webui/examples/C/serve_a_folder/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/serve_a_folder/index.html b/v2/webui/examples/C/serve_a_folder/index.html new file mode 100644 index 0000000..c77e094 --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/index.html @@ -0,0 +1,193 @@ + + + + + WebUI - Serve a Folder Example (C) + + + +

Serve a Folder Example (C)

+
+

+ You can edit this HTML file as you need.
+ Also, you can config WebUI to use Deno or Nodejs runtime for your JS/TS files.
+
+ Please click on the link to switch to the second page
+ Or click on the button to switch to the second page programmatically. +

+
+ Click on [deno_test.ts] to interpret the TypeScript file (If deno is installed) +
+ By a simple HTTP request "deno_test.ts?foo=60&bar=40" +
+
+ +
+
+ +
+
+ +
+

Second Page As A Simple Link (Local file)

+
+ +
+
+ +
+

Static file example (Embedded)

+

Dynamic file example (Embedded)

+

+ Unicode Test:

+ مرحبًا
+ 你好
+ こんにちは +

+ + + + + + + diff --git a/v2/webui/examples/C/serve_a_folder/main.c b/v2/webui/examples/C/serve_a_folder/main.c new file mode 100644 index 0000000..01e7f08 --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/main.c @@ -0,0 +1,166 @@ +// Serve a Folder Example + +#include "webui.h" + +// Those defines is to avoid using global variables +// you can also use `const size_t MyWindow;`. +// A window ID can be between 1 and 512 (WEBUI_MAX_IDS) +#define MyWindow (1) +#define MySecondWindow (2) + +void exit_app(webui_event_t* e) { + + // Close all opened windows + webui_exit(); +} + +void events(webui_event_t* e) { + + // This function gets called every time + // there is an event + + if (e->event_type == WEBUI_EVENT_CONNECTED) + printf("Connected. \n"); + else if (e->event_type == WEBUI_EVENT_DISCONNECTED) + printf("Disconnected. \n"); + else if (e->event_type == WEBUI_EVENT_MOUSE_CLICK) + printf("Click. \n"); + else if (e->event_type == WEBUI_EVENT_NAVIGATION) { + const char* url = webui_get_string(e); + printf("Starting navigation to: %s \n", url); + + // Because we used `webui_bind(MyWindow, "", events);` + // WebUI will block all `href` link clicks and sent here instead. + // We can then control the behaviour of links as needed. + webui_navigate(e->window, url); + } +} + +void switch_to_second_page(webui_event_t* e) { + + // This function gets called every + // time the user clicks on "SwitchToSecondPage" + + // Switch to `/second.html` in the same opened window. + webui_show(e->window, "second.html"); +} + +void show_second_window(webui_event_t* e) { + + // This function gets called every + // time the user clicks on "OpenNewWindow" + + // Show a new window, and navigate to `/second.html` + // if it's already open, then switch in the same window + webui_show(MySecondWindow, "second.html"); +} + +const void* my_files_handler(const char* filename, int* length) { + + printf("File: %s \n", filename); + + if (!strcmp(filename, "/test.txt")) { + + // Const static file example + return "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html\r\n" + "Content-Length: 99\r\n\r\n" + "" + " This is a static embedded file content example." + " " // To keep connection with WebUI + ""; + } + else if (!strcmp(filename, "/dynamic.html")) { + + // Dynamic file example + + // Allocate memory + char* body = webui_malloc(1024); + char* header_and_body = webui_malloc(1024); + + // Generate body + static int count = 0; + sprintf( + body, + "" + " This is a dynamic file content example.
" + " Count: %d [Refresh]
" + " " // To keep connection with WebUI + "", + ++count + ); + + // Generate header + body + int body_size = strlen(body); + sprintf( + header_and_body, + "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html\r\n" + "Content-Length: %d\r\n\r\n" + "%s", + body_size, body + ); + + // Free body buffer + webui_free(body); + + // Set len (optional) + *length = strlen(header_and_body); + + // By allocating resources using webui_malloc() + // WebUI will automaticaly free the resources. + return header_and_body; + } + + // Other files: + // A NULL return will make WebUI + // looks for the file locally. + return NULL; +} + +int main() { + + // Create new windows + webui_new_window_id(MyWindow); + webui_new_window_id(MySecondWindow); + + // Bind HTML element IDs with a C functions + webui_bind(MyWindow, "SwitchToSecondPage", switch_to_second_page); + webui_bind(MyWindow, "OpenNewWindow", show_second_window); + webui_bind(MyWindow, "Exit", exit_app); + webui_bind(MySecondWindow, "Exit", exit_app); + + // Bind events + webui_bind(MyWindow, "", events); + + // Set the `.ts` and `.js` runtime + // webui_set_runtime(MyWindow, NodeJS); + // webui_set_runtime(MyWindow, Bun); + webui_set_runtime(MyWindow, Deno); + + // Set a custom files handler + webui_set_file_handler(MyWindow, my_files_handler); + + // Set window size + webui_set_size(MyWindow, 800, 800); + + // Set window position + webui_set_position(MyWindow, 200, 200); + + // Show a new window + // webui_set_root_folder(MyWindow, "_MY_PATH_HERE_"); + // webui_show_browser(MyWindow, "index.html", Chrome); + webui_show(MyWindow, "index.html"); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/serve_a_folder/node_test.js b/v2/webui/examples/C/serve_a_folder/node_test.js new file mode 100644 index 0000000..5027a49 --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/node_test.js @@ -0,0 +1,26 @@ +// This file gets called like follow: +// +// 1. UI `Index.html` request: +// `http://localhost:xxx/node_test.js?foo=123&bar=456` +// +// 2. WebUI runs command: +// `node node_test.js "foo=123&bar=456"` +// +// 3. Node.js parses args and prints the response + +// Get Query (HTTP GET) +const args = process.argv.slice(2); +const query = args[0]; + +// Variables +let foo = ''; +let bar = ''; + +// Read Query +const params = new URLSearchParams(query); +for (const [key, value] of params.entries()) { + if (key === 'foo') foo = value; // 123 + else if (key === 'bar') bar = value; // 456 +} + +console.log('Response from Node.js: ' + (parseInt(foo) + parseInt(bar))); // 579 diff --git a/v2/webui/examples/C/serve_a_folder/second.html b/v2/webui/examples/C/serve_a_folder/second.html new file mode 100644 index 0000000..343014c --- /dev/null +++ b/v2/webui/examples/C/serve_a_folder/second.html @@ -0,0 +1,48 @@ + + + + + WebUI - Second Page (C) + + + +

This is the second page !

+
+ + + + + + diff --git a/v2/webui/examples/C/test_index_redirect/GNUmakefile b/v2/webui/examples/C/test_index_redirect/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/test_index_redirect/Makefile b/v2/webui/examples/C/test_index_redirect/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/test_index_redirect/favicon.ico b/v2/webui/examples/C/test_index_redirect/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/test_index_redirect/favicon.ico differ diff --git a/v2/webui/examples/C/test_index_redirect/icon.rc b/v2/webui/examples/C/test_index_redirect/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/test_index_redirect/main.c b/v2/webui/examples/C/test_index_redirect/main.c new file mode 100644 index 0000000..7b4a114 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/main.c @@ -0,0 +1,89 @@ +#include +#include + +#include "webui.h" +#include "vfs.h" + +// This example is used to verify redirect and fallback behavior for: +// /, /sub, /sub/foo +// in both storage modes: +// 1) set_root_folder(...) +// 2) set_file_handler(vfs) +// +// Server mode is the primary redirect test path because it exposes the raw +// HTTP behavior (302 Location targets) without mixing in window lifecycle. +// +// The expected server behavior is: +// - start_server("custom.html") prefers custom.html in every directory +// - an explicit filename is strict; if it does not exist, the request fails +// - webui_start_server(window, "") means "fallback mode", which probes +// index.html, index.htm, index.ts, then index.js +// +// Note: index.ts and index.js can still be valid fallback targets for +// runtime/script-first scenarios, but they are not equivalent to an HTML GUI +// entry page. For normal GUI testing, HTML/HTM are the page-like entries. +int main(int argc, char *argv[]) +{ + bool serverMode = false; + bool vfsEnabled = false; + + for (int i = 1; i < argc; ++i) + { + if (strcmp(argv[i], "--server") == 0) + { + serverMode = true; + } + else if (strcmp(argv[i], "--vfs") == 0) + { + vfsEnabled = true; + } + } + + size_t window = webui_new_window(); + webui_set_config(use_cookies, false); + + if (vfsEnabled) + { + webui_set_file_handler(window, vfs); + } + else + { + webui_set_root_folder(window, "/home/gordon/Dokumenty/PlatformIO/Projects/webui/examples/C/test_index_redirect/ui/"); + + // Absolute paths: + // webui_set_root_folder(window, "/path/to/ui/"); + // webui_set_root_folder(window, "/path/to/ui"); + + // Relative if ui folder is next to executable: + // webui_set_root_folder(window, "ui/"); + // webui_set_root_folder(window, "ui"); + } + + if (serverMode) + { + webui_set_port(window, 8080); + + // Explicit custom entry file: + (void)webui_start_server(window, "custom.html"); + + // Redirect to the hardcoded index.* fallback list: + // (void)webui_start_server(window, ""); + } + else + { + // Explicit custom entry file: + webui_show(window, "custom.html"); + // webui_show_browser(window, "custom.html", AnyBrowser); + + // Redirect to the hardcoded index.* fallback list: + // webui_show(window, ""); + // webui_show_browser(window, "", AnyBrowser); + } + + webui_wait(); + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(__argc, __argv); } +#endif diff --git a/v2/webui/examples/C/test_index_redirect/ui/custom.html b/v2/webui/examples/C/test_index_redirect/ui/custom.html new file mode 100644 index 0000000..0abbe9c --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/custom.html @@ -0,0 +1,29 @@ + + + + + + ui/custom.html + + +

ui/custom.html

+

IDENTIFIER: ui/custom.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C/test_index_redirect/ui/index.css b/v2/webui/examples/C/test_index_redirect/ui/index.css new file mode 100644 index 0000000..6bc789d --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/index.css @@ -0,0 +1,4 @@ +/* IDENTIFIER: ui/index.css */ +/* Directory routes: / | /sub | /sub/foo */ +/* All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js */ +body { font-family: monospace; } diff --git a/v2/webui/examples/C/test_index_redirect/ui/index.html b/v2/webui/examples/C/test_index_redirect/ui/index.html new file mode 100644 index 0000000..120a792 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/index.html @@ -0,0 +1,29 @@ + + + + + + ui/index.html + + +

ui/index.html

+

IDENTIFIER: ui/index.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C/test_index_redirect/ui/index.js b/v2/webui/examples/C/test_index_redirect/ui/index.js new file mode 100644 index 0000000..4094538 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/index.js @@ -0,0 +1,4 @@ +// IDENTIFIER: ui/index.js +// Directory routes: / | /sub | /sub/foo +// All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js +console.log('IDENTIFIER: ui/index.js'); diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/custom.html b/v2/webui/examples/C/test_index_redirect/ui/sub/custom.html new file mode 100644 index 0000000..e90b2d5 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/custom.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/custom.html + + +

ui/sub/custom.html

+

IDENTIFIER: ui/sub/custom.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/foo/custom.html b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/custom.html new file mode 100644 index 0000000..2b57d8b --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/custom.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/foo/custom.html + + +

ui/sub/foo/custom.html

+

IDENTIFIER: ui/sub/foo/custom.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.css b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.css new file mode 100644 index 0000000..2ce12c5 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.css @@ -0,0 +1,4 @@ +/* IDENTIFIER: ui/sub/foo/index.css */ +/* Directory routes: / | /sub | /sub/foo */ +/* All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js */ +body { font-family: monospace; } diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.html b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.html new file mode 100644 index 0000000..86026d7 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/foo/index.html + + +

ui/sub/foo/index.html

+

IDENTIFIER: ui/sub/foo/index.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.js b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.js new file mode 100644 index 0000000..e4cef1a --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/foo/index.js @@ -0,0 +1,4 @@ +// IDENTIFIER: ui/sub/foo/index.js +// Directory routes: / | /sub | /sub/foo +// All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js +console.log('IDENTIFIER: ui/sub/foo/index.js'); diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/index.css b/v2/webui/examples/C/test_index_redirect/ui/sub/index.css new file mode 100644 index 0000000..68962cd --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/index.css @@ -0,0 +1,4 @@ +/* IDENTIFIER: ui/sub/index.css */ +/* Directory routes: / | /sub | /sub/foo */ +/* All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js */ +body { font-family: monospace; } diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/index.html b/v2/webui/examples/C/test_index_redirect/ui/sub/index.html new file mode 100644 index 0000000..912a3a7 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/index.html @@ -0,0 +1,29 @@ + + + + + + ui/sub/index.html + + +

ui/sub/index.html

+

IDENTIFIER: ui/sub/index.html

+

Directory routes: / | /sub | /sub/foo

+

All test files

+ + + + diff --git a/v2/webui/examples/C/test_index_redirect/ui/sub/index.js b/v2/webui/examples/C/test_index_redirect/ui/sub/index.js new file mode 100644 index 0000000..9fd0f34 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/ui/sub/index.js @@ -0,0 +1,4 @@ +// IDENTIFIER: ui/sub/index.js +// Directory routes: / | /sub | /sub/foo +// All files: /custom.html /index.html /index.css /index.js /sub/custom.html /sub/index.html /sub/index.css /sub/index.js /sub/foo/custom.html /sub/foo/index.html /sub/foo/index.css /sub/foo/index.js +console.log('IDENTIFIER: ui/sub/index.js'); diff --git a/v2/webui/examples/C/test_index_redirect/vfs.h b/v2/webui/examples/C/test_index_redirect/vfs.h new file mode 100644 index 0000000..bc1d600 --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/vfs.h @@ -0,0 +1,133 @@ +#ifndef VIRTUAL_FILE_SYSTEM_H +#define VIRTUAL_FILE_SYSTEM_H + +typedef struct { + const char *path; + const unsigned char *data; + int length; +} VirtualFile; + +static const unsigned char FILE_0[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_1[] = {0x2f,0x2a,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x20,0x7d,0x0d,0x0a}; + +static const unsigned char FILE_2[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_3[] = {0x2f,0x2f,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x2f,0x2f,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x0d,0x0a,0x2f,0x2f,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x0d,0x0a}; + +static const unsigned char FILE_4[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_5[] = {0x2f,0x2a,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x20,0x7d,0x0d,0x0a}; + +static const unsigned char FILE_6[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_7[] = {0x2f,0x2f,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x2f,0x2f,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x0d,0x0a,0x2f,0x2f,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x0d,0x0a}; + +static const unsigned char FILE_8[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_9[] = {0x2f,0x2a,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x20,0x2a,0x2f,0x0d,0x0a,0x2f,0x2a,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2a,0x2f,0x0d,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x20,0x7d,0x0d,0x0a}; + +static const unsigned char FILE_10[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x65,0x6e,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x75,0x74,0x66,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x31,0x3e,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x70,0x3e,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x22,0x3e,0x2f,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x20,0x7c,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x68,0x32,0x3e,0x41,0x6c,0x6c,0x20,0x74,0x65,0x73,0x74,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x75,0x6c,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x22,0x3e,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e,0x0d,0x0a,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_11[] = {0x2f,0x2f,0x20,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x2f,0x2f,0x20,0x44,0x69,0x72,0x65,0x63,0x74,0x6f,0x72,0x79,0x20,0x72,0x6f,0x75,0x74,0x65,0x73,0x3a,0x20,0x2f,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x20,0x7c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x0d,0x0a,0x2f,0x2f,0x20,0x41,0x6c,0x6c,0x20,0x66,0x69,0x6c,0x65,0x73,0x3a,0x20,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x63,0x75,0x73,0x74,0x6f,0x6d,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x63,0x73,0x73,0x20,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x0d,0x0a,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x49,0x44,0x45,0x4e,0x54,0x49,0x46,0x49,0x45,0x52,0x3a,0x20,0x75,0x69,0x2f,0x73,0x75,0x62,0x2f,0x66,0x6f,0x6f,0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x6a,0x73,0x27,0x29,0x3b,0x0d,0x0a}; + + +static const VirtualFile virtual_files[] = { + { + "/custom.html", + FILE_0, + 1170 + }, + { + "/index.css", + FILE_1, + 315 + }, + { + "/index.html", + FILE_2, + 1167 + }, + { + "/index.js", + FILE_3, + 312 + }, + { + "/sub/custom.html", + FILE_4, + 1182 + }, + { + "/sub/index.css", + FILE_5, + 319 + }, + { + "/sub/index.html", + FILE_6, + 1179 + }, + { + "/sub/index.js", + FILE_7, + 320 + }, + { + "/sub/foo/custom.html", + FILE_8, + 1194 + }, + { + "/sub/foo/index.css", + FILE_9, + 323 + }, + { + "/sub/foo/index.html", + FILE_10, + 1191 + }, + { + "/sub/foo/index.js", + FILE_11, + 328 + }, +}; + +static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]); + +bool virtual_file_system(const char* path, const unsigned char** file, int* length) { + for (int i = 0; i < virtual_files_count; ++i) { + if(virtual_files[i].path != NULL) { + if (strcmp(virtual_files[i].path, path) == 0) { + *file = virtual_files[i].data; + *length = virtual_files[i].length; + return true; + } + } + } + return false; +} + +const void* vfs(const char* path, int* length) { + const unsigned char* file_data; + int file_length; + + if (virtual_file_system(path, &file_data, &file_length)) { + const char* content_type = webui_get_mime_type(path); + const char* http_header_template = "HTTP/1.1 200 OK\r\n" + "Content-Type: %s\r\n" + "Content-Length: %d\r\n" + "Cache-Control: no-cache\r\n\r\n"; + int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length); + *length = header_length + file_length; + unsigned char* response = (unsigned char*) webui_malloc(*length); + snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length); + memcpy(response + header_length, file_data, file_length); + return response; + } + return NULL; +} + +#endif // VIRTUAL_FILE_SYSTEM_H diff --git a/v2/webui/examples/C/test_index_redirect/vfs.py b/v2/webui/examples/C/test_index_redirect/vfs.py new file mode 100644 index 0000000..2167b1e --- /dev/null +++ b/v2/webui/examples/C/test_index_redirect/vfs.py @@ -0,0 +1,101 @@ +# WebUI Library +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# WebUI Virtual File System Generator +# v2.1 + +import os +import sys + +def generate_vfs_header(directory, output_header): + files = [] + + for root, _, filenames in os.walk(directory): + for filename in filenames: + filepath = os.path.join(root, filename) + relative_path = os.path.relpath(filepath, directory) + # Ensure path starts with a slash + relative_path = '/' + relative_path.replace('\\', '/') + files.append((relative_path, filepath)) + + with open(output_header, 'w') as header: + header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n') + header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n') + + header.write('typedef struct {\n') + header.write(' const char *path;\n') + header.write(' const unsigned char *data;\n') + header.write(' int length;\n') + header.write('} VirtualFile;\n\n') + + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(f'static const unsigned char FILE_{i}[] = {{') + header.write(','.join(f'0x{byte:02x}' for byte in data)) + header.write('};\n\n') + + header.write('\nstatic const VirtualFile virtual_files[] = {\n') + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(' {\n') + header.write(f' "{relative_path}",\n') + header.write(f' FILE_{i},\n') + header.write(f' {len(data)}\n') + header.write(' },\n') + if not files: + header.write(' {NULL, NULL, 0}\n') + header.write('};\n\n') + + header.write('static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]);\n\n') + + header.write('bool virtual_file_system(const char* path, const unsigned char** file, int* length) {\n') + header.write(' for (int i = 0; i < virtual_files_count; ++i) {\n') + header.write(' if(virtual_files[i].path != NULL) {\n') + header.write(' if (strcmp(virtual_files[i].path, path) == 0) {\n') + header.write(' *file = virtual_files[i].data;\n') + header.write(' *length = virtual_files[i].length;\n') + header.write(' return true;\n') + header.write(' }\n') + header.write(' }\n') + header.write(' }\n') + header.write(' return false;\n') + header.write('}\n\n') + + header.write('const void* vfs(const char* path, int* length) {\n') + header.write(' const unsigned char* file_data;\n') + header.write(' int file_length;\n\n') + + header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n') + header.write(' const char* content_type = webui_get_mime_type(path);\n') + header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n') + header.write(' "Content-Type: %s\\r\\n"\n') + header.write(' "Content-Length: %d\\r\\n"\n') + header.write(' "Cache-Control: no-cache\\r\\n\\r\\n";\n') + header.write(' int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length);\n') + header.write(' *length = header_length + file_length;\n') + header.write(' unsigned char* response = (unsigned char*) webui_malloc(*length);\n') + header.write(' snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length);\n') + header.write(' memcpy(response + header_length, file_data, file_length);\n') + header.write(' return response;\n') + header.write(' }\n') + header.write(' return NULL;\n') + header.write('}\n\n') + + header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n') + +if __name__ == '__main__': + if len(sys.argv) != 3: + print(f'Usage: {sys.argv[0]} ') + sys.exit(1) + + directory = sys.argv[1] + output_header = sys.argv[2] + generate_vfs_header(directory, output_header) + print(f'Generated {output_header} from {directory}') diff --git a/v2/webui/examples/C/text-editor/GNUmakefile b/v2/webui/examples/C/text-editor/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/text-editor/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/text-editor/Makefile b/v2/webui/examples/C/text-editor/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/text-editor/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/text-editor/README.md b/v2/webui/examples/C/text-editor/README.md new file mode 100644 index 0000000..f16fc64 --- /dev/null +++ b/v2/webui/examples/C/text-editor/README.md @@ -0,0 +1,29 @@ +# WebUI C - Text Editor + +This [text editor](https://github.com/webui-dev/webui/tree/main/examples/C/text-editor) is a lightweight and portable example written in C using WebUI as the GUI library. + +
+ Example +
+ +- **Windows** + + ```sh + # GCC + mingw32-make + ``` + +- **Linux** + + ```sh + # GCC + make + + # Clang + make CC=clang + ``` + +- **macOS** + ```sh + make + ``` diff --git a/v2/webui/examples/C/text-editor/favicon.ico b/v2/webui/examples/C/text-editor/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/text-editor/favicon.ico differ diff --git a/v2/webui/examples/C/text-editor/icon.rc b/v2/webui/examples/C/text-editor/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/text-editor/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/text-editor/main.c b/v2/webui/examples/C/text-editor/main.c new file mode 100644 index 0000000..7dc11b4 --- /dev/null +++ b/v2/webui/examples/C/text-editor/main.c @@ -0,0 +1,38 @@ +// Text Editor in C using WebUI + +#include "webui.h" + +void close_app(webui_event_t* e) { + printf("Exit.\n"); + + // Close all opened windows + webui_exit(); +} + +int main() { + + // Create a new window + int MainWindow = webui_new_window(); + + // Set the root folder for the UI + webui_set_root_folder(MainWindow, "ui"); + + // Bind HTML elements with the specified ID to C functions + webui_bind(MainWindow, "close_app", close_app); + + // Show the window, preferably in a chromium based browser + if (!webui_show_browser(MainWindow, "index.html", AnyBrowser)) + webui_show(MainWindow, "index.html"); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/text-editor/ui/css/all.min.css b/v2/webui/examples/C/text-editor/ui/css/all.min.css new file mode 100644 index 0000000..164a7f9 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/v2/webui/examples/C/text-editor/ui/css/codemirror.min.css b/v2/webui/examples/C/text-editor/ui/css/codemirror.min.css new file mode 100644 index 0000000..2ef25ea --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/css/codemirror.min.css @@ -0,0 +1 @@ +.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:0;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:0}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0} \ No newline at end of file diff --git a/v2/webui/examples/C/text-editor/ui/css/lucario.css b/v2/webui/examples/C/text-editor/ui/css/lucario.css new file mode 100644 index 0000000..6dcdf8a --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/css/lucario.css @@ -0,0 +1,39 @@ +/* + Name: lucario + Author: Raphael Amorim + Original Lucario color scheme (https://github.com/raphamorim/lucario) + Modified for WebUI Text Editor. +*/ + +.cm-s-lucario.CodeMirror, .cm-s-lucario .CodeMirror-gutters { + /* background-color: #2b3e50 !important; */ + color: #f8f8f2 !important; + border: none; + background: #f8f9fa !important; + background-color: rgba(0, 0, 0, .0) !important; +} +.cm-s-lucario .CodeMirror-gutters { color: #2b3e50; } +.cm-s-lucario .CodeMirror-cursor { border-left: solid thin #E6C845; } +.cm-s-lucario .CodeMirror-linenumber { color: #f8f8f2; background-color: rgba(0, 0, 0, .2) !important; } +.cm-s-lucario .CodeMirror-selected { background: #243443; } +.cm-s-lucario .CodeMirror-line::selection, .cm-s-lucario .CodeMirror-line > span::selection, .cm-s-lucario .CodeMirror-line > span > span::selection { background: #243443; } +.cm-s-lucario .CodeMirror-line::-moz-selection, .cm-s-lucario .CodeMirror-line > span::-moz-selection, .cm-s-lucario .CodeMirror-line > span > span::-moz-selection { background: #243443; } +.cm-s-lucario span.cm-comment { color: #5c98cd; } +.cm-s-lucario span.cm-string, .cm-s-lucario span.cm-string-2 { color: #E6DB74; } +.cm-s-lucario span.cm-number { color: #ca94ff; } +.cm-s-lucario span.cm-variable { color: #f8f8f2; } +.cm-s-lucario span.cm-variable-2 { color: #f8f8f2; } +.cm-s-lucario span.cm-def { color: #72C05D; } +.cm-s-lucario span.cm-operator { color: #66D9EF; } +.cm-s-lucario span.cm-keyword { color: #ff6541; } +.cm-s-lucario span.cm-atom { color: #bd93f9; } +.cm-s-lucario span.cm-meta { color: #f8f8f2; } +.cm-s-lucario span.cm-tag { color: #ff6541; } +.cm-s-lucario span.cm-attribute { color: #66D9EF; } +.cm-s-lucario span.cm-qualifier { color: #72C05D; } +.cm-s-lucario span.cm-property { color: #f8f8f2; } +.cm-s-lucario span.cm-builtin { color: #72C05D; } +.cm-s-lucario span.cm-variable-3, .cm-s-lucario span.cm-type { color: #ffb86c; } +.cm-s-lucario .CodeMirror-activeline-background { background: #243443; } +.cm-s-lucario .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } +.cm-s-lucario .CodeMirror-scroll { overflow: hidden; } diff --git a/v2/webui/examples/C/text-editor/ui/css/style.css b/v2/webui/examples/C/text-editor/ui/css/style.css new file mode 100644 index 0000000..f893718 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/css/style.css @@ -0,0 +1,113 @@ +body { + margin: 0; + padding: 0; + height: 100vh; + font-family: 'Courier New', Courier, monospace; + background-image: linear-gradient(to right top, #8e44ad 0%, #3498db 100%); + background-repeat: no-repeat; + background-position: center center; + background-size: cover; + background-attachment: fixed; + color: #ddecf9; +} + +.topbar { + width: 100%; + height: 4px; + background-image: linear-gradient(to right, #4ed2e7 0%, #db57eb 50%, #f98818 100%); +} + +header { + color: #fff; +} + +/* Nav */ + +nav { + background: linear-gradient( + 90deg, + rgba(255, 255, 255, 0) 0%, + rgba(255, 255, 255, 0.2) 25%, + rgba(255, 255, 255, 0.2) 75%, + rgba(255, 255, 255, 0) 100% + ); + box-shadow: + 0 0 25px rgba(0, 0, 0, 0.1), + inset 0 0 1px rgba(255, 255, 255, 0.6); + text-align: center; +} + +nav button { + background: none; + border: none; + text-shadow: 1px 1px 2px #000000; + font-family: 'Font Awesome 5 Free'; + font-size: 18px; + color: #ddecf9; + cursor: pointer; + margin: 0 auto; + padding: 18px; +} + +nav button:hover { + box-shadow: + 0 0 10px rgba(0, 0, 0, 0.1), + inset 0 0 1px rgba(255, 255, 255, 0.6); + background: rgba(255, 255, 255, 0.1); +} + +nav #save-btn:disabled { + pointer-events: none; + color: #7ca0df; +} + +nav button i { + /* Click through the icon in the button */ + pointer-events: none; +} + +/* Code */ + +.main { + padding: 0px; +} + +/* About */ + +.about-box { + display: none; + position: fixed; + z-index: 1; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(to right top, #8e44ad 0%, #3498db 100%); +} + +.about-box-content { + background-image: linear-gradient(to right top, #8e44ad 0%, #3498db 100%); + position: absolute; + margin: 0; + padding: 10px; + width: 30%; + border-radius: 5px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.about-box-content h1 { + text-align: center; +} + +.about-box-content a { + color: inherit; +} + +.CodeMirror { + height: 100%; + font-family: 'Courier New', Courier, monospace; + font-size: 16px; + text-shadow: 1px 1px 2px #000000; +} diff --git a/v2/webui/examples/C/text-editor/ui/img/icon.png b/v2/webui/examples/C/text-editor/ui/img/icon.png new file mode 100644 index 0000000..7ed05be Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/img/icon.png differ diff --git a/v2/webui/examples/C/text-editor/ui/index.html b/v2/webui/examples/C/text-editor/ui/index.html new file mode 100644 index 0000000..dd1650d --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/index.html @@ -0,0 +1,41 @@ + + + + + + + + Text Editor in C using WebUI + + + + + + +
+ +
+ +
+
+
+

WebUI Text Editor

+ v1.1 +

Example of a text editor software in C using WebUI library.

+

webui.me | (C)2025 Hassan Draga

+
+
+ + + + + + + + + diff --git a/v2/webui/examples/C/text-editor/ui/js/clike.min.js b/v2/webui/examples/C/text-editor/ui/js/clike.min.js new file mode 100644 index 0000000..6e22a31 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/js/clike.min.js @@ -0,0 +1 @@ +!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(M){"use strict";function L(e,t,n,r,o,a){this.indented=e,this.column=t,this.type=n,this.info=r,this.align=o,this.prev=a}function D(e,t,n,r){var o=e.indented;e.context&&"statement"==e.context.type&&"statement"!=n&&(o=e.context.indented),e.context=new L(o,t,n,r,null,e.context)}function P(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function E(e,t,n){return"variable"==t.prevToken||"type"==t.prevToken||(!!/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0,n))||(!(!t.typeAtEndOfLine||e.column()!=e.indentation())||void 0))}function z(e){for(;;){if(!e||"top"==e.type)return 1;if("}"==e.type&&"namespace"!=e.prev.info)return;e=e.prev}}function e(e){for(var t={},n=e.split(" "),r=0;r!?|\/]/,S=a.isIdentifierChar||/[\w\$_\xa1-\uffff]/,T=a.isReservedIdentifier||!1;function C(e,t){var a,n=e.next();if(y[n]){var r=y[n](e,t);if(!1!==r)return r}if('"'==n||"'"==n)return t.tokenize=(a=n,function(e,t){for(var n,r=!1,o=!1;null!=(n=e.next());){if(n==a&&!r){o=!0;break}r=!r&&"\\"==n}return!o&&(r||g)||(t.tokenize=null),"string"}),t.tokenize(e,t);if(v.test(n)){if(e.backUp(1),e.match(w))return"number";e.next()}if(x.test(n))return i=n,null;if("/"==n){if(e.eat("*"))return(t.tokenize=I)(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(_.test(n)){for(;!e.match(/^\/[\/*]/,!1)&&e.eat(_););return"operator"}if(e.eatWhile(S),b)for(;e.match(b);)e.eatWhile(S);r=e.current();return F(o,r)?(F(p,r)&&(i="newstatement"),F(m,r)&&(l=!0),"keyword"):F(d,r)?"type":F(f,r)||T&&T(r)?(F(p,r)&&(i="newstatement"),"builtin"):F(h,r)?"atom":"variable"}function I(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=null;break}r="*"==n}return"comment"}function N(e,t){a.typeFirstDefinitions&&e.eol()&&z(t.context)&&(t.typeAtEndOfLine=E(e,t,e.pos))}return{startState:function(e){return{tokenize:null,context:new L((e||0)-s,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(e,t){var n=t.context;if(e.sol()&&(null==n.align&&(n.align=!1),t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return N(e,t),null;i=l=null;var r,o=(t.tokenize||C)(e,t);if("comment"==o||"meta"==o)return o;if(null==n.align&&(n.align=!0),";"==i||":"==i||","==i&&e.match(/^\s*(?:\/\/.*)?$/,!1))for(;"statement"==t.context.type;)P(t);else if("{"==i)D(t,e.column(),"}");else if("["==i)D(t,e.column(),"]");else if("("==i)D(t,e.column(),")");else if("}"==i){for(;"statement"==n.type;)n=P(t);for("}"==n.type&&(n=P(t));"statement"==n.type;)n=P(t)}else i==n.type?P(t):k&&(("}"==n.type||"top"==n.type)&&";"!=i||"statement"==n.type&&"newstatement"==i)&&D(t,e.column(),"statement",e.current());return"variable"==o&&("def"==t.prevToken||a.typeFirstDefinitions&&E(e,t,e.start)&&z(t.context)&&e.match(/^\s*\(/,!1))&&(o="def"),"def"==(o=y.token&&void 0!==(r=y.token(e,t,o))?r:o)&&!1===a.styleDefs&&(o="variable"),t.startOfLine=!1,t.prevToken=l?"def":o||i,N(e,t),o},indent:function(e,t){if(e.tokenize!=C&&null!=e.tokenize||e.typeAtEndOfLine)return M.Pass;var n=e.context,r=t&&t.charAt(0),o=r==n.type;if("statement"==n.type&&"}"==r&&(n=n.prev),a.dontIndentStatements)for(;"statement"==n.type&&a.dontIndentStatements.test(n.info);)n=n.prev;if(y.indent){e=y.indent(e,n,t,s);if("number"==typeof e)return e}e=n.prev&&"switch"==n.prev.info;if(a.allmanIndentation&&/[{(]/.test(r)){for(;"top"!=n.type&&"}"!=n.type;)n=n.prev;return n.indented}return"statement"==n.type?n.indented+("{"==r?0:c):!n.align||u&&")"==n.type?")"!=n.type||o?n.indented+(o?0:s)+(o||!e||/^(?:case|default)\b/.test(t)?0:s):n.indented+c:n.column+(o?0:1)},electricInput:e?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}});var t="auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran",n="alignas alignof and and_eq audit axiom bitand bitor catch class compl concept constexpr const_cast decltype delete dynamic_cast explicit export final friend import module mutable namespace new noexcept not not_eq operator or or_eq override private protected public reinterpret_cast requires static_assert static_cast template this thread_local throw try typeid typename using virtual xor xor_eq",r="bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available",o="FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT",a=e("int long char short double float unsigned signed void bool"),i=e("SEL instancetype id Class Protocol BOOL");function l(e){return F(a,e)||/.+_t$/.test(e)}function s(e){return l(e)||F(i,e)}var c="case do else for if switch while struct enum union",u="struct enum union";function d(e,t){if(!t.startOfLine)return!1;for(var n,r=null;n=e.peek();){if("\\"==n&&e.match(/^.$/)){r=d;break}if("/"==n&&e.match(/^\/[\/\*]/,!1))break;e.next()}return t.tokenize=r,"meta"}function f(e,t){return"type"==t.prevToken&&"type"}function p(e){return!(!e||e.length<2)&&("_"==e[0]&&("_"==e[1]||e[1]!==e[1].toLowerCase()))}function m(e){return e.eatWhile(/[\w\.']/),"number"}function h(e,t){var n;return e.backUp(1),e.match(/^(?:R|u8R|uR|UR|LR)/)?!!(n=e.match(/^"([^\s\\()]{0,16})\(/))&&(t.cpp11RawStringDelim=n[1],(t.tokenize=k)(e,t)):e.match(/^(?:u8|u|U|L)/)?!!e.match(/^["']/,!1)&&"string":(e.next(),!1)}function y(e){e=/(\w+)::~?(\w+)$/.exec(e);return e&&e[1]==e[2]}function g(e,t){for(var n;null!=(n=e.next());)if('"'==n&&!e.eat('"')){t.tokenize=null;break}return"string"}function k(e,t){var n=t.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&");return e.match(new RegExp(".*?\\)"+n+'"'))?t.tokenize=null:e.skipToEnd(),"string"}function b(e,t){"string"==typeof e&&(e=[e]);var n=[];function r(e){if(e)for(var t in e)e.hasOwnProperty(t)&&n.push(t)}r(t.keywords),r(t.types),r(t.builtin),r(t.atoms),n.length&&(t.helperType=e[0],M.registerHelper("hintWords",e[0],n));for(var o=0;o!?|\/#:@]/,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return!!e.match('""')&&(t.tokenize=x,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},"=":function(e,t){var n=t.context;return!("}"!=n.type||!n.align||!e.eat(">"))&&(t.context=new L(n.indented,n.column,n.type,n.info,null,n.prev),"operator")},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=v(1),t.tokenize(e,t))}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}}),b("text/x-kotlin",{name:"clike",keywords:e("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam value"),types:e("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:e("catch class do else finally for if where try while enum"),defKeywords:e("class val var object interface fun"),atoms:e("true false null this"),hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},"*":function(e,t){return"."==t.prevToken?"variable":"operator"},'"':function(e,t){var a;return t.tokenize=(a=e.match('""'),function(e,t){for(var n,r=!1,o=!1;!e.eol();){if(!a&&!r&&e.match('"')){o=!0;break}if(a&&e.match('"""')){o=!0;break}n=e.next(),!r&&"$"==n&&e.match("{")&&e.skipTo("}"),r=!r&&"\\"==n&&!a}return!o&&a||(t.tokenize=null),"string"}),t.tokenize(e,t)},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=v(1),t.tokenize(e,t))},indent:function(e,t,n,r){var o=n&&n.charAt(0);return"}"!=e.prevToken&&")"!=e.prevToken||""!=n?"operator"==e.prevToken&&"}"!=n&&"}"!=e.context.type||"variable"==e.prevToken&&"."==o||("}"==e.prevToken||")"==e.prevToken)&&"."==o?2*r+t.indented:t.align&&"}"==t.type?t.indented+(e.context.type==(n||"").charAt(0)?0:r):void 0:e.indented}},modeProps:{closeBrackets:{triples:'"'}}}),b(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:e("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:e("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:e("for while do if else struct"),builtin:e("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:e("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":d},modeProps:{fold:["brace","include"]}}),b("text/x-nesc",{name:"clike",keywords:e(t+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:l,blockKeywords:e(c),atoms:e("null true false"),hooks:{"#":d},modeProps:{fold:["brace","include"]}}),b("text/x-objectivec",{name:"clike",keywords:e(t+" "+r),types:s,builtin:e(o),blockKeywords:e(c+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:e(u+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:e("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:p,hooks:{"#":d,"*":f},modeProps:{fold:["brace","include"]}}),b("text/x-objectivec++",{name:"clike",keywords:e(t+" "+r+" "+n),types:s,builtin:e(o),blockKeywords:e(c+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:e(u+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:e("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:p,hooks:{"#":d,"*":f,u:h,U:h,L:h,R:h,0:m,1:m,2:m,3:m,4:m,5:m,6:m,7:m,8:m,9:m,token:function(e,t,n){if("variable"==n&&"("==e.peek()&&(";"==t.prevToken||null==t.prevToken||"}"==t.prevToken)&&y(e.current()))return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}}),b("text/x-squirrel",{name:"clike",keywords:e("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:l,blockKeywords:e("case catch class else for foreach if switch try while"),defKeywords:e("function local class"),typeFirstDefinitions:!0,atoms:e("true false null"),hooks:{"#":d},modeProps:{fold:["brace","include"]}});var w=null;b("text/x-ceylon",{name:"clike",keywords:e("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(e){e=e.charAt(0);return e===e.toUpperCase()&&e!==e.toLowerCase()},blockKeywords:e("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:e("class dynamic function interface module object package value"),builtin:e("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:e("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return t.tokenize=function a(i){return function(e,t){for(var n,r=!1,o=!1;!e.eol();){if(!r&&e.match('"')&&("single"==i||e.match('""'))){o=!0;break}if(!r&&e.match("``")){w=a(i),o=!0;break}n=e.next(),r="single"==i&&!r&&"\\"==n}return o&&(t.tokenize=null),"string"}}(e.match('""')?"triple":"single"),t.tokenize(e,t)},"`":function(e,t){return!(!w||!e.match("`"))&&(t.tokenize=w,w=null,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},token:function(e,t,n){if(("variable"==n||"type"==n)&&"."==t.prevToken)return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})}); \ No newline at end of file diff --git a/v2/webui/examples/C/text-editor/ui/js/codemirror.min.js b/v2/webui/examples/C/text-editor/ui/js/codemirror.min.js new file mode 100644 index 0000000..7ce788f --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/js/codemirror.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,l=navigator.platform,d=/gecko\/\d/i.test(e),s=/MSIE \d/.test(e),a=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),u=/Edge\/(\d+)/.exec(e),w=s||a||u,v=w&&(s?document.documentMode||6:+(u||a)[1]),x=!u&&/WebKit\//.test(e),s=x&&/Qt\/\d+\.\d+/.test(e),m=!u&&/Chrome\/(\d+)/.exec(e),V=m&&+m[1],K=/Opera\//.test(e),j=/Apple Computer/.test(navigator.vendor),c=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),X=/PhantomJS/.test(e),Y=j&&(/Mobile\/\w+/.test(e)||2t)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:We=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:We=i)}return null!=r?r:We}Fe=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,Pe=/[stwN]/,Ee=/[LRr]/,Ie=/[Lb1n]/,ze=/[1n]/;var Fe,Pe,Ee,Ie,ze,Re=function(e,t){var n="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!Fe.test(e))return!1;for(var r,i=e.length,o=[],l=0;l=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t=e.first&&tn?F(n,W(e,n).text.length):(e=W(e,(n=t).line).text.length,null==(t=n.ch)||e=this.string.length},g.prototype.sol=function(){return this.pos==this.lineStart},g.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},g.prototype.next=function(){if(this.post},g.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},g.prototype.skipToEnd=function(){this.pos=this.string.length},g.prototype.skipTo=function(e){e=this.string.indexOf(e,this.pos);if(-1e.options.maxHighlightLength&&ht(e.doc.mode,r.state),o=Nt(e,t,r),i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))),t.styles}function At(n,r,e){var t=n.doc,i=n.display;if(!t.mode.startState)return new Mt(t,!0,r);var o=function(e,t,n){for(var r,i,o=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;lt.first&&W(t,o-1).stateAfter,s=l?Mt.fromSaved(t,l,o):new Mt(t,ft(t.mode),o);return t.iter(o,r,function(e){Dt(n,e.text,s);var t=s.line;e.stateAfter=t==r-1||t%5==0||t>=i.viewFrom&&tt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}Mt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Mt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Mt.prototype.nextLine=function(){this.line++,0e.options.maxHighlightLength?(s=!1,l&&Dt(e,t,r,c.pos),c.pos=t.length,null):Et(Ht(n,c,r.state,h),o);if(!h||(d=h[0].name)&&(f="m-"+(f?d+" "+f:d)),!s||u!=f){for(;a=t:l.to>t),(r=r||[]).push(new Bt(s,l.from,o?null:l.to)))}return r}(n,r,o),s=function(e,t,n){var r;if(e)for(var i=0;i=t:l.to>t))&&(l.from!=t||"bookmark"!=s.type||n&&!l.marker.insertLeft)||(o=null==l.from||(s.inclusiveLeft?l.from<=t:l.frome.lastLine())return t;var n,r=W(e,t);if(!nn(e,r))return t;for(;n=Zt(r);)r=n.find(1,!0).line;return H(r)+1}function nn(e,t){var n=Rt&&t.markedSpans;if(n)for(var r,i=0;in.maxLineLength&&(n.maxLineLength=t,n.maxLine=e)})}var sn=function(e,t,n){this.text=e,jt(this,t),this.height=n?n(this):1};sn.prototype.lineNo=function(){return H(this)},Xe(sn);var an={},un={};function cn(e,t){if(!e||/^\s*$/.test(e))return null;t=t.addModeClass?un:an;return t[e]||(t[e]=e.replace(/\S+/g,"cm-$&"))}function hn(e,t){var n=ne("span",null,null,x?"padding-right: .1px":null),r={pre:ne("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0,l=(r.pos=0,r.addToken=fn,function(e){if(null!=Je)return Je;var t=y(e,document.createTextNode("AخA")),n=le(t,0,1).getBoundingClientRect(),t=le(t,1,2).getBoundingClientRect();return te(e),n&&n.left!=n.right&&(Je=t.right-n.right<3)}(e.display.measure)&&(l=Ge(o,e.doc.direction))&&(r.addToken=function(h,d){return function(e,t,n,r,i,o,l){n=n?n+" cm-force-border":"cm-force-border";for(var s=e.pos,a=s+t.length;;){for(var u=void 0,c=0;cs&&u.from<=s);c++);if(u.to>=a)return h(e,t,n,r,i,o,l);h(e,t.slice(0,u.to-s),n,r,null,o,l),r=null,t=t.slice(u.to-s),s=u.to}}}(r.addToken,l)),r.map=[],t!=e.display.externalMeasured&&H(o));!function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var l,s,a,u,c,h,d,f=i.length,p=0,g=1,m="",v=0;;){if(v==p){a=u=c=s="",h=d=null,v=1/0;for(var y=[],b=void 0,w=0;wp||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==v&&(b=b||[]).push(C.endStyle,x.to),C.title&&((d=d||{}).title=C.title),C.attributes)for(var S in C.attributes)(d=d||{})[S]=C.attributes[S];C.collapsed&&(!h||$t(h.marker,C)<0)&&(h=x)}else x.from>p&&v>x.from&&(v=x.from)}if(b)for(var L=0;Ln)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function En(e,t,n,r){return Rn(e,zn(e,t),n,r)}function In(e,t){if(t>=e.display.viewFrom&&t=e.lineN&&tt)&&(i=(o=a-s)-1,a<=t&&(l="right")),null!=i){if(r=e[u+2],s==a&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l="left";if("right"==n&&i==a-s)for(;u=i.text.length?(t=i.text.length,e="before"):t<=0&&(t=0,e="after"),!a)return s("before"==e?t-1:t,"before"==e);function u(e,t,n){return s(n?e-1:e,1==a[t].level!=n)}var c=He(a,t,e),h=We,c=u(t,c,"before"==e);return null!=h&&(c.other=u(t,h,"before"!=e)),c}function Jn(e,t){var n=0,t=(t=E(e.doc,t),e.options.lineWrapping||(n=ar(e.display)*t.ch),W(e.doc,t.line)),e=rn(t)+On(e.display);return{left:n,right:n,top:e,bottom:e+t.height}}function er(e,t,n,r,i){e=F(e,t,n);return e.xRel=i,r&&(e.outside=r),e}function tr(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return er(r.first,0,null,-1,-1);var i=vt(r,n),o=r.first+r.size-1;if(o=a.bottom?1:0)}return c=Ae(e.text,c,1),er(t,c,g,f,r-p)}(e,l,i,t,n),a=function(e,t){var n,r=Rt&&e.markedSpans;if(r)for(var i=0;it)&&(!n||$t(n,o.marker)<0)&&(n=o.marker)}return n}(l,s.ch+(0r},i,e)}}function rr(e,t,n,r){return nr(e,t,n=n||zn(e,t),_n(e,t,Rn(e,n,r),"line").top)}function ir(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function or(n,r,i,o,l,s,a){var e,t=De(function(e){var e=l[e],t=1!=e.level;return ir(Qn(n,F(i,t?e.to:e.from,t?"before":"after"),"line",r,o),s,a,!0)},0,l.length-1),u=l[t];return 0a&&(u=l[t-1])),u}function lr(e,t,n,r,i,o,l){for(var l=nr(e,t,r,l),s=l.begin,a=l.end,u=(/\s/.test(t.text.charAt(a-1))&&a--,null),c=null,h=0;h=a||f.to<=s||(d=(d=Rn(e,r,1!=f.level?Math.min(a,f.to)-1:Math.max(s,f.from)).right)a?{from:u.from,to:a,level:u.level}:u}function sr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Bn){Bn=M("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Bn.appendChild(document.createTextNode("x")),Bn.appendChild(M("br"));Bn.appendChild(document.createTextNode("x"))}y(e.measure,Bn);var n=Bn.offsetHeight/50;return 3=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;rt)&&(o.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=o.viewTo?Rt&&en(e.doc,t)o.viewFrom?mr(e):(o.viewFrom+=r,o.viewTo+=r):t<=o.viewFrom&&n>=o.viewTo?mr(e):t<=o.viewFrom?(l=vr(e,n,n+r,1))?(o.view=o.view.slice(l.index),o.viewFrom=l.lineN,o.viewTo+=r):mr(e):n>=o.viewTo?(l=vr(e,t,t,-1))?(o.view=o.view.slice(0,l.index),o.viewTo=l.lineN):mr(e):(l=vr(e,t,t,-1),i=vr(e,n,n+r,1),l&&i?(o.view=o.view.slice(0,l.index).concat(mn(e,l.lineN,i.lineN)).concat(o.view.slice(i.index)),o.viewTo+=r):mr(e)),o.externalMeasured);l&&(n=i.lineN&&t=r.viewTo||null!=(i=r.view[pr(e,t)]).node&&-1==L(r=i.changes||(i.changes=[]),n)&&r.push(n)}function mr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function vr(e,t,n,r){var i,o=pr(e,t),l=e.display.view;if(!Rt||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,a=0;a=e.display.viewTo||s.to().linet||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(C,g||0,null==m?b:m,function(e,t,n,r){var i,o,l,s,a,u="ltr"==n,c=w(e,u?"left":"right"),h=w(t-1,u?"right":"left"),d=null==g&&0==e,f=null==m&&t==b,p=0==r,r=!C||r==C.length-1;h.top-c.top<=3?(i=(k?d:f)&&p?S:(u?c:h).left,a=(k?f:d)&&r?L:(u?h:c).right,T(i,c.top,a-i,c.bottom)):(a=u?(o=k&&d&&p?S:c.left,l=k?L:x(e,n,"before"),s=k?S:x(t,n,"after"),k&&f&&r?L:h.right):(o=k?x(e,n,"before"):S,l=!k&&d&&p?L:c.right,s=!k&&f&&r?S:h.left,k?x(t,n,"after"):L),T(o,c.top,l-o,c.bottom),c.bottome.display.sizerWidth&&((a=Math.ceil(c/ar(e.display)))>e.display.maxLineLength&&(e.display.maxLineLength=a,e.display.maxLine=s.line,e.display.maxLineChanged=!0))}}2=o&&(i=vt(t,rn(W(t,n))-e.wrapper.clientHeight),o=n)),{from:i,to:Math.max(o,i+1)}}function Dr(e,t){var n=e.display,r=sr(e.display),i=(t.top<0&&(t.top=0),(e.curOp&&null!=e.curOp.scrollTop?e.curOp:n.scroller).scrollTop),o=Fn(e),l={},s=(t.bottom-t.top>o&&(t.bottom=t.top+o),e.doc.height+An(n)),a=t.tops-r,r=(t.topi+o&&((a=Math.min(t.top,(r?s:t.bottom)-o))!=i&&(l.scrollTop=a)),e.options.fixedGutter?0:n.gutters.offsetWidth),s=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-r,o=Hn(e)-n.gutters.offsetWidth,i=t.right-t.left>o;return i&&(t.right=t.left+o),t.left<10?l.scrollLeft=0:t.lefto+s-3&&(l.scrollLeft=t.right+(i?0:10)-o),l}function Wr(e,t){null!=t&&(Pr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc:e.curOp).scrollTop+t)}function Hr(e){Pr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Fr(e,t,n){null==t&&null==n||Pr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Pr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Er(e,Jn(e,t.from),Jn(e,t.to),t.margin))}function Er(e,t,n,r){t=Dr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Fr(e,t.scrollLeft,t.scrollTop)}function Ir(e,t){Math.abs(e.doc.scrollTop-t)<2||(d||ti(e,{top:t}),zr(e,t,!0),d&&ti(e),qr(e,100))}function zr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),e.display.scroller.scrollTop==t&&!n||(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Rr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,ii(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Br(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+An(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Wn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function Gr(e,t,n){this.cm=n;var r=this.vert=M("div",[M("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=M("div",[M("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),k(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),k(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,w&&v<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function Ur(){}Gr.prototype.update=function(e){var t,n=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;return r?(this.vert.style.display="block",this.vert.style.bottom=n?i+"px":"0",t=e.viewHeight-(n?i:0),this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+t)+"px"):(this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0"),n?(this.horiz.style.display="block",this.horiz.style.right=r?i+"px":"0",this.horiz.style.left=e.barLeft+"px",t=e.viewWidth-e.barLeft-(r?i:0),this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+t)+"px"):(this.horiz.style.display="",this.horiz.firstChild.style.width="0"),!this.checkedZeroWidth&&0=l.viewTo)||l.maxLineChanged&&o.options.lineWrapping,i.update=i.mustUpdate&&new Qr(o,i.mustUpdate&&{top:i.scrollTop,ensure:i.scrollToPos},i.forceUpdate)}for(var s=0;s(i.defaultView.innerHeight||i.documentElement.clientHeight)&&(r=!1),null==r||X||(o=M("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-On(e.display))+"px;\n height: "+(t.bottom-t.top+Wn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;"),e.display.lineSpace.appendChild(o),o.scrollIntoView(r),e.display.lineSpace.removeChild(o)))}(w,v));var S=b.maybeHiddenMarkers,L=b.maybeUnhiddenMarkers;if(S)for(var k=0;k=l.display.viewTo||(s=+new Date+l.options.workTime,a=At(l,c.highlightFrontier),u=[],c.iter(a.line,Math.min(c.first+c.size,l.display.viewTo+500),function(e){if(a.line>=l.display.viewFrom){for(var t=e.styles,n=e.text.length>l.options.maxHighlightLength?ht(c.mode,a.state):null,r=Nt(l,e,a,!0),n=(n&&(a.state=n),e.styles=r.styles,e.styleClasses),r=r.classes,i=(r?e.styleClasses=r:n&&(e.styleClasses=null),!t||t.length!=e.styles.length||n!=r&&(!n||!r||n.bgClass!=r.bgClass||n.textClass!=r.textClass)),o=0;!i&&os)return qr(l,l.options.workDelay),!0}),c.highlightFrontier=a.line,c.modeFrontier=Math.max(c.modeFrontier,a.line),u.length&&h(l,function(){for(var e=0;e=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==yr(e))return!1;oi(e)&&(mr(e),t.dims=ur(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin),r=(n.viewFroml&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),Rt&&(o=en(e.doc,o),l=tn(e.doc,l)),o!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth),i=(i=o,o=l,0==(c=(l=e).display).view.length||i>=c.viewTo||o<=c.viewFrom?(c.view=mn(l,i,o),c.viewFrom=i):(c.viewFrom>i?c.view=mn(l,i,c.viewFrom).concat(c.view):c.viewFromo&&(c.view=c.view.slice(0,pr(l,o)))),c.viewTo=o,n.viewOffset=rn(W(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px",yr(e));if(!r&&0==i&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var l=function(e){if(e.hasFocus())return null;if(!(n=N(ae(e)))||!re(e.display.lineDiv,n))return null;var t,n={activeElt:n};return window.getSelection&&(t=ue(e).getSelection()).anchorNode&&t.extend&&re(e.display.lineDiv,t.anchorNode)&&(n.anchorNode=t.anchorNode,n.anchorOffset=t.anchorOffset,n.focusNode=t.focusNode,n.focusOffset=t.focusOffset),n}(e),s=(4=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Jr(e,t))break;Nr(e);var i=Br(e);br(e),Vr(e,i),ri(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ti(e,t){var n,t=new Qr(e,t);Jr(e,t)&&(Nr(e),ei(e,t),n=Br(e),br(e),Vr(e,n),ri(e,n),t.finish())}function ni(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",b(e,"gutterChanged",e)}function ri(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Wn(e)+"px"}function ii(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=cr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;ll.clientWidth,a=l.scrollHeight>l.clientHeight;if(r&&s||n&&a){if(n&&C&&x)e:for(var u=t.target,c=o.view;u!=l;u=u.parentNode)for(var h=0;hs-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(o=l).lastOp==r?(Ai(o.done),z(o.done)):o.done.length&&!z(o.done).ranges?z(o.done):1l.undoDepth;)l.done.shift(),l.done[0].ranges||l.done.shift()}l.done.push(n),l.generation=++l.maxGeneration,l.lastModTime=l.lastSelTime=s,l.lastOp=l.lastSelOp=r,l.lastOrigin=l.lastSelOrigin=t.origin,i||O(e,"historyAdded")}function Wi(e,t,n,r){var i,o,l,s=e.history,a=r&&r.origin;n==s.lastSelOp||a&&s.lastSelOrigin==a&&(s.lastModTime==s.lastSelTime&&s.lastOrigin==a||(e=e,i=a,o=z(s.done),l=t,"*"==(i=i.charAt(0))||"+"==i&&o.ranges.length==l.ranges.length&&o.somethingSelected()==l.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)))?s.done[s.done.length-1]=t:Hi(t,s.done),s.lastSelTime=+new Date,s.lastSelOrigin=a,s.lastSelOp=n,r&&!1!==r.clearRedo&&Ai(s.undone)}function Hi(e,t){var n=z(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Fi(t,n,e,r){var i=n["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((i=i||(n["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function Pi(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=[],i=0;i=t.ch:s.to>t.ch))){if(i&&(O(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(a.atomic){if(n){var s=a.find(r<0?1:-1),h=void 0;if((s=(r<0?c:u)?qi(e,s,-r,s&&s.line==t.line?o:null):s)&&s.line==t.line&&(h=P(s,n))&&(r<0?h<0:0e.first?E(e,F(t.line-1)):null:0e.lastLine())){t.from.linei?{from:t.from,to:F(i,W(e,i).text.length),text:[t.text[0]],origin:t.origin}:t).removed=pt(e,t.from,t.to),n=n||bi(e,t),e.cm){var i=e.cm,o=t,l=r,s=i.doc,a=i.display,u=o.from,c=o.to,h=!1,d=u.line,f=(i.options.lineWrapping||(d=H(Jt(W(s,u.line))),s.iter(d,c.line+1,function(e){if(e==a.maxLine)return h=!0})),-1a.maxLineLength&&(a.maxLine=e,a.maxLineLength=t,a.maxLineChanged=!0,h=!1)}),h&&(i.curOp.updateMaxLine=!0)),s),p=u.line;if(f.modeFrontier=Math.min(f.modeFrontier,p),!(f.highlightFrontiert.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=c,t.display.maxLineChanged=!0)}null!=r&&t&&this.collapsed&&I(t,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Xi(t.doc)),t&&b(t,"markerCleared",t,this,r,i),n&&_r(t),this.parent&&this.parent.clear()}},po.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,l){i=E(this,i),o=E(this,o);var s=[],a=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var n=0;n=r.to||null==r.from&&a!=i.line||null!=r.from&&a==o.line&&r.from>=o.ch||l&&!l(r.marker)||s.push(r.marker.parent||r.marker)}++a}),s},getAllMarks:function(){var r=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var n=0;nt&&(t=e.from),null!=e.to&&e.toe.text.length?null:t}function Uo(e,t,n){e=Go(e,t.ch,n);return null==e?null:new F(t.line,e,n<0?"after":"before")}function Vo(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o,l,s,a,e=Ge(n,t.doc.direction);if(e)return o=i<0==(1==(e=i<0?z(e):e[0]).level)?"after":"before",0=n.text.length?(s.ch=n.text.length,s.sticky="before"):s.ch<=0&&(s.ch=0,s.sticky="after");var r=He(a,s.ch,s.sticky),i=a[r];if("ltr"==t.doc.direction&&i.level%2==0&&(0s.ch:i.from=i.from&&d>=c.begin))return new F(s.line,d,h?"before":"after")}function f(e,t,n){for(var r=function(e,t){return t?new F(s.line,u(e,1),"before"):new F(s.line,e,"after")};0<=e&&el.doc.first&&((n=W(l.doc,e.line-1).text)&&(e=new F(e.line,1),l.replaceRange(t.charAt(0)+l.doc.lineSeparator()+n.charAt(n.length-1),F(e.line-1,n.length-1),e,"+transpose")))),i.push(new G(e,e)));l.setSelections(i)})},newlineAndIndent:function(r){return h(r,function(){for(var e=(t=r.listSelections()).length-1;0<=e;e--)r.replaceRange(r.doc.lineSeparator(),t[e].anchor,t[e].head,"+input");for(var t=r.listSelections(),n=0;nc&&t.push(new G(F(s,c),F(s,ye(u,l,n))))}t.length||t.push(new G(f,f)),U(g,gi(d,y.ranges.slice(0,v).concat(t),v),{origin:"*mouse",scroll:!1}),d.scrollIntoView(e)}else{var h,r=m,i=sl(d,e,p.unit),e=r.anchor,e=0=n.to||o.linea.bottom?20:0)&&setTimeout(R(d,function(){u==i&&(l.scroller.scrollTop+=r,e(t))}),50))}:n)(e)}),i=R(d,n);d.state.selectingText=i,k(l.wrapper.ownerDocument,"mousemove",r),k(l.wrapper.ownerDocument,"mouseup",i)})(i,s,o,a)):qe(e)==h.scroller&&D(e):2==n?(t&&Ri(c.doc,t),setTimeout(function(){return h.input.focus()},20)):3==n&&(Q?c.display.input.onContextMenu(e):kr(c)))))}function sl(e,t,n){if("char"==n)return new G(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new G(F(t.line,0),E(e.doc,F(t.line+1,0)));n=n(e,t);return new G(n.from,n.to)}function al(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&D(t);var l=e.display,r=l.lineDiv.getBoundingClientRect();if(o>r.bottom||!je(e,n))return $e(t);o-=r.top-l.viewOffset;for(var s=0;s=i)return O(e,n,e,vt(e.doc,o),e.display.gutterSpecs[s].className,t),$e(t)}}function ul(e,t){return al(e,t,"gutterClick",!0)}function cl(e,t){var n,r;Nn(e.display,t)||(r=t,je(n=e,"gutterContextMenu")&&al(n,r,"gutterContextMenu",!1))||A(e,t,"contextmenu")||Q||e.display.input.onContextMenu(t)}function hl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),jn(e)}rl.prototype.compare=function(e,t,n){return this.time+400>e&&0==P(t,this.pos)&&n==this.button};var dl={toString:function(){return"CodeMirror.Init"}},fl={},pl={};function gl(e,t,n){!t!=!(n&&n!=dl)&&(n=e.display.dragFunctions,(t=t?k:T)(e.display.scroller,"dragstart",n.start),t(e.display.scroller,"dragenter",n.enter),t(e.display.scroller,"dragover",n.over),t(e.display.scroller,"dragleave",n.leave),t(e.display.scroller,"drop",n.drop))}function ml(e){e.options.lineWrapping?(ie(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(ee(e.display.wrapper,"CodeMirror-wrap"),ln(e)),dr(e),I(e),jn(e),setTimeout(function(){return Vr(e)},100)}function p(e,t){var n=this;if(!(this instanceof p))return new p(e,t);this.options=t=t?he(t):{},he(fl,t,!1);var r,i=t.value,o=("string"==typeof i?i=new f(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i,new p.inputStyles[t.inputStyle](this)),e=this.display=new ui(e,i,o,t),l=(hl(e.wrapper.CodeMirror=this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Xr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new de,keySeq:null,specialChars:null},t.autofocus&&!_&&e.input.focus(),w&&v<11&&setTimeout(function(){return n.display.input.reset(!0)},20),this),s=l.display;k(s.scroller,"mousedown",R(l,ll)),k(s.scroller,"dblclick",w&&v<11?R(l,function(e){var t;A(l,e)||(!(t=fr(l,e))||ul(l,e)||Nn(l.display,e)||(D(e),e=l.findWordAt(t),Ri(l.doc,e.anchor,e.head)))}):function(e){return A(l,e)||D(e)}),k(s.scroller,"contextmenu",function(e){return cl(l,e)}),k(s.input.getField(),"contextmenu",function(e){s.scroller.contains(e.target)||cl(l,e)});var a,u={end:0};function c(){s.activeTouch&&(a=setTimeout(function(){return s.activeTouch=null},1e3),(u=s.activeTouch).end=+new Date)}function h(e,t){if(null==t.left)return 1;var n=t.left-e.left,t=t.top-e.top;return 400o.first?S(W(o,t-1).text,null,l):0:"add"==n?c=a+e.options.indentUnit:"subtract"==n?c=a-e.options.indentUnit:"number"==typeof n&&(c=a+n);var c=Math.max(0,c),h="",d=0;if(e.options.indentWithTabs)for(var f=Math.floor(c/l);f;--f)d+=l,h+="\t";if(dl,a=tt(t),u=null;if(s&&1l?"cut":"+input")});Ji(e.doc,f),b(e,"inputRead",e,f)}t&&!s&&Sl(e,t),Hr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Cl(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");return n&&(e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||h(t,function(){return xl(t,n,0,null,"paste")}),1)}function Sl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;0<=r;r--){var i=n.ranges[r];if(!(100=n.first+n.size||(r=new F(e,r.ch,r.sticky),!(s=W(n,e))))return;r=Vo(l,n.cm,s,r.line,a)}else r=t;return 1}if("char"==o||"codepoint"==o)u();else if("column"==o)u(!0);else if("word"==o||"group"==o)for(var c=null,h="group"==o,d=n.cm&&n.cm.getHelper(r,"wordChars"),f=!0;!(i<0)||u(!f);f=!1){var p=s.text.charAt(r.ch)||"\n",p=Te(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||f||p||(p="s"),c&&c!=p){i<0&&(i=1,u(),r.sticky="after");break}if(p&&(c=p),0=s.height){l.hitSide=!0;break}o+=5*n}return l}function r(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new de,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}function Ol(e,t){var n=In(e,t.line);if(!n||n.hidden)return null;var r=W(e.doc,t.line),n=Pn(n,r,t.line),r=Ge(r,e.doc.direction),e="left",r=(r&&(e=He(r,t.ch)%2?"right":"left"),Un(n.map,t.ch,e));return r.offset="right"==r.collapse?r.end:r.start,r}function Al(e,t){return t&&(e.bad=!0),e}function Dl(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Al(e.clipPos(F(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||n.line=t.display.viewFrom&&Ol(t,r)||{node:i[0].measure.map[2],offset:0},r=n.linet.firstLine()&&(i=F(i.line-1,W(t.doc,i.line-1).length)),r.ch==W(t.doc,r.line).text.length&&r.linen.viewTo-1)return!1;var o,l=i.line==n.viewFrom||0==(l=pr(t,i.line))?(e=H(n.view[0].line),n.view[0].node):(e=H(n.view[l].line),n.view[l-1].node.nextSibling),r=pr(t,r.line),n=r==n.view.length-1?(o=n.viewTo-1,n.lineDiv.lastChild):(o=H(n.view[r+1].line)-1,n.view[r+1].node.previousSibling);if(!l)return!1;for(var s=t.doc.splitLines(function(o,e,t,l,s){var n="",a=!1,u=o.doc.lineSeparator(),c=!1;function h(){a&&(n+=u,c&&(n+=u),a=c=!1)}function d(e){e&&(h(),n+=e)}for(;!function e(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)d(n);else if(n=t.getAttribute("cm-marker"))(n=o.findMarks(F(l,0),F(s+1,0),(i=+n,function(e){return e.id==i}))).length&&(n=n[0].find(0))&&d(pt(o.doc,n.from,n.to).join(u));else if("false"!=t.getAttribute("contenteditable")&&(n=/^(pre|div|p|li|table|br)$/i.test(t.nodeName),/^br$/i.test(t.nodeName)||0!=t.textContent.length)){n&&h();for(var r=0;ri.ch&&p.charCodeAt(p.length-c-1)==g.charCodeAt(g.length-c-1);)u--,c++;s[s.length-1]=p.slice(0,p.length-c).replace(/^\u200b+/,""),s[0]=s[0].slice(u).replace(/\u200b+$/,"");r=F(e,u),l=F(o,a.length?z(a).length-c:0);return 1n&&(yl(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Hr(this));else{for(var o=i.from(),i=i.to(),l=Math.max(n,o.line),n=Math.min(this.lastLine(),i.line-(i.ch?0:1))+1,s=l;s>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]l)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(a=e.bottom),u+t.offsetWidth>o&&(u=o-t.offsetWidth)),t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(r=this,l={left:u,top:a,right:u+t.offsetWidth,bottom:a+t.offsetHeight},null!=(l=Dr(r,l)).scrollTop&&Ir(r,l.scrollTop),null!=l.scrollLeft&&Rr(r,l.scrollLeft))},triggerOnKeyDown:t(el),triggerOnKeyPress:t(nl),triggerOnKeyUp:tl,triggerOnMouseDown:t(ll),execCommand:function(e){if(jo.hasOwnProperty(e))return jo[e].call(null,this)},triggerElectric:t(function(e){Sl(this,e)}),findPosH:function(e,t,n,r){for(var i=1,o=(t<0&&(i=-1,t=-t),E(this.doc,e)),l=0;l*\/]/.test(r)?(a="select-op",null):"."==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?a="qualifier":/[:;{}\[\]\(\)]/.test(r)?v(null,r):e.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(e.current())&&(t.tokenize=z),a="variable","variable callee"):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),a="word","property"):a=null})(e,t);return r&&"object"==typeof r&&(a=r[1],r=r[0]),i=r,"comment"!=a&&(t.state=_[t.state](a,e,t)),i},indent:function(e,t){var e=e.context,t=t&&t.charAt(0),r=e.indent;return(e="prop"!=e.type||"}"!=t&&")"!=t?e:e.prev).prev&&("}"!=t||"block"!=e.type&&"top"!=e.type&&"interpolation"!=e.type&&"restricted_atBlock"!=e.type?(")"!=t||"parens"!=e.type&&"atBlock_parens"!=e.type)&&("{"!=t||"at"!=e.type&&"atBlock"!=e.type)||(r=Math.max(0,e.indent-n)):r=(e=e.prev).indent),r},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:k,fold:"brace"}});var t=["domain","regexp","url","url-prefix"],r=e(t),o=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],i=e(o),a=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover","prefers-color-scheme","dynamic-range","video-dynamic-range"],n=e(a),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive","dark","light","standard","high"],s=e(l),c=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","all","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","binding","bleed","block-size","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-content","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-height-step","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotate","rotation","rotation-point","row-gap","ruby-align","ruby-overhang","ruby-position","ruby-span","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-type","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-orientation","text-outline","text-overflow","text-rendering","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","touch-action","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","paint-order","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],d=e(c),p=["accent-color","aspect-ratio","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","content-visibility","margin-block","margin-block-end","margin-block-start","margin-inline","margin-inline-end","margin-inline-start","overflow-anchor","overscroll-behavior","padding-block","padding-block-end","padding-block-start","padding-inline","padding-inline-end","padding-inline-start","scroll-snap-stop","scrollbar-3d-light-color","scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-track-color","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","shape-inside","zoom"],u=e(p),m=e(["font-display","font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),g=e(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),b=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],h=e(b),f=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","blur","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","brightness","bullets","button","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","conic-gradient","contain","content","contents","content-box","context-menu","continuous","contrast","copy","counter","counters","cover","crop","cross","crosshair","cubic-bezier","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","drop-shadow","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","grayscale","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","hue-rotate","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","manipulation","match","matrix","matrix3d","media-play-button","media-slider","media-sliderthumb","media-volume-slider","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiple_mask_images","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturate","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","sepia","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],k=e(f),t=t.concat(o).concat(a).concat(l).concat(c).concat(p).concat(b).concat(f);function y(e,t){for(var r,o=!1;null!=(r=e.next());){if(o&&"/"==r){t.tokenize=null;break}o="*"==r}return["comment","comment"]}T.registerHelper("hintWords","css",t),T.defineMIME("text/css",{documentTypes:r,mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:d,nonStandardPropertyKeywords:u,fontProperties:m,counterDescriptors:g,colorKeywords:h,valueKeywords:k,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=y)(e,t)}},name:"css"}),T.defineMIME("text/x-scss",{mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:d,nonStandardPropertyKeywords:u,colorKeywords:h,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=y)(e,t):["operator","operator"]},":":function(e){return!!e.match(/^\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),T.defineMIME("text/x-less",{mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:d,nonStandardPropertyKeywords:u,colorKeywords:h,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=y)(e,t):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),T.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:i,mediaFeatures:n,propertyKeywords:d,nonStandardPropertyKeywords:u,fontProperties:m,counterDescriptors:g,colorKeywords:h,valueKeywords:k,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=y)(e,t)}},name:"css",helperType:"gss"})}); \ No newline at end of file diff --git a/v2/webui/examples/C/text-editor/ui/js/javascript.min.js b/v2/webui/examples/C/text-editor/ui/js/javascript.min.js new file mode 100644 index 0000000..0bf8e3c --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/js/javascript.min.js @@ -0,0 +1 @@ +!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(rt){"use strict";rt.defineMode("javascript",function(e,l){var t,r,O,P,f=e.indentUnit,N=l.statementIndent,U=l.jsonld,o=l.json||U,W=!1!==l.trackScope,u=l.typescript,B=l.wordCharacters||/[\w$\xa1-\uffff]/,F=(e=n("keyword a"),t=n("keyword b"),r=n("keyword c"),O=n("keyword d"),P=n("operator"),{if:n("if"),while:e,with:e,else:t,do:t,try:t,finally:t,return:O,break:O,continue:O,new:n("new"),delete:r,void:r,throw:r,debugger:n("debugger"),var:n("var"),const:n("var"),let:n("var"),function:n("function"),catch:n("catch"),for:n("for"),switch:n("switch"),case:n("case"),default:n("default"),in:P,typeof:P,instanceof:P,true:e={type:"atom",style:"atom"},false:e,null:e,undefined:e,NaN:e,Infinity:e,this:n("this"),class:n("class"),super:n("atom"),yield:r,export:n("export"),import:n("import"),extends:r,await:r});function n(e){return{type:e,style:"keyword"}}var H,D,G=/[+\-*&%=<>!?|~^@]/,J=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function i(e,t,r){return H=e,D=r,t}function d(e,t){var a,r=e.next();if('"'==r||"'"==r)return t.tokenize=(a=r,function(e,t){var r,n=!1;if(U&&"@"==e.peek()&&e.match(J))return t.tokenize=d,i("jsonld-keyword","meta");for(;null!=(r=e.next())&&(r!=a||n);)n=!n&&"\\"==r;return n||(t.tokenize=d),i("string","string")}),t.tokenize(e,t);if("."==r&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return i("number","number");if("."==r&&e.match(".."))return i("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return i(r);if("="==r&&e.eat(">"))return i("=>","operator");if("0"==r&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return i("number","number");if(/\d/.test(r))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),i("number","number");if("/"==r)return e.eat("*")?(t.tokenize=K)(e,t):e.eat("/")?(e.skipToEnd(),i("comment","comment")):tt(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),i("regexp","string-2")):(e.eat("="),i("operator","operator",e.current()));if("`"==r)return(t.tokenize=L)(e,t);if("#"==r&&"!"==e.peek())return e.skipToEnd(),i("meta","meta");if("#"==r&&e.eatWhile(B))return i("variable","property");if("<"==r&&e.match("!--")||"-"==r&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),i("comment","comment");if(G.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-|&?]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),"?"==r&&e.eat(".")?i("."):i("operator","operator",e.current());if(B.test(r)){e.eatWhile(B);r=e.current();if("."!=t.lastType){if(F.propertyIsEnumerable(r))return i((t=F[r]).type,t.style,r);if("async"==r&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return i("async","keyword",r)}return i("variable","variable",r)}}function K(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=d;break}n="*"==r}return i("comment","comment")}function L(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=d;break}n=!n&&"\\"==r}return i("quasi","string-2",e.current())}function Q(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){!u||(n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r)))&&(r=n.index);for(var n,a=0,i=!1,o=r-1;0<=o;--o){var c=e.string.charAt(o),s="([{}])".indexOf(c);if(0<=s&&s<3){if(!a){++o;break}if(0==--a){"("==c&&(i=!0);break}}else if(3<=s&&s<6)++a;else if(B.test(c))i=!0;else if(/["'\/`]/.test(c))for(;;--o){if(0==o)return;if(e.string.charAt(o-1)==c&&"\\"!=e.string.charAt(o-2)){o--;break}}else if(i&&!a){++o;break}}i&&!a&&(t.fatArrowAt=o)}}var R={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function X(e,t,r,n,a,i){this.indented=e,this.column=t,this.type=r,this.prev=a,this.info=i,null!=n&&(this.align=n)}function Y(e,t,r,n,a){var i=e.cc;for(c.state=e,c.stream=a,c.marked=null,c.cc=i,c.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((i.length?i.pop():o?x:b)(r,n)){for(;i.length&&i[i.length-1].lex;)i.pop()();return c.marked?c.marked:"variable"==r&&function(e,t){if(W){for(var r=e.localVars;r;r=r.next)if(r.name==t)return 1;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return 1}}(e,n)?"variable-2":t}}var c={state:null,column:null,marked:null,cc:null};function s(){for(var e=arguments.length-1;0<=e;e--)c.cc.push(arguments[e])}function p(){return s.apply(null,arguments),!0}function Z(e,t){for(var r=t;r;r=r.next)if(r.name==e)return 1}function a(e){var t=c.state;if(c.marked="def",W){if(t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,r){{var n;return r?r.block?(n=e(t,r.prev))?n==r.prev?r:new te(n,r.vars,!0):null:Z(t,r.vars)?r:new te(r.prev,new re(t,r.vars),!1):null}}(e,t.context);if(null!=r)return void(t.context=r)}else if(!Z(e,t.localVars))return void(t.localVars=new re(e,t.localVars));l.globalVars&&!Z(e,t.globalVars)&&(t.globalVars=new re(e,t.globalVars))}}function ee(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function te(e,t,r){this.prev=e,this.vars=t,this.block=r}function re(e,t){this.name=e,this.next=t}var ne=new re("this",new re("arguments",null));function m(){c.state.context=new te(c.state.context,c.state.localVars,!1),c.state.localVars=ne}function ae(){c.state.context=new te(c.state.context,c.state.localVars,!0),c.state.localVars=null}function k(){c.state.localVars=c.state.context.vars,c.state.context=c.state.context.prev}function v(n,a){function e(){var e=c.state,t=e.indented;if("stat"==e.lexical.type)t=e.lexical.indented;else for(var r=e.lexical;r&&")"==r.type&&r.align;r=r.prev)t=r.indented;e.lexical=new X(t,c.stream.column(),n,null,e.lexical,a)}return e.lex=!0,e}function y(){var e=c.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function w(r){return function e(t){return t==r?p():";"==r||"}"==t||")"==t||"]"==t?s():p(e)}}function b(e,t){return"var"==e?p(v("vardef",t),qe,w(";"),y):"keyword a"==e?p(v("form"),oe,b,y):"keyword b"==e?p(v("form"),b,y):"keyword d"==e?c.stream.match(/^\s*$/,!1)?p():p(v("stat"),g,w(";"),y):"debugger"==e?p(w(";")):"{"==e?p(v("}"),ae,be,y,k):";"==e?p():"if"==e?("else"==c.state.lexical.info&&c.state.cc[c.state.cc.length-1]==y&&c.state.cc.pop()(),p(v("form"),oe,b,y,Oe)):"function"==e?p(q):"for"==e?p(v("form"),ae,Pe,b,k,y):"class"==e||u&&"interface"==t?(c.marked="keyword",p(v("form","class"==e?e:t),Fe,y)):"variable"==e?u&&"declare"==t?(c.marked="keyword",p(b)):u&&("module"==t||"enum"==t||"type"==t)&&c.stream.match(/^\s*\w/,!1)?(c.marked="keyword","enum"==t?p(Ze):"type"==t?p(We,w("operator"),z,w(";")):p(v("form"),T,w("{"),v("}"),be,y,y)):u&&"namespace"==t?(c.marked="keyword",p(v("form"),x,b,y)):u&&"abstract"==t?(c.marked="keyword",p(b)):p(v("stat"),me):"switch"==e?p(v("form"),oe,w("{"),v("}","switch"),ae,be,y,y,k):"case"==e?p(x,w(":")):"default"==e?p(w(":")):"catch"==e?p(v("form"),m,ie,b,y,k):"export"==e?p(v("stat"),Ge,y):"import"==e?p(v("stat"),Ke,y):"async"==e?p(b):"@"==t?p(x,b):s(v("stat"),x,w(";"),y)}function ie(e){if("("==e)return p(S,w(")"))}function x(e,t){return ce(e,t,!1)}function h(e,t){return ce(e,t,!0)}function oe(e){return"("!=e?s():p(v(")"),g,w(")"),y)}function ce(e,t,r){if(c.state.fatArrowAt==c.stream.start){var n=r?fe:le;if("("==e)return p(m,v(")"),V(S,")"),y,w("=>"),n,k);if("variable"==e)return s(m,T,w("=>"),n,k)}var a,n=r?M:j;return R.hasOwnProperty(e)?p(n):"function"==e?p(q,n):"class"==e||u&&"interface"==t?(c.marked="keyword",p(v("form"),Be,y)):"keyword c"==e||"async"==e?p(r?h:x):"("==e?p(v(")"),g,w(")"),y,n):"operator"==e||"spread"==e?p(r?h:x):"["==e?p(v("]"),Ye,y,n):"{"==e?we(ve,"}",null,n):"quasi"==e?s(se,n):"new"==e?p((a=r,function(e){return"."==e?p(a?pe:de):"variable"==e&&u?p(Ie,a?M:j):s(a?h:x)})):p()}function g(e){return e.match(/[;\}\)\],]/)?s():s(x)}function j(e,t){return","==e?p(g):M(e,t,!1)}function M(e,t,r){var n=0==r?j:M,a=0==r?x:h;return"=>"==e?p(m,r?fe:le,k):"operator"==e?/\+\+|--/.test(t)||u&&"!"==t?p(n):u&&"<"==t&&c.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?p(v(">"),V(z,">"),y,n):"?"==t?p(x,w(":"),a):p(a):"quasi"==e?s(se,n):";"!=e?"("==e?we(h,")","call",n):"."==e?p(ke,n):"["==e?p(v("]"),g,w("]"),y,n):u&&"as"==t?(c.marked="keyword",p(z,n)):"regexp"==e?(c.state.lastType=c.marked="operator",c.stream.backUp(c.stream.pos-c.stream.start-1),p(a)):void 0:void 0}function se(e,t){return"quasi"!=e?s():"${"!=t.slice(t.length-2)?p(se):p(g,ue)}function ue(e){if("}"==e)return c.marked="string-2",c.state.tokenize=L,p(se)}function le(e){return Q(c.stream,c.state),s("{"==e?b:x)}function fe(e){return Q(c.stream,c.state),s("{"==e?b:h)}function de(e,t){if("target"==t)return c.marked="keyword",p(j)}function pe(e,t){if("target"==t)return c.marked="keyword",p(M)}function me(e){return":"==e?p(y,b):s(j,w(";"),y)}function ke(e){if("variable"==e)return c.marked="property",p()}function ve(e,t){return"async"==e?(c.marked="property",p(ve)):"variable"!=e&&"keyword"!=c.style?"number"==e||"string"==e?(c.marked=U?"property":c.style+" property",p(A)):"jsonld-keyword"==e?p(A):u&&ee(t)?(c.marked="keyword",p(ve)):"["==e?p(x,E,w("]"),A):"spread"==e?p(h,A):"*"==t?(c.marked="keyword",p(ve)):":"==e?s(A):void 0:(c.marked="property","get"==t||"set"==t?p(ye):(u&&c.state.fatArrowAt==c.stream.start&&(e=c.stream.match(/^\s*:\s*/,!1))&&(c.state.fatArrowAt=c.stream.pos+e[0].length),p(A)))}function ye(e){return"variable"!=e?s(A):(c.marked="property",p(q))}function A(e){return":"==e?p(h):"("==e?s(q):void 0}function V(n,a,i){function o(e,t){var r;return(i?-1"),z):"quasi"==e?s(Ve,I):void 0}function je(e){if("=>"==e)return p(z)}function Me(e){return e.match(/[\}\)\]]/)?p():","==e||";"==e?p(Me):s(Ae,Me)}function Ae(e,t){return"variable"==e||"keyword"==c.style?(c.marked="property",p(Ae)):"?"==t||"number"==e||"string"==e?p(Ae):":"==e?p(z):"["==e?p(w("variable"),xe,w("]"),Ae):"("==e?s(C,Ae):e.match(/[;\}\)\],]/)?void 0:p()}function Ve(e,t){return"quasi"!=e?s():"${"!=t.slice(t.length-2)?p(Ve):p(z,Ee)}function Ee(e){if("}"==e)return c.marked="string-2",c.state.tokenize=L,p(Ve)}function ze(e,t){return"variable"==e&&c.stream.match(/^\s*[?:]/,!1)||"?"==t?p(ze):":"==e?p(z):"spread"==e?p(ze):s(z)}function I(e,t){return"<"==t?p(v(">"),V(z,">"),y,I):"|"==t||"."==e||"&"==t?p(z):"["==e?p(z,w("]"),I):"extends"==t||"implements"==t?(c.marked="keyword",p(z)):"?"==t?p(z,w(":"),z):void 0}function Ie(e,t){if("<"==t)return p(v(">"),V(z,">"),y,I)}function Te(){return s(z,$e)}function $e(e,t){if("="==t)return p(z)}function qe(e,t){return"enum"==t?(c.marked="keyword",p(Ze)):s(T,E,$,_e)}function T(e,t){return u&&ee(t)?(c.marked="keyword",p(T)):"variable"==e?(a(t),p()):"spread"==e?p(T):"["==e?we(Se,"]"):"{"==e?we(Ce,"}"):void 0}function Ce(e,t){return"variable"!=e||c.stream.match(/^\s*:/,!1)?("variable"==e&&(c.marked="property"),"spread"==e?p(T):"}"==e?s():"["==e?p(x,w("]"),w(":"),Ce):p(w(":"),T,$)):(a(t),p($))}function Se(){return s(T,$)}function $(e,t){if("="==t)return p(h)}function _e(e){if(","==e)return p(qe)}function Oe(e,t){if("keyword b"==e&&"else"==t)return p(v("form","else"),b,y)}function Pe(e,t){return"await"==t?p(Pe):"("==e?p(v(")"),Ne,y):void 0}function Ne(e){return"var"==e?p(qe,Ue):("variable"==e?p:s)(Ue)}function Ue(e,t){return")"==e?p():";"==e?p(Ue):"in"==t||"of"==t?(c.marked="keyword",p(x,Ue)):s(x,Ue)}function q(e,t){return"*"==t?(c.marked="keyword",p(q)):"variable"==e?(a(t),p(q)):"("==e?p(m,v(")"),V(S,")"),y,he,b,k):u&&"<"==t?p(v(">"),V(Te,">"),y,q):void 0}function C(e,t){return"*"==t?(c.marked="keyword",p(C)):"variable"==e?(a(t),p(C)):"("==e?p(m,v(")"),V(S,")"),y,he,k):u&&"<"==t?p(v(">"),V(Te,">"),y,C):void 0}function We(e,t){return"keyword"==e||"variable"==e?(c.marked="type",p(We)):"<"==t?p(v(">"),V(Te,">"),y):void 0}function S(e,t){return"@"==t&&p(x,S),"spread"==e?p(S):u&&ee(t)?(c.marked="keyword",p(S)):u&&"this"==e?p(E,$):s(T,E,$)}function Be(e,t){return("variable"==e?Fe:He)(e,t)}function Fe(e,t){if("variable"==e)return a(t),p(He)}function He(e,t){return"<"==t?p(v(">"),V(Te,">"),y,He):"extends"==t||"implements"==t||u&&","==e?("implements"==t&&(c.marked="keyword"),p(u?z:x,He)):"{"==e?p(v("}"),_,y):void 0}function _(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||u&&ee(t))&&c.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(c.marked="keyword",p(_)):"variable"==e||"keyword"==c.style?(c.marked="property",p(De,_)):"number"==e||"string"==e?p(De,_):"["==e?p(x,E,w("]"),De,_):"*"==t?(c.marked="keyword",p(_)):u&&"("==e?s(C,_):";"==e||","==e?p(_):"}"==e?p():"@"==t?p(x,_):void 0}function De(e,t){if("!"==t)return p(De);if("?"==t)return p(De);if(":"==e)return p(z,$);if("="==t)return p(h);e=c.state.lexical.prev;return s(e&&"interface"==e.info?C:q)}function Ge(e,t){return"*"==t?(c.marked="keyword",p(Xe,w(";"))):"default"==t?(c.marked="keyword",p(x,w(";"))):"{"==e?p(V(Je,"}"),Xe,w(";")):s(b)}function Je(e,t){return"as"==t?(c.marked="keyword",p(w("variable"))):"variable"==e?s(h,Je):void 0}function Ke(e){return"string"==e?p():"("==e?s(x):"."==e?s(j):s(Le,Qe,Xe)}function Le(e,t){return"{"==e?we(Le,"}"):("variable"==e&&a(t),"*"==t&&(c.marked="keyword"),p(Re))}function Qe(e){if(","==e)return p(Le,Qe)}function Re(e,t){if("as"==t)return c.marked="keyword",p(Le)}function Xe(e,t){if("from"==t)return c.marked="keyword",p(x)}function Ye(e){return"]"==e?p():s(V(h,"]"))}function Ze(){return s(v("form"),T,w("{"),v("}"),V(et,"}"),y,y)}function et(){return s(T,$)}function tt(e,t,r){return t.tokenize==d&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return m.lex=ae.lex=!0,y.lex=k.lex=!0,{startState:function(e){e={tokenize:d,lastType:"sof",cc:[],lexical:new X((e||0)-f,0,"block",!1),localVars:l.localVars,context:l.localVars&&new te(null,null,!1),indented:e||0};return l.globalVars&&"object"==typeof l.globalVars&&(e.globalVars=l.globalVars),e},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),Q(e,t)),t.tokenize!=K&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==H?r:(t.lastType="operator"!=H||"++"!=D&&"--"!=D?H:"incdec",Y(t,r,H,D,e))},indent:function(e,t){if(e.tokenize==K||e.tokenize==L)return rt.Pass;if(e.tokenize!=d)return 0;var r,n=t&&t.charAt(0),a=e.lexical;if(!/^\s*else\b/.test(t))for(var i=e.cc.length-1;0<=i;--i){var o=e.cc[i];if(o==y)a=a.prev;else if(o!=Oe&&o!=k)break}for(;("stat"==a.type||"form"==a.type)&&("}"==n||(r=e.cc[e.cc.length-1])&&(r==j||r==M)&&!/^[,\.=+\-*:?[\(]/.test(t));)a=a.prev;var c,s=(a=N&&")"==a.type&&"stat"==a.prev.type?a.prev:a).type,u=n==s;return"vardef"==s?a.indented+("operator"==e.lastType||","==e.lastType?a.info.length+1:0):"form"==s&&"{"==n?a.indented:"form"==s?a.indented+f:"stat"==s?a.indented+(s=t,"operator"==(c=e).lastType||","==c.lastType||G.test(s.charAt(0))||/[,.]/.test(s.charAt(0))?N||f:0):"switch"!=a.info||u||0==l.doubleIndentSwitch?a.align?a.column+(u?0:1):a.indented+(u?0:f):a.indented+(/^(?:case|default)\b/.test(t)?f:2*f)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:o?null:"/*",blockCommentEnd:o?null:"*/",blockCommentContinue:o?null:" * ",lineComment:o?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:o?"json":"javascript",jsonldMode:U,jsonMode:o,expressionAllowed:tt,skipExpression:function(e){Y(e,"atom","atom","true",new rt.StringStream("",2,null))}}}),rt.registerHelper("wordChars","javascript",/[\w$]/),rt.defineMIME("text/javascript","javascript"),rt.defineMIME("text/ecmascript","javascript"),rt.defineMIME("application/javascript","javascript"),rt.defineMIME("application/x-javascript","javascript"),rt.defineMIME("application/ecmascript","javascript"),rt.defineMIME("application/json",{name:"javascript",json:!0}),rt.defineMIME("application/x-json",{name:"javascript",json:!0}),rt.defineMIME("application/manifest+json",{name:"javascript",json:!0}),rt.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),rt.defineMIME("text/typescript",{name:"javascript",typescript:!0}),rt.defineMIME("application/typescript",{name:"javascript",typescript:!0})}); \ No newline at end of file diff --git a/v2/webui/examples/C/text-editor/ui/js/python.min.js b/v2/webui/examples/C/text-editor/ui/js/python.min.js new file mode 100644 index 0000000..6a64e54 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/js/python.min.js @@ -0,0 +1 @@ +!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(x){"use strict";function k(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var _=k(["and","or","not","is"]),v=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in"],z=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function w(e){return e.scopes[e.scopes.length-1]}x.registerHelper("hintWords","python",v.concat(z)),x.defineMode("python",function(t,l){for(var s="error",o=l.delimiters||l.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,a=[l.singleOperators,l.doubleOperators,l.doubleDelimiters,l.tripleDelimiters,l.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],e=0;en;){if("py"!=w(t).type)return 1;t.scopes.pop()}return w(t).offset!=n}function g(e,t){e.sol()&&(t.beginningOfLine=!0,t.dedent=!1);var n,r,i,o=t.tokenize(e,t),a=e.current();if(t.beginningOfLine&&"@"==a)return e.match(c,!1)?"meta":p?"operator":s;if(/\S/.test(a)&&(t.beginningOfLine=!1),"variable"!=o&&"builtin"!=o||"meta"!=t.lastToken||(o="meta"),"pass"!=a&&"return"!=a||(t.dedent=!0),"lambda"==a&&(t.lambda=!0),":"==a&&!t.lambda&&"py"==w(t).type&&e.match(/^\s*(?:#|$)/,!1)&&b(t),1==a.length&&!/string|comment/.test(o)){var l="[({".indexOf(a);if(-1!=l&&(n=e,r=t,i="])}".slice(l,l+1),n=n.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:n.column()+1,r.scopes.push({offset:r.indent+f,type:i,align:n})),-1!=(l="])}".indexOf(a))){if(w(t).type!=a)return s;t.indent=t.scopes.pop().offset-f}}return t.dedent&&e.eol()&&"py"==w(t).type&&1 codeMirrorInstance.setValue(e.target.result); + reader.readAsText(file); +} + +async function openFile() { + if (supportsFilePicker) { + [fileHandle] = await showOpenFilePicker({ multiple: false }); + fileData = await fileHandle.getFile(); + readFile(fileData); + setFile(fileData); + } else { + let input = document.createElement('input'); + input.type = 'file'; + input.onchange = (e) => { + readFile(e.target.files[0]); + setFile(e.target.files[0]); + }; + input.click(); + input.remove(); + } +} + +async function saveFile() { + const content = codeMirrorInstance.getValue(); + if (supportsFilePicker) { + if (fileHandle) { + // Create a FileSystemWritableFileStream to write to + const writableStream = await fileHandle.createWritable(); + await writableStream.write(content); + // Write to disk + await writableStream.close(); + } else { + fileHandle = await showSaveFilePicker(); + saveFile(); + setFile(await fileHandle.getFile()); + } + } else { + // Download the file if using filePicker with a fileHandle for saving + // is not supported by the browser. E.g., in Firefox. + const blobData = new Blob([content], { type: 'text/${currentFile.ext}' }); + const urlToBlob = window.URL.createObjectURL(blobData); + const a = document.createElement('a'); + a.style.setProperty('display', 'none'); + a.href = urlToBlob; + a.download = document.title; + a.click(); + window.URL.revokeObjectURL(urlToBlob); + a.remove(); + } + saveBtn.disabled = true; +} + +// Navigation Events +// open +document.getElementById('open-btn').onclick = openFile; +// save +saveBtn.onclick = saveFile; +// about +document.getElementById('about-btn').onclick = () => (aboutBox.style.display = 'block'); // show +aboutBox.onclick = () => (aboutBox.style.display = 'none'); // hide + +// Editor Events +// enable save on change +codeMirrorInstance.on('change', () => { + saveBtn.disabled = false; +}); +window.addEventListener('DOMContentLoaded', () => { + codeMirrorInstance.setSize('100%', '99%'); +}); diff --git a/v2/webui/examples/C/text-editor/ui/js/xml.min.js b/v2/webui/examples/C/text-editor/ui/js/xml.min.js new file mode 100644 index 0000000..1b982a3 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/js/xml.min.js @@ -0,0 +1 @@ +!function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],t):t(CodeMirror)}(function(y){"use strict";var C={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},z={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};y.defineMode("xml",function(t,e){var n,i,a,l=t.indentUnit,u={},r=e.htmlMode?C:z;for(n in r)u[n]=r[n];for(n in e)u[n]=e[n];function c(e,n){function t(t){return(n.tokenize=t)(e,n)}var r=e.next();return"<"==r?e.eat("!")?e.eat("[")?e.match("CDATA[")?t(o("atom","]]>")):null:e.match("--")?t(o("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),t(function r(o){return function(t,e){for(var n;null!=(n=t.next());){if("<"==n)return e.tokenize=r(o+1),e.tokenize(t,e);if(">"==n){if(1!=o)return e.tokenize=r(o-1),e.tokenize(t,e);e.tokenize=c;break}}return"meta"}}(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),n.tokenize=o("meta","?>"),"meta"):(i=e.eat("/")?"closeTag":"openTag",n.tokenize=d,"tag bracket"):"&"==r?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function d(t,e){var n,r,o=t.next();return">"==o||"/"==o&&t.eat(">")?(e.tokenize=c,i=">"==o?"endTag":"selfcloseTag","tag bracket"):"="==o?(i="equals",null):"<"==o?(e.tokenize=c,e.state=p,e.tagName=e.tagStart=null,(n=e.tokenize(t,e))?n+" tag error":"tag error"):/[\'\"]/.test(o)?(e.tokenize=(r=o,a.isInAttribute=!0,a),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word");function a(t,e){for(;!t.eol();)if(t.next()==r){e.tokenize=d;break}return"string"}}function o(n,r){return function(t,e){for(;!t.eol();){if(t.match(r)){e.tokenize=c;break}t.next()}return n}}function s(t){return t&&t.toLowerCase()}function f(t,e,n){this.prev=t.context,this.tagName=e||"",this.indent=t.indented,this.startOfLine=n,(u.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}function m(t){t.context&&(t.context=t.context.prev)}function g(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!u.contextGrabbers.hasOwnProperty(s(n))||!u.contextGrabbers[s(n)].hasOwnProperty(s(e)))return;m(t)}}function p(t,e,n){return"openTag"==t?(n.tagStart=e.column(),h):"closeTag"==t?x:p}function h(t,e,n){return"word"==t?(n.tagName=e.current(),a="tag",w):u.allowMissingTagName&&"endTag"==t?(a="tag bracket",w(t,0,n)):(a="error",h)}function x(t,e,n){var r;return"word"==t?(r=e.current(),n.context&&n.context.tagName!=r&&u.implicitlyClosed.hasOwnProperty(s(n.context.tagName))&&m(n),n.context&&n.context.tagName==r||!1===u.matchClosing?(a="tag",b):(a="tag error",k)):u.allowMissingTagName&&"endTag"==t?(a="tag bracket",b(t,0,n)):(a="error",k)}function b(t,e,n){return"endTag"!=t?(a="error",b):(m(n),p)}function k(t,e,n){return a="error",b(t,0,n)}function w(t,e,n){return"word"==t?(a="attribute",T):"endTag"==t||"selfcloseTag"==t?(r=n.tagName,o=n.tagStart,n.tagName=n.tagStart=null,"selfcloseTag"==t||u.autoSelfClosers.hasOwnProperty(s(r))?g(n,r):(g(n,r),n.context=new f(n,r,o==n.indented)),p):(a="error",w);var r,o}function T(t,e,n){return"equals"==t?v:(u.allowMissing||(a="error"),w(t,0,n))}function v(t,e,n){return"string"==t?N:"word"==t&&u.allowUnquoted?(a="string",w):(a="error",w(t,0,n))}function N(t,e,n){return"string"==t?N:w(t,0,n)}return c.isInText=!0,{startState:function(t){var e={tokenize:c,state:p,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;i=null;var n=e.tokenize(t,e);return(n||i)&&"comment"!=n&&(a=null,e.state=e.state(i||n,t,e),a&&(n="error"==a?n+" error":a)),n},indent:function(t,e,n){var r=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+l;if(r&&r.noIndent)return y.Pass;if(t.tokenize!=d&&t.tokenize!=c)return n?n.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==u.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+l*(u.multilineTagIndentFactor||1);if(u.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:u.htmlMode?"html":"xml",helperType:u.htmlMode?"html":"xml",skipAttribute:function(t){t.state==v&&(t.state=w)},xmlCurrentTag:function(t){return t.tagName?{name:t.tagName,close:"closeTag"==t.type}:null},xmlCurrentContext:function(t){for(var e=[],n=t.context;n;n=n.prev)e.push(n.tagName);return e.reverse()}}}),y.defineMIME("text/xml","xml"),y.defineMIME("application/xml","xml"),y.mimeModes.hasOwnProperty("text/html")||y.defineMIME("text/html",{name:"xml",htmlMode:!0})}); \ No newline at end of file diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.eot b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.eot new file mode 100644 index 0000000..cba6c6c Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.eot differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.svg b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.svg new file mode 100644 index 0000000..b9881a4 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.svg @@ -0,0 +1,3717 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.ttf b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..8d75ded Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.ttf differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.woff b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.woff new file mode 100644 index 0000000..3375bef Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.woff differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.woff2 b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..402f81c Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-brands-400.woff2 differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.eot b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.eot new file mode 100644 index 0000000..a4e5989 Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.eot differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.svg b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.svg new file mode 100644 index 0000000..463af27 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.svg @@ -0,0 +1,801 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.ttf b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..7157aaf Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.ttf differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.woff b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.woff new file mode 100644 index 0000000..ad077c6 Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.woff differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.woff2 b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..5632894 Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-regular-400.woff2 differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.eot b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.eot new file mode 100644 index 0000000..e994171 Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.eot differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.svg b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.svg new file mode 100644 index 0000000..00296e9 --- /dev/null +++ b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.svg @@ -0,0 +1,5034 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.ttf b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..25abf38 Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.ttf differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.woff b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.woff new file mode 100644 index 0000000..23ee663 Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.woff differ diff --git a/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.woff2 b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..2217164 Binary files /dev/null and b/v2/webui/examples/C/text-editor/ui/webfonts/fa-solid-900.woff2 differ diff --git a/v2/webui/examples/C/virtual_file_system/GNUmakefile b/v2/webui/examples/C/virtual_file_system/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/virtual_file_system/Makefile b/v2/webui/examples/C/virtual_file_system/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/virtual_file_system/favicon.ico b/v2/webui/examples/C/virtual_file_system/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/virtual_file_system/favicon.ico differ diff --git a/v2/webui/examples/C/virtual_file_system/icon.rc b/v2/webui/examples/C/virtual_file_system/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/virtual_file_system/main.c b/v2/webui/examples/C/virtual_file_system/main.c new file mode 100644 index 0000000..c9a7669 --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/main.c @@ -0,0 +1,47 @@ +// Virtual File System Example + +#include "webui.h" +#include "vfs.h" + +void exit_app(webui_event_t* e) { + webui_exit(); +} + +int main() { + + // Create new windows + size_t MyWindow = webui_new_window(); + + // Bind HTML element IDs with a C functions + webui_bind(MyWindow, "Exit", exit_app); + + // VSF (Virtual File System) Example + // + // 1. Run Python script to generate header file of a folder + // python vfs.py "/path/to/folder" "vfs.h" + // + // 2. Include header file in your C project + // #include "vfs.h" + // + // 3. use vfs in your custom files handler `webui_set_file_handler()` + // webui_set_file_handler(MyWindow, vfs); + + // Set a custom files handler + webui_set_file_handler(MyWindow, vfs); + + // Show a new window + // webui_show_browser(MyWindow, "index.html", Chrome); + webui_show(MyWindow, "index.html"); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/C/virtual_file_system/ui/index.html b/v2/webui/examples/C/virtual_file_system/ui/index.html new file mode 100644 index 0000000..8717413 --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/ui/index.html @@ -0,0 +1,135 @@ + + + + + WebUI - Virtual File System + + + +

Virtual File System Example

+
+ +
+

+ This file is embedded in this application.
+

+

/sub

+
+ + + + + + + + diff --git a/v2/webui/examples/C/virtual_file_system/ui/sub/index.html b/v2/webui/examples/C/virtual_file_system/ui/sub/index.html new file mode 100644 index 0000000..ae8e0ad --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/ui/sub/index.html @@ -0,0 +1,64 @@ + + + + + WebUI - Virtual File System + + + +

+ This is another file embedded in this application.
+

+
+ + + + + + + diff --git a/v2/webui/examples/C/virtual_file_system/ui/svg/webui.svg b/v2/webui/examples/C/virtual_file_system/ui/svg/webui.svg new file mode 100644 index 0000000..5cf0cf7 --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/ui/svg/webui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/webui/examples/C/virtual_file_system/vfs.h b/v2/webui/examples/C/virtual_file_system/vfs.h new file mode 100644 index 0000000..f2cad70 --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/vfs.h @@ -0,0 +1,70 @@ +#ifndef VIRTUAL_FILE_SYSTEM_H +#define VIRTUAL_FILE_SYSTEM_H + +typedef struct { + const char *path; + const unsigned char *data; + int length; +} VirtualFile; + +static const unsigned char FILE_0[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x09,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x55,0x54,0x46,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x57,0x65,0x62,0x55,0x49,0x20,0x2d,0x20,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x46,0x69,0x6c,0x65,0x20,0x53,0x79,0x73,0x74,0x65,0x6d,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x27,0x41,0x72,0x69,0x61,0x6c,0x27,0x2c,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x6c,0x69,0x6e,0x65,0x61,0x72,0x2d,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x28,0x74,0x6f,0x20,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x23,0x35,0x30,0x37,0x64,0x39,0x31,0x2c,0x20,0x23,0x31,0x63,0x35,0x39,0x36,0x66,0x2c,0x20,0x23,0x30,0x32,0x32,0x37,0x33,0x37,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x38,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x2c,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x31,0x30,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x33,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x63,0x63,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x78,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x30,0x20,0x33,0x70,0x78,0x20,0x35,0x70,0x78,0x20,0x72,0x67,0x62,0x61,0x28,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2e,0x31,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x30,0x2e,0x32,0x73,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x66,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x36,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x68,0x31,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x2d,0x37,0x70,0x78,0x20,0x31,0x30,0x70,0x78,0x20,0x37,0x70,0x78,0x20,0x72,0x67,0x62,0x28,0x36,0x37,0x20,0x35,0x37,0x20,0x35,0x37,0x20,0x2f,0x20,0x37,0x36,0x25,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x63,0x39,0x39,0x31,0x33,0x64,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x3a,0x66,0x6f,0x63,0x75,0x73,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x6f,0x75,0x74,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x6c,0x69,0x6e,0x6b,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x61,0x63,0x74,0x69,0x76,0x65,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x76,0x69,0x73,0x69,0x74,0x65,0x64,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x30,0x62,0x63,0x61,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x68,0x33,0x20,0x69,0x64,0x3d,0x22,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x46,0x69,0x6c,0x65,0x20,0x53,0x79,0x73,0x74,0x65,0x6d,0x20,0x45,0x78,0x61,0x6d,0x70,0x6c,0x65,0x3c,0x2f,0x68,0x33,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x73,0x76,0x67,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x73,0x76,0x67,0x22,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x54,0x68,0x69,0x73,0x20,0x66,0x69,0x6c,0x65,0x20,0x69,0x73,0x20,0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x69,0x73,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x68,0x34,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x73,0x75,0x62,0x22,0x3e,0x2f,0x73,0x75,0x62,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x68,0x34,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x69,0x64,0x3d,0x22,0x45,0x78,0x69,0x74,0x22,0x3e,0x45,0x78,0x69,0x74,0x3c,0x2f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x21,0x2d,0x2d,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x61,0x70,0x70,0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x09,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x2f,0x2f,0x20,0x4a,0x61,0x76,0x61,0x53,0x63,0x72,0x69,0x70,0x74,0x20,0x45,0x78,0x61,0x6d,0x70,0x6c,0x65,0x0d,0x0a,0x09,0x09,0x2f,0x2a,0x0d,0x0a,0x09,0x09,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x61,0x64,0x64,0x45,0x76,0x65,0x6e,0x74,0x4c,0x69,0x73,0x74,0x65,0x6e,0x65,0x72,0x28,0x27,0x44,0x4f,0x4d,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x4c,0x6f,0x61,0x64,0x65,0x64,0x27,0x2c,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x4f,0x4d,0x20,0x69,0x73,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x2e,0x20,0x43,0x68,0x65,0x63,0x6b,0x20,0x69,0x66,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x60,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x69,0x73,0x20,0x61,0x76,0x61,0x69,0x6c,0x61,0x62,0x6c,0x65,0x0d,0x0a,0x09,0x09,0x09,0x69,0x66,0x20,0x28,0x74,0x79,0x70,0x65,0x6f,0x66,0x20,0x77,0x65,0x62,0x75,0x69,0x20,0x21,0x3d,0x3d,0x20,0x27,0x75,0x6e,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x27,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x53,0x65,0x74,0x20,0x65,0x76,0x65,0x6e,0x74,0x73,0x20,0x63,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x2e,0x73,0x65,0x74,0x45,0x76,0x65,0x6e,0x74,0x43,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x28,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x69,0x66,0x20,0x28,0x65,0x20,0x3d,0x3d,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x65,0x76,0x65,0x6e,0x74,0x2e,0x43,0x4f,0x4e,0x4e,0x45,0x43,0x54,0x45,0x44,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x20,0x69,0x73,0x20,0x65,0x73,0x74,0x61,0x62,0x6c,0x69,0x73,0x68,0x65,0x64,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x65,0x64,0x2e,0x27,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x54,0x65,0x73,0x74,0x28,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x20,0x28,0x65,0x20,0x3d,0x3d,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x65,0x76,0x65,0x6e,0x74,0x2e,0x44,0x49,0x53,0x43,0x4f,0x4e,0x4e,0x45,0x43,0x54,0x45,0x44,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x20,0x69,0x73,0x20,0x6c,0x6f,0x73,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x6c,0x6f,0x67,0x28,0x27,0x44,0x69,0x73,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x65,0x64,0x2e,0x27,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x54,0x68,0x65,0x20,0x76,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x66,0x69,0x6c,0x65,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x60,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x64,0x0d,0x0a,0x09,0x09,0x09,0x09,0x61,0x6c,0x65,0x72,0x74,0x28,0x27,0x50,0x6c,0x65,0x61,0x73,0x65,0x20,0x61,0x64,0x64,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x20,0x74,0x6f,0x20,0x79,0x6f,0x75,0x72,0x20,0x48,0x54,0x4d,0x4c,0x2e,0x27,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x77,0x65,0x62,0x75,0x69,0x54,0x65,0x73,0x74,0x28,0x29,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x20,0x61,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x0d,0x0a,0x09,0x09,0x09,0x69,0x66,0x20,0x28,0x77,0x65,0x62,0x75,0x69,0x2e,0x69,0x73,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x65,0x64,0x28,0x29,0x29,0x20,0x7b,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x57,0x68,0x65,0x6e,0x20,0x79,0x6f,0x75,0x20,0x62,0x69,0x6e,0x64,0x20,0x61,0x20,0x66,0x75,0x6e,0x63,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x65,0x6e,0x64,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x77,0x65,0x62,0x75,0x69,0x20,0x77,0x69,0x6c,0x6c,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x74,0x68,0x65,0x20,0x60,0x66,0x75,0x6e,0x63,0x60,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x69,0x6e,0x20,0x74,0x68,0x72,0x65,0x65,0x20,0x70,0x6c,0x61,0x63,0x65,0x73,0x3a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x47,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x20,0x20,0x3a,0x20,0x66,0x75,0x6e,0x63,0x28,0x2e,0x2e,0x2e,0x29,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x50,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x3a,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x66,0x75,0x6e,0x63,0x28,0x2e,0x2e,0x2e,0x29,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x4d,0x65,0x74,0x68,0x6f,0x64,0x20,0x20,0x20,0x3a,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x27,0x66,0x75,0x6e,0x63,0x27,0x2c,0x20,0x2e,0x2e,0x2e,0x29,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x5b,0x21,0x5d,0x20,0x4e,0x6f,0x74,0x65,0x3a,0x20,0x4f,0x62,0x6a,0x65,0x63,0x74,0x73,0x20,0x63,0x72,0x65,0x61,0x74,0x69,0x6f,0x6e,0x20,0x66,0x61,0x69,0x6c,0x73,0x20,0x77,0x68,0x65,0x6e,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x61,0x20,0x73,0x69,0x6d,0x69,0x6c,0x61,0x72,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x61,0x6c,0x72,0x65,0x61,0x64,0x79,0x20,0x65,0x78,0x69,0x73,0x74,0x2e,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x74,0x20,0x66,0x6f,0x6f,0x20,0x3d,0x20,0x27,0x48,0x65,0x6c,0x6c,0x6f,0x27,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6e,0x73,0x74,0x20,0x62,0x61,0x72,0x20,0x3d,0x20,0x31,0x32,0x33,0x34,0x35,0x36,0x3b,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x69,0x6e,0x67,0x20,0x61,0x73,0x20,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x6f,0x20,0x73,0x6f,0x6d,0x65,0x74,0x68,0x69,0x6e,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x60,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x69,0x6e,0x67,0x20,0x61,0x73,0x20,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x6f,0x66,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x2e,0x60,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x2e,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x6f,0x20,0x73,0x6f,0x6d,0x65,0x74,0x68,0x69,0x6e,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x60,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x43,0x61,0x6c,0x6c,0x69,0x6e,0x67,0x20,0x75,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x20,0x60,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x29,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x27,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x27,0x2c,0x20,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x2e,0x74,0x68,0x65,0x6e,0x28,0x28,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x44,0x6f,0x20,0x73,0x6f,0x6d,0x65,0x74,0x68,0x69,0x6e,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x60,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x60,0x0d,0x0a,0x09,0x09,0x09,0x09,0x7d,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x55,0x73,0x69,0x6e,0x67,0x20,0x61,0x77,0x61,0x69,0x74,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x20,0x3d,0x20,0x61,0x77,0x61,0x69,0x74,0x20,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x20,0x3d,0x20,0x61,0x77,0x61,0x69,0x74,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x28,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x2f,0x2f,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x65,0x20,0x3d,0x20,0x61,0x77,0x61,0x69,0x74,0x20,0x77,0x65,0x62,0x75,0x69,0x2e,0x63,0x61,0x6c,0x6c,0x28,0x27,0x6d,0x79,0x42,0x61,0x63,0x6b,0x65,0x6e,0x64,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x27,0x2c,0x20,0x66,0x6f,0x6f,0x2c,0x20,0x62,0x61,0x72,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x2a,0x2f,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_1[] = {0x3c,0x21,0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x09,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x22,0x55,0x54,0x46,0x2d,0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x57,0x65,0x62,0x55,0x49,0x20,0x2d,0x20,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x46,0x69,0x6c,0x65,0x20,0x53,0x79,0x73,0x74,0x65,0x6d,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x27,0x41,0x72,0x69,0x61,0x6c,0x27,0x2c,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x6c,0x69,0x6e,0x65,0x61,0x72,0x2d,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x28,0x74,0x6f,0x20,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x23,0x35,0x30,0x37,0x64,0x39,0x31,0x2c,0x20,0x23,0x31,0x63,0x35,0x39,0x36,0x66,0x2c,0x20,0x23,0x30,0x32,0x32,0x37,0x33,0x37,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x38,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x2c,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x31,0x30,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x33,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x63,0x63,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x78,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x30,0x20,0x33,0x70,0x78,0x20,0x35,0x70,0x78,0x20,0x72,0x67,0x62,0x61,0x28,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2e,0x31,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x30,0x2e,0x32,0x73,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x66,0x66,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x36,0x70,0x78,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x68,0x31,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x74,0x65,0x78,0x74,0x2d,0x73,0x68,0x61,0x64,0x6f,0x77,0x3a,0x20,0x2d,0x37,0x70,0x78,0x20,0x31,0x30,0x70,0x78,0x20,0x37,0x70,0x78,0x20,0x72,0x67,0x62,0x28,0x36,0x37,0x20,0x35,0x37,0x20,0x35,0x37,0x20,0x2f,0x20,0x37,0x36,0x25,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x23,0x63,0x39,0x39,0x31,0x33,0x64,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x69,0x6e,0x70,0x75,0x74,0x3a,0x66,0x6f,0x63,0x75,0x73,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x6f,0x75,0x74,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x33,0x34,0x39,0x38,0x64,0x62,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x6c,0x69,0x6e,0x6b,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x61,0x63,0x74,0x69,0x76,0x65,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x76,0x69,0x73,0x69,0x74,0x65,0x64,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x35,0x37,0x32,0x33,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x09,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x30,0x62,0x63,0x61,0x63,0x3b,0x0d,0x0a,0x09,0x09,0x09,0x7d,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x09,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,0x6e,0x6f,0x74,0x68,0x65,0x72,0x20,0x66,0x69,0x6c,0x65,0x20,0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,0x20,0x69,0x6e,0x20,0x74,0x68,0x69,0x73,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x62,0x75,0x74,0x74,0x6f,0x6e,0x20,0x69,0x64,0x3d,0x22,0x45,0x78,0x69,0x74,0x22,0x3e,0x45,0x78,0x69,0x74,0x3c,0x2f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x0d,0x0a,0x09,0x3c,0x21,0x2d,0x2d,0x20,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x61,0x70,0x70,0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x09,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x77,0x65,0x62,0x75,0x69,0x2e,0x6a,0x73,0x22,0x3e,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0d,0x0a,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a}; + +static const unsigned char FILE_2[] = {0x3c,0x73,0x76,0x67,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x30,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x32,0x30,0x70,0x78,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x62,0x78,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x62,0x6f,0x78,0x79,0x2d,0x73,0x76,0x67,0x2e,0x63,0x6f,0x6d,0x22,0x3e,0x20,0x3c,0x64,0x65,0x66,0x73,0x3e,0x20,0x3c,0x6d,0x61,0x73,0x6b,0x20,0x69,0x64,0x3d,0x22,0x63,0x69,0x72,0x63,0x6c,0x65,0x2d,0x6d,0x61,0x73,0x6b,0x22,0x3e,0x20,0x3c,0x72,0x65,0x63,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x2f,0x3e,0x20,0x3c,0x63,0x69,0x72,0x63,0x6c,0x65,0x20,0x63,0x78,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x63,0x79,0x3d,0x22,0x36,0x30,0x22,0x20,0x72,0x3d,0x22,0x31,0x36,0x2e,0x38,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x6d,0x61,0x73,0x6b,0x3e,0x20,0x3c,0x62,0x78,0x3a,0x67,0x72,0x69,0x64,0x20,0x78,0x3d,0x22,0x30,0x22,0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x38,0x33,0x2e,0x33,0x36,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x39,0x36,0x2e,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x64,0x65,0x66,0x73,0x3e,0x20,0x3c,0x72,0x65,0x63,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x32,0x30,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x32,0x61,0x36,0x36,0x39,0x39,0x22,0x20,0x6d,0x61,0x73,0x6b,0x3d,0x22,0x75,0x72,0x6c,0x28,0x23,0x63,0x69,0x72,0x63,0x6c,0x65,0x2d,0x6d,0x61,0x73,0x6b,0x29,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x22,0x2f,0x3e,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x20,0x33,0x39,0x31,0x2e,0x30,0x37,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x33,0x38,0x36,0x2e,0x38,0x34,0x32,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x33,0x38,0x39,0x2e,0x30,0x32,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x33,0x39,0x32,0x2e,0x33,0x35,0x38,0x20,0x33,0x37,0x31,0x2e,0x35,0x38,0x34,0x20,0x4c,0x20,0x33,0x39,0x37,0x2e,0x32,0x30,0x32,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x33,0x39,0x39,0x2e,0x33,0x30,0x32,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x30,0x34,0x2e,0x31,0x34,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x4c,0x20,0x34,0x30,0x37,0x2e,0x35,0x30,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x30,0x39,0x2e,0x36,0x30,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x30,0x35,0x2e,0x33,0x37,0x38,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x30,0x33,0x2e,0x31,0x39,0x34,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x33,0x39,0x38,0x2e,0x32,0x33,0x38,0x20,0x33,0x35,0x38,0x2e,0x33,0x39,0x36,0x20,0x4c,0x20,0x33,0x39,0x33,0x2e,0x32,0x35,0x34,0x20,0x33,0x37,0x35,0x20,0x5a,0x20,0x4d,0x20,0x34,0x31,0x32,0x2e,0x37,0x31,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x31,0x32,0x2e,0x37,0x31,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x37,0x33,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x37,0x33,0x38,0x20,0x33,0x35,0x37,0x2e,0x33,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x35,0x37,0x2e,0x33,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x36,0x34,0x2e,0x31,0x36,0x34,0x20,0x4c,0x20,0x34,0x32,0x32,0x2e,0x36,0x32,0x32,0x20,0x33,0x36,0x34,0x2e,0x31,0x36,0x34,0x20,0x4c,0x20,0x34,0x32,0x32,0x2e,0x36,0x32,0x32,0x20,0x33,0x36,0x36,0x2e,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x36,0x36,0x2e,0x30,0x34,0x20,0x4c,0x20,0x34,0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x33,0x37,0x33,0x2e,0x30,0x39,0x36,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x38,0x35,0x20,0x33,0x37,0x33,0x2e,0x30,0x39,0x36,0x20,0x4c,0x20,0x34,0x32,0x36,0x2e,0x38,0x35,0x20,0x33,0x37,0x35,0x20,0x5a,0x20,0x4d,0x20,0x34,0x32,0x39,0x2e,0x39,0x35,0x39,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x32,0x39,0x2e,0x39,0x35,0x39,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x33,0x37,0x2e,0x39,0x31,0x31,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x51,0x20,0x34,0x33,0x39,0x2e,0x38,0x31,0x35,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x34,0x34,0x31,0x2e,0x32,0x30,0x31,0x20,0x33,0x35,0x36,0x2e,0x30,0x31,0x36,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x35,0x38,0x37,0x20,0x33,0x35,0x36,0x2e,0x36,0x33,0x32,0x20,0x34,0x34,0x33,0x2e,0x33,0x34,0x33,0x20,0x33,0x35,0x37,0x2e,0x37,0x36,0x36,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x30,0x39,0x39,0x20,0x33,0x35,0x38,0x2e,0x39,0x20,0x34,0x34,0x34,0x2e,0x30,0x39,0x39,0x20,0x33,0x36,0x30,0x2e,0x34,0x34,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x30,0x39,0x39,0x20,0x33,0x36,0x31,0x2e,0x39,0x35,0x32,0x20,0x34,0x34,0x33,0x2e,0x33,0x30,0x31,0x20,0x33,0x36,0x33,0x2e,0x30,0x37,0x32,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x35,0x30,0x33,0x20,0x33,0x36,0x34,0x2e,0x31,0x39,0x32,0x20,0x34,0x34,0x31,0x2e,0x31,0x30,0x33,0x20,0x33,0x36,0x34,0x2e,0x37,0x38,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x38,0x36,0x37,0x20,0x33,0x36,0x35,0x2e,0x33,0x31,0x32,0x20,0x34,0x34,0x33,0x2e,0x38,0x38,0x39,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x39,0x31,0x31,0x20,0x33,0x36,0x37,0x2e,0x37,0x37,0x36,0x20,0x34,0x34,0x34,0x2e,0x39,0x31,0x31,0x20,0x33,0x36,0x39,0x2e,0x34,0x38,0x34,0x20,0x51,0x20,0x34,0x34,0x34,0x2e,0x39,0x31,0x31,0x20,0x33,0x37,0x31,0x2e,0x31,0x36,0x34,0x20,0x34,0x34,0x34,0x2e,0x30,0x38,0x35,0x20,0x33,0x37,0x32,0x2e,0x34,0x31,0x20,0x51,0x20,0x34,0x34,0x33,0x2e,0x32,0x35,0x39,0x20,0x33,0x37,0x33,0x2e,0x36,0x35,0x36,0x20,0x34,0x34,0x31,0x2e,0x37,0x36,0x31,0x20,0x33,0x37,0x34,0x2e,0x33,0x32,0x38,0x20,0x51,0x20,0x34,0x34,0x30,0x2e,0x32,0x36,0x33,0x20,0x33,0x37,0x35,0x20,0x34,0x33,0x38,0x2e,0x32,0x34,0x37,0x20,0x33,0x37,0x35,0x20,0x5a,0x20,0x4d,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x36,0x33,0x2e,0x39,0x34,0x20,0x4c,0x20,0x34,0x33,0x37,0x2e,0x37,0x39,0x39,0x20,0x33,0x36,0x33,0x2e,0x39,0x34,0x20,0x51,0x20,0x34,0x33,0x39,0x2e,0x37,0x30,0x33,0x20,0x33,0x36,0x33,0x2e,0x39,0x34,0x20,0x34,0x34,0x30,0x2e,0x38,0x33,0x37,0x20,0x33,0x36,0x33,0x2e,0x30,0x34,0x34,0x20,0x51,0x20,0x34,0x34,0x31,0x2e,0x39,0x37,0x31,0x20,0x33,0x36,0x32,0x2e,0x31,0x34,0x38,0x20,0x34,0x34,0x31,0x2e,0x39,0x37,0x31,0x20,0x33,0x36,0x30,0x2e,0x36,0x30,0x38,0x20,0x51,0x20,0x34,0x34,0x31,0x2e,0x39,0x37,0x31,0x20,0x33,0x35,0x39,0x2e,0x30,0x36,0x38,0x20,0x34,0x34,0x30,0x2e,0x38,0x33,0x37,0x20,0x33,0x35,0x38,0x2e,0x31,0x37,0x32,0x20,0x51,0x20,0x34,0x33,0x39,0x2e,0x37,0x30,0x33,0x20,0x33,0x35,0x37,0x2e,0x32,0x37,0x36,0x20,0x34,0x33,0x37,0x2e,0x37,0x39,0x39,0x20,0x33,0x35,0x37,0x2e,0x32,0x37,0x36,0x20,0x4c,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x35,0x37,0x2e,0x32,0x37,0x36,0x20,0x5a,0x20,0x4d,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x4c,0x20,0x34,0x33,0x38,0x2e,0x30,0x37,0x39,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x51,0x20,0x34,0x34,0x30,0x2e,0x32,0x30,0x37,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x34,0x34,0x31,0x2e,0x34,0x36,0x37,0x20,0x33,0x37,0x32,0x2e,0x31,0x31,0x36,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x37,0x32,0x37,0x20,0x33,0x37,0x31,0x2e,0x31,0x30,0x38,0x20,0x34,0x34,0x32,0x2e,0x37,0x32,0x37,0x20,0x33,0x36,0x39,0x2e,0x34,0x32,0x38,0x20,0x51,0x20,0x34,0x34,0x32,0x2e,0x37,0x32,0x37,0x20,0x33,0x36,0x37,0x2e,0x37,0x34,0x38,0x20,0x34,0x34,0x31,0x2e,0x34,0x36,0x37,0x20,0x33,0x36,0x36,0x2e,0x37,0x34,0x20,0x51,0x20,0x34,0x34,0x30,0x2e,0x32,0x30,0x37,0x20,0x33,0x36,0x35,0x2e,0x37,0x33,0x32,0x20,0x34,0x33,0x38,0x2e,0x30,0x37,0x39,0x20,0x33,0x36,0x35,0x2e,0x37,0x33,0x32,0x20,0x4c,0x20,0x34,0x33,0x32,0x2e,0x31,0x31,0x35,0x20,0x33,0x36,0x35,0x2e,0x37,0x33,0x32,0x20,0x5a,0x22,0x20,0x74,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28,0x31,0x2e,0x32,0x36,0x34,0x35,0x39,0x32,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x31,0x2e,0x32,0x34,0x30,0x33,0x30,0x33,0x2c,0x20,0x2d,0x34,0x38,0x33,0x2e,0x38,0x39,0x39,0x33,0x35,0x33,0x2c,0x20,0x2d,0x33,0x35,0x35,0x2e,0x38,0x34,0x35,0x31,0x35,0x34,0x29,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x20,0x72,0x67,0x62,0x28,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x29,0x3b,0x22,0x2f,0x3e,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x20,0x34,0x35,0x36,0x2e,0x33,0x33,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x51,0x20,0x34,0x35,0x33,0x2e,0x36,0x37,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x34,0x35,0x31,0x2e,0x37,0x33,0x32,0x20,0x33,0x37,0x34,0x2e,0x32,0x31,0x36,0x20,0x51,0x20,0x34,0x34,0x39,0x2e,0x37,0x38,0x36,0x20,0x33,0x37,0x33,0x2e,0x31,0x35,0x32,0x20,0x34,0x34,0x38,0x2e,0x37,0x32,0x32,0x20,0x33,0x37,0x31,0x2e,0x31,0x37,0x38,0x20,0x51,0x20,0x34,0x34,0x37,0x2e,0x36,0x35,0x38,0x20,0x33,0x36,0x39,0x2e,0x32,0x30,0x34,0x20,0x34,0x34,0x37,0x2e,0x36,0x35,0x38,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x4c,0x20,0x34,0x34,0x37,0x2e,0x36,0x35,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x35,0x31,0x2e,0x37,0x31,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x35,0x31,0x2e,0x37,0x31,0x38,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x51,0x20,0x34,0x35,0x31,0x2e,0x37,0x31,0x38,0x20,0x33,0x36,0x38,0x2e,0x30,0x35,0x36,0x20,0x34,0x35,0x32,0x2e,0x32,0x39,0x32,0x20,0x33,0x36,0x39,0x2e,0x31,0x39,0x20,0x51,0x20,0x34,0x35,0x32,0x2e,0x38,0x36,0x36,0x20,0x33,0x37,0x30,0x2e,0x33,0x32,0x34,0x20,0x34,0x35,0x33,0x2e,0x39,0x31,0x36,0x20,0x33,0x37,0x30,0x2e,0x39,0x32,0x36,0x20,0x51,0x20,0x34,0x35,0x34,0x2e,0x39,0x36,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x34,0x35,0x36,0x2e,0x33,0x36,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x51,0x20,0x34,0x35,0x37,0x2e,0x37,0x36,0x36,0x20,0x33,0x37,0x31,0x2e,0x35,0x32,0x38,0x20,0x34,0x35,0x38,0x2e,0x38,0x30,0x32,0x20,0x33,0x37,0x30,0x2e,0x39,0x32,0x36,0x20,0x51,0x20,0x34,0x35,0x39,0x2e,0x38,0x33,0x38,0x20,0x33,0x37,0x30,0x2e,0x33,0x32,0x34,0x20,0x34,0x36,0x30,0x2e,0x34,0x31,0x32,0x20,0x33,0x36,0x39,0x2e,0x31,0x39,0x20,0x51,0x20,0x34,0x36,0x30,0x2e,0x39,0x38,0x36,0x20,0x33,0x36,0x38,0x2e,0x30,0x35,0x36,0x20,0x34,0x36,0x30,0x2e,0x39,0x38,0x36,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x4c,0x20,0x34,0x36,0x30,0x2e,0x39,0x38,0x36,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x36,0x35,0x2e,0x30,0x31,0x38,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x36,0x35,0x2e,0x30,0x31,0x38,0x20,0x33,0x36,0x36,0x2e,0x35,0x34,0x34,0x20,0x51,0x20,0x34,0x36,0x35,0x2e,0x30,0x31,0x38,0x20,0x33,0x36,0x39,0x2e,0x31,0x37,0x36,0x20,0x34,0x36,0x33,0x2e,0x39,0x35,0x34,0x20,0x33,0x37,0x31,0x2e,0x31,0x35,0x20,0x51,0x20,0x34,0x36,0x32,0x2e,0x38,0x39,0x20,0x33,0x37,0x33,0x2e,0x31,0x32,0x34,0x20,0x34,0x36,0x30,0x2e,0x39,0x34,0x34,0x20,0x33,0x37,0x34,0x2e,0x32,0x30,0x32,0x20,0x51,0x20,0x34,0x35,0x38,0x2e,0x39,0x39,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x34,0x35,0x36,0x2e,0x33,0x33,0x38,0x20,0x33,0x37,0x35,0x2e,0x32,0x38,0x20,0x5a,0x20,0x4d,0x20,0x34,0x36,0x38,0x2e,0x32,0x36,0x33,0x20,0x33,0x37,0x35,0x20,0x4c,0x20,0x34,0x36,0x38,0x2e,0x32,0x36,0x33,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x37,0x32,0x2e,0x33,0x32,0x33,0x20,0x33,0x35,0x35,0x2e,0x34,0x20,0x4c,0x20,0x34,0x37,0x32,0x2e,0x33,0x32,0x33,0x20,0x33,0x37,0x35,0x20,0x5a,0x22,0x20,0x74,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28,0x31,0x2e,0x32,0x36,0x34,0x35,0x39,0x32,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x31,0x2e,0x32,0x34,0x30,0x33,0x30,0x33,0x2c,0x20,0x2d,0x34,0x38,0x33,0x2e,0x38,0x39,0x39,0x33,0x35,0x33,0x2c,0x20,0x2d,0x33,0x35,0x35,0x2e,0x38,0x34,0x35,0x31,0x35,0x34,0x29,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x20,0x72,0x67,0x62,0x28,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x29,0x3b,0x22,0x2f,0x3e,0x3c,0x2f,0x73,0x76,0x67,0x3e}; + + +static const VirtualFile virtual_files[] = { + { + "/index.html", + FILE_0, + 3222 + }, + { + "/sub/index.html", + FILE_1, + 1216 + }, + { + "/svg/webui.svg", + FILE_2, + 2347 + }, +}; + +static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]); + +bool virtual_file_system(const char* path, const unsigned char** file, int* length) { + for (int i = 0; i < virtual_files_count; ++i) { + if(virtual_files[i].path != NULL) { + if (strcmp(virtual_files[i].path, path) == 0) { + *file = virtual_files[i].data; + *length = virtual_files[i].length; + return true; + } + } + } + return false; +} + +const void* vfs(const char* path, int* length) { + const unsigned char* file_data; + int file_length; + + if (virtual_file_system(path, &file_data, &file_length)) { + const char* content_type = webui_get_mime_type(path); + const char* http_header_template = "HTTP/1.1 200 OK\r\n" + "Content-Type: %s\r\n" + "Content-Length: %d\r\n" + "Cache-Control: no-cache\r\n\r\n"; + int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length); + *length = header_length + file_length; + unsigned char* response = (unsigned char*) webui_malloc(*length); + snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length); + memcpy(response + header_length, file_data, file_length); + return response; + } + return NULL; +} + +#endif // VIRTUAL_FILE_SYSTEM_H diff --git a/v2/webui/examples/C/virtual_file_system/vfs.py b/v2/webui/examples/C/virtual_file_system/vfs.py new file mode 100644 index 0000000..2167b1e --- /dev/null +++ b/v2/webui/examples/C/virtual_file_system/vfs.py @@ -0,0 +1,101 @@ +# WebUI Library +# https://webui.me +# https://github.com/webui-dev/webui +# Copyright (c) 2020-2026 Hassan Draga. +# Licensed under MIT License. +# All rights reserved. +# Canada. +# +# WebUI Virtual File System Generator +# v2.1 + +import os +import sys + +def generate_vfs_header(directory, output_header): + files = [] + + for root, _, filenames in os.walk(directory): + for filename in filenames: + filepath = os.path.join(root, filename) + relative_path = os.path.relpath(filepath, directory) + # Ensure path starts with a slash + relative_path = '/' + relative_path.replace('\\', '/') + files.append((relative_path, filepath)) + + with open(output_header, 'w') as header: + header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n') + header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n') + + header.write('typedef struct {\n') + header.write(' const char *path;\n') + header.write(' const unsigned char *data;\n') + header.write(' int length;\n') + header.write('} VirtualFile;\n\n') + + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(f'static const unsigned char FILE_{i}[] = {{') + header.write(','.join(f'0x{byte:02x}' for byte in data)) + header.write('};\n\n') + + header.write('\nstatic const VirtualFile virtual_files[] = {\n') + for i, (relative_path, filepath) in enumerate(files): + with open(filepath, 'rb') as f: + data = f.read() + header.write(' {\n') + header.write(f' "{relative_path}",\n') + header.write(f' FILE_{i},\n') + header.write(f' {len(data)}\n') + header.write(' },\n') + if not files: + header.write(' {NULL, NULL, 0}\n') + header.write('};\n\n') + + header.write('static const int virtual_files_count = sizeof(virtual_files) / sizeof(virtual_files[0]);\n\n') + + header.write('bool virtual_file_system(const char* path, const unsigned char** file, int* length) {\n') + header.write(' for (int i = 0; i < virtual_files_count; ++i) {\n') + header.write(' if(virtual_files[i].path != NULL) {\n') + header.write(' if (strcmp(virtual_files[i].path, path) == 0) {\n') + header.write(' *file = virtual_files[i].data;\n') + header.write(' *length = virtual_files[i].length;\n') + header.write(' return true;\n') + header.write(' }\n') + header.write(' }\n') + header.write(' }\n') + header.write(' return false;\n') + header.write('}\n\n') + + header.write('const void* vfs(const char* path, int* length) {\n') + header.write(' const unsigned char* file_data;\n') + header.write(' int file_length;\n\n') + + header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n') + header.write(' const char* content_type = webui_get_mime_type(path);\n') + header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n') + header.write(' "Content-Type: %s\\r\\n"\n') + header.write(' "Content-Length: %d\\r\\n"\n') + header.write(' "Cache-Control: no-cache\\r\\n\\r\\n";\n') + header.write(' int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length);\n') + header.write(' *length = header_length + file_length;\n') + header.write(' unsigned char* response = (unsigned char*) webui_malloc(*length);\n') + header.write(' snprintf((char*) response, header_length + 1, http_header_template, content_type, file_length);\n') + header.write(' memcpy(response + header_length, file_data, file_length);\n') + header.write(' return response;\n') + header.write(' }\n') + header.write(' return NULL;\n') + header.write('}\n\n') + + header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n') + +if __name__ == '__main__': + if len(sys.argv) != 3: + print(f'Usage: {sys.argv[0]} ') + sys.exit(1) + + directory = sys.argv[1] + output_header = sys.argv[2] + generate_vfs_header(directory, output_header) + print(f'Generated {output_header} from {directory}') diff --git a/v2/webui/examples/C/web_app_multi_client/GNUmakefile b/v2/webui/examples/C/web_app_multi_client/GNUmakefile new file mode 100644 index 0000000..9b6e5fd --- /dev/null +++ b/v2/webui/examples/C/web_app_multi_client/GNUmakefile @@ -0,0 +1,144 @@ +# WebUI C Example + +# == 1. VARIABLES ============================================================= + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +PROJECT_DIR := $(dir $(MAKEFILE_PATH))/../../../ +TARGET := $(firstword $(MAKECMDGOALS)) +LIB_DIR := $(PROJECT_DIR)/dist +ifeq ($(TARGET), debug) +LIB_DIR := $(LIB_DIR)/debug +endif +INCLUDE_DIR := $(PROJECT_DIR)/include +WEBUI_LIB_NAME = webui-2 +ifeq ($(WEBUI_USE_TLS), 1) +WEBUI_LIB_NAME = webui-2-secure +endif + +# ARGS +# Set a compiler when running on Linux via `make CC=gcc` / `make CC=clang` +CC = gcc +# Build the WebUI library if running via `make BUILD_LIB=true` +BUILD_LIB ?= + +# BUILD FLAGS +STATIC_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" +DYN_BUILD_FLAGS = main.c -I"$(INCLUDE_DIR)" -L"$(LIB_DIR)" + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows + PLATFORM := windows + SHELL := CMD + STATIC_BUILD_FLAGS += icon.o -l$(WEBUI_LIB_NAME)-static -lws2_32 -Wall -luser32 -lstdc++ -luuid -static + COPY_LIB_CMD := @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + DYN_BUILD_FLAGS += icon.o "$(WEBUI_LIB_NAME).dll" -lws2_32 -Wall -luser32 -lstdc++ -luuid + STATIC_OUT := main.exe + DYN_OUT := main-dyn.exe + LWS2_OPT := -lws2_32 -lole32 + STRIP_OPT := --strip-all + CONSOLE_APP := -Wl,-subsystem=console + GUI_APP := -Wl,-subsystem=windows +else + STATIC_BUILD_FLAGS += -l$(WEBUI_LIB_NAME)-static -lpthread -lm -ldl + DYN_BUILD_FLAGS += -l$(WEBUI_LIB_NAME) -lpthread -lm -ldl + STATIC_OUT := main + DYN_OUT := main-dyn + ifeq ($(shell uname),Darwin) + # MacOS + PLATFORM := macos + CC = clang + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).dylib" "lib$(WEBUI_LIB_NAME).dylib" + WKWEBKIT_LINK_FLAGS := -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + COPY_LIB_CMD := @cp "$(LIB_DIR)/lib$(WEBUI_LIB_NAME).so" "lib$(WEBUI_LIB_NAME).so" + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2.TARGETS ================================================================ + +all: release + +debug: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) debug +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static with Debug info +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) debug static)..." + @$(CC) -g $(CONSOLE_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) +endif +# Dynamic with Debug info + @echo "Build C Example ($(CC) debug dynamic)..." + $(COPY_LIB_CMD) + @$(CC) -g $(CONSOLE_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +release: --validate-args +ifeq ($(BUILD_LIB),true) + @cd "$(PROJECT_DIR)" && $(MAKE) +endif +ifeq ($(PLATFORM),windows) + @windres icon.rc -o icon.o +endif +# Static Release +ifneq ($(WEBUI_USE_TLS), 1) + @echo "Build C Example ($(CC) release static)..." + @$(CC) -Os $(GUI_APP) $(STATIC_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(STATIC_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(STATIC_OUT) +endif +# Dynamic Release + @echo "Build C Example ($(CC) release dynamic)..." + $(COPY_LIB_CMD) + @$(CC) $(GUI_APP) $(DYN_BUILD_FLAGS) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) -o $(DYN_OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(DYN_OUT) +# Clean +ifeq ($(PLATFORM),windows) + @- del *.o >nul 2>&1 +else + @- rm -f *.o + @- rm -rf *.dSYM # macOS +endif + @echo "Done." + +clean: --clean-$(PLATFORM) + +# INTERNAL TARGETS + +--validate-args: +ifneq ($(filter $(CC),gcc clang aarch64-linux-gnu-gcc arm-linux-gnueabihf-gcc musl-gcc),$(CC)) +$(error Invalid compiler specified: `$(CC)`) +endif + +--clean-linux: --clean-unix + +--clean-macos: --clean-unix + +--clean-unix: + - rm -f *.o + - rm -f *.a + - rm -f *.so + - rm -f *.dylib + - rm -rf *.dSYM + +--clean-windows: + - del *.o >nul 2>&1 + - del *.dll >nul 2>&1 + - del *.a >nul 2>&1 + - del *.exe >nul 2>&1 diff --git a/v2/webui/examples/C/web_app_multi_client/Makefile b/v2/webui/examples/C/web_app_multi_client/Makefile new file mode 100644 index 0000000..f61c898 --- /dev/null +++ b/v2/webui/examples/C/web_app_multi_client/Makefile @@ -0,0 +1,71 @@ +# WebUI C Example +# Windows - Microsoft Visual C + +SHELL = CMD +LIB_DIR = ../../../dist +INCLUDE_DIR = ../../../include +WEBUI_LIB_NAME = webui-2 +!IF "$(WEBUI_USE_TLS)" == "1" +WEBUI_LIB_NAME = webui-2-secure +!ENDIF + +# Build the WebUI library if running `nmake BUILD_LIB=true` +BUILD_LIB = + +all: release + +debug: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) debug +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static with Debug info +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Debug)... + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic with Debug info + @echo Build C Example (Dynamic Debug)... + @copy "$(LIB_DIR)\debug\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl /Zi main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)\debug" /SUBSYSTEM:CONSOLE $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +release: +!IF "$(BUILD_LIB)" == "true" + @cd "$(LIB_DIR)" && cd .. && $(MAKE) +!ENDIF + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc +# Static Release +!IF "$(WEBUI_USE_TLS)" != "1" + @echo Build C Example (Static Release)... + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME)-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main.exe 1>NUL 2>&1 +!ENDIF +# Dynamic Release + @echo Build C Example (Dynamic Release)... + @copy "$(LIB_DIR)\$(WEBUI_LIB_NAME).dll" "$(WEBUI_LIB_NAME).dll" + @cl main.c icon.res /I"$(INCLUDE_DIR)" /link /LIBPATH:"$(LIB_DIR)" /SUBSYSTEM:WINDOWS $(WEBUI_LIB_NAME).lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:main-dyn.exe 1>NUL 2>&1 +# Clean + @- del *.exp >nul 2>&1 + @- del *.ilk >nul 2>&1 + @- del *.lib >nul 2>&1 + @- del *.obj >nul 2>&1 + @- del *.pdb >nul 2>&1 + @- del *.res >nul 2>&1 + @echo Done. + +clean: + - del *.obj >nul 2>&1 + - del *.ilk >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.exp >nul 2>&1 + - del *.exe >nul 2>&1 + - del *.lib >nul 2>&1 + - del *.res >nul 2>&1 diff --git a/v2/webui/examples/C/web_app_multi_client/favicon.ico b/v2/webui/examples/C/web_app_multi_client/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/C/web_app_multi_client/favicon.ico differ diff --git a/v2/webui/examples/C/web_app_multi_client/icon.rc b/v2/webui/examples/C/web_app_multi_client/icon.rc new file mode 100644 index 0000000..bd24cac --- /dev/null +++ b/v2/webui/examples/C/web_app_multi_client/icon.rc @@ -0,0 +1 @@ +32512 ICON "favicon.ico" diff --git a/v2/webui/examples/C/web_app_multi_client/index.html b/v2/webui/examples/C/web_app_multi_client/index.html new file mode 100644 index 0000000..662b229 --- /dev/null +++ b/v2/webui/examples/C/web_app_multi_client/index.html @@ -0,0 +1,155 @@ + + + + + WebUI - Web App Multi-Client Example + + + +

Web App Multi-Client Example

+
+ Connecting... +
+
+ You are user numer 0 +
+
+ Your connection numer is 0 +
+
+ There is 0 users connected, and 0 tab opened. +
+
+ Current user input: Reload This Page +
+
+ All users input: +
+
+ Open New Tab +
+
+ +
+
+
+ Note:
Copy URL, and open it in a private window, or another web browser to create new users. + + + + + + + diff --git a/v2/webui/examples/C/web_app_multi_client/main.c b/v2/webui/examples/C/web_app_multi_client/main.c new file mode 100644 index 0000000..e6711d5 --- /dev/null +++ b/v2/webui/examples/C/web_app_multi_client/main.c @@ -0,0 +1,132 @@ +// Web App Multi-Client Example + +#include "webui.h" + +// Arrays to hold permanent data +char privateInput_arr[256][1024] = {0}; // One for each user +char publicInput_arr[1024] = {0}; // One for all users +int users_count = 0; +int tab_count = 0; + +void exit_app(webui_event_t* e) { + // Close all opened windows + webui_exit(); +} + +void save(webui_event_t* e) { + // Get input value + const char* privateInput = webui_get_string(e); + // Save it in the array + snprintf(privateInput_arr[e->client_id], 1024, "%s", privateInput); +} + +void saveAll(webui_event_t* e) { + // Get input value + const char* publicInput = webui_get_string(e); + // Save it in the array + snprintf(publicInput_arr, 1024, "%s", publicInput); + // Update all users + char buffer[1024] = {0}; + snprintf(buffer, sizeof(buffer), "document.getElementById(\"publicInput\").value = \"%s\";", publicInput); + webui_run(e->window, buffer); +} + +void events(webui_event_t* e) { + + // This function gets called every time + // there is an event + + // Full web browser cookies + const char* cookies = e->cookies; + + // Static client (Based on web browser cookies) + size_t client_id = e->client_id; + + // Dynamic client connection ID (Changes on connect/disconnect events) + size_t connection_id = e->connection_id; + + if (e->event_type == WEBUI_EVENT_CONNECTED) { + // New connection + if (users_count < (client_id + 1)) { // +1 because it start from 0 + users_count = (client_id + 1); + } + tab_count++; + } + else if (e->event_type == WEBUI_EVENT_DISCONNECTED) { + // Disconnection + if (tab_count > 0) + tab_count--; + } + + // Buffer + char buffer[1100] = {0}; + + // Update this current user only + + // status + webui_run_client(e, "document.getElementById(\"status\").innerText = \"Connected!\";"); + + // userNumber + snprintf(buffer, sizeof(buffer), "document.getElementById(\"userNumber\").innerText = \"%zu\";", client_id); + webui_run_client(e, buffer); + + // connectionNumber + snprintf(buffer, sizeof(buffer), "document.getElementById(\"connectionNumber\").innerText = \"%zu\";", connection_id); + webui_run_client(e, buffer); + + // privateInput + snprintf(buffer, sizeof(buffer), "document.getElementById(\"privateInput\").value = \"%s\";", privateInput_arr[client_id]); + webui_run_client(e, buffer); + + // publicInput + snprintf(buffer, sizeof(buffer), "document.getElementById(\"publicInput\").value = \"%s\";", publicInput_arr); + webui_run_client(e, buffer); + + // Update all connected users + + // userCount + snprintf(buffer, sizeof(buffer), "document.getElementById(\"userCount\").innerText = \"%d\";", users_count); + webui_run(e->window, buffer); + + // tabCount + snprintf(buffer, sizeof(buffer), "document.getElementById(\"tabCount\").innerText = \"%d\";", tab_count); + webui_run(e->window, buffer); +} + +int main() { + + // Allow multi-user connection + webui_set_config(multi_client, true); + + // Allow cookies + webui_set_config(use_cookies, true); + + // Create new window + size_t win = webui_new_window(); + + // Bind HTML with a C functions + webui_bind(win, "save", save); + webui_bind(win, "saveAll", saveAll); + webui_bind(win, "exit_app", exit_app); + + // Bind all events + webui_bind(win, "", events); + + // Start server only + const char* url = webui_start_server(win, "index.html"); + + // Open a new page in the default native web browser + webui_open_url(url); + + // Wait until all windows get closed + webui_wait(); + + // Free all memory resources (Optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/starter_kit_c++/.gitignore b/v2/webui/examples/starter_kit_c++/.gitignore new file mode 100644 index 0000000..4e67e69 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/.gitignore @@ -0,0 +1,15 @@ +# Generated at build time +bin/ +lib/ +src/vfs.h +tools/vfs +tools/vfs.exe +icon.o +icon.res +*.obj +*.pdb +*.ilk + +# CMake build folders +build/ +build-*/ diff --git a/v2/webui/examples/starter_kit_c++/CMakeLists.txt b/v2/webui/examples/starter_kit_c++/CMakeLists.txt new file mode 100644 index 0000000..506289c --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/CMakeLists.txt @@ -0,0 +1,118 @@ +# WebUI C++ Starter Kit - CMake build +# +# cmake -B build +# cmake --build build --config Release +# +# Produces the same output as the Makefile / GNUmakefile: a single portable +# executable in bin/ (+ .desktop and icon.png on Linux, my_app.app on macOS). +# The first configure must run inside the WebUI repository so the WebUI +# static library can be copied into lib/. + +cmake_minimum_required(VERSION 3.16) + +# Your application name (the executable name in bin/) +set(APP_NAME my_app) + +project(${APP_NAME} LANGUAGES C CXX) + +# Default to a Release build (single-config generators) +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release) +endif() + +# == WebUI static library snapshot (lib/) ===================================== + +if(MSVC) + set(WEBUI_LIB webui-2-static.lib) + # Match the static-runtime WebUI library built with nmake + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") +else() + set(WEBUI_LIB libwebui-2-static.a) +endif() +set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +set(WEBUI_DIST ${CMAKE_CURRENT_SOURCE_DIR}/../../dist) +set(WEBUI_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/../../include) + +# When configuring inside the WebUI repository, refresh the local snapshot +if(EXISTS ${WEBUI_DIST}/${WEBUI_LIB}) + file(COPY ${WEBUI_DIST}/${WEBUI_LIB} DESTINATION ${LIB_DIR}) + file(COPY ${WEBUI_INCLUDE}/webui.h DESTINATION ${LIB_DIR}) + file(COPY ${WEBUI_INCLUDE}/webui.hpp DESTINATION ${LIB_DIR}) +endif() +if(NOT EXISTS ${LIB_DIR}/${WEBUI_LIB}) + message(FATAL_ERROR "WebUI static library not found. Build the WebUI " + "library first (in the WebUI repository root), then re-run CMake.") +endif() + +# == UI packer: ui/ -> src/vfs.h ============================================== + +add_executable(vfs tools/vfs.c) +file(GLOB_RECURSE UI_FILES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ui/*) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/vfs.h + COMMAND $ ${CMAKE_CURRENT_SOURCE_DIR}/ui ${CMAKE_CURRENT_SOURCE_DIR}/src/vfs.h + DEPENDS vfs ${UI_FILES} + COMMENT "Pack ui/ into src/vfs.h") + +# == The application ========================================================== + +set(APP_SOURCES src/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/vfs.h) +if(WIN32) + # Windows executable icon (ui/favicon.ico at resource ID 32512) + list(APPEND APP_SOURCES icon.rc) +endif() +if(APPLE) + # Convert ui/icon.png into the .app bundle icon + set(APP_ICNS ${CMAKE_CURRENT_BINARY_DIR}/icon.icns) + add_custom_command( + OUTPUT ${APP_ICNS} + COMMAND sips -s format icns ${CMAKE_CURRENT_SOURCE_DIR}/ui/icon.png --out ${APP_ICNS} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ui/icon.png + COMMENT "Generate icon.icns") + list(APPEND APP_SOURCES ${APP_ICNS}) + set_source_files_properties(${APP_ICNS} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") +endif() + +add_executable(${APP_NAME} ${APP_SOURCES}) +target_compile_features(${APP_NAME} PRIVATE cxx_std_17) +target_include_directories(${APP_NAME} PRIVATE ${LIB_DIR}) +target_link_libraries(${APP_NAME} PRIVATE ${LIB_DIR}/${WEBUI_LIB}) + +# Output into bin/ (same as the Makefile builds) +set_target_properties(${APP_NAME} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin) + +if(WIN32) + # GUI app in Release (no console), console app in Debug + set_target_properties(${APP_NAME} PROPERTIES WIN32_EXECUTABLE "$") + target_link_libraries(${APP_NAME} PRIVATE user32 Advapi32 Shell32 Ole32 ws2_32) + if(MINGW) + target_link_libraries(${APP_NAME} PRIVATE uuid) + target_link_options(${APP_NAME} PRIVATE -static) + endif() +elseif(APPLE) + set_target_properties(${APP_NAME} PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_BUNDLE_NAME ${APP_NAME} + MACOSX_BUNDLE_GUI_IDENTIFIER com.webui.${APP_NAME} + MACOSX_BUNDLE_ICON_FILE icon) + target_link_libraries(${APP_NAME} PRIVATE pthread m dl "-framework Cocoa" "-framework WebKit") +else() + target_link_libraries(${APP_NAME} PRIVATE pthread m dl) + # Generate the .desktop launcher + icon next to the executable + file(GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/bin/${APP_NAME}.desktop CONTENT +"[Desktop Entry] +Type=Application +Name=${APP_NAME} +Exec=\"$\" +Icon=$/icon.png +Terminal=false +Categories=Utility; +StartupWMClass=${APP_NAME} +") + add_custom_command(TARGET ${APP_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ui/icon.png $/icon.png + COMMAND chmod +x ${CMAKE_CURRENT_SOURCE_DIR}/bin/${APP_NAME}.desktop) +endif() diff --git a/v2/webui/examples/starter_kit_c++/CMakePresets.json b/v2/webui/examples/starter_kit_c++/CMakePresets.json new file mode 100644 index 0000000..0b40dd9 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/CMakePresets.json @@ -0,0 +1,21 @@ +{ + "version": 3, + "configurePresets": [ + { + "name": "default", + "displayName": "Release", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } + }, + { + "name": "debug", + "displayName": "Debug", + "binaryDir": "${sourceDir}/build-debug", + "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } + } + ], + "buildPresets": [ + { "name": "default", "configurePreset": "default" }, + { "name": "debug", "configurePreset": "debug" } + ] +} diff --git a/v2/webui/examples/starter_kit_c++/GNUmakefile b/v2/webui/examples/starter_kit_c++/GNUmakefile new file mode 100644 index 0000000..6b35a62 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/GNUmakefile @@ -0,0 +1,162 @@ +# WebUI C++ Starter Kit +# Linux / macOS / Windows (MinGW) +# +# make Build a single portable executable into bin/ +# make debug Same, with a console window and debug symbols +# make clean Remove generated build files (keeps the lib/ snapshot) +# +# The first build must run inside the WebUI repository (examples/starter_kit_c++) +# so the WebUI static library can be copied into lib/. After that, this folder +# is fully self-contained and can be moved anywhere. + +# == 1. VARIABLES ============================================================= + +# Your application name (the executable name in bin/) +APP_NAME = my_app + +# Compiler: g++ or clang++ (macOS always uses clang++) +CC = g++ + +# WebUI repository paths (only used when building inside the repository) +WEBUI_DIST = ../../dist +WEBUI_INCLUDE = ../../include + +# WebUI static library file name +LIB_FILE = libwebui-2-static.a + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows (MinGW) + PLATFORM := windows + SHELL := CMD + OUT := bin/$(APP_NAME).exe + ICON_OBJ := icon.o + LIBS := -L"lib" -lwebui-2-static -lws2_32 -lole32 -luser32 -lstdc++ -luuid -static + GUI_APP := -Wl,-subsystem=windows + CONSOLE_APP := -Wl,-subsystem=console + STRIP_OPT := --strip-all +else + OUT := bin/$(APP_NAME) + ICON_OBJ := + ifeq ($(shell uname),Darwin) + # macOS + PLATFORM := macos + CC = clang++ + LIBS := -L"lib" -lwebui-2-static -lpthread -lm -ldl -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + LIBS := -L"lib" -lwebui-2-static -lpthread -lm -ldl + STRIP_OPT := --strip-all + ifeq ($(CC),clang++) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2. TARGETS =============================================================== + +all: release + +release: --prepare + @echo "Build $(APP_NAME) (release)..." + @$(CC) -Os -Wall -std=c++17 $(GUI_APP) src/main.cpp $(ICON_OBJ) -I"lib" $(LIBS) -o $(OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(OUT) +ifeq ($(PLATFORM),windows) + @- del icon.o >nul 2>&1 +endif +ifeq ($(PLATFORM),linux) + @echo "Generate bin/$(APP_NAME).desktop..." + @cp ui/icon.png bin/icon.png + @printf '%s\n' \ + '[Desktop Entry]' \ + 'Type=Application' \ + 'Name=$(APP_NAME)' \ + 'Exec="$(CURDIR)/bin/$(APP_NAME)"' \ + 'Icon=$(CURDIR)/bin/icon.png' \ + 'Terminal=false' \ + 'Categories=Utility;' \ + 'StartupWMClass=$(APP_NAME)' \ + > bin/$(APP_NAME).desktop + @chmod +x bin/$(APP_NAME).desktop +endif +ifeq ($(PLATFORM),macos) + @echo "Bundle bin/$(APP_NAME).app..." + @rm -rf "bin/$(APP_NAME).app" + @mkdir -p "bin/$(APP_NAME).app/Contents/MacOS" "bin/$(APP_NAME).app/Contents/Resources" + @mv $(OUT) "bin/$(APP_NAME).app/Contents/MacOS/$(APP_NAME)" + @sips -s format icns ui/icon.png --out "bin/$(APP_NAME).app/Contents/Resources/icon.icns" >/dev/null + @printf '%s\n' \ + '' \ + '' \ + '' \ + '' \ + ' CFBundleExecutable' \ + ' $(APP_NAME)' \ + ' CFBundleIdentifier' \ + ' com.webui.$(APP_NAME)' \ + ' CFBundleName' \ + ' $(APP_NAME)' \ + ' CFBundleIconFile' \ + ' icon' \ + ' CFBundlePackageType' \ + ' APPL' \ + ' CFBundleInfoDictionaryVersion' \ + ' 6.0' \ + ' NSHighResolutionCapable' \ + ' ' \ + '' \ + '' \ + > "bin/$(APP_NAME).app/Contents/Info.plist" + @echo "Done: bin/$(APP_NAME).app" +else + @echo "Done: $(OUT)" +endif + +debug: --prepare + @echo "Build $(APP_NAME) (debug)..." + @$(CC) -g -Wall -std=c++17 $(CONSOLE_APP) src/main.cpp $(ICON_OBJ) -I"lib" $(LIBS) -o $(OUT) +ifeq ($(PLATFORM),windows) + @- del icon.o >nul 2>&1 +endif + @echo "Done: $(OUT)" + +clean: +ifeq ($(PLATFORM),windows) + @- rmdir /S /Q "bin" >nul 2>&1 + @- del src\vfs.h >nul 2>&1 + @- del icon.o >nul 2>&1 + @- del tools\vfs.exe >nul 2>&1 +else + @- rm -rf bin + @- rm -f src/vfs.h + @- rm -f tools/vfs +endif + @echo "Clean done (lib/ snapshot kept)." + +# == 3. INTERNAL ============================================================== + +# Prepare: snapshot the WebUI library into lib/, pack ui/ into src/vfs.h, +# and compile the Windows icon resource. +--prepare: +ifeq ($(PLATFORM),windows) + @if not exist "bin" mkdir "bin" + @if not exist "lib" mkdir "lib" + @if exist "..\..\dist\$(LIB_FILE)" copy /Y "..\..\dist\$(LIB_FILE)" "lib" >nul + @if exist "..\..\include\webui.h" copy /Y "..\..\include\webui.h" "lib" >nul + @if exist "..\..\include\webui.hpp" copy /Y "..\..\include\webui.hpp" "lib" >nul + @if not exist "lib\$(LIB_FILE)" (echo [Error] WebUI static library not found. Run 'mingw32-make' in the WebUI repository root first. & exit /b 1) + @echo Pack ui/ into src/vfs.h... + @$(CC) -x c++ tools/vfs.c -o tools/vfs.exe + @tools\vfs.exe ui src\vfs.h + @windres icon.rc -o icon.o +else + @mkdir -p bin lib + @if [ -f "$(WEBUI_DIST)/$(LIB_FILE)" ]; then cp -f "$(WEBUI_DIST)/$(LIB_FILE)" lib/; fi + @if [ -f "$(WEBUI_INCLUDE)/webui.h" ]; then cp -f "$(WEBUI_INCLUDE)/webui.h" lib/; fi + @if [ -f "$(WEBUI_INCLUDE)/webui.hpp" ]; then cp -f "$(WEBUI_INCLUDE)/webui.hpp" lib/; fi + @if [ ! -f "lib/$(LIB_FILE)" ]; then echo "[Error] WebUI static library not found. Run 'make' in the WebUI repository root first."; exit 1; fi + @echo "Pack ui/ into src/vfs.h..." + @$(CC) -x c++ tools/vfs.c -o tools/vfs + @./tools/vfs ui src/vfs.h +endif diff --git a/v2/webui/examples/starter_kit_c++/Makefile b/v2/webui/examples/starter_kit_c++/Makefile new file mode 100644 index 0000000..62a871e --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/Makefile @@ -0,0 +1,65 @@ +# WebUI C++ Starter Kit +# Windows - Microsoft Visual C++ (nmake, from a Developer Command Prompt) +# +# nmake Build a single portable executable into bin\ +# nmake debug Same, with a console window and debug symbols +# nmake clean Remove generated build files (keeps the lib\ snapshot) +# +# The first build must run inside the WebUI repository (examples\starter_kit_c++) +# so the WebUI static library can be copied into lib\. After that, this folder +# is fully self-contained and can be moved anywhere. + +SHELL = CMD + +# Your application name (the executable name in bin\) +APP_NAME = my_app + +# WebUI static library file name +LIB_FILE = webui-2-static.lib + +# WebUI repository paths (only used when building inside the repository) +WEBUI_DIST = ..\..\dist +WEBUI_INCLUDE = ..\..\include + +all: release + +release: prepare + @echo Build $(APP_NAME) (Release)... + @cl /nologo /O2 /EHsc /std:c++17 src\main.cpp icon.res /I"lib" /link /LIBPATH:"lib" /SUBSYSTEM:WINDOWS $(LIB_FILE) user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:bin\$(APP_NAME).exe + @- del main.obj >nul 2>&1 + @- del icon.res >nul 2>&1 + @echo Done: bin\$(APP_NAME).exe + +debug: prepare + @echo Build $(APP_NAME) (Debug)... + @cl /nologo /Zi /EHsc /std:c++17 src\main.cpp icon.res /I"lib" /link /LIBPATH:"lib" /SUBSYSTEM:CONSOLE $(LIB_FILE) user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:bin\$(APP_NAME).exe + @- del main.obj >nul 2>&1 + @- del icon.res >nul 2>&1 + @echo Done: bin\$(APP_NAME).exe + +# Prepare: snapshot the WebUI library into lib\, pack ui\ into src\vfs.h, +# and compile the icon resource. +prepare: + @if not exist "bin" mkdir "bin" + @if not exist "lib" mkdir "lib" + @if exist "$(WEBUI_DIST)\$(LIB_FILE)" copy /Y "$(WEBUI_DIST)\$(LIB_FILE)" "lib" >nul + @if exist "$(WEBUI_INCLUDE)\webui.h" copy /Y "$(WEBUI_INCLUDE)\webui.h" "lib" >nul + @if exist "$(WEBUI_INCLUDE)\webui.hpp" copy /Y "$(WEBUI_INCLUDE)\webui.hpp" "lib" >nul + @if not exist "lib\$(LIB_FILE)" (echo [Error] WebUI static library not found. Run 'nmake' in the WebUI repository root first. & exit /b 1) + @echo Pack ui\ into src\vfs.h... + @cl /nologo tools\vfs.c /Fetools\vfs.exe /Fotools\vfs.obj + @tools\vfs.exe ui src\vfs.h + @- del tools\vfs.obj >nul 2>&1 + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc + +clean: + - rmdir /S /Q bin >nul 2>&1 + - del src\vfs.h >nul 2>&1 + - del icon.res >nul 2>&1 + - del tools\vfs.exe >nul 2>&1 + - del tools\vfs.obj >nul 2>&1 + - del *.obj >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.ilk >nul 2>&1 + @echo Clean done (lib\ snapshot kept). diff --git a/v2/webui/examples/starter_kit_c++/README.md b/v2/webui/examples/starter_kit_c++/README.md new file mode 100644 index 0000000..b16cce3 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/README.md @@ -0,0 +1,163 @@ +# WebUI C++ Starter Kit + +A ready-to-use project template for building a professional desktop app in +C++ with a web UI — compiled into a **single portable executable** with the +application icon and every UI file (HTML, CSS, JS, images) embedded inside it. + +No runtime files, no installer, no dependencies beyond a C++17 compiler. + +## Quick start + +1. Clone WebUI: `git clone https://github.com/webui-dev/webui.git` +2. `cd webui` +3. Build the WebUI library: + - Linux / macOS: `make` + - Windows MinGW: `mingw32-make` + - Windows MSVC: `nmake` (from a *Developer Command Prompt*) +4. `cd examples/starter_kit_c++` +5. Build the starter kit: `make` / `mingw32-make` / `nmake` +6. Done — your app is `bin/my_app` (`bin\my_app.exe` on Windows, + `bin/my_app.app` on macOS), and the `starter_kit_c++` folder is now + **self-contained**: copy it anywhere (outside the WebUI repository) and + continue developing your own project from it. + +The first build must happen inside the WebUI repository: it copies the WebUI +static library and headers into `lib/`. Every later build works from the +local `lib/` snapshot, wherever the folder lives. + +## Build with CMake (optional) + +The kit also ships `CMakeLists.txt` + `CMakePresets.json`, so it works out +of the box with CMake-based IDEs and tools (Visual Studio, CLion, VS Code, +Ninja, ...): + +```sh +cmake -B build +cmake --build build --config Release +``` + +Or using presets: `cmake --preset default` then `cmake --build --preset +default` (`debug` presets included). The output matches the Makefile builds: +everything lands in `bin/`, and the same `lib/` snapshot rule applies — run +the first configure inside the WebUI repository. + +## Folder structure + +``` +starter_kit_c++/ +├── Makefile # Windows MSVC (nmake) +├── GNUmakefile # Linux, macOS, Windows MinGW (make / mingw32-make) +├── CMakeLists.txt # CMake build (Visual Studio, CLion, VS Code, ...) +├── CMakePresets.json # CMake presets (Release / Debug) +├── icon.rc # Windows resource: embeds ui/favicon.ico as the EXE icon +├── src/ +│ ├── main.cpp # Your C++ backend (HTTP handler, bindings, window) +│ └── vfs.h # GENERATED — the ui/ folder packed as C arrays +├── tools/ +│ └── vfs.c # Build-time packer: ui/ -> src/vfs.h (auto-compiled) +├── ui/ # Your frontend — every file here gets embedded +│ ├── index.html +│ ├── style.css +│ ├── app.js +│ ├── favicon.ico # App icon: Windows executable icon (via icon.rc) +│ └── icon.png # App icon: HTML favicon + Linux/macOS app icon +├── lib/ # GENERATED — snapshot of webui.h + webui.hpp + static library +└── bin/ # GENERATED — my_app(.exe); Linux: + .desktop + icon.png; macOS: my_app.app +``` + +## Customize + +- **App name** — edit `APP_NAME` at the top of `Makefile` and `GNUmakefile`. +- **Frontend** — edit or add any files under `ui/` (subfolders included). + They are re-packed into the executable automatically on every build. +- **Backend** — add C++ functions in `src/main.cpp` and expose them with + `win.bind()` (free functions or lambdas: + `win.bind("name", [](webui::window::event* e) { ... });`). Every bound + function becomes a global `async` JavaScript function: + `const reply = await greet('World');` +- **HTTP** — every UI request goes through `http_handler()` in `src/main.cpp` + (embedded files via `vfs()`, everything else 404) — add custom routes, + headers, or dynamic responses there. +- **Icon** — two files in `ui/` (keep the names, swap the artwork): + `ui/favicon.ico` — the Windows executable icon (resource ID 32512 / + `IDI_APPLICATION`, used by Explorer, the taskbar, and the WebView window; + use a real multi-size `.ico`); `ui/icon.png` — the HTML favicon, on + Linux the window/taskbar icon and the `.desktop` launcher icon (the + build copies it into `bin/`), and on macOS the app icon (converted to + `icon.icns` inside the `.app` bundle). +- **Window** — `src/main.cpp` opens a frameless, transparent WebView window, + and the UI draws its own title bar (`#titlebar` in `ui/index.html`, with + drag regions and minimize/maximize/close buttons). For a normal OS window, + remove the `win.set_frameless()` / `win.set_transparent()` lines; for + browser mode, call `win.show()` instead of `win.show_wv()`. + +## How it works + +- `tools/vfs.c` is compiled with your same compiler and run at build time. + It packs `ui/` into `src/vfs.h` as byte arrays plus a `vfs()` lookup + that serves an embedded file as a full HTTP response (MIME type via + `webui_get_mime_type()`), or returns `NULL` for unknown paths. +- Every HTTP request reaches `http_handler()` in `main.cpp`: embedded files + are served through `vfs()`, anything else gets a 404 — tweak requests or + add your own routes there (`webui.js` is always served by WebUI itself). + Note: using a custom file handler disables WebUI's cookie-based client + authentication (security becomes your responsibility). +- `icon.rc` embeds the icon at resource ID 32512 (`IDI_APPLICATION`), which + WebUI's WebView window class picks up automatically on Windows. +- `main.cpp` calls `win.set_icon_file("icon.png")` before showing the + window; WebUI resolves the file (working directory first, then next to + the executable) and, on Linux, applies it to the WebView window, which + gives the taskbar icon on X11 sessions. +- The app links against `lib/webui-2-static.lib` (MSVC) or + `lib/libwebui-2-static.a` (MinGW / Linux / macOS) — fully static, one file. +- On Linux, the release build copies `ui/icon.png` into `bin/` and generates + `bin/.desktop` — a launcher pointing at the executable and the icon + with absolute paths. Nothing is installed or written outside this folder; + rebuild after moving the folder to refresh the paths. +- On macOS, the release build wraps the executable into `bin/.app` — + `Info.plist` plus `icon.icns` (converted from `ui/icon.png` with the + built-in `sips` tool) — so Finder and the Dock show the app icon. + +## Debugging + +`make debug` / `nmake debug` builds with debug symbols and a console window, +so terminal output from your C++ code is visible. For WebUI's own internal +logs, build the library in debug mode at the repository root (`make debug`), +then copy the static library from `dist/debug/` over the one in `lib/`. + +## Updating WebUI + +Rebuild the library in the WebUI repository, then run one build of this kit +while it is inside the repository — `lib/` is refreshed automatically. (If you +moved the folder out, copy the new static library, `webui.h` and `webui.hpp` +into `lib/` manually, or rebuild from a fresh clone.) + +## Platform notes + +- **Windows** — the executable icon works everywhere (Explorer, taskbar, and + the frameless WebView window). WebUI links the WebView2 loader statically and + the WebView2 Runtime ships with Windows 10/11, so the single executable is + all you need. If WebView2 is unavailable, the app falls back to a browser + app-mode window (the embedded favicon shows as the tab icon). +- **Linux** — the frameless WebView window needs GTK + WebKitGTK installed + (the app falls back to a browser app-mode window otherwise). The + window/taskbar icon comes from `win.set_icon_file()` using `bin/icon.png` + (copied next to the executable by the build) and works on X11 sessions + with nothing installed; Wayland sessions only show icons for apps with an + installed `.desktop` entry. ELF executables cannot embed icons, so the + build also generates `bin/my_app.desktop`, a launcher pointing at the + executable and `bin/icon.png` (absolute paths, regenerated on every + build — rebuild after moving the folder). Everything stays inside this + folder; the build never writes to the system. In GNOME Files, right-click + the `.desktop` and choose "Allow Launching" once — it then shows your app + icon and launches on double-click. Optional, your choice: copy + `bin/my_app.desktop` into `~/.local/share/applications/` to add the app + to the system menu (and the dock icon on Wayland) — the build itself + never does this. +- **macOS** — the release build produces `bin/my_app.app` with the + executable and icon embedded inside the bundle (`icon.icns` is generated + from `ui/icon.png` using `sips`, which ships with macOS). Launch it from + Finder or with `open bin/my_app.app`; the Dock and Finder show the app + icon. The bundle is unsigned — fine for local use; distributing to other + Macs needs `codesign`/notarization. `make debug` still produces a plain + `bin/my_app` binary for terminal debugging. diff --git a/v2/webui/examples/starter_kit_c++/icon.rc b/v2/webui/examples/starter_kit_c++/icon.rc new file mode 100644 index 0000000..ee4fa58 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/icon.rc @@ -0,0 +1,6 @@ +// WebUI C Starter Kit - Windows application icon +// +// 32512 is IDI_APPLICATION: picked up by Explorer, the taskbar, and the +// WebUI WebView window class. Replace ui/favicon.ico to change your icon +// (the same file is also embedded as the browser tab favicon). +32512 ICON "ui/favicon.ico" diff --git a/v2/webui/examples/starter_kit_c++/src/main.cpp b/v2/webui/examples/starter_kit_c++/src/main.cpp new file mode 100644 index 0000000..a091a49 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/src/main.cpp @@ -0,0 +1,130 @@ +// WebUI C++ Starter Kit +// +// A minimal, professional template: a C++ backend + an embedded web frontend, +// compiled into a single portable executable. +// +// src/main.cpp Your backend logic (this file) +// ui/ Your frontend - embedded into the executable at build time +// src/vfs.h Generated from ui/ by tools/vfs.c (do not edit) + +#include +#include "webui.hpp" +#include "vfs.h" + +// The application: owns the WebUI window, serves the embedded UI, and +// exposes backend methods to JavaScript. +class App { + public: + + App() { + + // Bind methods - each becomes a global async JavaScript function + win.bind("greet", this, &App::greet); + win.bind("minimize", this, &App::minimize); + win.bind("maximize", this, &App::maximize); + win.bind("close_win", this, &App::close_win); + + // All HTTP requests go through our handler (see http_handler below) + win.set_file_handler(http_handler); + + // Icon. + // Windows: + // icon.png does not exist, so WebUI will ignore it, + // Windows will use `favicon.ico` embedded in the executable. + // Linux: + // icon.png should exist so WebUI can pass it to GTK. + // macOS: + // the .app bundle provides the icon (see GNUmakefile). + win.set_icon_file("icon.png"); + + // Frameless window style + win.set_size(800, 600); + win.set_frameless(true); + win.set_transparent(true); + win.set_resizable(true); + win.set_center(); + } + + int run() { + + // Show the window using the native WebView (WebView2 on Windows, + // WKWebView on macOS, GTK WebKit on Linux). If no WebView is + // available, fall back to showing it in a web browser (app mode). + if (!win.show_wv("index.html")) { + win.show("index.html"); + } + + // Wait until all windows are closed + webui::wait(); + + // Free all memory resources (optional) + webui::clean(); + + return 0; + } + + private: + + // The WebUI window + webui::window win; + + // Called from JavaScript: greet('name').then(...) + void greet(webui::window::event* e) { + std::string name = e->get_string(); + std::string reply = "Hello " + name + + "! This reply was built in C++ (WebUI v" WEBUI_VERSION ")"; + e->return_string(reply); + } + + // Window controls, called from the custom title bar (ui/index.html) + void minimize(webui::window::event*) { + win.minimize(); + } + + void maximize(webui::window::event*) { + win.maximize(); + } + + void close_win(webui::window::event*) { + win.close(); + } + + // Every HTTP request for the UI goes through this handler: embedded + // files (the ui/ folder) are served by vfs() from the generated + // src/vfs.h, and everything else gets a 404. Tweak requests, or add + // your own routes and custom responses, here. Static because WebUI + // takes a plain function pointer. Note: `webui.js` is always served + // by WebUI itself and never reaches this handler. + static const void* http_handler(const char* filename, int* length) { + + // Embedded UI files + const void* response = vfs(filename, length); + if (response != nullptr) + return response; + + // Error 404 + const char* body = "

404 - Not Found

"; + const char* http_header_template = "HTTP/1.1 404 Not Found\r\n" + "Content-Type: text/html\r\n" + "Content-Length: %d\r\n\r\n"; + + // Build the full HTTP response with header + body + int body_length = (int)strlen(body); + int header_length = snprintf(NULL, 0, http_header_template, body_length); + *length = header_length + body_length; + char* res = (char*)webui_malloc((size_t)*length + 1); + snprintf(res, (size_t)header_length + 1, http_header_template, body_length); + memcpy(res + header_length, body, (size_t)body_length); + return res; + } +}; + +int main() { + App app; + return app.run(); +} + +#if defined(_MSC_VER) +// Release builds use the WINDOWS subsystem (no console window) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/starter_kit_c++/tools/vfs.c b/v2/webui/examples/starter_kit_c++/tools/vfs.c new file mode 100644 index 0000000..8a8ad1c --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/tools/vfs.c @@ -0,0 +1,211 @@ +/* + WebUI C++ Starter Kit - UI packer (build-time host tool) + + Packs every file inside a folder into a single C header (a tiny virtual + file system), so the final executable embeds the whole UI. + + Usage: vfs + + The generated header exposes: + + static const void* vfs(const char* filename, int* length); + + which serves an embedded file as a full HTTP response, or returns NULL + when the path is not an embedded file. It is used by http_handler() in + src/main.cpp. + + This tool is compiled and executed automatically by the Makefile / + GNUmakefile on every build - you never run it manually. +*/ + +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include + +#ifdef _WIN32 + #include +#else + #include + #include +#endif + +#define MAX_FILES 4096 +#define MAX_PATH_LEN 512 + +typedef struct { + char disk[MAX_PATH_LEN]; // Path on disk + char url[MAX_PATH_LEN]; // Served path, without the leading slash +} pack_entry; + +static pack_entry entries[MAX_FILES]; +static int entries_count = 0; + +static void add_entry(const char* disk, const char* url) { + if (entries_count >= MAX_FILES) { + fprintf(stderr, "vfs: too many files (max %d)\n", MAX_FILES); + exit(1); + } + strcpy(entries[entries_count].disk, disk); + strcpy(entries[entries_count].url, url); + entries_count++; +} + +// Recursively collect all files inside `dir`. `rel` is the URL-style +// relative path: "" at the root, then "sub" / "sub/dir" ... +static void walk(const char* dir, const char* rel) { + char disk[MAX_PATH_LEN]; + char url[MAX_PATH_LEN]; +#ifdef _WIN32 + char pattern[MAX_PATH_LEN]; + WIN32_FIND_DATAA fd; + HANDLE h; + if (snprintf(pattern, sizeof(pattern), "%s\\*", dir) >= (int)sizeof(pattern)) return; + h = FindFirstFileA(pattern, &fd); + if (h == INVALID_HANDLE_VALUE) return; + do { + if (strcmp(fd.cFileName, ".") == 0 || strcmp(fd.cFileName, "..") == 0) continue; + if (snprintf(disk, sizeof(disk), "%s\\%s", dir, fd.cFileName) >= (int)sizeof(disk)) continue; + if (rel[0] != '\0') { + if (snprintf(url, sizeof(url), "%s/%s", rel, fd.cFileName) >= (int)sizeof(url)) continue; + } else { + if (snprintf(url, sizeof(url), "%s", fd.cFileName) >= (int)sizeof(url)) continue; + } + if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) walk(disk, url); + else add_entry(disk, url); + } while (FindNextFileA(h, &fd)); + FindClose(h); +#else + DIR* d = opendir(dir); + struct dirent* de; + struct stat st; + if (d == NULL) return; + while ((de = readdir(d)) != NULL) { + if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) continue; + if (snprintf(disk, sizeof(disk), "%s/%s", dir, de->d_name) >= (int)sizeof(disk)) continue; + if (rel[0] != '\0') { + if (snprintf(url, sizeof(url), "%s/%s", rel, de->d_name) >= (int)sizeof(url)) continue; + } else { + if (snprintf(url, sizeof(url), "%s", de->d_name) >= (int)sizeof(url)) continue; + } + if (stat(disk, &st) != 0) continue; + if (S_ISDIR(st.st_mode)) walk(disk, url); + else if (S_ISREG(st.st_mode)) add_entry(disk, url); + } + closedir(d); +#endif +} + +static int cmp_entry(const void* a, const void* b) { + return strcmp(((const pack_entry*)a)->url, ((const pack_entry*)b)->url); +} + +int main(int argc, char* argv[]) { + + if (argc != 3) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + const char* input = argv[1]; + const char* output = argv[2]; + + walk(input, ""); + if (entries_count == 0) + fprintf(stderr, "vfs: warning: no files found in '%s'\n", input); + + // Deterministic output order + qsort(entries, (size_t)entries_count, sizeof(pack_entry), cmp_entry); + + FILE* out = fopen(output, "w"); + if (out == NULL) { + fprintf(stderr, "vfs: cannot write '%s'\n", output); + return 1; + } + + fprintf(out, + "// Generated by tools/vfs.c - DO NOT EDIT\n" + "// Regenerated on every build from the '%s' folder\n\n" + "#ifndef WEBUI_STARTER_KIT_VFS_H\n" + "#define WEBUI_STARTER_KIT_VFS_H\n\n" + "#include \n" + "#include \n" + "#include \"webui.h\"\n\n" + "typedef struct {\n" + " const char *path;\n" + " const unsigned char *data;\n" + " int length;\n" + "} VirtualFile;\n\n", input); + + // File data arrays + long* sizes = (long*)calloc((size_t)(entries_count > 0 ? entries_count : 1), sizeof(long)); + if (sizes == NULL) { + fprintf(stderr, "vfs: out of memory\n"); + fclose(out); + return 1; + } + for (int i = 0; i < entries_count; i++) { + FILE* f = fopen(entries[i].disk, "rb"); + if (f == NULL) { + fprintf(stderr, "vfs: cannot read '%s'\n", entries[i].disk); + fclose(out); + return 1; + } + fprintf(out, "static const unsigned char FILE_%d[] = {", i); + unsigned char buf[4096]; + size_t n; + long written = 0; + while ((n = fread(buf, 1, sizeof(buf), f)) > 0) { + for (size_t j = 0; j < n; j++) { + if ((written % 20) == 0) fputs("\n ", out); + fprintf(out, "0x%02x,", buf[j]); + written++; + } + } + fclose(f); + // Trailing NUL (not counted in length): lets text files be used as C strings + fputs("0x00", out); + sizes[i] = written; + fputs("\n};\n\n", out); + } + + // File table + fputs("static const VirtualFile virtual_files[] = {\n", out); + for (int i = 0; i < entries_count; i++) + fprintf(out, " {\"/%s\", FILE_%d, %ld},\n", entries[i].url, i, sizes[i]); + if (entries_count == 0) + fputs(" {NULL, NULL, 0},\n", out); + fputs("};\n\n", out); + fputs("static const int virtual_files_count = (int)(sizeof(virtual_files) / sizeof(virtual_files[0]));\n\n", out); + + // The vfs() lookup used by http_handler() in src/main.cpp + fputs( + "// Serves an embedded file as a full HTTP response.\n" + "// Returns NULL when `filename` is not an embedded file.\n" + "static const void* vfs(const char* filename, int* length) {\n" + " for (int i = 0; i < virtual_files_count; i++) {\n" + " if (virtual_files[i].path != NULL && strcmp(virtual_files[i].path, filename) == 0) {\n" + " const unsigned char* file_data = virtual_files[i].data;\n" + " int file_length = virtual_files[i].length;\n" + " const char* content_type = webui_get_mime_type(filename);\n" + " const char* http_header_template = \"HTTP/1.1 200 OK\\r\\n\"\n" + " \"Content-Type: %s\\r\\n\"\n" + " \"Content-Length: %d\\r\\n\"\n" + " \"Cache-Control: no-cache\\r\\n\\r\\n\";\n" + " int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length);\n" + " *length = header_length + file_length;\n" + " unsigned char* response = (unsigned char*)webui_malloc((size_t)*length + 1);\n" + " snprintf((char*)response, (size_t)header_length + 1, http_header_template, content_type, file_length);\n" + " memcpy(response + header_length, file_data, (size_t)file_length);\n" + " return response;\n" + " }\n" + " }\n" + " return NULL;\n" + "}\n" + "\n" + "#endif // WEBUI_STARTER_KIT_VFS_H\n", out); + + free(sizes); + fclose(out); + printf("vfs: embedded %d file(s) from '%s' into '%s'\n", entries_count, input, output); + return 0; +} diff --git a/v2/webui/examples/starter_kit_c++/ui/app.js b/v2/webui/examples/starter_kit_c++/ui/app.js new file mode 100644 index 0000000..6370db7 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/ui/app.js @@ -0,0 +1,34 @@ +// WebUI C Starter Kit - frontend logic +// +// Every C function bound with webui_bind() in src/main.c is available here +// as a global async JavaScript function. + +// --- Backend demo call ------------------------------------------------------ + +async function callBackend() { + const input = document.getElementById('name'); + const reply = document.getElementById('reply'); + const name = input.value.trim() || 'World'; + try { + // Calls the C function greet() and waits for its response + reply.textContent = await greet(name); + } catch (err) { + reply.textContent = 'Backend call failed: ' + err; + } +} + +document.getElementById('greet-btn').addEventListener('click', callBackend); +document.getElementById('name').addEventListener('keydown', (e) => { + if (e.key === 'Enter') callBackend(); +}); + +// --- Custom title bar (frameless window controls) --------------------------- + +document.querySelector('#window-buttons .minimize').addEventListener('click', () => minimize()); +document.querySelector('#window-buttons .maximize').addEventListener('click', () => maximize()); +document.querySelector('#window-buttons .close').addEventListener('click', () => close_win()); + +// Double-click the title bar (not the buttons) to maximize/restore +document.getElementById('titlebar').addEventListener('dblclick', (e) => { + if (!e.target.closest('#window-buttons')) maximize(); +}); diff --git a/v2/webui/examples/starter_kit_c++/ui/favicon.ico b/v2/webui/examples/starter_kit_c++/ui/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/starter_kit_c++/ui/favicon.ico differ diff --git a/v2/webui/examples/starter_kit_c++/ui/icon.png b/v2/webui/examples/starter_kit_c++/ui/icon.png new file mode 100644 index 0000000..66e7a5e Binary files /dev/null and b/v2/webui/examples/starter_kit_c++/ui/icon.png differ diff --git a/v2/webui/examples/starter_kit_c++/ui/index.html b/v2/webui/examples/starter_kit_c++/ui/index.html new file mode 100644 index 0000000..262e237 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/ui/index.html @@ -0,0 +1,47 @@ + + + + + + My WebUI App + + + + + + +
+ +
+ My WebUI App +
+ + + +
+
+ +
+
+ +

My WebUI App

+

C++ backend · Embedded web frontend · Single executable

+ +
+ +
+ + +
+ The reply from the C++ backend will appear here. +
+ +
+ Edit ui/ for the frontend · src/main.cpp for the backend +
+
+
+
+ + + diff --git a/v2/webui/examples/starter_kit_c++/ui/style.css b/v2/webui/examples/starter_kit_c++/ui/style.css new file mode 100644 index 0000000..6979f72 --- /dev/null +++ b/v2/webui/examples/starter_kit_c++/ui/style.css @@ -0,0 +1,169 @@ +/* WebUI C Starter Kit - base styles */ + +* { margin: 0; padding: 0; box-sizing: border-box; } + +html, body { + height: 100%; + overflow: hidden; + background: transparent; /* The window itself is frameless + transparent */ +} + +body { + font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + color: #eef2f5; +} + +#app { + height: 100%; + display: flex; + flex-direction: column; + background: linear-gradient(135deg, rgba(27, 39, 53, 0.97), rgba(9, 10, 15, 0.97)); + border: 1px solid rgba(255, 255, 255, 0.12); +} + +/* --- Custom title bar (frameless window) --------------------------------- */ + +#titlebar { + height: 44px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 16px; + background: rgba(0, 0, 0, 0.25); + -webkit-app-region: drag; /* Windows/macOS (native drag) */ + --webui-app-region: drag; /* Linux (WebUI custom drag) */ +} + +#title { + font-size: 13.5px; + font-weight: 600; + letter-spacing: 0.2px; + color: rgba(238, 242, 245, 0.85); +} + +#window-buttons { + display: flex; + gap: 10px; + -webkit-app-region: no-drag; /* Windows/macOS (native) */ + --webui-app-region: no-drag; /* Linux (WebUI custom) */ +} + +#window-buttons .button { + width: 13px; + height: 13px; + border-radius: 50%; + cursor: pointer; + transition: transform 0.15s ease-out, filter 0.15s ease-out; +} + +#window-buttons .button:hover { transform: scale(1.12); filter: brightness(1.15); } +#window-buttons .button:active { transform: scale(0.9); } + +.minimize { background: #ffbd2e; } +.maximize { background: #28c940; } +.close { background: #ff5f57; } + +/* --- Content ------------------------------------------------------------- */ + +#content { + flex-grow: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + overflow: auto; +} + +.card { + width: min(560px, 92vw); + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 14px; + padding: 40px; + backdrop-filter: blur(10px); + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.4); + text-align: center; +} + +.logo { + width: 64px; + height: 64px; + margin: 0 auto 16px; + border-radius: 16px; + background: #2a6699; /* The WebUI brand blue */ + display: flex; + align-items: center; + justify-content: center; + font-size: 34px; + font-weight: 700; +} + +h1 { font-size: 26px; font-weight: 600; } + +.subtitle { + margin-top: 8px; + font-size: 14px; + color: rgba(238, 242, 245, 0.6); +} + +.demo { margin-top: 32px; text-align: left; } + +label { + font-size: 13px; + font-weight: 600; + letter-spacing: 0.3px; + color: rgba(238, 242, 245, 0.7); +} + +.row { display: flex; gap: 10px; margin-top: 6px; } + +input { + flex: 1; + padding: 12px 14px; + border-radius: 8px; + border: 1px solid rgba(255, 255, 255, 0.15); + background: rgba(0, 0, 0, 0.25); + color: inherit; + font-size: 15px; +} + +input:focus { outline: none; border-color: #2a6699; } + +#greet-btn { + padding: 12px 22px; + border-radius: 8px; + border: none; + background: #2a6699; + color: #fff; + font-size: 15px; + cursor: pointer; + transition: background 0.15s ease-out; +} + +#greet-btn:hover { background: #357ab5; } +#greet-btn:active { transform: translateY(1px); } + +output { + display: block; + margin-top: 16px; + padding: 14px; + border-radius: 8px; + background: rgba(0, 0, 0, 0.25); + border: 1px dashed rgba(255, 255, 255, 0.15); + color: rgba(238, 242, 245, 0.75); + font-size: 14px; + min-height: 48px; +} + +footer { + margin-top: 32px; + font-size: 12.5px; + color: rgba(238, 242, 245, 0.45); +} + +code { + background: rgba(255, 255, 255, 0.08); + padding: 2px 6px; + border-radius: 4px; +} diff --git a/v2/webui/examples/starter_kit_c/.gitignore b/v2/webui/examples/starter_kit_c/.gitignore new file mode 100644 index 0000000..4e67e69 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/.gitignore @@ -0,0 +1,15 @@ +# Generated at build time +bin/ +lib/ +src/vfs.h +tools/vfs +tools/vfs.exe +icon.o +icon.res +*.obj +*.pdb +*.ilk + +# CMake build folders +build/ +build-*/ diff --git a/v2/webui/examples/starter_kit_c/CMakeLists.txt b/v2/webui/examples/starter_kit_c/CMakeLists.txt new file mode 100644 index 0000000..7c801a8 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/CMakeLists.txt @@ -0,0 +1,116 @@ +# WebUI C Starter Kit - CMake build +# +# cmake -B build +# cmake --build build --config Release +# +# Produces the same output as the Makefile / GNUmakefile: a single portable +# executable in bin/ (+ .desktop and icon.png on Linux, my_app.app on macOS). +# The first configure must run inside the WebUI repository so the WebUI +# static library can be copied into lib/. + +cmake_minimum_required(VERSION 3.16) + +# Your application name (the executable name in bin/) +set(APP_NAME my_app) + +project(${APP_NAME} LANGUAGES C) + +# Default to a Release build (single-config generators) +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release) +endif() + +# == WebUI static library snapshot (lib/) ===================================== + +if(MSVC) + set(WEBUI_LIB webui-2-static.lib) + # Match the static-runtime WebUI library built with nmake + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") +else() + set(WEBUI_LIB libwebui-2-static.a) +endif() +set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +set(WEBUI_DIST ${CMAKE_CURRENT_SOURCE_DIR}/../../dist) +set(WEBUI_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/../../include) + +# When configuring inside the WebUI repository, refresh the local snapshot +if(EXISTS ${WEBUI_DIST}/${WEBUI_LIB}) + file(COPY ${WEBUI_DIST}/${WEBUI_LIB} DESTINATION ${LIB_DIR}) + file(COPY ${WEBUI_INCLUDE}/webui.h DESTINATION ${LIB_DIR}) +endif() +if(NOT EXISTS ${LIB_DIR}/${WEBUI_LIB}) + message(FATAL_ERROR "WebUI static library not found. Build the WebUI " + "library first (in the WebUI repository root), then re-run CMake.") +endif() + +# == UI packer: ui/ -> src/vfs.h ============================================== + +add_executable(vfs tools/vfs.c) +file(GLOB_RECURSE UI_FILES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ui/*) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/vfs.h + COMMAND $ ${CMAKE_CURRENT_SOURCE_DIR}/ui ${CMAKE_CURRENT_SOURCE_DIR}/src/vfs.h + DEPENDS vfs ${UI_FILES} + COMMENT "Pack ui/ into src/vfs.h") + +# == The application ========================================================== + +set(APP_SOURCES src/main.c ${CMAKE_CURRENT_SOURCE_DIR}/src/vfs.h) +if(WIN32) + # Windows executable icon (ui/favicon.ico at resource ID 32512) + list(APPEND APP_SOURCES icon.rc) +endif() +if(APPLE) + # Convert ui/icon.png into the .app bundle icon + set(APP_ICNS ${CMAKE_CURRENT_BINARY_DIR}/icon.icns) + add_custom_command( + OUTPUT ${APP_ICNS} + COMMAND sips -s format icns ${CMAKE_CURRENT_SOURCE_DIR}/ui/icon.png --out ${APP_ICNS} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ui/icon.png + COMMENT "Generate icon.icns") + list(APPEND APP_SOURCES ${APP_ICNS}) + set_source_files_properties(${APP_ICNS} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") +endif() + +add_executable(${APP_NAME} ${APP_SOURCES}) +target_include_directories(${APP_NAME} PRIVATE ${LIB_DIR}) +target_link_libraries(${APP_NAME} PRIVATE ${LIB_DIR}/${WEBUI_LIB}) + +# Output into bin/ (same as the Makefile builds) +set_target_properties(${APP_NAME} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin) + +if(WIN32) + # GUI app in Release (no console), console app in Debug + set_target_properties(${APP_NAME} PROPERTIES WIN32_EXECUTABLE "$") + target_link_libraries(${APP_NAME} PRIVATE user32 Advapi32 Shell32 Ole32 ws2_32) + if(MINGW) + target_link_libraries(${APP_NAME} PRIVATE uuid stdc++) + target_link_options(${APP_NAME} PRIVATE -static) + endif() +elseif(APPLE) + set_target_properties(${APP_NAME} PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_BUNDLE_NAME ${APP_NAME} + MACOSX_BUNDLE_GUI_IDENTIFIER com.webui.${APP_NAME} + MACOSX_BUNDLE_ICON_FILE icon) + target_link_libraries(${APP_NAME} PRIVATE pthread m dl "-framework Cocoa" "-framework WebKit") +else() + target_link_libraries(${APP_NAME} PRIVATE pthread m dl) + # Generate the .desktop launcher + icon next to the executable + file(GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/bin/${APP_NAME}.desktop CONTENT +"[Desktop Entry] +Type=Application +Name=${APP_NAME} +Exec=\"$\" +Icon=$/icon.png +Terminal=false +Categories=Utility; +StartupWMClass=${APP_NAME} +") + add_custom_command(TARGET ${APP_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ui/icon.png $/icon.png + COMMAND chmod +x ${CMAKE_CURRENT_SOURCE_DIR}/bin/${APP_NAME}.desktop) +endif() diff --git a/v2/webui/examples/starter_kit_c/CMakePresets.json b/v2/webui/examples/starter_kit_c/CMakePresets.json new file mode 100644 index 0000000..0b40dd9 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/CMakePresets.json @@ -0,0 +1,21 @@ +{ + "version": 3, + "configurePresets": [ + { + "name": "default", + "displayName": "Release", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } + }, + { + "name": "debug", + "displayName": "Debug", + "binaryDir": "${sourceDir}/build-debug", + "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } + } + ], + "buildPresets": [ + { "name": "default", "configurePreset": "default" }, + { "name": "debug", "configurePreset": "debug" } + ] +} diff --git a/v2/webui/examples/starter_kit_c/GNUmakefile b/v2/webui/examples/starter_kit_c/GNUmakefile new file mode 100644 index 0000000..976ed19 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/GNUmakefile @@ -0,0 +1,160 @@ +# WebUI C Starter Kit +# Linux / macOS / Windows (MinGW) +# +# make Build a single portable executable into bin/ +# make debug Same, with a console window and debug symbols +# make clean Remove generated build files (keeps the lib/ snapshot) +# +# The first build must run inside the WebUI repository (examples/starter_kit_c) +# so the WebUI static library can be copied into lib/. After that, this folder +# is fully self-contained and can be moved anywhere. + +# == 1. VARIABLES ============================================================= + +# Your application name (the executable name in bin/) +APP_NAME = my_app + +# Compiler: gcc or clang (macOS always uses clang) +CC = gcc + +# WebUI repository paths (only used when building inside the repository) +WEBUI_DIST = ../../dist +WEBUI_INCLUDE = ../../include + +# WebUI static library file name +LIB_FILE = libwebui-2-static.a + +# Platform conditions +ifeq ($(OS),Windows_NT) + # Windows (MinGW) + PLATFORM := windows + SHELL := CMD + OUT := bin/$(APP_NAME).exe + ICON_OBJ := icon.o + LIBS := -L"lib" -lwebui-2-static -lws2_32 -lole32 -luser32 -lstdc++ -luuid -static + GUI_APP := -Wl,-subsystem=windows + CONSOLE_APP := -Wl,-subsystem=console + STRIP_OPT := --strip-all +else + OUT := bin/$(APP_NAME) + ICON_OBJ := + ifeq ($(shell uname),Darwin) + # macOS + PLATFORM := macos + CC = clang + LIBS := -L"lib" -lwebui-2-static -lpthread -lm -ldl -framework Cocoa -framework WebKit + else + # Linux + PLATFORM := linux + LIBS := -L"lib" -lwebui-2-static -lpthread -lm -ldl + STRIP_OPT := --strip-all + ifeq ($(CC),clang) + LLVM_OPT := llvm- + endif + endif +endif + +# == 2. TARGETS =============================================================== + +all: release + +release: --prepare + @echo "Build $(APP_NAME) (release)..." + @$(CC) -Os -Wall $(GUI_APP) src/main.c $(ICON_OBJ) -I"lib" $(LIBS) -o $(OUT) + @$(LLVM_OPT)strip $(STRIP_OPT) $(OUT) +ifeq ($(PLATFORM),windows) + @- del icon.o >nul 2>&1 +endif +ifeq ($(PLATFORM),linux) + @echo "Generate bin/$(APP_NAME).desktop..." + @cp ui/icon.png bin/icon.png + @printf '%s\n' \ + '[Desktop Entry]' \ + 'Type=Application' \ + 'Name=$(APP_NAME)' \ + 'Exec="$(CURDIR)/bin/$(APP_NAME)"' \ + 'Icon=$(CURDIR)/bin/icon.png' \ + 'Terminal=false' \ + 'Categories=Utility;' \ + 'StartupWMClass=$(APP_NAME)' \ + > bin/$(APP_NAME).desktop + @chmod +x bin/$(APP_NAME).desktop +endif +ifeq ($(PLATFORM),macos) + @echo "Bundle bin/$(APP_NAME).app..." + @rm -rf "bin/$(APP_NAME).app" + @mkdir -p "bin/$(APP_NAME).app/Contents/MacOS" "bin/$(APP_NAME).app/Contents/Resources" + @mv $(OUT) "bin/$(APP_NAME).app/Contents/MacOS/$(APP_NAME)" + @sips -s format icns ui/icon.png --out "bin/$(APP_NAME).app/Contents/Resources/icon.icns" >/dev/null + @printf '%s\n' \ + '' \ + '' \ + '' \ + '' \ + ' CFBundleExecutable' \ + ' $(APP_NAME)' \ + ' CFBundleIdentifier' \ + ' com.webui.$(APP_NAME)' \ + ' CFBundleName' \ + ' $(APP_NAME)' \ + ' CFBundleIconFile' \ + ' icon' \ + ' CFBundlePackageType' \ + ' APPL' \ + ' CFBundleInfoDictionaryVersion' \ + ' 6.0' \ + ' NSHighResolutionCapable' \ + ' ' \ + '' \ + '' \ + > "bin/$(APP_NAME).app/Contents/Info.plist" + @echo "Done: bin/$(APP_NAME).app" +else + @echo "Done: $(OUT)" +endif + +debug: --prepare + @echo "Build $(APP_NAME) (debug)..." + @$(CC) -g -Wall $(CONSOLE_APP) src/main.c $(ICON_OBJ) -I"lib" $(LIBS) -o $(OUT) +ifeq ($(PLATFORM),windows) + @- del icon.o >nul 2>&1 +endif + @echo "Done: $(OUT)" + +clean: +ifeq ($(PLATFORM),windows) + @- rmdir /S /Q "bin" >nul 2>&1 + @- del src\vfs.h >nul 2>&1 + @- del icon.o >nul 2>&1 + @- del tools\vfs.exe >nul 2>&1 +else + @- rm -rf bin + @- rm -f src/vfs.h + @- rm -f tools/vfs +endif + @echo "Clean done (lib/ snapshot kept)." + +# == 3. INTERNAL ============================================================== + +# Prepare: snapshot the WebUI library into lib/, pack ui/ into src/vfs.h, +# and compile the Windows icon resource. +--prepare: +ifeq ($(PLATFORM),windows) + @if not exist "bin" mkdir "bin" + @if not exist "lib" mkdir "lib" + @if exist "..\..\dist\$(LIB_FILE)" copy /Y "..\..\dist\$(LIB_FILE)" "lib" >nul + @if exist "..\..\include\webui.h" copy /Y "..\..\include\webui.h" "lib" >nul + @if not exist "lib\$(LIB_FILE)" (echo [Error] WebUI static library not found. Run 'mingw32-make' in the WebUI repository root first. & exit /b 1) + @echo Pack ui/ into src/vfs.h... + @$(CC) tools/vfs.c -o tools/vfs.exe + @tools\vfs.exe ui src\vfs.h + @windres icon.rc -o icon.o +else + @mkdir -p bin lib + @if [ -f "$(WEBUI_DIST)/$(LIB_FILE)" ]; then cp -f "$(WEBUI_DIST)/$(LIB_FILE)" lib/; fi + @if [ -f "$(WEBUI_INCLUDE)/webui.h" ]; then cp -f "$(WEBUI_INCLUDE)/webui.h" lib/; fi + @if [ ! -f "lib/$(LIB_FILE)" ]; then echo "[Error] WebUI static library not found. Run 'make' in the WebUI repository root first."; exit 1; fi + @echo "Pack ui/ into src/vfs.h..." + @$(CC) tools/vfs.c -o tools/vfs + @./tools/vfs ui src/vfs.h +endif diff --git a/v2/webui/examples/starter_kit_c/Makefile b/v2/webui/examples/starter_kit_c/Makefile new file mode 100644 index 0000000..7dd7414 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/Makefile @@ -0,0 +1,64 @@ +# WebUI C Starter Kit +# Windows - Microsoft Visual C (nmake, from a Developer Command Prompt) +# +# nmake Build a single portable executable into bin\ +# nmake debug Same, with a console window and debug symbols +# nmake clean Remove generated build files (keeps the lib\ snapshot) +# +# The first build must run inside the WebUI repository (examples\starter_kit_c) +# so the WebUI static library can be copied into lib\. After that, this folder +# is fully self-contained and can be moved anywhere. + +SHELL = CMD + +# Your application name (the executable name in bin\) +APP_NAME = my_app + +# WebUI static library file name +LIB_FILE = webui-2-static.lib + +# WebUI repository paths (only used when building inside the repository) +WEBUI_DIST = ..\..\dist +WEBUI_INCLUDE = ..\..\include + +all: release + +release: prepare + @echo Build $(APP_NAME) (Release)... + @cl /nologo /O2 src\main.c icon.res /I"lib" /link /LIBPATH:"lib" /SUBSYSTEM:WINDOWS $(LIB_FILE) user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:bin\$(APP_NAME).exe + @- del main.obj >nul 2>&1 + @- del icon.res >nul 2>&1 + @echo Done: bin\$(APP_NAME).exe + +debug: prepare + @echo Build $(APP_NAME) (Debug)... + @cl /nologo /Zi src\main.c icon.res /I"lib" /link /LIBPATH:"lib" /SUBSYSTEM:CONSOLE $(LIB_FILE) user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:bin\$(APP_NAME).exe + @- del main.obj >nul 2>&1 + @- del icon.res >nul 2>&1 + @echo Done: bin\$(APP_NAME).exe + +# Prepare: snapshot the WebUI library into lib\, pack ui\ into src\vfs.h, +# and compile the icon resource. +prepare: + @if not exist "bin" mkdir "bin" + @if not exist "lib" mkdir "lib" + @if exist "$(WEBUI_DIST)\$(LIB_FILE)" copy /Y "$(WEBUI_DIST)\$(LIB_FILE)" "lib" >nul + @if exist "$(WEBUI_INCLUDE)\webui.h" copy /Y "$(WEBUI_INCLUDE)\webui.h" "lib" >nul + @if not exist "lib\$(LIB_FILE)" (echo [Error] WebUI static library not found. Run 'nmake' in the WebUI repository root first. & exit /b 1) + @echo Pack ui\ into src\vfs.h... + @cl /nologo tools\vfs.c /Fetools\vfs.exe /Fotools\vfs.obj + @tools\vfs.exe ui src\vfs.h + @- del tools\vfs.obj >nul 2>&1 + @echo Build icon resource... + @rc /nologo /fo icon.res icon.rc + +clean: + - rmdir /S /Q bin >nul 2>&1 + - del src\vfs.h >nul 2>&1 + - del icon.res >nul 2>&1 + - del tools\vfs.exe >nul 2>&1 + - del tools\vfs.obj >nul 2>&1 + - del *.obj >nul 2>&1 + - del *.pdb >nul 2>&1 + - del *.ilk >nul 2>&1 + @echo Clean done (lib\ snapshot kept). diff --git a/v2/webui/examples/starter_kit_c/README.md b/v2/webui/examples/starter_kit_c/README.md new file mode 100644 index 0000000..2c92237 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/README.md @@ -0,0 +1,160 @@ +# WebUI C Starter Kit + +A ready-to-use project template for building a professional desktop app in C +with a web UI — compiled into a **single portable executable** with the +application icon and every UI file (HTML, CSS, JS, images) embedded inside it. + +No runtime files, no installer, no dependencies beyond a C compiler. + +## Quick start + +1. Clone WebUI: `git clone https://github.com/webui-dev/webui.git` +2. `cd webui` +3. Build the WebUI library: + - Linux / macOS: `make` + - Windows MinGW: `mingw32-make` + - Windows MSVC: `nmake` (from a *Developer Command Prompt*) +4. `cd examples/starter_kit_c` +5. Build the starter kit: `make` / `mingw32-make` / `nmake` +6. Done — your app is `bin/my_app` (`bin\my_app.exe` on Windows), and the + `starter_kit_c` folder is now **self-contained**: copy it anywhere (outside + the WebUI repository) and continue developing your own project from it. + +The first build must happen inside the WebUI repository: it copies the WebUI +static library and header into `lib/`. Every later build works from the local +`lib/` snapshot, wherever the folder lives. + +## Build with CMake (optional) + +The kit also ships `CMakeLists.txt` + `CMakePresets.json`, so it works out +of the box with CMake-based IDEs and tools (Visual Studio, CLion, VS Code, +Ninja, ...): + +```sh +cmake -B build +cmake --build build --config Release +``` + +Or using presets: `cmake --preset default` then `cmake --build --preset +default` (`debug` presets included). The output matches the Makefile builds: +everything lands in `bin/`, and the same `lib/` snapshot rule applies — run +the first configure inside the WebUI repository. + +## Folder structure + +``` +starter_kit_c/ +├── Makefile # Windows MSVC (nmake) +├── GNUmakefile # Linux, macOS, Windows MinGW (make / mingw32-make) +├── CMakeLists.txt # CMake build (Visual Studio, CLion, VS Code, ...) +├── CMakePresets.json # CMake presets (Release / Debug) +├── icon.rc # Windows resource: embeds ui/favicon.ico as the EXE icon +├── src/ +│ ├── main.c # Your C backend (HTTP handler, bindings, window) +│ └── vfs.h # GENERATED — the ui/ folder packed as C arrays +├── tools/ +│ └── vfs.c # Build-time packer: ui/ -> src/vfs.h (auto-compiled) +├── ui/ # Your frontend — every file here gets embedded +│ ├── index.html +│ ├── style.css +│ ├── app.js +│ ├── favicon.ico # App icon: Windows executable icon (via icon.rc) +│ └── icon.png # App icon: HTML favicon + Linux window/launcher icon +├── lib/ # GENERATED — snapshot of webui.h + WebUI static library +└── bin/ # GENERATED — my_app(.exe); Linux: + .desktop + icon.png; macOS: my_app.app +``` + +## Customize + +- **App name** — edit `APP_NAME` at the top of `Makefile` and `GNUmakefile`. +- **Frontend** — edit or add any files under `ui/` (subfolders included). + They are re-packed into the executable automatically on every build. +- **Backend** — add C functions in `src/main.c` and expose them with + `webui_bind()`. Every bound function becomes a global `async` JavaScript + function: `const reply = await greet('World');` +- **Icon** — two files in `ui/` (keep the names, swap the artwork): + `ui/favicon.ico` — the Windows executable icon (resource ID 32512 / + `IDI_APPLICATION`, used by Explorer, the taskbar, and the WebView window; + use a real multi-size `.ico`); `ui/icon.png` — the HTML favicon, on + Linux the window/taskbar icon and the `.desktop` launcher icon (the + build copies it into `bin/`), and on macOS the app icon (converted to + `icon.icns` inside the `.app` bundle). +- **HTTP** — every UI request goes through `http_handler()` in `src/main.c` + (embedded files via `vfs()`, everything else 404) — add custom routes, + headers, or dynamic responses there. +- **Window** — `src/main.c` opens a frameless, transparent WebView window, and + the UI draws its own title bar (`#titlebar` in `ui/index.html`, with drag + regions and minimize/maximize/close buttons). For a normal OS window, remove + the `webui_set_frameless()` / `webui_set_transparent()` lines; for browser + mode, call `webui_show()` instead of `webui_show_wv()`. + +## How it works + +- `tools/vfs.c` is compiled with your same C compiler and run at build + time. It packs `ui/` into `src/vfs.h` as byte arrays plus a `vfs()` lookup + that serves an embedded file as a full HTTP response (MIME type via + `webui_get_mime_type()`), or returns `NULL` for unknown paths. +- Every HTTP request reaches `http_handler()` in `main.c`: embedded files + are served through `vfs()`, anything else gets a 404 — tweak requests or + add your own routes there (`webui.js` is always served by WebUI itself). + Note: using a custom file handler disables WebUI's cookie-based client + authentication (security becomes your responsibility). +- `icon.rc` embeds the icon at resource ID 32512 (`IDI_APPLICATION`), which + WebUI's WebView window class picks up automatically on Windows. +- `main.c` calls `webui_set_icon_file(win, "icon.png")` before showing the + window; WebUI resolves the file (working directory first, then next to + the executable) and, on Linux, applies it to the WebView window, which + gives the taskbar icon on X11 sessions. +- The app links against `lib/webui-2-static.lib` (MSVC) or + `lib/libwebui-2-static.a` (MinGW / Linux / macOS) — fully static, one file. +- On Linux, the release build copies `ui/icon.png` into `bin/` and generates + `bin/.desktop` — a launcher pointing at the executable and the icon + with absolute paths. Nothing is installed or written outside this folder; + rebuild after moving the folder to refresh the paths. +- On macOS, the release build wraps the executable into `bin/.app` — + `Info.plist` plus `icon.icns` (converted from `ui/icon.png` with the + built-in `sips` tool) — so Finder and the Dock show the app icon. + +## Debugging + +`make debug` / `nmake debug` builds with debug symbols and a console window, +so `printf()` from your C code is visible. For WebUI's own internal logs, +build the library in debug mode at the repository root (`make debug`), then +copy the static library from `dist/debug/` over the one in `lib/`. + +## Updating WebUI + +Rebuild the library in the WebUI repository, then run one build of this kit +while it is inside the repository — `lib/` is refreshed automatically. (If you +moved the folder out, copy the new static library and `webui.h` into `lib/` +manually, or rebuild from a fresh clone.) + +## Platform notes + +- **Windows** — the executable icon works everywhere (Explorer, taskbar, and + the frameless WebView window). WebUI links the WebView2 loader statically and + the WebView2 Runtime ships with Windows 10/11, so the single executable is + all you need. If WebView2 is unavailable, the app falls back to a browser + app-mode window (the embedded favicon shows as the tab icon). +- **Linux** — the frameless WebView window needs GTK + WebKitGTK installed + (the app falls back to a browser app-mode window otherwise). The + window/taskbar icon comes from `webui_set_icon_file()` using `bin/icon.png` + (copied next to the executable by the build) and works on X11 sessions + with nothing installed; Wayland sessions only show icons for apps with an + installed `.desktop` entry. ELF executables cannot embed icons, so the + build also generates `bin/my_app.desktop`, a launcher pointing at the + executable and `bin/icon.png` (absolute paths, regenerated on every + build — rebuild after moving the folder). Everything stays inside this + folder; the build never writes to the system. In GNOME Files, right-click + the `.desktop` and choose "Allow Launching" once — it then shows your app + icon and launches on double-click. Optional, your choice: copy + `bin/my_app.desktop` into `~/.local/share/applications/` to add the app + to the system menu (and the dock icon on Wayland) — the build itself + never does this. +- **macOS** — the release build produces `bin/my_app.app` with the + executable and icon embedded inside the bundle (`icon.icns` is generated + from `ui/icon.png` using `sips`, which ships with macOS). Launch it from + Finder or with `open bin/my_app.app`; the Dock and Finder show the app + icon. The bundle is unsigned — fine for local use; distributing to other + Macs needs `codesign`/notarization. `make debug` still produces a plain + `bin/my_app` binary for terminal debugging. diff --git a/v2/webui/examples/starter_kit_c/icon.rc b/v2/webui/examples/starter_kit_c/icon.rc new file mode 100644 index 0000000..ee4fa58 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/icon.rc @@ -0,0 +1,6 @@ +// WebUI C Starter Kit - Windows application icon +// +// 32512 is IDI_APPLICATION: picked up by Explorer, the taskbar, and the +// WebUI WebView window class. Replace ui/favicon.ico to change your icon +// (the same file is also embedded as the browser tab favicon). +32512 ICON "ui/favicon.ico" diff --git a/v2/webui/examples/starter_kit_c/src/main.c b/v2/webui/examples/starter_kit_c/src/main.c new file mode 100644 index 0000000..821e9bc --- /dev/null +++ b/v2/webui/examples/starter_kit_c/src/main.c @@ -0,0 +1,115 @@ +// WebUI C Starter Kit +// +// A minimal C backend, WebView frontend, +// compiled into a single portable executable. +// +// src/main.c Your backend logic (this file) +// ui/ Your frontend - embedded into the executable at build time +// src/vfs.h Generated from ui folder by the build system, do not edit. + +#include +#include +#include "webui.h" +#include "vfs.h" + +// Called from JavaScript: greet('name').then(...) +void greet(webui_event_t* e) { + const char* name = webui_get_string(e); + char reply[512]; + snprintf(reply, sizeof(reply), + "Hello %s!, This reply was built in C (WebUI v" WEBUI_VERSION ")", name); + webui_return_string(e, reply); +} + +// Window controls, called from `ui/index.html` +void minimize(webui_event_t* e) { + webui_minimize(e->window); +} + +void maximize(webui_event_t* e) { + webui_maximize(e->window); +} + +void close_win(webui_event_t* e) { + webui_close(e->window); +} + +// Every HTTP request for the UI goes through this handler: embedded files +// are served by vfs() from the generated src/vfs.h, add your own routes and +// custom responses, here. +// +// Note: `webui.js` is virtual, and always served by WebUI and never reaches this handler. +const void* http_handler(const char* filename, int* length) { + + // Embedded files + const void* response = vfs(filename, length); + if (response != NULL) + return response; + + // File not found in the virtual file system, return a 404 response. + const char* body = "

404 - Not Found

"; + const char* http_header_template = "HTTP/1.1 404 Not Found\r\n" + "Content-Type: text/html\r\n" + "Content-Length: %d\r\n\r\n"; + + // Build the full HTTP response (header + body) + int body_length = (int)strlen(body); + int header_length = snprintf(NULL, 0, http_header_template, body_length); + *length = header_length + body_length; + char* res = (char*)webui_malloc((size_t)*length + 1); + snprintf(res, (size_t)header_length + 1, http_header_template, body_length); + memcpy(res + header_length, body, (size_t)body_length); + return res; +} + +int main(void) { + + // Create a new window + size_t win = webui_new_window(); + + // Bind C functions - each becomes automatically a global async JavaScript function + webui_bind(win, "greet", greet); + webui_bind(win, "minimize", minimize); + webui_bind(win, "maximize", maximize); + webui_bind(win, "close_win", close_win); + + // All HTTP requests go through our handler (see http_handler above) + webui_set_file_handler(win, http_handler); + + // Application icon + #if defined(_WIN32) || defined(_WIN64) + // Windows: use the embedded EXE `favicon.ico` as the taskbar icon. + #elif defined(__linux__) + // Linux: use the local `icon.png` file as the taskbar icon. + // Webui will pass the file to GTK. + webui_set_icon_file(win, "icon.png"); + #else + // macOS: the .app bundle provides the icon. + #endif + + // Frameless window style + webui_set_size(win, 800, 600); + webui_set_frameless(win, true); + webui_set_transparent(win, true); + webui_set_resizable(win, true); + webui_set_center(win); + + // Show the window using WebView. If no WebView is available, + // fall back to showing it in a web browser (app mode). + if (!webui_show_wv(win, "index.html")) { + webui_show(win, "index.html"); + } + + // Wait until all windows are closed + webui_wait(); + + // Free all memory resources (optional) + webui_clean(); + + return 0; +} + +#if defined(_MSC_VER) +// Release builds use the WINDOWS subsystem (no console window) +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) { return main(); } +#endif diff --git a/v2/webui/examples/starter_kit_c/tools/vfs.c b/v2/webui/examples/starter_kit_c/tools/vfs.c new file mode 100644 index 0000000..e99e2ae --- /dev/null +++ b/v2/webui/examples/starter_kit_c/tools/vfs.c @@ -0,0 +1,211 @@ +/* + WebUI C Starter Kit - UI packer (build-time host tool) + + Packs every file inside a folder into a single C header (a tiny virtual + file system), so the final executable embeds the whole UI. + + Usage: vfs + + The generated header exposes: + + static const void* vfs(const char* filename, int* length); + + which serves an embedded file as a full HTTP response, or returns NULL + when the path is not an embedded file. It is used by http_handler() in + src/main.c. + + This tool is compiled and executed automatically by the Makefile / + GNUmakefile on every build - you never run it manually. +*/ + +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include + +#ifdef _WIN32 + #include +#else + #include + #include +#endif + +#define MAX_FILES 4096 +#define MAX_PATH_LEN 512 + +typedef struct { + char disk[MAX_PATH_LEN]; // Path on disk + char url[MAX_PATH_LEN]; // Served path, without the leading slash +} pack_entry; + +static pack_entry entries[MAX_FILES]; +static int entries_count = 0; + +static void add_entry(const char* disk, const char* url) { + if (entries_count >= MAX_FILES) { + fprintf(stderr, "vfs: too many files (max %d)\n", MAX_FILES); + exit(1); + } + strcpy(entries[entries_count].disk, disk); + strcpy(entries[entries_count].url, url); + entries_count++; +} + +// Recursively collect all files inside `dir`. `rel` is the URL-style +// relative path: "" at the root, then "sub" / "sub/dir" ... +static void walk(const char* dir, const char* rel) { + char disk[MAX_PATH_LEN]; + char url[MAX_PATH_LEN]; +#ifdef _WIN32 + char pattern[MAX_PATH_LEN]; + WIN32_FIND_DATAA fd; + HANDLE h; + if (snprintf(pattern, sizeof(pattern), "%s\\*", dir) >= (int)sizeof(pattern)) return; + h = FindFirstFileA(pattern, &fd); + if (h == INVALID_HANDLE_VALUE) return; + do { + if (strcmp(fd.cFileName, ".") == 0 || strcmp(fd.cFileName, "..") == 0) continue; + if (snprintf(disk, sizeof(disk), "%s\\%s", dir, fd.cFileName) >= (int)sizeof(disk)) continue; + if (rel[0] != '\0') { + if (snprintf(url, sizeof(url), "%s/%s", rel, fd.cFileName) >= (int)sizeof(url)) continue; + } else { + if (snprintf(url, sizeof(url), "%s", fd.cFileName) >= (int)sizeof(url)) continue; + } + if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) walk(disk, url); + else add_entry(disk, url); + } while (FindNextFileA(h, &fd)); + FindClose(h); +#else + DIR* d = opendir(dir); + struct dirent* de; + struct stat st; + if (d == NULL) return; + while ((de = readdir(d)) != NULL) { + if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) continue; + if (snprintf(disk, sizeof(disk), "%s/%s", dir, de->d_name) >= (int)sizeof(disk)) continue; + if (rel[0] != '\0') { + if (snprintf(url, sizeof(url), "%s/%s", rel, de->d_name) >= (int)sizeof(url)) continue; + } else { + if (snprintf(url, sizeof(url), "%s", de->d_name) >= (int)sizeof(url)) continue; + } + if (stat(disk, &st) != 0) continue; + if (S_ISDIR(st.st_mode)) walk(disk, url); + else if (S_ISREG(st.st_mode)) add_entry(disk, url); + } + closedir(d); +#endif +} + +static int cmp_entry(const void* a, const void* b) { + return strcmp(((const pack_entry*)a)->url, ((const pack_entry*)b)->url); +} + +int main(int argc, char* argv[]) { + + if (argc != 3) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + const char* input = argv[1]; + const char* output = argv[2]; + + walk(input, ""); + if (entries_count == 0) + fprintf(stderr, "vfs: warning: no files found in '%s'\n", input); + + // Deterministic output order + qsort(entries, (size_t)entries_count, sizeof(pack_entry), cmp_entry); + + FILE* out = fopen(output, "w"); + if (out == NULL) { + fprintf(stderr, "vfs: cannot write '%s'\n", output); + return 1; + } + + fprintf(out, + "// Generated by tools/vfs.c - DO NOT EDIT\n" + "// Regenerated on every build from the '%s' folder\n\n" + "#ifndef WEBUI_STARTER_KIT_VFS_H\n" + "#define WEBUI_STARTER_KIT_VFS_H\n\n" + "#include \n" + "#include \n" + "#include \"webui.h\"\n\n" + "typedef struct {\n" + " const char *path;\n" + " const unsigned char *data;\n" + " int length;\n" + "} VirtualFile;\n\n", input); + + // File data arrays + long* sizes = (long*)calloc((size_t)(entries_count > 0 ? entries_count : 1), sizeof(long)); + if (sizes == NULL) { + fprintf(stderr, "vfs: out of memory\n"); + fclose(out); + return 1; + } + for (int i = 0; i < entries_count; i++) { + FILE* f = fopen(entries[i].disk, "rb"); + if (f == NULL) { + fprintf(stderr, "vfs: cannot read '%s'\n", entries[i].disk); + fclose(out); + return 1; + } + fprintf(out, "static const unsigned char FILE_%d[] = {", i); + unsigned char buf[4096]; + size_t n; + long written = 0; + while ((n = fread(buf, 1, sizeof(buf), f)) > 0) { + for (size_t j = 0; j < n; j++) { + if ((written % 20) == 0) fputs("\n ", out); + fprintf(out, "0x%02x,", buf[j]); + written++; + } + } + fclose(f); + // Trailing NUL (not counted in length): lets text files be used as C strings + fputs("0x00", out); + sizes[i] = written; + fputs("\n};\n\n", out); + } + + // File table + fputs("static const VirtualFile virtual_files[] = {\n", out); + for (int i = 0; i < entries_count; i++) + fprintf(out, " {\"/%s\", FILE_%d, %ld},\n", entries[i].url, i, sizes[i]); + if (entries_count == 0) + fputs(" {NULL, NULL, 0},\n", out); + fputs("};\n\n", out); + fputs("static const int virtual_files_count = (int)(sizeof(virtual_files) / sizeof(virtual_files[0]));\n\n", out); + + // The vfs() lookup used by http_handler() in src/main.c + fputs( + "// Serves an embedded file as a full HTTP response.\n" + "// Returns NULL when `filename` is not an embedded file.\n" + "static const void* vfs(const char* filename, int* length) {\n" + " for (int i = 0; i < virtual_files_count; i++) {\n" + " if (virtual_files[i].path != NULL && strcmp(virtual_files[i].path, filename) == 0) {\n" + " const unsigned char* file_data = virtual_files[i].data;\n" + " int file_length = virtual_files[i].length;\n" + " const char* content_type = webui_get_mime_type(filename);\n" + " const char* http_header_template = \"HTTP/1.1 200 OK\\r\\n\"\n" + " \"Content-Type: %s\\r\\n\"\n" + " \"Content-Length: %d\\r\\n\"\n" + " \"Cache-Control: no-cache\\r\\n\\r\\n\";\n" + " int header_length = snprintf(NULL, 0, http_header_template, content_type, file_length);\n" + " *length = header_length + file_length;\n" + " unsigned char* response = (unsigned char*)webui_malloc((size_t)*length + 1);\n" + " snprintf((char*)response, (size_t)header_length + 1, http_header_template, content_type, file_length);\n" + " memcpy(response + header_length, file_data, (size_t)file_length);\n" + " return response;\n" + " }\n" + " }\n" + " return NULL;\n" + "}\n" + "\n" + "#endif // WEBUI_STARTER_KIT_VFS_H\n", out); + + free(sizes); + fclose(out); + printf("vfs: embedded %d file(s) from '%s' into '%s'\n", entries_count, input, output); + return 0; +} diff --git a/v2/webui/examples/starter_kit_c/ui/app.js b/v2/webui/examples/starter_kit_c/ui/app.js new file mode 100644 index 0000000..6370db7 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/ui/app.js @@ -0,0 +1,34 @@ +// WebUI C Starter Kit - frontend logic +// +// Every C function bound with webui_bind() in src/main.c is available here +// as a global async JavaScript function. + +// --- Backend demo call ------------------------------------------------------ + +async function callBackend() { + const input = document.getElementById('name'); + const reply = document.getElementById('reply'); + const name = input.value.trim() || 'World'; + try { + // Calls the C function greet() and waits for its response + reply.textContent = await greet(name); + } catch (err) { + reply.textContent = 'Backend call failed: ' + err; + } +} + +document.getElementById('greet-btn').addEventListener('click', callBackend); +document.getElementById('name').addEventListener('keydown', (e) => { + if (e.key === 'Enter') callBackend(); +}); + +// --- Custom title bar (frameless window controls) --------------------------- + +document.querySelector('#window-buttons .minimize').addEventListener('click', () => minimize()); +document.querySelector('#window-buttons .maximize').addEventListener('click', () => maximize()); +document.querySelector('#window-buttons .close').addEventListener('click', () => close_win()); + +// Double-click the title bar (not the buttons) to maximize/restore +document.getElementById('titlebar').addEventListener('dblclick', (e) => { + if (!e.target.closest('#window-buttons')) maximize(); +}); diff --git a/v2/webui/examples/starter_kit_c/ui/favicon.ico b/v2/webui/examples/starter_kit_c/ui/favicon.ico new file mode 100644 index 0000000..42c4c21 Binary files /dev/null and b/v2/webui/examples/starter_kit_c/ui/favicon.ico differ diff --git a/v2/webui/examples/starter_kit_c/ui/icon.png b/v2/webui/examples/starter_kit_c/ui/icon.png new file mode 100644 index 0000000..66e7a5e Binary files /dev/null and b/v2/webui/examples/starter_kit_c/ui/icon.png differ diff --git a/v2/webui/examples/starter_kit_c/ui/index.html b/v2/webui/examples/starter_kit_c/ui/index.html new file mode 100644 index 0000000..55550f6 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/ui/index.html @@ -0,0 +1,47 @@ + + + + + + My WebUI App + + + + + + +
+ +
+ My WebUI App +
+ + + +
+
+ +
+
+ +

My WebUI App

+

C backend · Embedded web frontend · Single executable

+ +
+ +
+ + +
+ The reply from the C backend will appear here. +
+ +
+ Edit ui/ for the frontend · src/main.c for the backend +
+
+
+
+ + + diff --git a/v2/webui/examples/starter_kit_c/ui/style.css b/v2/webui/examples/starter_kit_c/ui/style.css new file mode 100644 index 0000000..6979f72 --- /dev/null +++ b/v2/webui/examples/starter_kit_c/ui/style.css @@ -0,0 +1,169 @@ +/* WebUI C Starter Kit - base styles */ + +* { margin: 0; padding: 0; box-sizing: border-box; } + +html, body { + height: 100%; + overflow: hidden; + background: transparent; /* The window itself is frameless + transparent */ +} + +body { + font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + color: #eef2f5; +} + +#app { + height: 100%; + display: flex; + flex-direction: column; + background: linear-gradient(135deg, rgba(27, 39, 53, 0.97), rgba(9, 10, 15, 0.97)); + border: 1px solid rgba(255, 255, 255, 0.12); +} + +/* --- Custom title bar (frameless window) --------------------------------- */ + +#titlebar { + height: 44px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 16px; + background: rgba(0, 0, 0, 0.25); + -webkit-app-region: drag; /* Windows/macOS (native drag) */ + --webui-app-region: drag; /* Linux (WebUI custom drag) */ +} + +#title { + font-size: 13.5px; + font-weight: 600; + letter-spacing: 0.2px; + color: rgba(238, 242, 245, 0.85); +} + +#window-buttons { + display: flex; + gap: 10px; + -webkit-app-region: no-drag; /* Windows/macOS (native) */ + --webui-app-region: no-drag; /* Linux (WebUI custom) */ +} + +#window-buttons .button { + width: 13px; + height: 13px; + border-radius: 50%; + cursor: pointer; + transition: transform 0.15s ease-out, filter 0.15s ease-out; +} + +#window-buttons .button:hover { transform: scale(1.12); filter: brightness(1.15); } +#window-buttons .button:active { transform: scale(0.9); } + +.minimize { background: #ffbd2e; } +.maximize { background: #28c940; } +.close { background: #ff5f57; } + +/* --- Content ------------------------------------------------------------- */ + +#content { + flex-grow: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + overflow: auto; +} + +.card { + width: min(560px, 92vw); + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 14px; + padding: 40px; + backdrop-filter: blur(10px); + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.4); + text-align: center; +} + +.logo { + width: 64px; + height: 64px; + margin: 0 auto 16px; + border-radius: 16px; + background: #2a6699; /* The WebUI brand blue */ + display: flex; + align-items: center; + justify-content: center; + font-size: 34px; + font-weight: 700; +} + +h1 { font-size: 26px; font-weight: 600; } + +.subtitle { + margin-top: 8px; + font-size: 14px; + color: rgba(238, 242, 245, 0.6); +} + +.demo { margin-top: 32px; text-align: left; } + +label { + font-size: 13px; + font-weight: 600; + letter-spacing: 0.3px; + color: rgba(238, 242, 245, 0.7); +} + +.row { display: flex; gap: 10px; margin-top: 6px; } + +input { + flex: 1; + padding: 12px 14px; + border-radius: 8px; + border: 1px solid rgba(255, 255, 255, 0.15); + background: rgba(0, 0, 0, 0.25); + color: inherit; + font-size: 15px; +} + +input:focus { outline: none; border-color: #2a6699; } + +#greet-btn { + padding: 12px 22px; + border-radius: 8px; + border: none; + background: #2a6699; + color: #fff; + font-size: 15px; + cursor: pointer; + transition: background 0.15s ease-out; +} + +#greet-btn:hover { background: #357ab5; } +#greet-btn:active { transform: translateY(1px); } + +output { + display: block; + margin-top: 16px; + padding: 14px; + border-radius: 8px; + background: rgba(0, 0, 0, 0.25); + border: 1px dashed rgba(255, 255, 255, 0.15); + color: rgba(238, 242, 245, 0.75); + font-size: 14px; + min-height: 48px; +} + +footer { + margin-top: 32px; + font-size: 12.5px; + color: rgba(238, 242, 245, 0.45); +} + +code { + background: rgba(255, 255, 255, 0.08); + padding: 2px 6px; + border-radius: 4px; +} diff --git a/v2/webui/include/webui.h b/v2/webui/include/webui.h new file mode 100644 index 0000000..83bbd1a --- /dev/null +++ b/v2/webui/include/webui.h @@ -0,0 +1,1513 @@ +/* + WebUI Library + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. +*/ + +#ifndef _WEBUI_H +#define _WEBUI_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBUI_VERSION "2.5.0-beta.4" + +// Max windows, servers and threads +#define WEBUI_MAX_IDS UINT16_MAX // 65535 + +// Max allowed argument's index +#define WEBUI_MAX_ARG (16) + +// Dynamic Library Exports +#if defined(_WIN32) && (defined(_MSC_VER) || defined(__TINYC__)) + #ifndef WEBUI_EXPORT + #define WEBUI_EXPORT __declspec(dllexport) + #endif +#else + #ifndef WEBUI_EXPORT + #define WEBUI_EXPORT extern + #endif +#endif + +#if defined(_MSC_VER) + #define strdup _strdup +#endif + +// -- C STD --------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// -- Windows ------------------------- +#ifdef _WIN32 + #include + #include + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #ifndef CGO + #if defined(__GNUC__) || defined(__TINYC__) + #include + #endif + #endif + #include + #include + #include + #include + #include + #include + #define WEBUI_GET_CURRENT_DIR _getcwd + #define WEBUI_FILE_EXIST _access + #define WEBUI_POPEN _popen + #define WEBUI_PCLOSE _pclose + #define WEBUI_MAX_PATH MAX_PATH +#endif + +// -- Linux --------------------------- +#ifdef __linux__ + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #define WEBUI_GET_CURRENT_DIR getcwd + #define WEBUI_FILE_EXIST access + #define WEBUI_POPEN popen + #define WEBUI_PCLOSE pclose + #define WEBUI_MAX_PATH PATH_MAX +#endif + +// -- Apple --------------------------- +#ifdef __APPLE__ + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #define WEBUI_GET_CURRENT_DIR getcwd + #define WEBUI_FILE_EXIST access + #define WEBUI_POPEN popen + #define WEBUI_PCLOSE pclose + #define WEBUI_MAX_PATH PATH_MAX +#endif + +// -- Enums --------------------------- +enum webui_browser { + NoBrowser = 0, // 0. No web browser + AnyBrowser = 1, // 1. Default recommended web browser + Chrome, // 2. Google Chrome + Firefox, // 3. Mozilla Firefox + Edge, // 4. Microsoft Edge + Safari, // 5. Apple Safari + Chromium, // 6. The Chromium Project + Opera, // 7. Opera Browser + Brave, // 8. The Brave Browser + Vivaldi, // 9. The Vivaldi Browser + Epic, // 10. The Epic Browser + Yandex, // 11. The Yandex Browser + ChromiumBased, // 12. Any Chromium based browser + Webview, // 13. WebView (Non-web-browser) +}; + +enum webui_runtime { + None = 0, // 0. Prevent WebUI from using any runtime for .js and .ts files + Deno, // 1. Use Deno runtime for .js and .ts files + NodeJS, // 2. Use Nodejs runtime for .js files + Bun, // 3. Use Bun runtime for .js and .ts files +}; + +enum webui_event { + WEBUI_EVENT_DISCONNECTED = 0, // 0. Window disconnection event + WEBUI_EVENT_CONNECTED, // 1. Window connection event + WEBUI_EVENT_MOUSE_CLICK, // 2. Mouse click event + WEBUI_EVENT_NAVIGATION, // 3. Window navigation event + WEBUI_EVENT_CALLBACK, // 4. Function call event +}; + +typedef enum { + // Control if `webui_show()`, `webui_show_browser()` and + // `webui_show_wv()` should wait for the window to connect + // before returns or not. + // + // Default: True + show_wait_connection = 0, + // Control if WebUI should block and process the UI events + // one a time in a single thread `True`, or process every + // event in a new non-blocking thread `False`. This updates + // all windows. You can use `webui_set_event_blocking()` for + // a specific single window update. + // + // Default: False + ui_event_blocking, + // Automatically refresh the window UI when any file in the + // root folder gets changed. + // + // Default: False + folder_monitor, + // Allow multiple clients to connect to the same window, + // This is helpful for web apps (non-desktop software), + // Please see the documentation for more details. + // + // Default: False + multi_client, + // Allow or prevent WebUI from adding `webui_auth` cookies. + // WebUI uses these cookies to identify clients and block + // unauthorized access to the window content using a URL. + // Please keep this option to `True` if you want only a single + // client to access the window content. + // + // Default: True + use_cookies, + // If the backend uses asynchronous operations, set this + // option to `True`. This will make webui wait until the + // backend sets a response using `webui_return_x()`. + asynchronous_response +} webui_config; + +// -- Structs ------------------------- +typedef struct webui_event_t { + size_t window; // The window object number + size_t event_type; // Event type + char* element; // HTML element ID + size_t event_number; // Internal WebUI + size_t bind_id; // Bind ID + size_t client_id; // Client's unique ID + size_t connection_id; // Client's connection ID + char* cookies; // Client's full cookies +} webui_event_t; + +enum webui_logger_level { + WEBUI_LOGGER_LEVEL_DEBUG = 0, // 0. All logs with all details + WEBUI_LOGGER_LEVEL_INFO, // 1. Only general logs + WEBUI_LOGGER_LEVEL_ERROR, // 2. Only fatal error logs +}; + +// -- Definitions --------------------- + +/** + * @brief Create a new WebUI window object. + * + * @return Returns the window number. + * + * @example size_t myWindow = webui_new_window(); + */ +WEBUI_EXPORT size_t webui_new_window(void); + +/** + * @brief Create a new webui window object using a specified window number. + * + * @param window_number The window number (should be > 0, and < WEBUI_MAX_IDS) + * + * @return Returns the same window number if success. + * + * @example size_t myWindow = webui_new_window_id(123); + */ +WEBUI_EXPORT size_t webui_new_window_id(size_t window_number); + +/** + * @brief Get a free window number that can be used with + * `webui_new_window_id()`. + * + * @return Returns the first available free window number. Starting from 1. + * + * @example size_t myWindowNumber = webui_get_new_window_id(); + */ +WEBUI_EXPORT size_t webui_get_new_window_id(void); + +/** + * @brief Bind an HTML element and a JavaScript object with a backend function. Empty + * element name means all events. + * + * @param window The window number + * @param element The HTML element / JavaScript object + * @param func The callback function + * + * @return Returns a unique bind ID. + * + * @example webui_bind(myWindow, "myFunction", myFunction); + */ +WEBUI_EXPORT size_t webui_bind(size_t window, const char* element, void (*func)(webui_event_t* e)); + +/** + * @brief Use this API after using `webui_bind()` to add any user data to it that can be + * read later using `webui_get_context()`. + * + * @param window The window number + * @param element The HTML element / JavaScript object + * @param context Any user data + * + * @example + * webui_bind(myWindow, "myFunction", myFunction); + * + * webui_set_context(myWindow, "myFunction", myData); + * + * void myFunction(webui_event_t* e) { + * void* myData = webui_get_context(e); + * } + */ +WEBUI_EXPORT void webui_set_context(size_t window, const char* element, void* context); + +/** + * @brief Get user data that is set using `webui_set_context()`. + * + * @param e The event struct + * + * @return Returns user data pointer. + * + * @example + * webui_bind(myWindow, "myFunction", myFunction); + * + * webui_set_context(myWindow, "myFunction", myData); + * + * void myFunction(webui_event_t* e) { + * void* myData = webui_get_context(e); + * } + */ +WEBUI_EXPORT void* webui_get_context(webui_event_t* e); + +/** + * @brief Get the recommended web browser ID to use. If you + * are already using one, this function will return the same ID. + * + * @param window The window number + * + * @return Returns a web browser ID. + * + * @example size_t browserID = webui_get_best_browser(myWindow); + */ +WEBUI_EXPORT size_t webui_get_best_browser(size_t window); + +/** + * @brief Show a window using embedded HTML, or a file. If the window is already + * open, it will be refreshed. This will refresh all windows in multi-client mode. + * + * @param window The window number + * @param content The HTML, URL, local file, or local folder. + * Pass `NULL` or an empty string to start in folder mode using the + * current root folder and index fallback logic. + * + * @return Returns True if showing the window is successed. + * + * @example webui_show(myWindow, "..."); | + * webui_show(myWindow, "index.html"); | webui_show(myWindow, "http://..."); + */ +WEBUI_EXPORT bool webui_show(size_t window, const char* content); + +/** + * @brief Show a window using embedded HTML, or a file. If the window is already + * open, it will be refreshed. Single client. + * + * @param e The event struct + * @param content The HTML, URL, Or a local file + * + * @return Returns True if showing the window is successed. + * + * @example webui_show_client(e, "..."); | + * webui_show_client(e, "index.html"); | webui_show_client(e, "http://..."); + */ +WEBUI_EXPORT bool webui_show_client(webui_event_t* e, const char* content); + +/** + * @brief Same as `webui_show()`. But using a specific web browser. + * + * @param window The window number + * @param content The HTML, URL, local file, or local folder. + * Pass `NULL` or an empty string to start in folder mode using the + * current root folder and index fallback logic. + * @param browser The web browser to be used + * + * @return Returns True if showing the window is successed. + * + * @example webui_show_browser(myWindow, "...", Chrome); | + * webui_show(myWindow, "index.html", Firefox); + */ +WEBUI_EXPORT bool webui_show_browser(size_t window, const char* content, size_t browser); + +/** + * @brief Start only the local web server and return the URL. + * No window will be shown. + * + * @param window The window number + * @param content The local file or local folder to serve. + * Pass `NULL` or an empty string to start in folder mode using the + * current root folder and index fallback logic. + * + * @return Returns the url of this window server. + * + * @example const char* url = webui_start_server(myWindow, "/full/root/path"); + */ +WEBUI_EXPORT const char* webui_start_server(size_t window, const char* content); + +/** + * @brief Show a WebView window using embedded HTML, or a file. If the window is already + * open, it will be refreshed. Note: Win32 need `WebView2Loader.dll`. + * + * @param window The window number + * @param content The HTML, URL, Or a local file + * + * @return Returns True if showing the WebView window is successed. + * + * @example webui_show_wv(myWindow, "..."); | webui_show_wv(myWindow, + * "index.html"); | webui_show_wv(myWindow, "http://..."); + */ +WEBUI_EXPORT bool webui_show_wv(size_t window, const char* content); + +/** + * @brief Set the window in Kiosk mode (Full screen). + * + * @param window The window number + * @param status True or False + * + * @example webui_set_kiosk(myWindow, true); + */ +WEBUI_EXPORT void webui_set_kiosk(size_t window, bool status); + +/** + * @brief Bring a window to the front and focus it. + * + * @param window The window number + * + * @example webui_focus(myWindow); + */ +WEBUI_EXPORT void webui_focus(size_t window); + +/** + * @brief Add a user-defined web browser's CLI parameters. + * + * @param window The window number + * @param params Command line parameters + * + * @example webui_set_custom_parameters(myWindow, "--remote-debugging-port=9222"); + */ +WEBUI_EXPORT void webui_set_custom_parameters(size_t window, char *params); + +/** + * @brief Set the window with high-contrast support. Useful when you want to + * build a better high-contrast theme with CSS. + * + * @param window The window number + * @param status True or False + * + * @example webui_set_high_contrast(myWindow, true); + */ +WEBUI_EXPORT void webui_set_high_contrast(size_t window, bool status); + +/** + * @brief Sets whether the window frame is resizable or fixed. + * Works only on WebView window. + * + * @param window The window number + * @param status True or False + * + * @example webui_set_resizable(myWindow, true); + */ +WEBUI_EXPORT void webui_set_resizable(size_t window, bool status); + +/** + * @brief Get OS high contrast preference. + * + * @return Returns True if OS is using high contrast theme + * + * @example bool hc = webui_is_high_contrast(); + */ +WEBUI_EXPORT bool webui_is_high_contrast(void); + +/** + * @brief Check if a web browser is installed. + * + * @return Returns True if the specified browser is available + * + * @example bool status = webui_browser_exist(Chrome); + */ +WEBUI_EXPORT bool webui_browser_exist(size_t browser); + +/** + * @brief Wait until all opened windows get closed. + * + * @example webui_wait(); + */ +WEBUI_EXPORT void webui_wait(void); + +/** + * @brief Wait asynchronously until all opened windows get closed. + * Note: In WebView mode, you need to call this from the main thread. + * + * @return Returns True if more windows are still opened, False otherwise. + * + * @example while (webui_wait_async()) { + * // Your main thread code here + * } + */ +WEBUI_EXPORT bool webui_wait_async(void); + +/** + * @brief Close a specific window only. The window object will still exist. + * All clients. + * + * @param window The window number + * + * @example webui_close(myWindow); + */ +WEBUI_EXPORT void webui_close(size_t window); + +/** + * @brief Minimize a WebView window. + * + * @param window The window number + * + * @example webui_minimize(myWindow); + */ +WEBUI_EXPORT void webui_minimize(size_t window); + +/** + * @brief Maximize a WebView window. + * + * @param window The window number + * + * @example webui_maximize(myWindow); + */ +WEBUI_EXPORT void webui_maximize(size_t window); + +/** + * @brief Close a specific client. + * + * @param e The event struct + * + * @example webui_close_client(e); + */ +WEBUI_EXPORT void webui_close_client(webui_event_t* e); + +/** + * @brief Close a specific window and free all memory resources. + * + * @param window The window number + * + * @example webui_destroy(myWindow); + */ +WEBUI_EXPORT void webui_destroy(size_t window); + +/** + * @brief Close all open windows. `webui_wait()` will return (Break). + * + * @example webui_exit(); + */ +WEBUI_EXPORT void webui_exit(void); + +/** + * @brief Set the web-server root folder path for a specific window. + * + * @param window The window number + * @param path The local folder full path + * + * @example webui_set_root_folder(myWindow, "/home/Foo/Bar/"); + */ +WEBUI_EXPORT bool webui_set_root_folder(size_t window, const char* path); + +/** + * @brief Set custom browser folder path. + * + * @param path The browser folder path + * + * @example webui_set_browser_folder("/home/Foo/Bar/"); + */ +WEBUI_EXPORT void webui_set_browser_folder(const char* path); + +/** + * @brief Set the web-server root folder path for all windows. Should be used + * before `webui_show()`. + * + * @param path The local folder full path + * + * @example webui_set_default_root_folder("/home/Foo/Bar/"); + */ +WEBUI_EXPORT bool webui_set_default_root_folder(const char* path); + +/** + * @brief Set a callback to catch the close event of the WebView window. + * Must return `false` to prevent the close event, `true` otherwise. + * + * @example + * bool myCloseEvent(size_t window) { + * // Prevent WebView window close event + * return false; + * } + * webui_set_close_handler(myWindow, myCloseEvent); + */ +WEBUI_EXPORT void webui_set_close_handler_wv(size_t window, bool (*close_handler)(size_t window)); + +/** + * @brief Set a custom handler to serve files. This custom handler should + * return full HTTP header and body. + * This deactivates any previous handler set with `webui_set_file_handler_window` + * + * @param window The window number + * @param handler The handler function: `void myHandler(const char* filename, + * int* length)` + * + * @example webui_set_file_handler(myWindow, myHandlerFunction); + */ +WEBUI_EXPORT void webui_set_file_handler(size_t window, const void* (*handler)(const char* filename, int* length)); + +/** + * @brief Set a custom handler to serve files. This custom handler should + * return full HTTP header and body. + * This deactivates any previous handler set with `webui_set_file_handler` + * + * @param window The window number + * @param handler The handler function: `void myHandler(size_t window, const char* filename, + * int* length)` + * + * @example webui_set_file_handler_window(myWindow, myHandlerFunction); + */ +WEBUI_EXPORT void webui_set_file_handler_window(size_t window, const void* (*handler)(size_t window, const char* filename, int* length)); + +/** + * @brief Use this API to set a file handler response if your backend need async + * response for `webui_set_file_handler()`. + * + * @param window The window number + * @param response The response buffer + * @param length The response size + * + * @example webui_interface_set_response_file_handler(myWindow, buffer, 1024); + */ +WEBUI_EXPORT void webui_interface_set_response_file_handler(size_t window, const void* response, int length); + +/** + * @brief Check if the specified window is still running. + * + * @param window The window number + * + * @example webui_is_shown(myWindow); + */ +WEBUI_EXPORT bool webui_is_shown(size_t window); + +/** + * @brief Set the maximum time in seconds to wait for the window to connect. + * This effect `show()` and `wait()`. Value of `0` means wait forever. + * + * @param second The timeout in seconds + * + * @example webui_set_timeout(30); + */ +WEBUI_EXPORT void webui_set_timeout(size_t second); + +/** + * @brief Set the default embedded HTML favicon. + * + * @param window The window number + * @param icon The icon as string: `...` + * @param icon_type The icon type: `image/svg+xml` + * + * @example webui_set_icon(myWindow, "...", "image/svg+xml"); + */ +WEBUI_EXPORT void webui_set_icon(size_t window, const char* icon, const char* icon_type); + +/** + * @brief Set the window icon from an icon file (binary format). + * Can be used as the taskbar icon on Linux (GTK). + * + * @param window The window number + * @param path The icon file path: `icon.png` + * + * @example webui_set_icon_file(myWindow, "icon.png"); + */ +WEBUI_EXPORT void webui_set_icon_file(size_t window, const char* path); + +/** + * @brief Encode text to Base64. The returned buffer need to be freed. + * + * @param str The string to encode (Should be null terminated) + * + * @return Returns the base64 encoded string + * + * @example char* base64 = webui_encode("Foo Bar"); + */ +WEBUI_EXPORT char* webui_encode(const char* str); + +/** + * @brief Decode a Base64 encoded text. The returned buffer need to be freed. + * + * @param str The string to decode (Should be null terminated) + * + * @return Returns the base64 decoded string + * + * @example char* str = webui_decode("SGVsbG8="); + */ +WEBUI_EXPORT char* webui_decode(const char* str); + +/** + * @brief Safely free a buffer allocated by WebUI using `webui_malloc()`. + * + * @param ptr The buffer to be freed + * + * @example webui_free(myBuffer); + */ +WEBUI_EXPORT void webui_free(void* ptr); + +/** + * @brief Safely allocate memory using the WebUI memory management system. It + * can be safely freed using `webui_free()` at any time. + * + * @param size The size of memory in bytes + * + * @example char* myBuffer = (char*)webui_malloc(1024); + */ +WEBUI_EXPORT void* webui_malloc(size_t size); + +/** + * @brief Copy raw data. + * + * @param dest Destination memory pointer + * @param src Source memory pointer + * @param count Bytes to copy + * + * @example webui_memcpy(myBuffer, myData, 64); + */ +WEBUI_EXPORT void webui_memcpy(void* dest, void* src, size_t count); + +/** + * @brief Safely send raw data to the UI. All clients. + * + * @param window The window number + * @param function The JavaScript function to receive raw data: `function + * myFunc(myData){}` + * @param raw The raw data buffer + * @param size The raw data size in bytes + * + * @example webui_send_raw(myWindow, "myJavaScriptFunc", myBuffer, 64); + */ +WEBUI_EXPORT void webui_send_raw(size_t window, const char* function, const void* raw, size_t size); + +/** + * @brief Safely send raw data to the UI. Single client. + * + * @param e The event struct + * @param function The JavaScript function to receive raw data: `function + * myFunc(myData){}` + * @param raw The raw data buffer + * @param size The raw data size in bytes + * + * @example webui_send_raw_client(e, "myJavaScriptFunc", myBuffer, 64); + */ +WEBUI_EXPORT void webui_send_raw_client(webui_event_t* e, const char* function, + const void* raw, size_t size); + +/** + * @brief Set a window in hidden mode. Should be called before `webui_show()`. + * + * @param window The window number + * @param status The status: True or False + * + * @example webui_set_hide(myWindow, True); + */ +WEBUI_EXPORT void webui_set_hide(size_t window, bool status); + +/** + * @brief Set the window size. + * + * @param window The window number + * @param width The window width + * @param height The window height + * + * @example webui_set_size(myWindow, 800, 600); + */ +WEBUI_EXPORT void webui_set_size(size_t window, unsigned int width, unsigned int height); + +/** + * @brief Set the window minimum size. + * + * @param window The window number + * @param width The window width + * @param height The window height + * + * @example webui_set_minimum_size(myWindow, 800, 600); + */ +WEBUI_EXPORT void webui_set_minimum_size(size_t window, unsigned int width, unsigned int height); + +/** + * @brief Set the window position. + * + * @param window The window number + * @param x The window X + * @param y The window Y + * + * @example webui_set_position(myWindow, 100, 100); + */ +WEBUI_EXPORT void webui_set_position(size_t window, unsigned int x, unsigned int y); + +/** + * @brief Centers the window on the screen. Works better with + * WebView. Call this function before `webui_show()` for better results. + * + * @param window The window number + * + * @example webui_set_center(myWindow); + */ +WEBUI_EXPORT void webui_set_center(size_t window); + +/** + * @brief Set the web browser profile to use. An empty `name` and `path` means + * the default user profile. Need to be called before `webui_show()`. + * + * @param window The window number + * @param name The web browser profile name + * @param path The web browser profile full path + * + * @example webui_set_profile(myWindow, "Bar", "/Home/Foo/Bar"); | + * webui_set_profile(myWindow, "", ""); + */ +WEBUI_EXPORT void webui_set_profile(size_t window, const char* name, const char* path); + +/** + * @brief Set the web browser proxy server to use. Need to be called before `webui_show()`. + * + * @param window The window number + * @param proxy_server The web browser proxy_server + * + * @example webui_set_proxy(myWindow, "http://127.0.0.1:8888"); + */ +WEBUI_EXPORT void webui_set_proxy(size_t window, const char* proxy_server); + +/** + * @brief Get current URL of a running window. We highly recommend using this API after + * showing the window. + * + * @param window The window number + * + * @return Returns the full URL string + * + * @example const char* url = webui_get_url(myWindow); + */ +WEBUI_EXPORT const char* webui_get_url(size_t window); + +/** + * @brief Open an URL in the native default web browser. + * + * @param url The URL to open + * + * @example webui_open_url("https://webui.me"); + */ +WEBUI_EXPORT void webui_open_url(const char* url); + +/** + * @brief Allow a specific window address to be accessible from a public network. + * + * @param window The window number + * @param status True or False + * + * @example webui_set_public(myWindow, true); + */ +WEBUI_EXPORT void webui_set_public(size_t window, bool status); + +/** + * @brief Navigate to a specific URL. All clients. + * + * @param window The window number + * @param url Full HTTP URL + * + * @example webui_navigate(myWindow, "http://domain.com"); + */ +WEBUI_EXPORT void webui_navigate(size_t window, const char* url); + +/** + * @brief Navigate to a specific URL. Single client. + * + * @param e The event struct + * @param url Full HTTP URL + * + * @example webui_navigate_client(e, "http://domain.com"); + */ +WEBUI_EXPORT void webui_navigate_client(webui_event_t* e, const char* url); + +/** + * @brief Free all memory resources. Should be called only at the end. + * + * @example + * webui_wait(); + * webui_clean(); + */ +WEBUI_EXPORT void webui_clean(void); + +/** + * @brief Delete all local web-browser profiles folder. It should be called at the + * end. + * + * @example + * webui_wait(); + * webui_delete_all_profiles(); + * webui_clean(); + */ +WEBUI_EXPORT void webui_delete_all_profiles(void); + +/** + * @brief Delete a specific window web-browser local folder profile. + * + * @param window The window number + * + * @example + * webui_wait(); + * webui_delete_profile(myWindow); + * webui_clean(); + * + * @note This can break functionality of other windows if using the same + * web-browser. + */ +WEBUI_EXPORT void webui_delete_profile(size_t window); + +/** + * @brief Get the parent process ID, which refers to the current backend application process. + * + * @param window The window number + * + * @return Returns the the parent process id as integer + * + * @example size_t id = webui_get_parent_process_id(myWindow); + */ +WEBUI_EXPORT size_t webui_get_parent_process_id(size_t window); + +/** + * @brief Get the child process ID created by the parent, which refers to the web browser window. + * + * Note: In WebView mode, this will return the parent process ID because the backend and the + * WebView window run in the same process. + * + * @param window The window number + * + * @return Returns the the child process id as integer + * + * @example size_t id = webui_get_child_process_id(myWindow); + */ +WEBUI_EXPORT size_t webui_get_child_process_id(size_t window); + +/** + * @brief Gets Win32 window `HWND`. More reliable with WebView + * than web browser window, as browser PIDs may change on launch. + * + * @param window The window number + * + * @return Returns the window `hwnd` as `void*` + * + * @example HWND hwnd = webui_win32_get_hwnd(myWindow); + */ +WEBUI_EXPORT void* webui_win32_get_hwnd(size_t window); + +/** + * @brief Get window `HWND`. More reliable with WebView + * than web browser window, as browser PIDs may change on launch. + * + * @param window The window number + * + * @return Returns the window `hwnd` in Win32, `GtkWindow` in Linux. + * + * @example + * HWND hwnd = webui_get_hwnd(myWindow); // Win32 (Work with WebView and web browser) + * GtkWindow* window = webui_get_hwnd(myWindow); // Linux (Work with WebView only) + */ +WEBUI_EXPORT void* webui_get_hwnd(size_t window); + +/** + * @brief Get the network port of a running window. + * This can be useful to determine the HTTP link of `webui.js` + * + * @param window The window number + * + * @return Returns the network port of the window + * + * @example size_t port = webui_get_port(myWindow); + */ +WEBUI_EXPORT size_t webui_get_port(size_t window); + +/** + * @brief Set a custom web-server/websocket network port to be used by WebUI. + * This can be useful to determine the HTTP link of `webui.js` in case + * you are trying to use WebUI with an external web-server like NGNIX. + * + * @param window The window number + * @param port The web-server network port WebUI should use + * + * @return Returns True if the port is free and usable by WebUI + * + * @example bool ret = webui_set_port(myWindow, 8080); + */ +WEBUI_EXPORT bool webui_set_port(size_t window, size_t port); + +/** + * @brief Get an available usable free network port. + * + * @return Returns a free port + * + * @example size_t port = webui_get_free_port(); + */ +WEBUI_EXPORT size_t webui_get_free_port(void); + +/** + * @brief Set a custom logger function. + * + * @example + * void myLogger(size_t level, const char* log, void* user_data) { + * printf("myLogger (%d): %s", level, log); + * } + * webui_set_logger(myLogger, NULL); + */ +WEBUI_EXPORT void webui_set_logger(void (*func)(size_t level, const char* log, void* user_data), void *user_data); + +/** + * @brief Control the WebUI behaviour. It's recommended to be called at the beginning. + * + * @param option The desired option from `webui_config` enum + * @param status The status of the option, `true` or `false` + * + * @example webui_set_config(show_wait_connection, false); + */ +WEBUI_EXPORT void webui_set_config(webui_config option, bool status); + +/** + * @brief Control if UI events comming from this window should be processed + * one a time in a single blocking thread `True`, or process every event in + * a new non-blocking thread `False`. This update single window. You can use + * `webui_set_config(ui_event_blocking, ...)` to update all windows. + * + * @param window The window number + * @param status The blocking status `true` or `false` + * + * @example webui_set_event_blocking(myWindow, true); + */ +WEBUI_EXPORT void webui_set_event_blocking(size_t window, bool status); + +/** + * @brief Make a WebView window frameless. + * + * @param window The window number + * @param status The frameless status `true` or `false` + * + * @example webui_set_frameless(myWindow, true); + */ +WEBUI_EXPORT void webui_set_frameless(size_t window, bool status); + +/** + * @brief Make a WebView window transparent. + * + * @param window The window number + * @param status The transparency status `true` or `false` + * + * @example webui_set_transparent(myWindow, true); + */ +WEBUI_EXPORT void webui_set_transparent(size_t window, bool status); + +/** + * @brief Get the HTTP mime type of a file. + * + * @return Returns the HTTP mime string + * + * @example const char* mime = webui_get_mime_type("foo.png"); + */ +WEBUI_EXPORT const char* webui_get_mime_type(const char* file); + +// -- SSL/TLS ------------------------- + +/** + * @brief Set the SSL/TLS certificate and the private key content, both in PEM + * format. This works only with `webui-2-secure` library. If set empty WebUI + * will generate a self-signed certificate. + * + * @param certificate_pem The SSL/TLS certificate content in PEM format + * @param private_key_pem The private key content in PEM format + * + * @return Returns True if the certificate and the key are valid. + * + * @example bool ret = webui_set_tls_certificate("-----BEGIN + * CERTIFICATE-----\n...", "-----BEGIN PRIVATE KEY-----\n..."); + */ +WEBUI_EXPORT bool webui_set_tls_certificate(const char* certificate_pem, const char* private_key_pem); + +// -- JavaScript ---------------------- + +/** + * @brief Run JavaScript without waiting for the response. All clients. + * + * @param window The window number + * @param script The JavaScript to be run + * + * @example webui_run(myWindow, "alert('Hello');"); + */ +WEBUI_EXPORT void webui_run(size_t window, const char* script); + +/** + * @brief Run JavaScript without waiting for the response. Single client. + * + * @param e The event struct + * @param script The JavaScript to be run + * + * @example webui_run_client(e, "alert('Hello');"); + */ +WEBUI_EXPORT void webui_run_client(webui_event_t* e, const char* script); + +/** + * @brief Run JavaScript and get the response back. Work only in single client mode. + * Make sure your local buffer can hold the response. + * + * @param window The window number + * @param script The JavaScript to be run + * @param timeout The execution timeout in seconds + * @param buffer The local buffer to hold the response + * @param buffer_length The local buffer size + * + * @return Returns True if there is no execution error + * + * @example bool err = webui_script(myWindow, "return 4 + 6;", 0, myBuffer, myBufferSize); + */ +WEBUI_EXPORT bool webui_script(size_t window, const char* script, size_t timeout, + char* buffer, size_t buffer_length); + +/** + * @brief Run JavaScript and get the response back. Single client. + * Make sure your local buffer can hold the response. + * + * @param e The event struct + * @param script The JavaScript to be run + * @param timeout The execution timeout in seconds + * @param buffer The local buffer to hold the response + * @param buffer_length The local buffer size + * + * @return Returns True if there is no execution error + * + * @example bool err = webui_script_client(e, "return 4 + 6;", 0, myBuffer, myBufferSize); + */ +WEBUI_EXPORT bool webui_script_client(webui_event_t* e, const char* script, size_t timeout, + char* buffer, size_t buffer_length); + +/** + * @brief Chose between Deno and Nodejs as runtime for .js and .ts files. + * + * @param window The window number + * @param runtime Deno | Bun | Nodejs | None + * + * @example webui_set_runtime(myWindow, Deno); + */ +WEBUI_EXPORT void webui_set_runtime(size_t window, size_t runtime); + +/** + * @brief Get how many arguments there are in an event. + * + * @param e The event struct + * + * @return Returns the arguments count. + * + * @example size_t count = webui_get_count(e); + */ +WEBUI_EXPORT size_t webui_get_count(webui_event_t* e); + +/** + * @brief Get an argument as integer at a specific index. + * + * @param e The event struct + * @param index The argument position starting from 0 + * + * @return Returns argument as integer + * + * @example long long int myNum = webui_get_int_at(e, 0); + */ +WEBUI_EXPORT long long int webui_get_int_at(webui_event_t* e, size_t index); + +/** + * @brief Get the first argument as integer. + * + * @param e The event struct + * + * @return Returns argument as integer + * + * @example long long int myNum = webui_get_int(e); + */ +WEBUI_EXPORT long long int webui_get_int(webui_event_t* e); + +/** + * @brief Get an argument as float at a specific index. + * + * @param e The event struct + * @param index The argument position starting from 0 + * + * @return Returns argument as float + * + * @example double myNum = webui_get_float_at(e, 0); + */ +WEBUI_EXPORT double webui_get_float_at(webui_event_t* e, size_t index); + +/** + * @brief Get the first argument as float. + * + * @param e The event struct + * + * @return Returns argument as float + * + * @example double myNum = webui_get_float(e); + */ +WEBUI_EXPORT double webui_get_float(webui_event_t* e); + +/** + * @brief Get an argument as string at a specific index. + * + * @param e The event struct + * @param index The argument position starting from 0 + * + * @return Returns argument as string + * + * @example const char* myStr = webui_get_string_at(e, 0); + */ +WEBUI_EXPORT const char* webui_get_string_at(webui_event_t* e, size_t index); + +/** + * @brief Get the first argument as string. + * + * @param e The event struct + * + * @return Returns argument as string + * + * @example const char* myStr = webui_get_string(e); + */ +WEBUI_EXPORT const char* webui_get_string(webui_event_t* e); + +/** + * @brief Get an argument as boolean at a specific index. + * + * @param e The event struct + * @param index The argument position starting from 0 + * + * @return Returns argument as boolean + * + * @example bool myBool = webui_get_bool_at(e, 0); + */ +WEBUI_EXPORT bool webui_get_bool_at(webui_event_t* e, size_t index); + +/** + * @brief Get the first argument as boolean. + * + * @param e The event struct + * + * @return Returns argument as boolean + * + * @example bool myBool = webui_get_bool(e); + */ +WEBUI_EXPORT bool webui_get_bool(webui_event_t* e); + +/** + * @brief Get the size in bytes of an argument at a specific index. + * + * @param e The event struct + * @param index The argument position starting from 0 + * + * @return Returns size in bytes + * + * @example size_t argLen = webui_get_size_at(e, 0); + */ +WEBUI_EXPORT size_t webui_get_size_at(webui_event_t* e, size_t index); + +/** + * @brief Get size in bytes of the first argument. + * + * @param e The event struct + * + * @return Returns size in bytes + * + * @example size_t argLen = webui_get_size(e); + */ +WEBUI_EXPORT size_t webui_get_size(webui_event_t* e); + +/** + * @brief Return the response to JavaScript as integer. + * + * @param e The event struct + * @param n The integer to be send to JavaScript + * + * @example webui_return_int(e, 123); + */ +WEBUI_EXPORT void webui_return_int(webui_event_t* e, long long int n); + +/** + * @brief Return the response to JavaScript as float. + * + * @param e The event struct + * @param f The float number to be send to JavaScript + * + * @example webui_return_float(e, 123.456); + */ +WEBUI_EXPORT void webui_return_float(webui_event_t* e, double f); + +/** + * @brief Return the response to JavaScript as string. + * + * @param e The event struct + * @param n The string to be send to JavaScript + * + * @example webui_return_string(e, "Response..."); + */ +WEBUI_EXPORT void webui_return_string(webui_event_t* e, const char* s); + +/** + * @brief Return the response to JavaScript as boolean. + * + * @param e The event struct + * @param n The boolean to be send to JavaScript + * + * @example webui_return_bool(e, true); + */ +WEBUI_EXPORT void webui_return_bool(webui_event_t* e, bool b); + +/** + * @brief Send HTTP response asynchronously, should be used + * with `webui_set_file_handler_window()`. + * + * @param window The window number + * @param response The response buffer with full HTTP header and body + * @param length The response size + * + * @example webui_return_http(myWindow, "HTTP/1.1 200 OK\r\n...", 1024); + */ +WEBUI_EXPORT void webui_return_http(size_t window, const void* response, int length); + +/** + * @brief Get the last WebUI error code. + * + * @example int error_num = webui_get_last_error_number(); + */ +WEBUI_EXPORT size_t webui_get_last_error_number(); + +/** + * @brief Get the last WebUI error message. + * + * @example const char* error_msg = webui_get_last_error_message(); + */ +WEBUI_EXPORT const char* webui_get_last_error_message(); + +// -- Wrapper's Interface ------------- + +/** + * @brief Bind a specific HTML element click event with a function. Empty element means all events. + * + * @param window The window number + * @param element The element ID + * @param func The callback as myFunc(Window, EventType, Element, EventNumber, BindID) + * + * @return Returns unique bind ID + * + * @example size_t id = webui_interface_bind(myWindow, "myID", myCallback); + */ +WEBUI_EXPORT size_t webui_interface_bind(size_t window, const char* element, + void (*func)(size_t, size_t, char*, size_t, size_t)); + +/** + * @brief When using `webui_interface_bind()`, you may need this function to easily set a response. + * + * @param window The window number + * @param event_number The event number + * @param response The response as string to be send to JavaScript + * + * @example webui_interface_set_response(myWindow, e->event_number, "Response..."); + */ +WEBUI_EXPORT void webui_interface_set_response(size_t window, size_t event_number, const char* response); + +/** + * @brief Check if the app still running. + * + * @return Returns True if app is running + * + * @example bool status = webui_interface_is_app_running(); + */ +WEBUI_EXPORT bool webui_interface_is_app_running(void); + +/** + * @brief Get a unique window ID. + * + * @param window The window number + * + * @return Returns the unique window ID as integer + * + * @example size_t id = webui_interface_get_window_id(myWindow); + */ +WEBUI_EXPORT size_t webui_interface_get_window_id(size_t window); + +/** + * @brief Get an argument as string at a specific index. + * + * @param window The window number + * @param event_number The event number + * @param index The argument position + * + * @return Returns argument as string + * + * @example const char* myStr = webui_interface_get_string_at(myWindow, e->event_number, 0); + */ +WEBUI_EXPORT const char* webui_interface_get_string_at(size_t window, size_t event_number, size_t index); + +/** + * @brief Get an argument as integer at a specific index. + * + * @param window The window number + * @param event_number The event number + * @param index The argument position + * + * @return Returns argument as integer + * + * @example long long int myNum = webui_interface_get_int_at(myWindow, e->event_number, 0); + */ +WEBUI_EXPORT long long int webui_interface_get_int_at(size_t window, size_t event_number, size_t index); + +/** + * @brief Get an argument as float at a specific index. + * + * @param window The window number + * @param event_number The event number + * @param index The argument position + * + * @return Returns argument as float + * + * @example double myFloat = webui_interface_get_int_at(myWindow, e->event_number, 0); + */ +WEBUI_EXPORT double webui_interface_get_float_at(size_t window, size_t event_number, size_t index); + +/** + * @brief Get an argument as boolean at a specific index. + * + * @param window The window number + * @param event_number The event number + * @param index The argument position + * + * @return Returns argument as boolean + * + * @example bool myBool = webui_interface_get_bool_at(myWindow, e->event_number, 0); + */ +WEBUI_EXPORT bool webui_interface_get_bool_at(size_t window, size_t event_number, size_t index); + +/** + * @brief Get the size in bytes of an argument at a specific index. + * + * @param window The window number + * @param event_number The event number + * @param index The argument position + * + * @return Returns size in bytes + * + * @example size_t argLen = webui_interface_get_size_at(myWindow, e->event_number, 0); + */ +WEBUI_EXPORT size_t webui_interface_get_size_at(size_t window, size_t event_number, size_t index); + +/** + * @brief Show a window using embedded HTML, or a file. If the window is already + * open, it will be refreshed. Single client. + * + * @param window The window number + * @param event_number The event number + * @param content The HTML, URL, Or a local file + * + * @return Returns True if showing the window is successed. + * + * @example webui_show_client(e, "..."); | + * webui_show_client(e, "index.html"); | webui_show_client(e, "http://..."); + */ +WEBUI_EXPORT bool webui_interface_show_client(size_t window, size_t event_number, const char* content); + +/** + * @brief Close a specific client. + * + * @param window The window number + * @param event_number The event number + * + * @example webui_close_client(e); + */ +WEBUI_EXPORT void webui_interface_close_client(size_t window, size_t event_number); + +/** + * @brief Safely send raw data to the UI. Single client. + * + * @param window The window number + * @param event_number The event number + * @param function The JavaScript function to receive raw data: `function + * myFunc(myData){}` + * @param raw The raw data buffer + * @param size The raw data size in bytes + * + * @example webui_send_raw_client(e, "myJavaScriptFunc", myBuffer, 64); + */ +WEBUI_EXPORT void webui_interface_send_raw_client(size_t window, size_t event_number, const char* function, const void* raw, size_t size); + +/** + * @brief Navigate to a specific URL. Single client. + * + * @param window The window number + * @param event_number The event number + * @param url Full HTTP URL + * + * @example webui_navigate_client(e, "http://domain.com"); + */ +WEBUI_EXPORT void webui_interface_navigate_client(size_t window, size_t event_number, const char* url); + +/** + * @brief Run JavaScript without waiting for the response. Single client. + * + * @param window The window number + * @param event_number The event number + * @param script The JavaScript to be run + * + * @example webui_run_client(e, "alert('Hello');"); + */ +WEBUI_EXPORT void webui_interface_run_client(size_t window, size_t event_number, const char* script); + +/** + * @brief Run JavaScript and get the response back. Single client. + * Make sure your local buffer can hold the response. + * + * @param window The window number + * @param event_number The event number + * @param script The JavaScript to be run + * @param timeout The execution timeout in seconds + * @param buffer The local buffer to hold the response + * @param buffer_length The local buffer size + * + * @return Returns True if there is no execution error + * + * @example bool err = webui_script_client(e, "return 4 + 6;", 0, myBuffer, myBufferSize); + */ +WEBUI_EXPORT bool webui_interface_script_client(size_t window, size_t event_number, const char* script, size_t timeout, char* buffer, size_t buffer_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _WEBUI_H */ diff --git a/v2/webui/include/webui.hpp b/v2/webui/include/webui.hpp new file mode 100644 index 0000000..248b92d --- /dev/null +++ b/v2/webui/include/webui.hpp @@ -0,0 +1,625 @@ +/* + WebUI Library + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. +*/ + +#ifndef _WEBUI_HPP +#define _WEBUI_HPP + +// C++ STD +#include +#include +#include +#include +#include + +// WebUI C Header +extern "C" { + #include "webui.h" +} + +namespace webui { + + enum : int { + DISCONNECTED = 0, // 0. Window disconnection event + CONNECTED = 1, // 1. Window connection event + MOUSE_CLICK = 2, // 2. Mouse click event + NAVIGATION = 3, // 3. Window navigation event + CALLBACKS = 4 // 4. Function call event + }; + + class window { + private: + size_t webui_window{webui_new_window()}; + + public: + // Event Struct + class event : public webui_event_t { + // Window object constructor that + // initializes the reference, This + // is to avoid creating copies. + event(webui::window& window_obj, webui_event_t c_e) : webui_event_t(c_e) { + reinterpret_cast(this)->window = window_obj.webui_window; + } + + public: + class handler { + + public: + using callback_t = std::function; + + private: + static inline std::unordered_map callback_list{}; + + // List of window objects: webui::window + static inline std::unordered_map window_list{}; + static inline std::mutex callback_mutex{}; + + public: + handler() = delete; + handler(const handler&) = delete; + handler(handler&&) = delete; + handler& operator=(const handler&) = delete; + handler& operator=(handler&&) = delete; + ~handler() = delete; + + static void add(size_t id, webui::window* win, callback_t func) { + if ((id == 0) || (win == nullptr) || !func) + return; + + std::lock_guard lock(callback_mutex); + // Save window object + window_list[id] = win; + // Save callback + callback_list[id] = func; + } + + static void handle(webui_event_t* c_e) { + if (c_e == nullptr) + return; + + // Get the binded unique ID + const size_t id = c_e->bind_id; + if (id == 0) + return; + + webui::window* win = nullptr; + callback_t callback; + + { + std::lock_guard lock(callback_mutex); + const auto win_it = window_list.find(id); + const auto cb_it = callback_list.find(id); + if ((win_it != window_list.end()) && (cb_it != callback_list.end())) { + win = win_it->second; + callback = cb_it->second; + } + } + + if ((win != nullptr) && callback) { + // Create a new event struct + event e(*win, *c_e); + // Call the user callback + callback(&e); + } + } + + static webui::window& get_window(const size_t index) { return *window_list.at(index); } + }; + + // ------ Event methods `e->xxx()` ------ + + // Get how many arguments there are in an event. + size_t get_count() { + return webui_get_count(this); + } + + // Get an argument as integer at a specific index. + long long int get_int(size_t index = 0) { + return webui_get_int_at(this, index); + } + + // Get an argument as string at a specific index. + double get_float(size_t index = 0) { + return webui_get_float_at(this, index); + } + + // Get the size in bytes of an argument at a specific index. + size_t get_size(size_t index = 0) { + return webui_get_size_at(this, index); + } + + // Get an argument as string at a specific index. + std::string get_string(size_t index = 0) { + return std::string{webui_get_string_at(this, index)}; + } + + // Get an argument as string_view at a specific index. + std::string_view get_string_view(size_t index = 0) { + return std::string_view{webui_get_string_at(this, index)}; + } + + // Get an argument as boolean at a specific index. + bool get_bool(size_t index = 0) { + return webui_get_bool_at(this, index); + } + + // Run JavaScript without waiting for the response. Single client. + bool script_client(const std::string_view script, unsigned int timeout, + char* buffer, size_t buffer_length) { + return webui_script_client(this, script.data(), timeout, buffer, buffer_length); + } + + // Run JavaScript without waiting for the response. Single client. + void run_client(const std::string_view script) { + webui_run_client(this, script.data()); + } + + // Return the response to JavaScript as integer. + void return_int(long long int n) { + webui_return_int(this, n); + } + + // Return the response to JavaScript as integer. + void return_float(double f) { + webui_return_float(this, f); + } + + // Safely send raw data to the UI. Single client. + void send_raw_client(const std::string_view function, const void* raw, size_t size) { + webui_send_raw_client(this, function.data(), raw, size); + } + + // Return the response to JavaScript as string. + void return_string(const std::string_view s) { + webui_return_string(this, s.data()); + } + + // Return the response to JavaScript as boolean. + void return_bool(bool b) { + webui_return_bool(this, b); + } + + // Close a specific client. + void close_client() { + webui_close_client(this); + } + + // Navigate to a specific URL. Single client. + void navigate_client(const std::string_view url) { + webui_navigate_client(this, url.data()); + } + + // Same as `show()` but for a specific single client + bool show_client(const std::string_view s) { + return webui_show_client(this, s.data()); + } + + // Get user data that is set using `set_context()` + void* get_context() { + return webui_get_context(this); + } + + // Extras + + // Get current window object pointer + webui::window& get_window() { + return event::handler::get_window(bind_id); + } + + // Get event type + size_t get_type() const { + return event_type; + } + + // Get event element name + std::string_view get_element() const { + return std::string_view{element}; + } + + // Get event number + size_t get_number() const { + return event_number; + } + }; + + // ------ Window methods `window.xxx()` ------ + + // Bind a specific html element click event with a function. Empty element means all events. + void bind(const std::string_view element, event::handler::callback_t func) { + // Get unique ID + const size_t id = webui_bind(webui_window, element.data(), event::handler::handle); + event::handler::add(id, this, func); + } + + // Bind a class member function. + template + void bind(const std::string_view element, T* instance, void (T::*method)(event*)) { + bind(element, [instance, method](event* e) { + (instance->*method)(e); + }); + } + + // Show a window (WebView/Browser) using embedded HTML, URL, file, or folder. + // Empty content means: use current root folder + index fallback. + bool show(const std::string_view content = "") const { + return webui_show(webui_window, content.data()); + } + + // Same as show(). But with a specific web browser. + bool show_browser(const std::string_view content = "", unsigned int browser = AnyBrowser) const { + return webui_show_browser(webui_window, content.data(), browser); + } + + // Set the window in Kiosk mode (Full screen) + void set_kiosk(bool status) const { + webui_set_kiosk(webui_window, status); + } + + // Add user-defined command line parameters + void set_custom_parameters(char *params) const { + webui_set_custom_parameters(webui_window, params); + } + + // Set the window with high-contrast support. Useful when you want to build a better high-contrast theme with CSS. + void set_high_contrast(bool status) const { + webui_set_high_contrast(webui_window, status); + } + + // Maximize the window + void maximize() { + webui_maximize(webui_window); + } + + // Minimize the window + void minimize() { + webui_minimize(webui_window); + } + + // Close a specific window only. The window object will still exist. + void close() const { + webui_close(webui_window); + } + + // Close a specific window and free all memory resources. + void destroy() const { + webui_destroy(webui_window); + } + + // Check a specific window if it's still running + bool is_shown() const { + return webui_is_shown(webui_window); + } + + // Set the default embedded HTML favicon + void set_icon(const std::string_view icon, const std::string_view icon_type) const { + webui_set_icon(webui_window, icon.data(), icon_type.data()); + } + + // Set the window icon from an icon file (binary format). + // Can be used as the taskbar icon on Linux (GTK). + void set_icon_file(const std::string_view path) const { + webui_set_icon_file(webui_window, path.data()); + } + + // Safely send raw data to the UI + void send_raw(const std::string_view function, const void* raw, size_t size) const { + webui_send_raw(webui_window, function.data(), raw, size); + } + + // Run the window in hidden mode + void set_hide(bool status) const { + webui_set_hide(webui_window, status); + } + + // Set window size + void set_size(unsigned int width, unsigned int height) const { + webui_set_size(webui_window, width, height); + } + + // Set window minimum size (currently windows only.) + void set_minimum_size(unsigned int width, unsigned int height) const { + webui_set_minimum_size(webui_window, width, height); + } + + // Get the network port of a running window. This can be useful to determine the HTTP link of `webui.js` + size_t get_port() const { + return webui_get_port(webui_window); + } + + // Set a custom web-server network port to be used by WebUI. This can be useful to determine the HTTP + // link of `webui.js` in case you are trying to use WebUI with an external web-server like NGNIX + bool set_port(size_t port) const { + return webui_set_port(webui_window, port); + } + + // Set window position + void set_position(unsigned int x, unsigned int y) const { + webui_set_position(webui_window, x, y); + } + + // Delete a specific window web-browser local folder profile. + void delete_profile() const { + webui_delete_profile(webui_window); + } + + // Get the ID of the parent process (The web browser may create another process for the window). + size_t get_parent_process_id() const { + return webui_get_parent_process_id(webui_window); + } + + // Get the ID of the last child process spawned by the browser. + size_t get_child_process_id() const { + return webui_get_child_process_id(webui_window); + } + + size_t get_best_browser() const { + return webui_get_best_browser(webui_window); + } + + // Set the web-server root folder path for this specific window. + bool set_root_folder(const std::string_view path) const { + return webui_set_root_folder(webui_window, path.data()); + } + + // Set a custom handler to serve files. This custom handler should return full HTTP header and body. + // Resets previous handler set with `set_file_handler_window`. + void set_file_handler(const void* (*handler)(const char* filename, int* length)) const { + webui_set_file_handler(webui_window, handler); + } + + // Set a custom handler to serve files. This custom handler should return full HTTP header and body. + // Resets previous handler set with `set_file_handler` + void set_file_handler_window(const void* (*handler)(size_t window, const char* filename, int* length)) const { + webui_set_file_handler_window(webui_window, handler); + } + + // Set the web browser profile to use. An empty `name` and `path` means the default user profile. Need + // to be called before `webui_show()`. + void set_profile(const std::string_view name = {""}, const std::string_view path = {""}) const { + webui_set_profile(webui_window, name.data(), path.data()); + } + + // Set the web browser proxy to use. Need to be called before `webui_show()`. + void set_proxy(const std::string_view proxy_server = {""}) const { + webui_set_proxy(webui_window, proxy_server.data()); + } + + // Get the full current URL + std::string_view get_url() const { + return std::string_view{webui_get_url(webui_window)}; + } + + // Navigate to a specific URL. + void navigate(const std::string_view url) const { + webui_navigate(webui_window, url.data()); + } + + // Control if UI events coming from this window should be processed one at a time in a + // single blocking thread `True`, or process every event in a new non-blocking thread `False`. + void set_event_blocking(bool status) const { + webui_set_event_blocking(webui_window, status); + } + + // Show a WebView window using embedded HTML, or a file. If the window is already open, it will be refreshed. + bool show_wv(const std::string_view content) const { + return webui_show_wv(webui_window, content.data()); + } + + // Allow a specific window address to be accessible from a public network. + void set_public(bool status) const { + webui_set_public(webui_window, status); + } + + // Enable or disable the window frame. + void set_frameless(bool status) const { + webui_set_frameless(webui_window, status); + } + + // Enable or disable window background transparency. + // When enabled, the window background will be transparent (if supported). + void set_transparent(bool status) const { + webui_set_transparent(webui_window, status); + } + + // Enable or disable window resizing by user. + void set_resizable(bool status) const { + webui_set_resizable(webui_window, status); + } + + // Set window position to the center of the screen. + void set_center() const { + webui_set_center(webui_window); + } + + // Start only the local web server and return the URL. + // Empty content means: use current root folder + index fallback. + std::string_view start_server(const std::string_view content = "") const { + return std::string_view{webui_start_server(webui_window, content.data())}; + } + + // Quickly run a JavaScript (no response waiting). + void run(const std::string_view script) const { + webui_run(webui_window, script.data()); + } + + // Run a JavaScript, and get the response back (Make sure your local buffer can hold the response). + bool script(const std::string_view script, unsigned int timeout, + char* buffer, size_t buffer_length) const { + return webui_script(webui_window, script.data(), timeout, buffer, buffer_length); + } + + // Chose between Deno and Nodejs runtime for .js and .ts files. + void set_runtime(unsigned int runtime) const { + webui_set_runtime(webui_window, runtime); + } + + // Use this API after using `bind()` to add any user data to it that can be + // read later using `get_context()`. + void set_context(const std::string_view element, void* context) const { + webui_set_context(webui_window, element.data(), context); + } + + // Gets Win32 window `HWND`. More reliable with WebView than web browser + // window, as browser PIDs may change on launch. + void* win32_get_hwnd() const { + return webui_win32_get_hwnd(webui_window); + } + + // Get the native window handle. On Windows returns HWND (works with WebView + // and web browser). On Linux returns GtkWindow* (WebView only). + void* get_hwnd() const { + return webui_get_hwnd(webui_window); + } + + // Bring the window to the front and give it keyboard focus. + void focus() const { + webui_focus(webui_window); + } + + // Set a callback to intercept the close event of a WebView window. + // The handler must return false to prevent closing, true to allow it. + void set_close_handler_wv(bool (*close_handler)(size_t window)) const { + webui_set_close_handler_wv(webui_window, close_handler); + } + }; + + // ------ Namespace members `webui::xxx()` ------ + + // Wait until all opened windows get closed. + inline void wait() { + webui_wait(); + } + + // Close all opened windows. wait() will break. + inline void exit() { + webui_exit(); + } + + // Get an available usable free network port. + inline size_t get_free_port() { + return webui_get_free_port(); + } + + // Open an URL in the native default web browser. + inline void open_url(const std::string_view url) { + webui_open_url(url.data()); + } + + // Set the web-server root folder path for all windows. + inline bool set_default_root_folder(const std::string_view path) { + return webui_set_default_root_folder(path.data()); + } + + // Set custom browser folder path. + inline void set_browser_folder(const std::string_view path) { + webui_set_browser_folder(path.data()); + } + + // Get OS high contrast preference. + inline bool is_high_contrast() { + return webui_is_high_contrast(); + } + + // Check if a web browser is installed. + inline bool browser_exist(unsigned int browser) { + return webui_browser_exist(browser); + } + + // Set the maximum time in seconds to wait for browser to start + inline void set_timeout(unsigned int second) { + webui_set_timeout(second); + } + + // Get the HTTP mime type of a file. + inline std::string get_mime_type(const std::string_view file) { + return std::string{webui_get_mime_type(file.data())}; + } + + // Base64 encoding. Use this to safely send text based data to the UI. If it fails it will return NULL. + inline std::string encode(const std::string_view str) { + return std::string{webui_encode(str.data())}; + } + + // Base64 decoding. Use this to safely decode received Base64 text from the UI. If it fails it will return NULL. + inline std::string decode(const std::string_view str) { + return std::string{webui_decode(str.data())}; + } + + // Set the SSL/TLS certificate and the private key content, both in PEM format. + // This works only with `webui-2-secure` library. If set empty WebUI will generate a self-signed certificate. + inline bool set_tls_certificate(const std::string_view certificate_pem, + const std::string_view private_key_pem) { + return webui_set_tls_certificate(certificate_pem.data(), private_key_pem.data()); + } + + // Safely free a buffer allocated by WebUI, for example when using webui_encode(). + inline void free(void* ptr) { + webui_free(ptr); + } + + // Safely free a buffer allocated by WebUI, for example when using webui_encode(). + inline void* malloc(size_t size) { + return webui_malloc(size); + } + + // Free all memory resources. Should be called only at the end. + inline void clean() { + webui_clean(); + } + + // Delete all local web-browser profiles folder. It should called at the end. + inline void delete_all_profiles() { + webui_delete_all_profiles(); + } + + // Get a free window number that can be used with `webui_new_window_id()`. + inline size_t get_new_window_id() { + return webui_get_new_window_id(); + } + + // Control the WebUI behaviour. Should be called at the beginning. + inline void set_config(webui_config option, bool status) { + webui_set_config(option, status); + } + + // Check if the app is still running. + inline bool is_app_running() { + return webui_interface_is_app_running(); + } + + // Copy raw data. + inline void memcpy(void* dest, const void* src, size_t count) { + webui_memcpy(dest, const_cast(src), count); + } + + // Wait asynchronously until all opened windows get closed. + // Returns true if more windows are still open, false when all are closed. + // Must be called from the main thread in WebView mode. + inline bool wait_async() { + return webui_wait_async(); + } + + // Set a custom logger function to receive WebUI's internal log messages. + inline void set_logger(void (*func)(size_t level, const char* log, void* user_data), void* user_data = nullptr) { + webui_set_logger(func, user_data); + } + + // Get the error code from the most recent WebUI operation that failed. + inline size_t get_last_error_number() { + return webui_get_last_error_number(); + } + + // Get the human-readable error message from the most recent failed WebUI operation. + inline std::string_view get_last_error_message() { + return std::string_view{webui_get_last_error_message()}; + } + +} // namespace webui + +#endif /* _WEBUI_HPP */ diff --git a/v2/webui/include/webui_extensions.h b/v2/webui/include/webui_extensions.h new file mode 100644 index 0000000..af13e96 --- /dev/null +++ b/v2/webui/include/webui_extensions.h @@ -0,0 +1,121 @@ +/* + WebUI Library + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. +*/ + +#ifndef _WEBUI_EXTENSIONS_H +#define _WEBUI_EXTENSIONS_H + +#include "webui.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Construct a JavaScript string from a format string, + * then execute it without waiting for the response. All clients. + * + * @param window The window number + * @param fmt The JavaScript format string to be run + * + * @warning This function DOES NOT handle escape characters, proceed with caution. + * For example, when passing string arguments that contain quotes or backslashes, + * it may lead to unexpected behavior + * + * @note This function internally uses vsnprintf + * + * @example webui_run_fmt(myWindow, "alert('Hello %s');", "World"); + */ +void webui_run_fmt(size_t window, const char* fmt, ...) { + + int len; + char* buf; + + // Precalculate actual string length + va_list args; + va_start(args, fmt); + len = vsnprintf(NULL, 0, fmt, args); + va_end(args); + + if (len < 1) return; + + buf = (char*)webui_malloc(len + 1); + if (buf == NULL) return; + + // Format and execute + va_start(args, fmt); + vsnprintf(buf, len + 1, fmt, args); + va_end(args); + + webui_run(window, buf); + + webui_free((void*)buf); +} + +/** + * @brief Construct a JavaScript string from a format string, + * then execute it and get the response back. Work only in single client mode. + * Make sure your local buffer can hold the response. + * + * @param window The window number + * @param timeout The execution timeout in seconds + * @param buffer The local buffer to hold the response + * @param buffer_length The local buffer size + * @param fmt The JavaScript format string to be run + * + * @return Returns True if there is no execution error + * + * @warning This function DOES NOT handle escape characters, proceed with caution. + * For example, when passing string arguments that contain quotes or backslashes, + * it may lead to unexpected behavior + * + * @note This function internally uses vsnprintf + * + * @example bool err = webui_script_fmt(myWindow, 0, myBuffer, myBufferSize, + * "return %d + %d;", 4, 6); + */ +bool webui_script_fmt( + size_t window, + size_t timeout, + char* buffer, + size_t buffer_length, + const char* fmt, ...) { + + int len; + char* buf; + bool status; + + // Precalculate actual string length + va_list args; + va_start(args, fmt); + len = vsnprintf(NULL, 0, fmt, args); + va_end(args); + + if (len < 1) return false; + + buf = (char*)webui_malloc(len + 1); + if (buf == NULL) return false; + + // Format and execute + va_start(args, fmt); + vsnprintf(buf, len + 1, fmt, args); + va_end(args); + + status = webui_script(window, buf, timeout, buffer, buffer_length); + + webui_free((void*)buf); + + return status; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _WEBUI_EXTENSIONS_H */ diff --git a/v2/webui/src/civetweb/CMakeLists.txt b/v2/webui/src/civetweb/CMakeLists.txt new file mode 100644 index 0000000..b4ec891 --- /dev/null +++ b/v2/webui/src/civetweb/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.10) +project(civetweb) + +# Source files +set(SOURCE_FILES + civetweb.c + civetweb.h + handle_form.inl + match.inl + md5.inl + response.inl + sha1.inl + sort.inl +) + +# The C API library +add_library(civetweb ${SOURCE_FILES}) + +# Include directories +target_include_directories(civetweb PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +# Link libraries +find_package(Threads REQUIRED) +target_link_libraries(civetweb Threads::Threads) + +# If on Windows, link with WinSock +if(WIN32) + target_link_libraries(civetweb ws2_32) +endif() diff --git a/v2/webui/src/civetweb/README.md b/v2/webui/src/civetweb/README.md new file mode 100644 index 0000000..13b8abd --- /dev/null +++ b/v2/webui/src/civetweb/README.md @@ -0,0 +1,17 @@ +Changes currently required when updating the submodule to ensure full direct interoperability for wrappers: + +- Prevent warnings for e.g. `malloc` and `snprintf` usage outside civetweb. + + ```diff + + // Disable All Warnings + + #ifdef _MSC_VER + + #pragma warning(push, 0) + + #pragma warning(disable: 4996) + + #elif defined(__clang__) + + #pragma clang system_header + + #elif defined(__GNUC__) + + #pragma GCC system_header + + #endif + + /* Copyright (c) 2013-2024 the Civetweb developers + ``` \ No newline at end of file diff --git a/v2/webui/src/civetweb/civetweb.c b/v2/webui/src/civetweb/civetweb.c new file mode 100644 index 0000000..a399ce4 --- /dev/null +++ b/v2/webui/src/civetweb/civetweb.c @@ -0,0 +1,23274 @@ +/* Copyright (c) 2013-2025 the Civetweb developers + * Copyright (c) 2004-2013 Sergey Lyubka + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#if defined(__GNUC__) || defined(__MINGW32__) +#ifndef GCC_VERSION +#define GCC_VERSION \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +#endif +#if GCC_VERSION >= 40500 +/* gcc diagnostic pragmas available */ +#define GCC_DIAGNOSTIC +#endif +#endif + +#if defined(GCC_DIAGNOSTIC) +/* Disable unused macros warnings - not all defines are required + * for all systems and all compilers. */ +#pragma GCC diagnostic ignored "-Wunused-macros" +/* A padding warning is just plain useless */ +#pragma GCC diagnostic ignored "-Wpadded" +#endif + +#if defined(__clang__) /* GCC does not (yet) support this pragma */ +/* We must set some flags for the headers we include. These flags + * are reserved ids according to C99, so we need to disable a + * warning for that. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wreserved-id-macro" +#endif + +#if defined(_WIN32) +#if !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS /* Disable deprecation warning in VS2005 */ +#endif +#if !defined(_WIN32_WINNT) /* Minimum API version */ +#define _WIN32_WINNT 0x0601 +#endif +#else +#if !defined(_GNU_SOURCE) +#define _GNU_SOURCE /* for setgroups(), pthread_setname_np() */ +#endif +#if defined(__linux__) && !defined(_XOPEN_SOURCE) +#define _XOPEN_SOURCE 600 /* For flockfile() on Linux */ +#endif +#if defined(__LSB_VERSION__) || defined(__sun) +#define NEED_TIMEGM +#define NO_THREAD_NAME +#endif +#if !defined(_LARGEFILE_SOURCE) +#define _LARGEFILE_SOURCE /* For fseeko(), ftello() */ +#endif +#if !defined(_FILE_OFFSET_BITS) +#define _FILE_OFFSET_BITS 64 /* Use 64-bit file offsets by default */ +#endif +#if !defined(__STDC_FORMAT_MACROS) +#define __STDC_FORMAT_MACROS /* wants this for C++ */ +#endif +#if !defined(__STDC_LIMIT_MACROS) +#define __STDC_LIMIT_MACROS /* C++ wants that for INT64_MAX */ +#endif +#if !defined(_DARWIN_UNLIMITED_SELECT) +#define _DARWIN_UNLIMITED_SELECT +#endif +#if defined(__sun) +#define __EXTENSIONS__ /* to expose flockfile and friends in stdio.h */ +#define __inline inline /* not recognized on older compiler versions */ +#endif +#endif + +#if defined(__clang__) +/* Enable reserved-id-macro warning again. */ +#pragma GCC diagnostic pop +#endif + + +#if defined(USE_LUA) +#define USE_TIMERS +#endif + +#if defined(_MSC_VER) +/* 'type cast' : conversion from 'int' to 'HANDLE' of greater size */ +#pragma warning(disable : 4306) +/* conditional expression is constant: introduced by FD_SET(..) */ +#pragma warning(disable : 4127) +/* non-constant aggregate initializer: issued due to missing C99 support */ +#pragma warning(disable : 4204) +/* padding added after data member */ +#pragma warning(disable : 4820) +/* not defined as a preprocessor macro, replacing with '0' for '#if/#elif' */ +#pragma warning(disable : 4668) +/* no function prototype given: converting '()' to '(void)' */ +#pragma warning(disable : 4255) +/* function has been selected for automatic inline expansion */ +#pragma warning(disable : 4711) +#endif + + +/* This code uses static_assert to check some conditions. + * Unfortunately some compilers still do not support it, so we have a + * replacement function here. */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ > 201100L +#define mg_static_assert _Static_assert +#elif defined(__cplusplus) && __cplusplus >= 201103L +#define mg_static_assert static_assert +#else +char static_assert_replacement[1]; +#define mg_static_assert(cond, txt) \ + extern char static_assert_replacement[(cond) ? 1 : -1] +#endif + +mg_static_assert(sizeof(int) == 4 || sizeof(int) == 8, + "int data type size check"); +mg_static_assert(sizeof(void *) == 4 || sizeof(void *) == 8, + "pointer data type size check"); +mg_static_assert(sizeof(void *) >= sizeof(int), "data type size check"); + + +/* Select queue implementation. Diagnosis features originally only implemented + * for the "ALTERNATIVE_QUEUE" have been ported to the previous queue + * implementation (NO_ALTERNATIVE_QUEUE) as well. The new configuration value + * "CONNECTION_QUEUE_SIZE" is only available for the previous queue + * implementation, since the queue length is independent from the number of + * worker threads there, while the new queue is one element per worker thread. + * + */ +#if defined(NO_ALTERNATIVE_QUEUE) && defined(ALTERNATIVE_QUEUE) +/* The queues are exclusive or - only one can be used. */ +#error \ + "Define ALTERNATIVE_QUEUE or NO_ALTERNATIVE_QUEUE (or none of them), but not both" +#endif +#if !defined(NO_ALTERNATIVE_QUEUE) && !defined(ALTERNATIVE_QUEUE) +/* Use a default implementation */ +#define NO_ALTERNATIVE_QUEUE +#endif + +#if defined(NO_FILESYSTEMS) && !defined(NO_FILES) +/* File system access: + * NO_FILES = do not serve any files from the file system automatically. + * However, with NO_FILES CivetWeb may still write log files, read access + * control files, default error page files or use API functions like + * mg_send_file in callbacks to send files from the server local + * file system. + * NO_FILES only disables the automatic mapping between URLs and local + * file names. + * NO_FILESYSTEMS = do not access any file at all. Useful for embedded + * devices without file system. Logging to files in not available + * (use callbacks instead) and API functions like mg_send_file are not + * available. + * If NO_FILESYSTEM is set, NO_FILES must be set as well. + */ +#error "Inconsistent build flags, NO_FILESYSTEMS requires NO_FILES" +#endif + +/* DTL -- including winsock2.h works better if lean and mean */ +#if !defined(WIN32_LEAN_AND_MEAN) +#define WIN32_LEAN_AND_MEAN +#endif + +#if defined(__SYMBIAN32__) +/* According to https://en.wikipedia.org/wiki/Symbian#History, + * Symbian is no longer maintained since 2014-01-01. + * Support for Symbian has been removed from CivetWeb + */ +#error "Symbian is no longer maintained. CivetWeb no longer supports Symbian." +#endif /* __SYMBIAN32__ */ + +#if defined(__rtems__) +#include +#endif + +#if defined(__ZEPHYR__) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* Max worker threads is the max of pthreads minus the main application thread + * and minus the main civetweb thread, thus -2 + */ +#define MAX_WORKER_THREADS (CONFIG_MAX_PTHREAD_COUNT - 2) + +#if defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1) +#define ZEPHYR_STACK_SIZE USE_STACK_SIZE +#else +#define ZEPHYR_STACK_SIZE (1024 * 16) +#endif + +K_THREAD_STACK_DEFINE(civetweb_main_stack, ZEPHYR_STACK_SIZE); +K_THREAD_STACK_ARRAY_DEFINE(civetweb_worker_stacks, + MAX_WORKER_THREADS, + ZEPHYR_STACK_SIZE); + +static int zephyr_worker_stack_index; + +#endif + +#if !defined(CIVETWEB_HEADER_INCLUDED) +/* Include the header file here, so the CivetWeb interface is defined for the + * entire implementation, including the following forward definitions. */ +#include "civetweb.h" +#endif + +#if !defined(DEBUG_TRACE) +#if defined(DEBUG) +static void DEBUG_TRACE_FUNC(const char *func, + unsigned line, + PRINTF_FORMAT_STRING(const char *fmt), + ...) PRINTF_ARGS(3, 4); + +#define DEBUG_TRACE(fmt, ...) \ + DEBUG_TRACE_FUNC(__func__, __LINE__, fmt, __VA_ARGS__) + +#define NEED_DEBUG_TRACE_FUNC +#if !defined(DEBUG_TRACE_STREAM) +#define DEBUG_TRACE_STREAM stderr +#endif + +#else +#define DEBUG_TRACE(fmt, ...) \ + do { \ + } while (0) +#endif /* DEBUG */ +#endif /* DEBUG_TRACE */ + + +#if !defined(DEBUG_ASSERT) +#if defined(DEBUG) +#include +#define DEBUG_ASSERT(cond) \ + do { \ + if (!(cond)) { \ + DEBUG_TRACE("ASSERTION FAILED: %s", #cond); \ + exit(2); /* Exit with error */ \ + } \ + } while (0) +#else +#define DEBUG_ASSERT(cond) +#endif /* DEBUG */ +#endif + + +#if defined(__GNUC__) && defined(GCC_INSTRUMENTATION) +void __cyg_profile_func_enter(void *this_fn, void *call_site) + __attribute__((no_instrument_function)); + +void __cyg_profile_func_exit(void *this_fn, void *call_site) + __attribute__((no_instrument_function)); + +void +__cyg_profile_func_enter(void *this_fn, void *call_site) +{ + if ((void *)this_fn != (void *)printf) { + printf("E %p %p\n", this_fn, call_site); + } +} + +void +__cyg_profile_func_exit(void *this_fn, void *call_site) +{ + if ((void *)this_fn != (void *)printf) { + printf("X %p %p\n", this_fn, call_site); + } +} +#endif + + +#if !defined(IGNORE_UNUSED_RESULT) +#define IGNORE_UNUSED_RESULT(a) ((void)((a) && 1)) +#endif + + +#if defined(__GNUC__) || defined(__MINGW32__) + +/* GCC unused function attribute seems fundamentally broken. + * Several attempts to tell the compiler "THIS FUNCTION MAY BE USED + * OR UNUSED" for individual functions failed. + * Either the compiler creates an "unused-function" warning if a + * function is not marked with __attribute__((unused)). + * On the other hand, if the function is marked with this attribute, + * but is used, the compiler raises a completely idiotic + * "used-but-marked-unused" warning - and + * #pragma GCC diagnostic ignored "-Wused-but-marked-unused" + * raises error: unknown option after "#pragma GCC diagnostic". + * Disable this warning completely, until the GCC guys sober up + * again. + */ + +#pragma GCC diagnostic ignored "-Wunused-function" + +#define FUNCTION_MAY_BE_UNUSED /* __attribute__((unused)) */ + +#else +#define FUNCTION_MAY_BE_UNUSED +#endif + + +/* Some ANSI #includes are not available on Windows CE and Zephyr */ +#if !defined(_WIN32_WCE) && !defined(__ZEPHYR__) +#include +#include +#include +#include +#include +#include +#endif /* !_WIN32_WCE */ + + +#if defined(__clang__) +/* When using -Weverything, clang does not accept it's own headers + * in a release build configuration. Disable what is too much in + * -Weverything. */ +#pragma clang diagnostic ignored "-Wdisabled-macro-expansion" +#endif + +#if defined(__GNUC__) || defined(__MINGW32__) +/* Who on earth came to the conclusion, using __DATE__ should rise + * an "expansion of date or time macro is not reproducible" + * warning. That's exactly what was intended by using this macro. + * Just disable this nonsense warning. */ + +/* And disabling them does not work either: + * #pragma clang diagnostic ignored "-Wno-error=date-time" + * #pragma clang diagnostic ignored "-Wdate-time" + * So we just have to disable ALL warnings for some lines + * of code. + * This seems to be a known GCC bug, not resolved since 2012: + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 + */ +#endif + + +#if defined(__MACH__) && defined(__APPLE__) /* Apple OSX section */ + +#if defined(__clang__) +#if (__clang_major__ == 3) && ((__clang_minor__ == 7) || (__clang_minor__ == 8)) +/* Avoid warnings for Xcode 7. It seems it does no longer exist in Xcode 8 */ +#pragma clang diagnostic ignored "-Wno-reserved-id-macro" +#pragma clang diagnostic ignored "-Wno-keyword-macro" +#endif +#endif + +#ifndef CLOCK_MONOTONIC +#define CLOCK_MONOTONIC (1) +#endif +#ifndef CLOCK_REALTIME +#define CLOCK_REALTIME (2) +#endif + +#include +#include +#include +#include +#include + +/* clock_gettime is not implemented on OSX prior to 10.12 */ +static int +_civet_clock_gettime(int clk_id, struct timespec *t) +{ + memset(t, 0, sizeof(*t)); + if (clk_id == CLOCK_REALTIME) { + struct timeval now; + int rv = gettimeofday(&now, NULL); + if (rv) { + return rv; + } + t->tv_sec = now.tv_sec; + t->tv_nsec = now.tv_usec * 1000; + return 0; + + } else if (clk_id == CLOCK_MONOTONIC) { + static uint64_t clock_start_time = 0; + static mach_timebase_info_data_t timebase_ifo = {0, 0}; + + uint64_t now = mach_absolute_time(); + + if (clock_start_time == 0) { + kern_return_t mach_status = mach_timebase_info(&timebase_ifo); + DEBUG_ASSERT(mach_status == KERN_SUCCESS); + + /* appease "unused variable" warning for release builds */ + (void)mach_status; + + clock_start_time = now; + } + + now = (uint64_t)((double)(now - clock_start_time) + * (double)timebase_ifo.numer + / (double)timebase_ifo.denom); + + t->tv_sec = now / 1000000000; + t->tv_nsec = now % 1000000000; + return 0; + } + return -1; /* EINVAL - Clock ID is unknown */ +} + +/* if clock_gettime is declared, then __CLOCK_AVAILABILITY will be defined */ +#if defined(__CLOCK_AVAILABILITY) +/* If we compiled with Mac OSX 10.12 or later, then clock_gettime will be + * declared but it may be NULL at runtime. So we need to check before using + * it. */ +static int +_civet_safe_clock_gettime(int clk_id, struct timespec *t) +{ + if (clock_gettime) { + return clock_gettime(clk_id, t); + } + return _civet_clock_gettime(clk_id, t); +} +#define clock_gettime _civet_safe_clock_gettime +#else +#define clock_gettime _civet_clock_gettime +#endif + +#endif + + +#if defined(_WIN32) +#define ERROR_TRY_AGAIN(err) ((err) == WSAEWOULDBLOCK) +#else +/* Unix might return different error codes indicating to try again. + * For Linux EAGAIN==EWOULDBLOCK, maybe EAGAIN!=EWOULDBLOCK is history from + * decades ago, but better check both and let the compiler optimize it. */ +#define ERROR_TRY_AGAIN(err) \ + (((err) == EAGAIN) || ((err) == EWOULDBLOCK) || ((err) == EINTR)) +#endif + +#if defined(USE_ZLIB) +#include "zconf.h" +#include "zlib.h" +#endif + + +/********************************************************************/ +/* CivetWeb configuration defines */ +/********************************************************************/ + +/* Maximum number of threads that can be configured. + * The number of threads actually created depends on the "num_threads" + * configuration parameter, but this is the upper limit. */ +#if !defined(MAX_WORKER_THREADS) +#define MAX_WORKER_THREADS (1024 * 64) /* in threads (count) */ +#endif + +/* Timeout interval for select/poll calls. + * The timeouts depend on "*_timeout_ms" configuration values, but long + * timeouts are split into timouts as small as SOCKET_TIMEOUT_QUANTUM. + * This reduces the time required to stop the server. */ +#if !defined(SOCKET_TIMEOUT_QUANTUM) +#define SOCKET_TIMEOUT_QUANTUM (2000) /* in ms */ +#endif + +/* Do not try to compress files smaller than this limit. */ +#if !defined(MG_FILE_COMPRESSION_SIZE_LIMIT) +#define MG_FILE_COMPRESSION_SIZE_LIMIT (1024) /* in bytes */ +#endif + +#if !defined(PASSWORDS_FILE_NAME) +#define PASSWORDS_FILE_NAME ".htpasswd" +#endif + +/* Initial buffer size for all CGI environment variables. In case there is + * not enough space, another block is allocated. */ +#if !defined(CGI_ENVIRONMENT_SIZE) +#define CGI_ENVIRONMENT_SIZE (4096) /* in bytes */ +#endif + +/* Maximum number of environment variables. */ +#if !defined(MAX_CGI_ENVIR_VARS) +#define MAX_CGI_ENVIR_VARS (256) /* in variables (count) */ +#endif + +/* General purpose buffer size. */ +#if !defined(MG_BUF_LEN) /* in bytes */ +#define MG_BUF_LEN (1024 * 8) +#endif + + +/********************************************************************/ + +/* Helper macros */ +#if !defined(ARRAY_SIZE) +#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) +#endif + +#include + +/* Standard defines */ +#if !defined(INT64_MAX) +#define INT64_MAX (9223372036854775807) +#endif + +#define SHUTDOWN_RD (0) +#define SHUTDOWN_WR (1) +#define SHUTDOWN_BOTH (2) + +mg_static_assert(MAX_WORKER_THREADS >= 1, + "worker threads must be a positive number"); + +mg_static_assert(sizeof(size_t) == 4 || sizeof(size_t) == 8, + "size_t data type size check"); + + +#if defined(_WIN32) /* WINDOWS include block */ +#include /* *alloc( */ +#include /* *alloc( */ +#include /* struct timespec */ +#include +#include /* DTL add for SO_EXCLUSIVE */ +#include + +typedef const char *SOCK_OPT_TYPE; + +/* For a detailed description of these *_PATH_MAX defines, see + * https://github.com/civetweb/civetweb/issues/937. */ + +/* UTF8_PATH_MAX is a char buffer size for 259 BMP characters in UTF-8 plus + * null termination, rounded up to the next 4 bytes boundary */ +#define UTF8_PATH_MAX (3 * 260) +/* UTF16_PATH_MAX is the 16-bit wchar_t buffer size required for 259 BMP + * characters plus termination. (Note: wchar_t is 16 bit on Windows) */ +#define UTF16_PATH_MAX (260) + +#if !defined(_IN_PORT_T) +#if !defined(in_port_t) +#define in_port_t u_short +#endif +#endif + +#if defined(_WIN32_WCE) +#error "WinCE support has ended" +#endif + +#include +#include +#include + + +#define MAKEUQUAD(lo, hi) \ + ((uint64_t)(((uint32_t)(lo)) | ((uint64_t)((uint32_t)(hi))) << 32)) +#define RATE_DIFF (10000000) /* 100 nsecs */ +#define EPOCH_DIFF (MAKEUQUAD(0xd53e8000, 0x019db1de)) +#define SYS2UNIX_TIME(lo, hi) \ + ((time_t)((MAKEUQUAD((lo), (hi)) - EPOCH_DIFF) / RATE_DIFF)) + +/* Visual Studio 6 does not know __func__ or __FUNCTION__ + * The rest of MS compilers use __FUNCTION__, not C99 __func__ + * Also use _strtoui64 on modern M$ compilers */ +#if defined(_MSC_VER) +#if (_MSC_VER < 1300) +#define STRX(x) #x +#define STR(x) STRX(x) +#define __func__ __FILE__ ":" STR(__LINE__) +#define strtoull(x, y, z) ((unsigned __int64)_atoi64(x)) +#define strtoll(x, y, z) (_atoi64(x)) +#else +#define __func__ __FUNCTION__ +#define strtoull(x, y, z) (_strtoui64(x, y, z)) +#define strtoll(x, y, z) (_strtoi64(x, y, z)) +#endif +#endif /* _MSC_VER */ + + +#define ERRNO ((int)(GetLastError())) +#define NO_SOCKLEN_T + + +#if defined(_WIN64) || defined(__MINGW64__) +#if !defined(SSL_LIB) + +#if defined(OPENSSL_API_3_0) +#define SSL_LIB "libssl-3-x64.dll" +#define CRYPTO_LIB "libcrypto-3-x64.dll" +#endif + +#if defined(OPENSSL_API_1_1) +#define SSL_LIB "libssl-1_1-x64.dll" +#define CRYPTO_LIB "libcrypto-1_1-x64.dll" +#endif /* OPENSSL_API_1_1 */ + +#if defined(OPENSSL_API_1_0) +#define SSL_LIB "ssleay64.dll" +#define CRYPTO_LIB "libeay64.dll" +#endif /* OPENSSL_API_1_0 */ + +#endif +#else /* defined(_WIN64) || defined(__MINGW64__) */ +#if !defined(SSL_LIB) + +#if defined(OPENSSL_API_3_0) +#define SSL_LIB "libssl-3.dll" +#define CRYPTO_LIB "libcrypto-3.dll" +#endif + +#if defined(OPENSSL_API_1_1) +#define SSL_LIB "libssl-1_1.dll" +#define CRYPTO_LIB "libcrypto-1_1.dll" +#endif /* OPENSSL_API_1_1 */ + +#if defined(OPENSSL_API_1_0) +#define SSL_LIB "ssleay32.dll" +#define CRYPTO_LIB "libeay32.dll" +#endif /* OPENSSL_API_1_0 */ + +#endif /* SSL_LIB */ +#endif /* defined(_WIN64) || defined(__MINGW64__) */ + + +#define O_NONBLOCK (0) +#if !defined(W_OK) +#define W_OK (2) /* http://msdn.microsoft.com/en-us/library/1w06ktdy.aspx */ +#endif +#define _POSIX_ +#define INT64_FMT "I64d" +#define UINT64_FMT "I64u" + +#define WINCDECL __cdecl +#define vsnprintf_impl _vsnprintf +#define access _access +#define mg_sleep(x) (Sleep(x)) + +#define pipe(x) _pipe(x, MG_BUF_LEN, _O_BINARY) +#if !defined(popen) +#define popen(x, y) (_popen(x, y)) +#endif +#if !defined(pclose) +#define pclose(x) (_pclose(x)) +#endif +#define close(x) (_close(x)) +#define dlsym(x, y) (GetProcAddress((HINSTANCE)(x), (y))) +#define RTLD_LAZY (0) +#define fseeko(x, y, z) ((_lseeki64(_fileno(x), (y), (z)) == -1) ? -1 : 0) +#define fdopen(x, y) (_fdopen((x), (y))) +#define write(x, y, z) (_write((x), (y), (unsigned)z)) +#define read(x, y, z) (_read((x), (y), (unsigned)z)) +#define flockfile(x) ((void)pthread_mutex_lock(&global_log_file_lock)) +#define funlockfile(x) ((void)pthread_mutex_unlock(&global_log_file_lock)) +#define sleep(x) (Sleep((x)*1000)) +#define rmdir(x) (_rmdir(x)) +#if defined(_WIN64) || !defined(__MINGW32__) +/* Only MinGW 32 bit is missing this function */ +#define timegm(x) (_mkgmtime(x)) +#else +time_t timegm(struct tm *tm); +#define NEED_TIMEGM +#endif + + +#if !defined(fileno) +#define fileno(x) (_fileno(x)) +#endif /* !fileno MINGW #defines fileno */ + +typedef struct { + CRITICAL_SECTION sec; /* Immovable */ +} pthread_mutex_t; +typedef DWORD pthread_key_t; +typedef HANDLE pthread_t; +typedef struct { + pthread_mutex_t threadIdSec; + struct mg_workerTLS *waiting_thread; /* The chain of threads */ +} pthread_cond_t; + +#if !defined(__clockid_t_defined) +typedef DWORD clockid_t; +#endif +#if !defined(CLOCK_MONOTONIC) +#define CLOCK_MONOTONIC (1) +#endif +#if !defined(CLOCK_REALTIME) +#define CLOCK_REALTIME (2) +#endif +#if !defined(CLOCK_THREAD) +#define CLOCK_THREAD (3) +#endif +#if !defined(CLOCK_PROCESS) +#define CLOCK_PROCESS (4) +#endif + + +#if defined(_MSC_VER) && (_MSC_VER >= 1900) +#define _TIMESPEC_DEFINED +#endif +#if !defined(_TIMESPEC_DEFINED) +struct timespec { + time_t tv_sec; /* seconds */ + long tv_nsec; /* nanoseconds */ +}; +#endif + +#if !defined(WIN_PTHREADS_TIME_H) +#define MUST_IMPLEMENT_CLOCK_GETTIME +#endif + +#if defined(MUST_IMPLEMENT_CLOCK_GETTIME) +#define clock_gettime mg_clock_gettime +static int +clock_gettime(clockid_t clk_id, struct timespec *tp) +{ + FILETIME ft; + ULARGE_INTEGER li, li2; + BOOL ok = FALSE; + double d; + static double perfcnt_per_sec = 0.0; + static BOOL initialized = FALSE; + + if (!initialized) { + QueryPerformanceFrequency((LARGE_INTEGER *)&li); + perfcnt_per_sec = 1.0 / li.QuadPart; + initialized = TRUE; + } + + if (tp) { + memset(tp, 0, sizeof(*tp)); + + if (clk_id == CLOCK_REALTIME) { + + /* BEGIN: CLOCK_REALTIME = wall clock (date and time) */ + GetSystemTimeAsFileTime(&ft); + li.LowPart = ft.dwLowDateTime; + li.HighPart = ft.dwHighDateTime; + li.QuadPart -= 116444736000000000; /* 1.1.1970 in filedate */ + tp->tv_sec = (time_t)(li.QuadPart / 10000000); + tp->tv_nsec = (long)(li.QuadPart % 10000000) * 100; + ok = TRUE; + /* END: CLOCK_REALTIME */ + + } else if (clk_id == CLOCK_MONOTONIC) { + + /* BEGIN: CLOCK_MONOTONIC = stopwatch (time differences) */ + QueryPerformanceCounter((LARGE_INTEGER *)&li); + d = li.QuadPart * perfcnt_per_sec; + tp->tv_sec = (time_t)d; + d -= (double)tp->tv_sec; + tp->tv_nsec = (long)(d * 1.0E9); + ok = TRUE; + /* END: CLOCK_MONOTONIC */ + + } else if (clk_id == CLOCK_THREAD) { + + /* BEGIN: CLOCK_THREAD = CPU usage of thread */ + FILETIME t_create, t_exit, t_kernel, t_user; + if (GetThreadTimes(GetCurrentThread(), + &t_create, + &t_exit, + &t_kernel, + &t_user)) { + li.LowPart = t_user.dwLowDateTime; + li.HighPart = t_user.dwHighDateTime; + li2.LowPart = t_kernel.dwLowDateTime; + li2.HighPart = t_kernel.dwHighDateTime; + li.QuadPart += li2.QuadPart; + tp->tv_sec = (time_t)(li.QuadPart / 10000000); + tp->tv_nsec = (long)(li.QuadPart % 10000000) * 100; + ok = TRUE; + } + /* END: CLOCK_THREAD */ + + } else if (clk_id == CLOCK_PROCESS) { + + /* BEGIN: CLOCK_PROCESS = CPU usage of process */ + FILETIME t_create, t_exit, t_kernel, t_user; + if (GetProcessTimes(GetCurrentProcess(), + &t_create, + &t_exit, + &t_kernel, + &t_user)) { + li.LowPart = t_user.dwLowDateTime; + li.HighPart = t_user.dwHighDateTime; + li2.LowPart = t_kernel.dwLowDateTime; + li2.HighPart = t_kernel.dwHighDateTime; + li.QuadPart += li2.QuadPart; + tp->tv_sec = (time_t)(li.QuadPart / 10000000); + tp->tv_nsec = (long)(li.QuadPart % 10000000) * 100; + ok = TRUE; + } + /* END: CLOCK_PROCESS */ + + } else { + + /* BEGIN: unknown clock */ + /* ok = FALSE; already set by init */ + /* END: unknown clock */ + } + } + + return ok ? 0 : -1; +} +#endif + + +#define pid_t HANDLE /* MINGW typedefs pid_t to int. Using #define here. */ + +static int pthread_mutex_lock(pthread_mutex_t *); +static int pthread_mutex_unlock(pthread_mutex_t *); +static void path_to_unicode(const struct mg_connection *conn, + const char *path, + wchar_t *wbuf, + size_t wbuf_len); + +/* All file operations need to be rewritten to solve #246. */ + +struct mg_file; + +static const char *mg_fgets(char *buf, size_t size, struct mg_file *filep); + + +/* POSIX dirent interface */ +struct dirent { + char d_name[UTF8_PATH_MAX]; +}; + +typedef struct DIR { + HANDLE handle; + WIN32_FIND_DATAW info; + struct dirent result; +} DIR; + +#if defined(HAVE_POLL) +#define mg_pollfd pollfd +#else +struct mg_pollfd { + SOCKET fd; + short events; + short revents; +}; +#endif + +/* Mark required libraries */ +#if defined(_MSC_VER) +#pragma comment(lib, "Ws2_32.lib") +#endif + +#else /* defined(_WIN32) - WINDOWS vs UNIX include block */ + +#include + +/* Linux & co. internally use UTF8 */ +#define UTF8_PATH_MAX (PATH_MAX) + +typedef const void *SOCK_OPT_TYPE; + +#if defined(ANDROID) +typedef unsigned short int in_port_t; +#endif + +#if !defined(__ZEPHYR__) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if !defined(__rtems__) +#include +#endif +#include +#include +#include +#if defined(USE_X_DOM_SOCKET) +#include +#endif +#endif + +#define vsnprintf_impl vsnprintf + +#if !defined(NO_SSL_DL) && !defined(NO_SSL) +#include +#endif + +#if defined(__MACH__) && defined(__APPLE__) + +#if defined(OPENSSL_API_3_0) +#define SSL_LIB "libssl.3.dylib" +#define CRYPTO_LIB "libcrypto.3.dylib" +#endif + +#if defined(OPENSSL_API_1_1) +#define SSL_LIB "libssl.1.1.dylib" +#define CRYPTO_LIB "libcrypto.1.1.dylib" +#endif /* OPENSSL_API_1_1 */ + +#if defined(OPENSSL_API_1_0) +#define SSL_LIB "libssl.1.0.dylib" +#define CRYPTO_LIB "libcrypto.1.0.dylib" +#endif /* OPENSSL_API_1_0 */ + +#else +#if !defined(SSL_LIB) +#define SSL_LIB "libssl.so" +#endif +#if !defined(CRYPTO_LIB) +#define CRYPTO_LIB "libcrypto.so" +#endif +#endif +#if !defined(O_BINARY) +#define O_BINARY (0) +#endif /* O_BINARY */ +#define closesocket(a) (close(a)) +#define mg_mkdir(conn, path, mode) (mkdir(path, mode)) +#define mg_remove(conn, x) (remove(x)) +#define mg_sleep(x) (usleep((x)*1000)) +#define mg_opendir(conn, x) (opendir(x)) +#define mg_closedir(x) (closedir(x)) +#define mg_readdir(x) (readdir(x)) +#define ERRNO (errno) +#define INVALID_SOCKET (-1) +#define INT64_FMT PRId64 +#define UINT64_FMT PRIu64 +typedef int SOCKET; +#define WINCDECL + +#if defined(__hpux) +/* HPUX 11 does not have monotonic, fall back to realtime */ +#if !defined(CLOCK_MONOTONIC) +#define CLOCK_MONOTONIC CLOCK_REALTIME +#endif + +/* HPUX defines socklen_t incorrectly as size_t which is 64bit on + * Itanium. Without defining _XOPEN_SOURCE or _XOPEN_SOURCE_EXTENDED + * the prototypes use int* rather than socklen_t* which matches the + * actual library expectation. When called with the wrong size arg + * accept() returns a zero client inet addr and check_acl() always + * fails. Since socklen_t is widely used below, just force replace + * their typedef with int. - DTL + */ +#define socklen_t int +#endif /* hpux */ + +#define mg_pollfd pollfd + +#endif /* defined(_WIN32) - WINDOWS vs UNIX include block */ + +/* In case our C library is missing "timegm", provide an implementation */ +#if defined(NEED_TIMEGM) +static inline int +is_leap(int y) +{ + return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0; +} + +static inline int +count_leap(int y) +{ + return (y - 1969) / 4 - (y - 1901) / 100 + (y - 1601) / 400; +} + +static time_t +timegm(struct tm *tm) +{ + static const unsigned short ydays[] = { + 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}; + int year = tm->tm_year + 1900; + int mon = tm->tm_mon; + int mday = tm->tm_mday - 1; + int hour = tm->tm_hour; + int min = tm->tm_min; + int sec = tm->tm_sec; + + if (year < 1970 || mon < 0 || mon > 11 || mday < 0 + || (mday >= ydays[mon + 1] - ydays[mon] + + (mon == 1 && is_leap(year) ? 1 : 0)) + || hour < 0 || hour > 23 || min < 0 || min > 59 || sec < 0 || sec > 60) + return -1; + + time_t res = year - 1970; + res *= 365; + res += mday; + res += ydays[mon] + (mon > 1 && is_leap(year) ? 1 : 0); + res += count_leap(year); + + res *= 24; + res += hour; + res *= 60; + res += min; + res *= 60; + res += sec; + return res; +} +#endif /* NEED_TIMEGM */ + + +/* va_copy should always be a macro, C99 and C++11 - DTL */ +#if !defined(va_copy) +#define va_copy(x, y) ((x) = (y)) +#endif + + +#if defined(_WIN32) +/* Create substitutes for POSIX functions in Win32. */ + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#endif + + +static pthread_mutex_t global_log_file_lock; + +FUNCTION_MAY_BE_UNUSED +static DWORD +pthread_self(void) +{ + return GetCurrentThreadId(); +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_key_create( + pthread_key_t *key, + void (*_ignored)(void *) /* destructor not supported for Windows */ +) +{ + (void)_ignored; + + if ((key != 0)) { + *key = TlsAlloc(); + return (*key != TLS_OUT_OF_INDEXES) ? 0 : -1; + } + return -2; +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_key_delete(pthread_key_t key) +{ + return TlsFree(key) ? 0 : 1; +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_setspecific(pthread_key_t key, void *value) +{ + return TlsSetValue(key, value) ? 0 : 1; +} + + +FUNCTION_MAY_BE_UNUSED +static void * +pthread_getspecific(pthread_key_t key) +{ + return TlsGetValue(key); +} + +#if defined(GCC_DIAGNOSTIC) +/* Enable unused function warning again */ +#pragma GCC diagnostic pop +#endif + +static struct pthread_mutex_undefined_struct *pthread_mutex_attr = NULL; +#else +static pthread_mutexattr_t pthread_mutex_attr; +#endif /* _WIN32 */ + + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#endif /* defined(GCC_DIAGNOSTIC) */ +#if defined(__clang__) +/* Show no warning in case system functions are not used. */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-function" +#endif + +static pthread_mutex_t global_lock_mutex; + + +FUNCTION_MAY_BE_UNUSED +static void +mg_global_lock(void) +{ + (void)pthread_mutex_lock(&global_lock_mutex); +} + + +FUNCTION_MAY_BE_UNUSED +static void +mg_global_unlock(void) +{ + (void)pthread_mutex_unlock(&global_lock_mutex); +} + + +#if defined(_WIN64) +mg_static_assert(SIZE_MAX == 0xFFFFFFFFFFFFFFFFu, "Mismatch for atomic types"); +#elif defined(_WIN32) +mg_static_assert(SIZE_MAX == 0xFFFFFFFFu, "Mismatch for atomic types"); +#endif + + +/* Atomic functions working on ptrdiff_t ("signed size_t"). + * Operations: Increment, Decrement, Add, Maximum. + * Up to size_t, they do not an atomic "load" operation. + */ +FUNCTION_MAY_BE_UNUSED +static ptrdiff_t +mg_atomic_inc(volatile ptrdiff_t *addr) +{ + ptrdiff_t ret; + +#if defined(_WIN64) && !defined(NO_ATOMICS) + ret = InterlockedIncrement64(addr); +#elif defined(_WIN32) && !defined(NO_ATOMICS) +#ifdef __cplusplus + /* For C++ the Microsoft Visual Studio compiler can not decide what + * overloaded function prototpye in the SDC corresponds to "ptrdiff_t". */ + static_assert(sizeof(ptrdiff_t) == sizeof(LONG), "Size mismatch"); + static_assert(sizeof(ptrdiff_t) == sizeof(int32_t), "Size mismatch"); + ret = InterlockedIncrement((LONG *)addr); +#else + ret = InterlockedIncrement(addr); +#endif +#elif defined(__GNUC__) \ + && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0))) \ + && !defined(NO_ATOMICS) + ret = __sync_add_and_fetch(addr, 1); +#else + mg_global_lock(); + ret = (++(*addr)); + mg_global_unlock(); +#endif + return ret; +} + + +FUNCTION_MAY_BE_UNUSED +static ptrdiff_t +mg_atomic_dec(volatile ptrdiff_t *addr) +{ + ptrdiff_t ret; + +#if defined(_WIN64) && !defined(NO_ATOMICS) + ret = InterlockedDecrement64(addr); +#elif defined(_WIN32) && !defined(NO_ATOMICS) +#ifdef __cplusplus + /* see mg_atomic_inc */ + static_assert(sizeof(ptrdiff_t) == sizeof(LONG), "Size mismatch"); + static_assert(sizeof(ptrdiff_t) == sizeof(int32_t), "Size mismatch"); + ret = InterlockedDecrement((LONG *)addr); +#else + ret = InterlockedDecrement(addr); +#endif +#elif defined(__GNUC__) \ + && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0))) \ + && !defined(NO_ATOMICS) + ret = __sync_sub_and_fetch(addr, 1); +#else + mg_global_lock(); + ret = (--(*addr)); + mg_global_unlock(); +#endif + return ret; +} + + +#if defined(USE_SERVER_STATS) || defined(STOP_FLAG_NEEDS_LOCK) +static ptrdiff_t +mg_atomic_add(volatile ptrdiff_t *addr, ptrdiff_t value) +{ + ptrdiff_t ret; + +#if defined(_WIN64) && !defined(NO_ATOMICS) + ret = InterlockedAdd64(addr, value); +#elif defined(_WIN32) && !defined(NO_ATOMICS) + ret = InterlockedExchangeAdd(addr, value) + value; +#elif defined(__GNUC__) \ + && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0))) \ + && !defined(NO_ATOMICS) + ret = __sync_add_and_fetch(addr, value); +#else + mg_global_lock(); + *addr += value; + ret = (*addr); + mg_global_unlock(); +#endif + return ret; +} + + +FUNCTION_MAY_BE_UNUSED +static ptrdiff_t +mg_atomic_compare_and_swap(volatile ptrdiff_t *addr, + ptrdiff_t oldval, + ptrdiff_t newval) +{ + ptrdiff_t ret; + +#if defined(_WIN64) && !defined(NO_ATOMICS) + ret = InterlockedCompareExchange64(addr, newval, oldval); +#elif defined(_WIN32) && !defined(NO_ATOMICS) + ret = InterlockedCompareExchange(addr, newval, oldval); +#elif defined(__GNUC__) \ + && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0))) \ + && !defined(NO_ATOMICS) + ret = __sync_val_compare_and_swap(addr, oldval, newval); +#else + mg_global_lock(); + ret = *addr; + if ((ret != newval) && (ret == oldval)) { + *addr = newval; + } + mg_global_unlock(); +#endif + return ret; +} + + +static void +mg_atomic_max(volatile ptrdiff_t *addr, ptrdiff_t value) +{ + register ptrdiff_t tmp = *addr; + +#if defined(_WIN64) && !defined(NO_ATOMICS) + while (tmp < value) { + tmp = InterlockedCompareExchange64(addr, value, tmp); + } +#elif defined(_WIN32) && !defined(NO_ATOMICS) + while (tmp < value) { + tmp = InterlockedCompareExchange(addr, value, tmp); + } +#elif defined(__GNUC__) \ + && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0))) \ + && !defined(NO_ATOMICS) + while (tmp < value) { + tmp = __sync_val_compare_and_swap(addr, tmp, value); + } +#else + mg_global_lock(); + if (*addr < value) { + *addr = value; + } + mg_global_unlock(); +#endif +} + + +static int64_t +mg_atomic_add64(volatile int64_t *addr, int64_t value) +{ + int64_t ret; + +#if defined(_WIN64) && !defined(NO_ATOMICS) + ret = InterlockedAdd64(addr, value); +#elif defined(_WIN32) && !defined(NO_ATOMICS) + ret = InterlockedExchangeAdd64(addr, value) + value; +#elif defined(__GNUC__) \ + && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0))) \ + && !defined(NO_ATOMICS) + ret = __sync_add_and_fetch(addr, value); +#else + mg_global_lock(); + *addr += value; + ret = (*addr); + mg_global_unlock(); +#endif + return ret; +} +#endif + + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic pop +#endif /* defined(GCC_DIAGNOSTIC) */ +#if defined(__clang__) +/* Show no warning in case system functions are not used. */ +#pragma clang diagnostic pop +#endif + + +#if defined(USE_SERVER_STATS) + +struct mg_memory_stat { + volatile ptrdiff_t totalMemUsed; + volatile ptrdiff_t maxMemUsed; + volatile ptrdiff_t blockCount; +}; + + +static struct mg_memory_stat *get_memory_stat(struct mg_context *ctx); + + +static void * +mg_malloc_ex(size_t size, + struct mg_context *ctx, + const char *file, + unsigned line) +{ + void *data = malloc(size + 2 * sizeof(uintptr_t)); + void *memory = 0; + struct mg_memory_stat *mstat = get_memory_stat(ctx); + +#if defined(MEMORY_DEBUGGING) + char mallocStr[256]; +#else + (void)file; + (void)line; +#endif + + if (data) { + uintptr_t *tmp = (uintptr_t *)data; + ptrdiff_t mmem = mg_atomic_add(&mstat->totalMemUsed, (ptrdiff_t)size); + mg_atomic_max(&mstat->maxMemUsed, mmem); + mg_atomic_inc(&mstat->blockCount); + tmp[0] = size; + tmp[1] = (uintptr_t)mstat; + memory = (void *)&tmp[2]; + } + +#if defined(MEMORY_DEBUGGING) + sprintf(mallocStr, + "MEM: %p %5lu alloc %7lu %4lu --- %s:%u\n", + memory, + (unsigned long)size, + (unsigned long)mstat->totalMemUsed, + (unsigned long)mstat->blockCount, + file, + line); + DEBUG_TRACE("%s", mallocStr); +#endif + + return memory; +} + + +static void * +mg_calloc_ex(size_t count, + size_t size, + struct mg_context *ctx, + const char *file, + unsigned line) +{ + void *data = mg_malloc_ex(size * count, ctx, file, line); + + if (data) { + memset(data, 0, size * count); + } + return data; +} + + +static void +mg_free_ex(void *memory, const char *file, unsigned line) +{ +#if defined(MEMORY_DEBUGGING) + char mallocStr[256]; +#else + (void)file; + (void)line; +#endif + + if (memory) { + void *data = (void *)(((char *)memory) - 2 * sizeof(uintptr_t)); + uintptr_t size = ((uintptr_t *)data)[0]; + struct mg_memory_stat *mstat = + (struct mg_memory_stat *)(((uintptr_t *)data)[1]); + mg_atomic_add(&mstat->totalMemUsed, -(ptrdiff_t)size); + mg_atomic_dec(&mstat->blockCount); + +#if defined(MEMORY_DEBUGGING) + sprintf(mallocStr, + "MEM: %p %5lu free %7lu %4lu --- %s:%u\n", + memory, + (unsigned long)size, + (unsigned long)mstat->totalMemUsed, + (unsigned long)mstat->blockCount, + file, + line); + DEBUG_TRACE("%s", mallocStr); +#endif + free(data); + } +} + + +static void * +mg_realloc_ex(void *memory, + size_t newsize, + struct mg_context *ctx, + const char *file, + unsigned line) +{ + void *data; + void *_realloc; + uintptr_t oldsize; + +#if defined(MEMORY_DEBUGGING) + char mallocStr[256]; +#else + (void)file; + (void)line; +#endif + + if (newsize) { + if (memory) { + /* Reallocate existing block */ + struct mg_memory_stat *mstat; + data = (void *)(((char *)memory) - 2 * sizeof(uintptr_t)); + oldsize = ((uintptr_t *)data)[0]; + mstat = (struct mg_memory_stat *)((uintptr_t *)data)[1]; + _realloc = realloc(data, newsize + 2 * sizeof(uintptr_t)); + if (_realloc) { + data = _realloc; + mg_atomic_add(&mstat->totalMemUsed, -(ptrdiff_t)oldsize); +#if defined(MEMORY_DEBUGGING) + sprintf(mallocStr, + "MEM: %p %5lu r-free %7lu %4lu --- %s:%u\n", + memory, + (unsigned long)oldsize, + (unsigned long)mstat->totalMemUsed, + (unsigned long)mstat->blockCount, + file, + line); + DEBUG_TRACE("%s", mallocStr); +#endif + mg_atomic_add(&mstat->totalMemUsed, (ptrdiff_t)newsize); + +#if defined(MEMORY_DEBUGGING) + sprintf(mallocStr, + "MEM: %p %5lu r-alloc %7lu %4lu --- %s:%u\n", + memory, + (unsigned long)newsize, + (unsigned long)mstat->totalMemUsed, + (unsigned long)mstat->blockCount, + file, + line); + DEBUG_TRACE("%s", mallocStr); +#endif + *(uintptr_t *)data = newsize; + data = (void *)(((char *)data) + 2 * sizeof(uintptr_t)); + } else { +#if defined(MEMORY_DEBUGGING) + DEBUG_TRACE("%s", "MEM: realloc failed\n"); +#endif + return _realloc; + } + } else { + /* Allocate new block */ + data = mg_malloc_ex(newsize, ctx, file, line); + } + } else { + /* Free existing block */ + data = 0; + mg_free_ex(memory, file, line); + } + + return data; +} + + +#define mg_malloc(a) mg_malloc_ex(a, NULL, __FILE__, __LINE__) +#define mg_calloc(a, b) mg_calloc_ex(a, b, NULL, __FILE__, __LINE__) +#define mg_realloc(a, b) mg_realloc_ex(a, b, NULL, __FILE__, __LINE__) +#define mg_free(a) mg_free_ex(a, __FILE__, __LINE__) + +#define mg_malloc_ctx(a, c) mg_malloc_ex(a, c, __FILE__, __LINE__) +#define mg_calloc_ctx(a, b, c) mg_calloc_ex(a, b, c, __FILE__, __LINE__) +#define mg_realloc_ctx(a, b, c) mg_realloc_ex(a, b, c, __FILE__, __LINE__) + + +#else /* USE_SERVER_STATS */ + + +static __inline void * +mg_malloc(size_t a) +{ + return malloc(a); +} + +static __inline void * +mg_calloc(size_t a, size_t b) +{ + return calloc(a, b); +} + +static __inline void * +mg_realloc(void *a, size_t b) +{ + return realloc(a, b); +} + +static __inline void +mg_free(void *a) +{ + free(a); +} + +#define mg_malloc_ctx(a, c) mg_malloc(a) +#define mg_calloc_ctx(a, b, c) mg_calloc(a, b) +#define mg_realloc_ctx(a, b, c) mg_realloc(a, b) +#define mg_free_ctx(a, c) mg_free(a) + +#endif /* USE_SERVER_STATS */ + + +static void mg_vsnprintf(const struct mg_connection *conn, + int *truncated, + char *buf, + size_t buflen, + const char *fmt, + va_list ap); + +static void mg_snprintf(const struct mg_connection *conn, + int *truncated, + char *buf, + size_t buflen, + PRINTF_FORMAT_STRING(const char *fmt), + ...) PRINTF_ARGS(5, 6); + +/* This following lines are just meant as a reminder to use the mg-functions + * for memory management */ +#if defined(malloc) +#undef malloc +#endif +#if defined(calloc) +#undef calloc +#endif +#if defined(realloc) +#undef realloc +#endif +#if defined(free) +#undef free +#endif +#if defined(snprintf) +#undef snprintf +#endif +#if defined(vsnprintf) +#undef vsnprintf +#endif +#if !defined(NDEBUG) +#define malloc DO_NOT_USE_THIS_FUNCTION__USE_mg_malloc +#define calloc DO_NOT_USE_THIS_FUNCTION__USE_mg_calloc +#define realloc DO_NOT_USE_THIS_FUNCTION__USE_mg_realloc +#define free DO_NOT_USE_THIS_FUNCTION__USE_mg_free +#define snprintf DO_NOT_USE_THIS_FUNCTION__USE_mg_snprintf +#endif +#if defined(_WIN32) +/* vsnprintf must not be used in any system, + * but this define only works well for Windows. */ +#define vsnprintf DO_NOT_USE_THIS_FUNCTION__USE_mg_vsnprintf +#endif + + +/* mg_init_library counter */ +static int mg_init_library_called = 0; + +#if !defined(NO_SSL) +#if defined(OPENSSL_API_1_0) || defined(OPENSSL_API_1_1) \ + || defined(OPENSSL_API_3_0) +static int mg_openssl_initialized = 0; +#endif +#if !defined(OPENSSL_API_1_0) && !defined(OPENSSL_API_1_1) \ + && !defined(OPENSSL_API_3_0) && !defined(USE_MBEDTLS) \ + && !defined(USE_GNUTLS) +#error "Please define OPENSSL_API_#_# or USE_MBEDTLS or USE_GNUTLS" +#endif +#if defined(OPENSSL_API_1_0) && defined(OPENSSL_API_1_1) +#error "Multiple OPENSSL_API versions defined" +#endif +#if defined(OPENSSL_API_1_1) && defined(OPENSSL_API_3_0) +#error "Multiple OPENSSL_API versions defined" +#endif +#if defined(OPENSSL_API_1_0) && defined(OPENSSL_API_3_0) +#error "Multiple OPENSSL_API versions defined" +#endif +#if (defined(OPENSSL_API_1_0) || defined(OPENSSL_API_1_1) \ + || defined(OPENSSL_API_3_0)) \ + && (defined(USE_MBEDTLS) || defined(USE_GNUTLS)) +#error "Multiple SSL libraries defined" +#endif +#if defined(USE_MBEDTLS) && defined(USE_GNUTLS) +#error "Multiple SSL libraries defined" +#endif +#endif + + +static pthread_key_t sTlsKey; /* Thread local storage index */ +static volatile ptrdiff_t thread_idx_max = 0; + +#if defined(MG_LEGACY_INTERFACE) +#define MG_ALLOW_USING_GET_REQUEST_INFO_FOR_RESPONSE +#endif + +struct mg_workerTLS { + int is_master; + unsigned long thread_idx; + void *user_ptr; +#if defined(_WIN32) + HANDLE pthread_cond_helper_mutex; + struct mg_workerTLS *next_waiting_thread; +#endif + const char *alpn_proto; +#if defined(MG_ALLOW_USING_GET_REQUEST_INFO_FOR_RESPONSE) + char txtbuf[4]; +#endif +}; + + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#endif /* defined(GCC_DIAGNOSTIC) */ +#if defined(__clang__) +/* Show no warning in case system functions are not used. */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-function" +#endif + + +/* Get a unique thread ID as unsigned long, independent from the data type + * of thread IDs defined by the operating system API. + * If two calls to mg_current_thread_id return the same value, they calls + * are done from the same thread. If they return different values, they are + * done from different threads. (Provided this function is used in the same + * process context and threads are not repeatedly created and deleted, but + * CivetWeb does not do that). + * This function must match the signature required for SSL id callbacks: + * CRYPTO_set_id_callback + */ +FUNCTION_MAY_BE_UNUSED +static unsigned long +mg_current_thread_id(void) +{ +#if defined(_WIN32) + return GetCurrentThreadId(); +#else + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + /* For every compiler, either "sizeof(pthread_t) > sizeof(unsigned long)" + * or not, so one of the two conditions will be unreachable by construction. + * Unfortunately the C standard does not define a way to check this at + * compile time, since the #if preprocessor conditions can not use the + * sizeof operator as an argument. */ +#endif + + if (sizeof(pthread_t) > sizeof(unsigned long)) { + /* This is the problematic case for CRYPTO_set_id_callback: + * The OS pthread_t can not be cast to unsigned long. */ + struct mg_workerTLS *tls = + (struct mg_workerTLS *)pthread_getspecific(sTlsKey); + if (tls == NULL) { + /* SSL called from an unknown thread: Create some thread index. + */ + tls = (struct mg_workerTLS *)mg_malloc(sizeof(struct mg_workerTLS)); + tls->is_master = -2; /* -2 means "3rd party thread" */ + tls->thread_idx = (unsigned)mg_atomic_inc(&thread_idx_max); + pthread_setspecific(sTlsKey, tls); + } + return tls->thread_idx; + } else { + /* pthread_t may be any data type, so a simple cast to unsigned long + * can rise a warning/error, depending on the platform. + * Here memcpy is used as an anything-to-anything cast. */ + unsigned long ret = 0; + pthread_t t = pthread_self(); + memcpy(&ret, &t, sizeof(pthread_t)); + return ret; + } + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#endif +} + + +FUNCTION_MAY_BE_UNUSED +static uint64_t +mg_get_current_time_ns(void) +{ + struct timespec tsnow; + clock_gettime(CLOCK_REALTIME, &tsnow); + return (((uint64_t)tsnow.tv_sec) * 1000000000) + (uint64_t)tsnow.tv_nsec; +} + + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic pop +#endif /* defined(GCC_DIAGNOSTIC) */ +#if defined(__clang__) +/* Show no warning in case system functions are not used. */ +#pragma clang diagnostic pop +#endif + + +#if defined(NEED_DEBUG_TRACE_FUNC) +static void +DEBUG_TRACE_FUNC(const char *func, unsigned line, const char *fmt, ...) +{ + va_list args; + struct timespec tsnow; + + /* Get some operating system independent thread id */ + unsigned long thread_id = mg_current_thread_id(); + + clock_gettime(CLOCK_REALTIME, &tsnow); + + flockfile(DEBUG_TRACE_STREAM); + fprintf(DEBUG_TRACE_STREAM, + "*** %lu.%09lu %lu %s:%u: ", + (unsigned long)tsnow.tv_sec, + (unsigned long)tsnow.tv_nsec, + thread_id, + func, + line); + va_start(args, fmt); + vfprintf(DEBUG_TRACE_STREAM, fmt, args); + va_end(args); + putc('\n', DEBUG_TRACE_STREAM); + fflush(DEBUG_TRACE_STREAM); + funlockfile(DEBUG_TRACE_STREAM); +} +#endif /* NEED_DEBUG_TRACE_FUNC */ + + +#define MD5_STATIC static +#include "md5.inl" + +/* Darwin prior to 7.0 and Win32 do not have socklen_t */ +#if defined(NO_SOCKLEN_T) +typedef int socklen_t; +#endif /* NO_SOCKLEN_T */ + +#define IP_ADDR_STR_LEN (50) /* IPv6 hex string is 46 chars */ + +#if !defined(MSG_NOSIGNAL) +#define MSG_NOSIGNAL (0) +#endif + + +/* SSL: mbedTLS vs. GnuTLS vs. no-ssl vs. OpenSSL */ +#if defined(USE_MBEDTLS) +/* mbedTLS */ +#include "mod_mbedtls.inl" + +#elif defined(USE_GNUTLS) +/* GnuTLS */ +#include "mod_gnutls.inl" + +#elif defined(NO_SSL) +/* no SSL */ +typedef struct SSL SSL; /* dummy for SSL argument to push/pull */ +typedef struct SSL_CTX SSL_CTX; + +#elif defined(NO_SSL_DL) +/* OpenSSL without dynamic loading */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(WOLFSSL_VERSION) +/* Additional defines for WolfSSL, see + * https://github.com/civetweb/civetweb/issues/583 */ +#include "wolfssl_extras.inl" +#endif + +#if defined(OPENSSL_IS_BORINGSSL) +/* From boringssl/src/include/openssl/mem.h: + * + * OpenSSL has, historically, had a complex set of malloc debugging options. + * However, that was written in a time before Valgrind and ASAN. Since we now + * have those tools, the OpenSSL allocation functions are simply macros around + * the standard memory functions. + * + * #define OPENSSL_free free */ +#define free free +// disable for boringssl +#define CONF_modules_unload(a) ((void)0) +#define ENGINE_cleanup() ((void)0) +#endif + +/* If OpenSSL headers are included, automatically select the API version */ +#if (OPENSSL_VERSION_NUMBER >= 0x30000000L) +#if !defined(OPENSSL_API_3_0) +#define OPENSSL_API_3_0 +#endif +#define OPENSSL_REMOVE_THREAD_STATE() +#else +#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) +#if !defined(OPENSSL_API_1_1) +#define OPENSSL_API_1_1 +#endif +#define OPENSSL_REMOVE_THREAD_STATE() +#else +#if !defined(OPENSSL_API_1_0) +#define OPENSSL_API_1_0 +#endif +#define OPENSSL_REMOVE_THREAD_STATE() ERR_remove_thread_state(NULL) +#endif +#endif + + +#else +/* SSL loaded dynamically from DLL / shared object */ +/* Add all prototypes here, to be independent from OpenSSL source + * installation. */ +#include "openssl_dl.inl" + +#endif /* Various SSL bindings */ + + +#if !defined(NO_CACHING) +static const char month_names[][4] = {"Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec"}; +#endif /* !NO_CACHING */ + + +/* Unified socket address. For IPv6 support, add IPv6 address structure in + * the union u. */ +union usa { + struct sockaddr sa; + struct sockaddr_in sin; +#if defined(USE_IPV6) + struct sockaddr_in6 sin6; +#endif +#if defined(USE_X_DOM_SOCKET) + struct sockaddr_un sun; +#endif +}; + +#if defined(USE_X_DOM_SOCKET) +static unsigned short +USA_IN_PORT_UNSAFE(union usa *s) +{ + if (s->sa.sa_family == AF_INET) + return s->sin.sin_port; +#if defined(USE_IPV6) + if (s->sa.sa_family == AF_INET6) + return s->sin6.sin6_port; +#endif + return 0; +} +#endif +#if defined(USE_IPV6) +#define USA_IN_PORT_UNSAFE(s) \ + (((s)->sa.sa_family == AF_INET6) ? (s)->sin6.sin6_port : (s)->sin.sin_port) +#else +#define USA_IN_PORT_UNSAFE(s) ((s)->sin.sin_port) +#endif + +/* Describes a string (chunk of memory). */ +struct vec { + const char *ptr; + size_t len; +}; + +struct mg_file_stat { + /* File properties filled by mg_stat: */ + uint64_t size; + time_t last_modified; + int is_directory; /* Set to 1 if mg_stat is called for a directory */ + int is_gzipped; /* Set to 1 if the content is gzipped, in which + * case we need a "Content-Eencoding: gzip" header */ + int location; /* 0 = nowhere, 1 = on disk, 2 = in memory */ +}; + + +struct mg_file_access { + /* File properties filled by mg_fopen: */ + FILE *fp; +}; + +struct mg_file { + struct mg_file_stat stat; + struct mg_file_access access; +}; + + +#define STRUCT_FILE_INITIALIZER \ + { \ + {(uint64_t)0, (time_t)0, 0, 0, 0}, \ + { \ + (FILE *)NULL \ + } \ + } + + +/* Describes listening socket, or socket which was accept()-ed by the master + * thread and queued for future handling by the worker thread. */ +struct socket { + SOCKET sock; /* Listening socket */ + union usa lsa; /* Local socket address */ + union usa rsa; /* Remote socket address */ + unsigned char is_ssl; /* Is port SSL-ed */ + unsigned char ssl_redir; /* Is port supposed to redirect everything to SSL + * port */ + unsigned char + is_optional; /* Shouldn't cause us to exit if we can't bind to it */ + unsigned char in_use; /* 0: invalid, 1: valid, 2: free */ +}; + + +/* Enum const for all options must be in sync with + * static struct mg_option config_options[] + * This is tested in the unit test (test/private.c) + * "Private Config Options" + */ +enum { + /* Once for each server */ + LISTENING_PORTS, + NUM_THREADS, + PRESPAWN_THREADS, + RUN_AS_USER, + CONFIG_TCP_NODELAY, /* Prepended CONFIG_ to avoid conflict with the + * socket option typedef TCP_NODELAY. */ + MAX_REQUEST_SIZE, + LINGER_TIMEOUT, + CONNECTION_QUEUE_SIZE, + LISTEN_BACKLOG_SIZE, +#if defined(__linux__) + ALLOW_SENDFILE_CALL, +#endif +#if defined(_WIN32) + CASE_SENSITIVE_FILES, +#endif + THROTTLE, + ENABLE_KEEP_ALIVE, + REQUEST_TIMEOUT, + KEEP_ALIVE_TIMEOUT, +#if defined(USE_WEBSOCKET) + WEBSOCKET_TIMEOUT, + ENABLE_WEBSOCKET_PING_PONG, +#endif + DECODE_URL, + DECODE_QUERY_STRING, +#if defined(USE_LUA) + LUA_BACKGROUND_SCRIPT, + LUA_BACKGROUND_SCRIPT_PARAMS, +#endif +#if defined(USE_HTTP2) + ENABLE_HTTP2, +#endif + + /* Once for each domain */ + DOCUMENT_ROOT, + FALLBACK_DOCUMENT_ROOT, + + ACCESS_LOG_FILE, + ERROR_LOG_FILE, + + CGI_EXTENSIONS, + CGI_ENVIRONMENT, + CGI_INTERPRETER, + CGI_INTERPRETER_ARGS, +#if defined(USE_TIMERS) + CGI_TIMEOUT, +#endif + CGI_BUFFERING, + + CGI2_EXTENSIONS, + CGI2_ENVIRONMENT, + CGI2_INTERPRETER, + CGI2_INTERPRETER_ARGS, +#if defined(USE_TIMERS) + CGI2_TIMEOUT, +#endif + CGI2_BUFFERING, + +#if defined(USE_4_CGI) + CGI3_EXTENSIONS, + CGI3_ENVIRONMENT, + CGI3_INTERPRETER, + CGI3_INTERPRETER_ARGS, +#if defined(USE_TIMERS) + CGI3_TIMEOUT, +#endif + CGI3_BUFFERING, + + CGI4_EXTENSIONS, + CGI4_ENVIRONMENT, + CGI4_INTERPRETER, + CGI4_INTERPRETER_ARGS, +#if defined(USE_TIMERS) + CGI4_TIMEOUT, +#endif + CGI4_BUFFERING, +#endif + + PUT_DELETE_PASSWORDS_FILE, /* must follow CGI_* */ + PROTECT_URI, + AUTHENTICATION_DOMAIN, + ENABLE_AUTH_DOMAIN_CHECK, + SSI_EXTENSIONS, + ENABLE_DIRECTORY_LISTING, + ENABLE_WEBDAV, + GLOBAL_PASSWORDS_FILE, + INDEX_FILES, + ACCESS_CONTROL_LIST, + EXTRA_MIME_TYPES, + SSL_CERTIFICATE, + SSL_CERTIFICATE_CHAIN, + URL_REWRITE_PATTERN, + HIDE_FILES, + SSL_DO_VERIFY_PEER, + SSL_CACHE_TIMEOUT, + SSL_CA_PATH, + SSL_CA_FILE, + SSL_VERIFY_DEPTH, + SSL_DEFAULT_VERIFY_PATHS, + SSL_CIPHER_LIST, + SSL_PROTOCOL_VERSION, + SSL_SHORT_TRUST, + +#if defined(USE_LUA) + LUA_PRELOAD_FILE, + LUA_SCRIPT_EXTENSIONS, + LUA_SERVER_PAGE_EXTENSIONS, +#if defined(MG_EXPERIMENTAL_INTERFACES) + LUA_DEBUG_PARAMS, +#endif +#endif +#if defined(USE_DUKTAPE) + DUKTAPE_SCRIPT_EXTENSIONS, +#endif + +#if defined(USE_WEBSOCKET) + WEBSOCKET_ROOT, + FALLBACK_WEBSOCKET_ROOT, +#endif +#if defined(USE_LUA) && defined(USE_WEBSOCKET) + LUA_WEBSOCKET_EXTENSIONS, +#endif + REPLACE_ASTERISK_WITH_ORIGIN, + ACCESS_CONTROL_ALLOW_ORIGIN, + ACCESS_CONTROL_ALLOW_METHODS, + ACCESS_CONTROL_ALLOW_HEADERS, + ACCESS_CONTROL_EXPOSE_HEADERS, + ACCESS_CONTROL_ALLOW_CREDENTIALS, + ERROR_PAGES, +#if !defined(NO_CACHING) + STATIC_FILE_MAX_AGE, + STATIC_FILE_CACHE_CONTROL, +#endif +#if !defined(NO_SSL) + STRICT_HTTPS_MAX_AGE, +#endif + ADDITIONAL_HEADER, + ALLOW_INDEX_SCRIPT_SUB_RES, + + NUM_OPTIONS +}; + + +/* Config option name, config types, default value. + * Must be in the same order as the enum const above. + */ +static const struct mg_option config_options[] = { + + /* Once for each server */ + {"listening_ports", MG_CONFIG_TYPE_STRING_LIST, "8080"}, + {"num_threads", MG_CONFIG_TYPE_NUMBER, "50"}, + {"prespawn_threads", MG_CONFIG_TYPE_NUMBER, "0"}, + {"run_as_user", MG_CONFIG_TYPE_STRING, NULL}, + {"tcp_nodelay", MG_CONFIG_TYPE_NUMBER, "0"}, + {"max_request_size", MG_CONFIG_TYPE_NUMBER, "16384"}, + {"linger_timeout_ms", MG_CONFIG_TYPE_NUMBER, NULL}, + {"connection_queue", MG_CONFIG_TYPE_NUMBER, "20"}, + {"listen_backlog", MG_CONFIG_TYPE_NUMBER, "200"}, +#if defined(__linux__) + {"allow_sendfile_call", MG_CONFIG_TYPE_BOOLEAN, "yes"}, +#endif +#if defined(_WIN32) + {"case_sensitive", MG_CONFIG_TYPE_BOOLEAN, "no"}, +#endif + {"throttle", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"enable_keep_alive", MG_CONFIG_TYPE_BOOLEAN, "no"}, + {"request_timeout_ms", MG_CONFIG_TYPE_NUMBER, "30000"}, + {"keep_alive_timeout_ms", MG_CONFIG_TYPE_NUMBER, "500"}, +#if defined(USE_WEBSOCKET) + {"websocket_timeout_ms", MG_CONFIG_TYPE_NUMBER, NULL}, + {"enable_websocket_ping_pong", MG_CONFIG_TYPE_BOOLEAN, "no"}, +#endif + {"decode_url", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + {"decode_query_string", MG_CONFIG_TYPE_BOOLEAN, "no"}, +#if defined(USE_LUA) + {"lua_background_script", MG_CONFIG_TYPE_FILE, NULL}, + {"lua_background_script_params", MG_CONFIG_TYPE_STRING_LIST, NULL}, +#endif +#if defined(USE_HTTP2) + {"enable_http2", MG_CONFIG_TYPE_BOOLEAN, "no"}, +#endif + + /* Once for each domain */ + {"document_root", MG_CONFIG_TYPE_DIRECTORY, NULL}, + {"fallback_document_root", MG_CONFIG_TYPE_DIRECTORY, NULL}, + + {"access_log_file", MG_CONFIG_TYPE_FILE, NULL}, + {"error_log_file", MG_CONFIG_TYPE_FILE, NULL}, + + {"cgi_pattern", MG_CONFIG_TYPE_EXT_PATTERN, "**.cgi$|**.pl$|**.php$"}, + {"cgi_environment", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"cgi_interpreter", MG_CONFIG_TYPE_FILE, NULL}, + {"cgi_interpreter_args", MG_CONFIG_TYPE_STRING, NULL}, +#if defined(USE_TIMERS) + {"cgi_timeout_ms", MG_CONFIG_TYPE_NUMBER, NULL}, +#endif + {"cgi_buffering", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + + {"cgi2_pattern", MG_CONFIG_TYPE_EXT_PATTERN, NULL}, + {"cgi2_environment", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"cgi2_interpreter", MG_CONFIG_TYPE_FILE, NULL}, + {"cgi2_interpreter_args", MG_CONFIG_TYPE_STRING, NULL}, +#if defined(USE_TIMERS) + {"cgi2_timeout_ms", MG_CONFIG_TYPE_NUMBER, NULL}, +#endif + {"cgi2_buffering", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + +#if defined(USE_4_CGI) + {"cgi3_pattern", MG_CONFIG_TYPE_EXT_PATTERN, NULL}, + {"cgi3_environment", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"cgi3_interpreter", MG_CONFIG_TYPE_FILE, NULL}, + {"cgi3_interpreter_args", MG_CONFIG_TYPE_STRING, NULL}, +#if defined(USE_TIMERS) + {"cgi3_timeout_ms", MG_CONFIG_TYPE_NUMBER, NULL}, +#endif + {"cgi3_buffering", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + + {"cgi4_pattern", MG_CONFIG_TYPE_EXT_PATTERN, NULL}, + {"cgi4_environment", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"cgi4_interpreter", MG_CONFIG_TYPE_FILE, NULL}, + {"cgi4_interpreter_args", MG_CONFIG_TYPE_STRING, NULL}, +#if defined(USE_TIMERS) + {"cgi4_timeout_ms", MG_CONFIG_TYPE_NUMBER, NULL}, +#endif + {"cgi4_buffering", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + +#endif + + {"put_delete_auth_file", MG_CONFIG_TYPE_FILE, NULL}, + {"protect_uri", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"authentication_domain", MG_CONFIG_TYPE_STRING, "mydomain.com"}, + {"enable_auth_domain_check", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + {"ssi_pattern", MG_CONFIG_TYPE_EXT_PATTERN, "**.shtml$|**.shtm$"}, + {"enable_directory_listing", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + {"enable_webdav", MG_CONFIG_TYPE_BOOLEAN, "no"}, + {"global_auth_file", MG_CONFIG_TYPE_FILE, NULL}, + {"index_files", + MG_CONFIG_TYPE_STRING_LIST, +#if defined(USE_LUA) + "index.xhtml,index.html,index.htm," + "index.lp,index.lsp,index.lua,index.cgi," + "index.shtml,index.php"}, +#else + "index.xhtml,index.html,index.htm,index.cgi,index.shtml,index.php"}, +#endif + {"access_control_list", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"extra_mime_types", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"ssl_certificate", MG_CONFIG_TYPE_FILE, NULL}, + {"ssl_certificate_chain", MG_CONFIG_TYPE_FILE, NULL}, + {"url_rewrite_patterns", MG_CONFIG_TYPE_STRING_LIST, NULL}, + {"hide_files_patterns", MG_CONFIG_TYPE_EXT_PATTERN, NULL}, + + {"ssl_verify_peer", MG_CONFIG_TYPE_YES_NO_OPTIONAL, "no"}, + {"ssl_cache_timeout", MG_CONFIG_TYPE_NUMBER, "-1"}, + + {"ssl_ca_path", MG_CONFIG_TYPE_DIRECTORY, NULL}, + {"ssl_ca_file", MG_CONFIG_TYPE_FILE, NULL}, + {"ssl_verify_depth", MG_CONFIG_TYPE_NUMBER, "9"}, + {"ssl_default_verify_paths", MG_CONFIG_TYPE_BOOLEAN, "yes"}, + {"ssl_cipher_list", MG_CONFIG_TYPE_STRING, NULL}, + + /* HTTP2 requires ALPN, and anyway TLS1.2 should be considered + * as a minimum in 2020 */ + {"ssl_protocol_version", MG_CONFIG_TYPE_NUMBER, "4"}, + + {"ssl_short_trust", MG_CONFIG_TYPE_BOOLEAN, "no"}, + +#if defined(USE_LUA) + {"lua_preload_file", MG_CONFIG_TYPE_FILE, NULL}, + {"lua_script_pattern", MG_CONFIG_TYPE_EXT_PATTERN, "**.lua$"}, + {"lua_server_page_pattern", MG_CONFIG_TYPE_EXT_PATTERN, "**.lp$|**.lsp$"}, +#if defined(MG_EXPERIMENTAL_INTERFACES) + {"lua_debug", MG_CONFIG_TYPE_STRING, NULL}, +#endif +#endif +#if defined(USE_DUKTAPE) + /* The support for duktape is still in alpha version state. + * The name of this config option might change. */ + {"duktape_script_pattern", MG_CONFIG_TYPE_EXT_PATTERN, "**.ssjs$"}, +#endif + +#if defined(USE_WEBSOCKET) + {"websocket_root", MG_CONFIG_TYPE_DIRECTORY, NULL}, + {"fallback_websocket_root", MG_CONFIG_TYPE_DIRECTORY, NULL}, +#endif +#if defined(USE_LUA) && defined(USE_WEBSOCKET) + {"lua_websocket_pattern", MG_CONFIG_TYPE_EXT_PATTERN, "**.lua$"}, +#endif + {"replace_asterisk_with_origin", MG_CONFIG_TYPE_BOOLEAN, "no"}, + {"access_control_allow_origin", MG_CONFIG_TYPE_STRING, "*"}, + {"access_control_allow_methods", MG_CONFIG_TYPE_STRING, "*"}, + {"access_control_allow_headers", MG_CONFIG_TYPE_STRING, "*"}, + {"access_control_expose_headers", MG_CONFIG_TYPE_STRING, ""}, + {"access_control_allow_credentials", MG_CONFIG_TYPE_STRING, ""}, + {"error_pages", MG_CONFIG_TYPE_DIRECTORY, NULL}, +#if !defined(NO_CACHING) + {"static_file_max_age", MG_CONFIG_TYPE_NUMBER, "3600"}, + {"static_file_cache_control", MG_CONFIG_TYPE_STRING, NULL}, +#endif +#if !defined(NO_SSL) + {"strict_transport_security_max_age", MG_CONFIG_TYPE_NUMBER, NULL}, +#endif + {"additional_header", MG_CONFIG_TYPE_STRING_MULTILINE, NULL}, + {"allow_index_script_resource", MG_CONFIG_TYPE_BOOLEAN, "no"}, + + {NULL, MG_CONFIG_TYPE_UNKNOWN, NULL}}; + + +/* Check if the config_options and the corresponding enum have compatible + * sizes. */ +mg_static_assert((sizeof(config_options) / sizeof(config_options[0])) + == (NUM_OPTIONS + 1), + "config_options and enum not sync"); + + +enum { REQUEST_HANDLER, WEBSOCKET_HANDLER, AUTH_HANDLER }; + + +struct mg_handler_info { + /* Name/Pattern of the URI. */ + char *uri; + size_t uri_len; + + /* handler type */ + int handler_type; + + /* Handler for http/https or requests. */ + mg_request_handler handler; + unsigned int refcount; + int removing; + + /* Handler for ws/wss (websocket) requests. */ + mg_websocket_connect_handler connect_handler; + mg_websocket_ready_handler ready_handler; + mg_websocket_data_handler data_handler; + mg_websocket_close_handler close_handler; + + /* accepted subprotocols for ws/wss requests. */ + struct mg_websocket_subprotocols *subprotocols; + + /* Handler for authorization requests */ + mg_authorization_handler auth_handler; + + /* User supplied argument for the handler function. */ + void *cbdata; + + /* next handler in a linked list */ + struct mg_handler_info *next; +}; + + +enum { + CONTEXT_INVALID, + CONTEXT_SERVER, + CONTEXT_HTTP_CLIENT, + CONTEXT_WS_CLIENT +}; + + +struct mg_domain_context { + SSL_CTX *ssl_ctx; /* SSL context */ + char *config[NUM_OPTIONS]; /* Civetweb configuration parameters */ + struct mg_handler_info *handlers; /* linked list of uri handlers */ + int64_t ssl_cert_last_mtime; + + /* Server nonce */ + uint64_t auth_nonce_mask; /* Mask for all nonce values */ + unsigned long nonce_count; /* Used nonces, used for authentication */ + +#if defined(USE_LUA) && defined(USE_WEBSOCKET) + /* linked list of shared lua websockets */ + struct mg_shared_lua_websocket_list *shared_lua_websockets; +#endif + + /* Linked list of domains */ + struct mg_domain_context *next; +}; + + +/* Stop flag can be "volatile" or require a lock. + * MSDN uses volatile for "Interlocked" operations, but also explicitly + * states a read operation for int is always atomic. */ +#if defined(STOP_FLAG_NEEDS_LOCK) + +typedef ptrdiff_t volatile stop_flag_t; + +static int +STOP_FLAG_IS_ZERO(const stop_flag_t *f) +{ + stop_flag_t sf = mg_atomic_add((stop_flag_t *)f, 0); + return (sf == 0); +} + +static int +STOP_FLAG_IS_TWO(stop_flag_t *f) +{ + stop_flag_t sf = mg_atomic_add(f, 0); + return (sf == 2); +} + +static void +STOP_FLAG_ASSIGN(stop_flag_t *f, stop_flag_t v) +{ + stop_flag_t sf = 0; + do { + sf = mg_atomic_compare_and_swap(f, + __atomic_load_n(f, __ATOMIC_SEQ_CST), + v); + } while (sf != v); +} + +#else /* STOP_FLAG_NEEDS_LOCK */ + +typedef int volatile stop_flag_t; +#define STOP_FLAG_IS_ZERO(f) ((*(f)) == 0) +#define STOP_FLAG_IS_TWO(f) ((*(f)) == 2) +#define STOP_FLAG_ASSIGN(f, v) ((*(f)) = (v)) + +#endif /* STOP_FLAG_NEEDS_LOCK */ + + +#if !defined(NUM_WEBDAV_LOCKS) +#define NUM_WEBDAV_LOCKS 10 +#endif +#if !defined(LOCK_DURATION_S) +#define LOCK_DURATION_S 60 +#endif + + +struct twebdav_lock { + uint64_t locktime; + char token[33]; + char path[UTF8_PATH_MAX * 2]; + char user[UTF8_PATH_MAX * 2]; +}; + + +struct mg_context { + + /* Part 1 - Physical context: + * This holds threads, ports, timeouts, ... + * set for the entire server, independent from the + * addressed hostname. + */ + + /* Connection related */ + int context_type; /* See CONTEXT_* above */ + + struct socket *listening_sockets; + struct mg_pollfd *listening_socket_fds; + unsigned int num_listening_sockets; + + struct mg_connection *worker_connections; /* The connection struct, pre- + * allocated for each worker */ + +#if defined(USE_SERVER_STATS) + volatile ptrdiff_t active_connections; + volatile ptrdiff_t max_active_connections; + volatile ptrdiff_t total_connections; + volatile ptrdiff_t total_requests; + volatile int64_t total_data_read; + volatile int64_t total_data_written; +#endif + + /* Thread related */ + stop_flag_t stop_flag; /* Should we stop event loop */ + pthread_mutex_t thread_mutex; /* Protects client_socks or queue */ + + pthread_t masterthreadid; /* The master thread ID */ + unsigned int cfg_max_worker_threads; /* How many worker-threads we are + allowed to create, total */ + + unsigned int spawned_worker_threads; /* How many worker-threads currently + exist (modified by master thread) */ + unsigned int + idle_worker_thread_count; /* How many worker-threads are currently + sitting around with nothing to do */ + /* Access to this value MUST be synchronized by thread_mutex */ + + pthread_t *worker_threadids; /* The worker thread IDs */ + unsigned long starter_thread_idx; /* thread index which called mg_start */ + + /* Connection to thread dispatching */ +#if defined(ALTERNATIVE_QUEUE) + struct socket *client_socks; + void **client_wait_events; +#else + struct socket *squeue; /* Socket queue (sq) : accepted sockets waiting for a + worker thread */ + volatile int sq_head; /* Head of the socket queue */ + volatile int sq_tail; /* Tail of the socket queue */ + pthread_cond_t sq_full; /* Signaled when socket is produced */ + pthread_cond_t sq_empty; /* Signaled when socket is consumed */ + volatile int sq_blocked; /* Status information: sq is full */ + int sq_size; /* No of elements in socket queue */ +#if defined(USE_SERVER_STATS) + int sq_max_fill; +#endif /* USE_SERVER_STATS */ +#endif /* ALTERNATIVE_QUEUE */ + + /* Memory related */ + unsigned int max_request_size; /* The max request size */ + +#if defined(USE_SERVER_STATS) + struct mg_memory_stat ctx_memory; +#endif + + /* WebDAV lock structures */ + struct twebdav_lock webdav_lock[NUM_WEBDAV_LOCKS]; + + /* Operating system related */ + char *systemName; /* What operating system is running */ + time_t start_time; /* Server start time, used for authentication + * and for diagnstics. */ + +#if defined(USE_TIMERS) + struct ttimers *timers; +#endif + + /* Lua specific: Background operations and shared websockets */ +#if defined(USE_LUA) + void *lua_background_state; /* lua_State (here as void *) */ + pthread_mutex_t lua_bg_mutex; /* Protect background state */ + int lua_bg_log_available; /* Use Lua background state for access log */ +#endif + + int user_shutdown_notification_socket; /* mg_stop() will close this + socket... */ + int thread_shutdown_notification_socket; /* to cause poll() in all threads + to return immediately */ + + /* Server nonce */ + pthread_mutex_t nonce_mutex; /* Protects ssl_ctx, handlers, + * ssl_cert_last_mtime, nonce_count, and + * next (linked list) */ + + /* Server callbacks */ + struct mg_callbacks callbacks; /* User-defined callback function */ + void *user_data; /* User-defined data */ + + /* Part 2 - Logical domain: + * This holds hostname, TLS certificate, document root, ... + * set for a domain hosted at the server. + * There may be multiple domains hosted at one physical server. + * The default domain "dd" is the first element of a list of + * domains. + */ + struct mg_domain_context dd; /* default domain */ +}; + + +#if defined(USE_SERVER_STATS) +static struct mg_memory_stat mg_common_memory = {0, 0, 0}; + +static struct mg_memory_stat * +get_memory_stat(struct mg_context *ctx) +{ + if (ctx) { + return &(ctx->ctx_memory); + } + return &mg_common_memory; +} +#endif + +enum { + CONNECTION_TYPE_INVALID = 0, + CONNECTION_TYPE_REQUEST = 1, + CONNECTION_TYPE_RESPONSE = 2 +}; + +enum { + PROTOCOL_TYPE_HTTP1 = 0, + PROTOCOL_TYPE_WEBSOCKET = 1, + PROTOCOL_TYPE_HTTP2 = 2 +}; + + +#if defined(USE_HTTP2) +#if !defined(HTTP2_DYN_TABLE_SIZE) +#define HTTP2_DYN_TABLE_SIZE (256) +#endif + +struct mg_http2_connection { + uint32_t stream_id; + uint32_t dyn_table_size; + struct mg_header dyn_table[HTTP2_DYN_TABLE_SIZE]; +}; +#endif + + +struct mg_connection { + int connection_type; /* see CONNECTION_TYPE_* above */ + int protocol_type; /* see PROTOCOL_TYPE_*: 0=http/1.x, 1=ws, 2=http/2 */ + int request_state; /* 0: nothing sent, 1: header partially sent, 2: header + fully sent */ +#if defined(USE_HTTP2) + struct mg_http2_connection http2; +#endif + + struct mg_request_info request_info; + struct mg_response_info response_info; + + struct mg_context *phys_ctx; + struct mg_domain_context *dom_ctx; + +#if defined(USE_SERVER_STATS) + int conn_state; /* 0 = undef, numerical value may change in different + * versions. For the current definition, see + * mg_get_connection_info_impl */ +#endif + SSL *ssl; /* SSL descriptor */ + struct socket client; /* Connected client */ + time_t conn_birth_time; /* Time (wall clock) when connection was + * established */ +#if defined(USE_SERVER_STATS) + time_t conn_close_time; /* Time (wall clock) when connection was + * closed (or 0 if still open) */ + double processing_time; /* Processing time for one request. */ +#endif + struct timespec req_time; /* Time (since system start) when the request + * was received */ + int64_t num_bytes_sent; /* Total bytes sent to client */ + int64_t content_len; /* How many bytes of content can be read + * !is_chunked: Content-Length header value + * or -1 (until connection closed, + * not allowed for a request) + * is_chunked: >= 0, appended gradually + */ + int64_t consumed_content; /* How many bytes of content have been read */ + int is_chunked; /* Transfer-Encoding is chunked: + * 0 = not chunked, + * 1 = chunked, not yet, or some data read, + * 2 = chunked, has error, + * 3 = chunked, all data read except trailer, + * 4 = chunked, all data read + */ + char *buf; /* Buffer for received data */ + char *path_info; /* PATH_INFO part of the URL */ + + int must_close; /* 1 if connection must be closed */ + int accept_gzip; /* 1 if gzip encoding is accepted */ + int in_error_handler; /* 1 if in handler for user defined error + * pages */ +#if defined(USE_WEBSOCKET) + int in_websocket_handling; /* 1 if in read_websocket */ +#endif +#if defined(USE_ZLIB) && defined(USE_WEBSOCKET) \ + && defined(MG_EXPERIMENTAL_INTERFACES) + /* Parameters for websocket data compression according to rfc7692 */ + int websocket_deflate_server_max_windows_bits; + int websocket_deflate_client_max_windows_bits; + int websocket_deflate_server_no_context_takeover; + int websocket_deflate_client_no_context_takeover; + int websocket_deflate_initialized; + int websocket_deflate_flush; + z_stream websocket_deflate_state; + z_stream websocket_inflate_state; +#endif + int handled_requests; /* Number of requests handled by this connection + */ + int buf_size; /* Buffer size */ + int request_len; /* Size of the request + headers in a buffer */ + int data_len; /* Total size of data in a buffer */ + int status_code; /* HTTP reply status code, e.g. 200 */ + int throttle; /* Throttling, bytes/sec. <= 0 means no + * throttle */ + + time_t last_throttle_time; /* Last time throttled data was sent */ + int last_throttle_bytes; /* Bytes sent this second */ + pthread_mutex_t mutex; /* Used by mg_(un)lock_connection to ensure + * atomic transmissions for websockets */ +#if defined(USE_LUA) && defined(USE_WEBSOCKET) + void *lua_websocket_state; /* Lua_State for a websocket connection */ +#endif + + void *tls_user_ptr; /* User defined pointer in thread local storage, + * for quick access */ +}; + + +/* Directory entry */ +struct de { + char *file_name; + struct mg_file_stat file; +}; + + +#define mg_cry_internal(conn, fmt, ...) \ + mg_cry_internal_wrap(conn, NULL, __func__, __LINE__, fmt, __VA_ARGS__) + +#define mg_cry_ctx_internal(ctx, fmt, ...) \ + mg_cry_internal_wrap(NULL, ctx, __func__, __LINE__, fmt, __VA_ARGS__) + +static void mg_cry_internal_wrap(const struct mg_connection *conn, + struct mg_context *ctx, + const char *func, + unsigned line, + const char *fmt, + ...) PRINTF_ARGS(5, 6); + + +#if !defined(NO_THREAD_NAME) +#if defined(_WIN32) && defined(_MSC_VER) +/* Set the thread name for debugging purposes in Visual Studio + * http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx + */ +#pragma pack(push, 8) +typedef struct tagTHREADNAME_INFO { + DWORD dwType; /* Must be 0x1000. */ + LPCSTR szName; /* Pointer to name (in user addr space). */ + DWORD dwThreadID; /* Thread ID (-1=caller thread). */ + DWORD dwFlags; /* Reserved for future use, must be zero. */ +} THREADNAME_INFO; +#pragma pack(pop) + +#elif defined(__linux__) + +#include +#include +#if defined(ALTERNATIVE_QUEUE) +#include +#endif /* ALTERNATIVE_QUEUE */ + + +#if defined(ALTERNATIVE_QUEUE) + +static void * +event_create(void) +{ + int evhdl = eventfd(0, EFD_CLOEXEC); + int *ret; + + if (evhdl == -1) { + /* Linux uses -1 on error, Windows NULL. */ + /* However, Linux does not return 0 on success either. */ + return 0; + } + + ret = (int *)mg_malloc(sizeof(int)); + if (ret) { + *ret = evhdl; + } else { + (void)close(evhdl); + } + + return (void *)ret; +} + + +static int +event_wait(void *eventhdl) +{ + uint64_t u; + int evhdl, s; + + if (!eventhdl) { + /* error */ + return 0; + } + evhdl = *(int *)eventhdl; + + s = (int)read(evhdl, &u, sizeof(u)); + if (s != sizeof(u)) { + /* error */ + return 0; + } + (void)u; /* the value is not required */ + return 1; +} + + +static int +event_signal(void *eventhdl) +{ + uint64_t u = 1; + int evhdl, s; + + if (!eventhdl) { + /* error */ + return 0; + } + evhdl = *(int *)eventhdl; + + s = (int)write(evhdl, &u, sizeof(u)); + if (s != sizeof(u)) { + /* error */ + return 0; + } + return 1; +} + + +static void +event_destroy(void *eventhdl) +{ + int evhdl; + + if (!eventhdl) { + /* error */ + return; + } + evhdl = *(int *)eventhdl; + + close(evhdl); + mg_free(eventhdl); +} + + +#endif + +#endif + + +#if !defined(__linux__) && !defined(_WIN32) && defined(ALTERNATIVE_QUEUE) + +struct posix_event { + pthread_mutex_t mutex; + pthread_cond_t cond; + int signaled; +}; + + +static void * +event_create(void) +{ + struct posix_event *ret = mg_malloc(sizeof(struct posix_event)); + if (ret == 0) { + /* out of memory */ + return 0; + } + if (0 != pthread_mutex_init(&(ret->mutex), NULL)) { + /* pthread mutex not available */ + mg_free(ret); + return 0; + } + if (0 != pthread_cond_init(&(ret->cond), NULL)) { + /* pthread cond not available */ + pthread_mutex_destroy(&(ret->mutex)); + mg_free(ret); + return 0; + } + ret->signaled = 0; + return (void *)ret; +} + + +static int +event_wait(void *eventhdl) +{ + struct posix_event *ev = (struct posix_event *)eventhdl; + pthread_mutex_lock(&(ev->mutex)); + while (!ev->signaled) { + pthread_cond_wait(&(ev->cond), &(ev->mutex)); + } + ev->signaled = 0; + pthread_mutex_unlock(&(ev->mutex)); + return 1; +} + + +static int +event_signal(void *eventhdl) +{ + struct posix_event *ev = (struct posix_event *)eventhdl; + pthread_mutex_lock(&(ev->mutex)); + pthread_cond_signal(&(ev->cond)); + ev->signaled = 1; + pthread_mutex_unlock(&(ev->mutex)); + return 1; +} + + +static void +event_destroy(void *eventhdl) +{ + struct posix_event *ev = (struct posix_event *)eventhdl; + pthread_cond_destroy(&(ev->cond)); + pthread_mutex_destroy(&(ev->mutex)); + mg_free(ev); +} +#endif + + +static void +mg_set_thread_name(const char *name) +{ + char threadName[16 + 1]; /* 16 = Max. thread length in Linux/OSX/.. */ + + mg_snprintf( + NULL, NULL, threadName, sizeof(threadName), "civetweb-%s", name); + +#if defined(_WIN32) +#if defined(_MSC_VER) + /* Windows and Visual Studio Compiler */ + __try { + THREADNAME_INFO info; + info.dwType = 0x1000; + info.szName = threadName; + info.dwThreadID = ~0U; + info.dwFlags = 0; + + RaiseException(0x406D1388, + 0, + sizeof(info) / sizeof(ULONG_PTR), + (ULONG_PTR *)&info); + } __except (EXCEPTION_EXECUTE_HANDLER) { + } +#elif defined(__MINGW32__) + /* No option known to set thread name for MinGW known */ +#endif +#elif defined(_GNU_SOURCE) && defined(__GLIBC__) \ + && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 12))) + /* pthread_setname_np first appeared in glibc in version 2.12 */ +#if defined(__MACH__) && defined(__APPLE__) + /* OS X only current thread name can be changed */ + (void)pthread_setname_np(threadName); +#else + (void)pthread_setname_np(pthread_self(), threadName); +#endif +#elif defined(__linux__) + /* On Linux we can use the prctl function. + * When building for Linux Standard Base (LSB) use + * NO_THREAD_NAME. However, thread names are a big + * help for debugging, so the stadard is to set them. + */ + (void)prctl(PR_SET_NAME, threadName, 0, 0, 0); +#endif +} +#else /* !defined(NO_THREAD_NAME) */ +static void +mg_set_thread_name(const char *threadName) +{ +} +#endif + + +CIVETWEB_API const struct mg_option * +mg_get_valid_options(void) +{ + return config_options; +} + + +/* Do not open file (unused) */ +#define MG_FOPEN_MODE_NONE (0) + +/* Open file for read only access */ +#define MG_FOPEN_MODE_READ (1) + +/* Open file for writing, create and overwrite */ +#define MG_FOPEN_MODE_WRITE (2) + +/* Open file for writing, create and append */ +#define MG_FOPEN_MODE_APPEND (4) + + +static int +is_file_opened(const struct mg_file_access *fileacc) +{ + if (!fileacc) { + return 0; + } + + return (fileacc->fp != NULL); +} + + +#if !defined(NO_FILESYSTEMS) +static int mg_stat(const struct mg_connection *conn, + const char *path, + struct mg_file_stat *filep); + + +/* Reject files with special characters (for Windows) */ +static int +mg_path_suspicious(const struct mg_connection *conn, const char *path) +{ + const uint8_t *c = (const uint8_t *)path; + (void)conn; /* not used */ + + if ((c == NULL) || (c[0] == 0)) { + /* Null pointer or empty path --> suspicious */ + return 1; + } + +#if defined(_WIN32) + while (*c) { + if (*c < 32) { + /* Control character */ + return 1; + } + if ((*c == '>') || (*c == '<') || (*c == '|')) { + /* stdin/stdout redirection character */ + return 1; + } + if ((*c == '*') || (*c == '?')) { + /* Wildcard character */ + return 1; + } + if (*c == '"') { + /* Windows quotation */ + return 1; + } + c++; + } +#endif + + /* Nothing suspicious found */ + return 0; +} + + +/* mg_fopen will open a file either in memory or on the disk. + * The input parameter path is a string in UTF-8 encoding. + * The input parameter mode is MG_FOPEN_MODE_* + * On success, fp will be set in the output struct mg_file. + * All status members will also be set. + * The function returns 1 on success, 0 on error. */ +static int +mg_fopen(const struct mg_connection *conn, + const char *path, + int mode, + struct mg_file *filep) +{ + int found; + + if (!filep) { + return 0; + } + filep->access.fp = NULL; + + if (mg_path_suspicious(conn, path)) { + return 0; + } + + /* filep is initialized in mg_stat: all fields with memset to, + * some fields like size and modification date with values */ + found = mg_stat(conn, path, &(filep->stat)); + + if ((mode == MG_FOPEN_MODE_READ) && (!found)) { + /* file does not exist and will not be created */ + return 0; + } + +#if defined(_WIN32) + { + wchar_t wbuf[UTF16_PATH_MAX]; + path_to_unicode(conn, path, wbuf, ARRAY_SIZE(wbuf)); + switch (mode) { + case MG_FOPEN_MODE_READ: + filep->access.fp = _wfopen(wbuf, L"rb"); + break; + case MG_FOPEN_MODE_WRITE: + filep->access.fp = _wfopen(wbuf, L"wb"); + break; + case MG_FOPEN_MODE_APPEND: + filep->access.fp = _wfopen(wbuf, L"ab"); + break; + } + } +#else + /* Linux et al already use unicode. No need to convert. */ + switch (mode) { + case MG_FOPEN_MODE_READ: + filep->access.fp = fopen(path, "r"); + break; + case MG_FOPEN_MODE_WRITE: + filep->access.fp = fopen(path, "w"); + break; + case MG_FOPEN_MODE_APPEND: + filep->access.fp = fopen(path, "a"); + break; + } + +#endif + if (!found) { + /* File did not exist before fopen was called. + * Maybe it has been created now. Get stat info + * like creation time now. */ + found = mg_stat(conn, path, &(filep->stat)); + (void)found; + } + + /* return OK if file is opened */ + return (filep->access.fp != NULL); +} + + +/* return 0 on success, just like fclose */ +static int +mg_fclose(struct mg_file_access *fileacc) +{ + int ret = -1; + if (fileacc != NULL) { + if (fileacc->fp != NULL) { + ret = fclose(fileacc->fp); + } + /* reset all members of fileacc */ + memset(fileacc, 0, sizeof(*fileacc)); + } + return ret; +} +#endif /* NO_FILESYSTEMS */ + + +static void +mg_strlcpy(char *dst, const char *src, size_t n) +{ + for (; *src != '\0' && n > 1; n--) { + *dst++ = *src++; + } + *dst = '\0'; +} + + +static int +lowercase(const char *s) +{ + return tolower((unsigned char)*s); +} + + +CIVETWEB_API int +mg_strncasecmp(const char *s1, const char *s2, size_t len) +{ + int diff = 0; + + if (len > 0) { + do { + diff = lowercase(s1++) - lowercase(s2++); + } while (diff == 0 && s1[-1] != '\0' && --len > 0); + } + + return diff; +} + + +CIVETWEB_API int +mg_strcasecmp(const char *s1, const char *s2) +{ + int diff; + + do { + diff = lowercase(s1++) - lowercase(s2++); + } while (diff == 0 && s1[-1] != '\0'); + + return diff; +} + + +static char * +mg_strndup_ctx(const char *ptr, size_t len, struct mg_context *ctx) +{ + char *p; + (void)ctx; /* Avoid Visual Studio warning if USE_SERVER_STATS is not + * defined */ + + if ((p = (char *)mg_malloc_ctx(len + 1, ctx)) != NULL) { + mg_strlcpy(p, ptr, len + 1); + } + + return p; +} + + +static char * +mg_strdup_ctx(const char *str, struct mg_context *ctx) +{ + return mg_strndup_ctx(str, strlen(str), ctx); +} + +static char * +mg_strdup(const char *str) +{ + return mg_strndup_ctx(str, strlen(str), NULL); +} + + +static const char * +mg_strcasestr(const char *big_str, const char *small_str) +{ + size_t i, big_len = strlen(big_str), small_len = strlen(small_str); + + if (big_len >= small_len) { + for (i = 0; i <= (big_len - small_len); i++) { + if (mg_strncasecmp(big_str + i, small_str, small_len) == 0) { + return big_str + i; + } + } + } + + return NULL; +} + + +/* Return null terminated string of given maximum length. + * Report errors if length is exceeded. */ +static void +mg_vsnprintf(const struct mg_connection *conn, + int *truncated, + char *buf, + size_t buflen, + const char *fmt, + va_list ap) +{ + int n, ok; + + if (buflen == 0) { + if (truncated) { + *truncated = 1; + } + return; + } + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wformat-nonliteral" + /* Using fmt as a non-literal is intended here, since it is mostly called + * indirectly by mg_snprintf */ +#endif + + n = (int)vsnprintf_impl(buf, buflen, fmt, ap); + ok = (n >= 0) && ((size_t)n < buflen); + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + + if (ok) { + if (truncated) { + *truncated = 0; + } + } else { + if (truncated) { + *truncated = 1; + } + mg_cry_internal(conn, + "truncating vsnprintf buffer: [%.*s]", + (int)((buflen > 200) ? 200 : (buflen - 1)), + buf); + n = (int)buflen - 1; + } + buf[n] = '\0'; +} + + +static void +mg_snprintf(const struct mg_connection *conn, + int *truncated, + char *buf, + size_t buflen, + const char *fmt, + ...) +{ + va_list ap; + + va_start(ap, fmt); + mg_vsnprintf(conn, truncated, buf, buflen, fmt, ap); + va_end(ap); +} + + +static int +get_option_index(const char *name) +{ + int i; + + for (i = 0; config_options[i].name != NULL; i++) { + if (strcmp(config_options[i].name, name) == 0) { + return i; + } + } + return -1; +} + + +CIVETWEB_API const char * +mg_get_option(const struct mg_context *ctx, const char *name) +{ + int i; + if ((i = get_option_index(name)) == -1) { + return NULL; + } else if (!ctx || ctx->dd.config[i] == NULL) { + return ""; + } else { + return ctx->dd.config[i]; + } +} + +#define mg_get_option DO_NOT_USE_THIS_FUNCTION_INTERNALLY__access_directly + +CIVETWEB_API struct mg_context * +mg_get_context(const struct mg_connection *conn) +{ + return (conn == NULL) ? (struct mg_context *)NULL : (conn->phys_ctx); +} + + +CIVETWEB_API void * +mg_get_user_data(const struct mg_context *ctx) +{ + return (ctx == NULL) ? NULL : ctx->user_data; +} + + +CIVETWEB_API void * +mg_get_user_context_data(const struct mg_connection *conn) +{ + return mg_get_user_data(mg_get_context(conn)); +} + + +CIVETWEB_API void * +mg_get_thread_pointer(const struct mg_connection *conn) +{ + /* both methods should return the same pointer */ + if (conn) { + /* quick access, in case conn is known */ + return conn->tls_user_ptr; + } else { + /* otherwise get pointer from thread local storage (TLS) */ + struct mg_workerTLS *tls = + (struct mg_workerTLS *)pthread_getspecific(sTlsKey); + return tls->user_ptr; + } +} + + +CIVETWEB_API void +mg_set_user_connection_data(const struct mg_connection *const_conn, void *data) +{ + if (const_conn != NULL) { + /* Const cast, since "const struct mg_connection *" does not mean + * the connection object is not modified. Here "const" is used, + * to indicate mg_read/mg_write/mg_send/.. must not be called. */ + struct mg_connection *conn = (struct mg_connection *)const_conn; + conn->request_info.conn_data = data; + } +} + + +CIVETWEB_API void * +mg_get_user_connection_data(const struct mg_connection *conn) +{ + if (conn != NULL) { + return conn->request_info.conn_data; + } + return NULL; +} + + +CIVETWEB_API int +mg_get_server_ports(const struct mg_context *ctx, + int size, + struct mg_server_port *ports) +{ + int i, cnt = 0; + + if (size <= 0) { + return -1; + } + memset(ports, 0, sizeof(*ports) * (size_t)size); + if (!ctx) { + return -1; + } + if (!ctx->listening_sockets) { + return -1; + } + + for (i = 0; (i < size) && (i < (int)ctx->num_listening_sockets); i++) { + + ports[cnt].port = + ntohs(USA_IN_PORT_UNSAFE(&(ctx->listening_sockets[i].lsa))); + ports[cnt].is_ssl = ctx->listening_sockets[i].is_ssl; + ports[cnt].is_redirect = ctx->listening_sockets[i].ssl_redir; + ports[cnt].is_optional = ctx->listening_sockets[i].is_optional; + ports[cnt].is_bound = ctx->listening_sockets[i].sock != INVALID_SOCKET; + + if (ctx->listening_sockets[i].lsa.sa.sa_family == AF_INET) { + /* IPv4 */ + ports[cnt].protocol = 1; + cnt++; + } else if (ctx->listening_sockets[i].lsa.sa.sa_family == AF_INET6) { + /* IPv6 */ + ports[cnt].protocol = 3; + cnt++; + } + } + + return cnt; +} + + +#if defined(USE_X_DOM_SOCKET) && !defined(UNIX_DOMAIN_SOCKET_SERVER_NAME) +#define UNIX_DOMAIN_SOCKET_SERVER_NAME "*" +#endif + +static void +sockaddr_to_string(char *buf, size_t len, const union usa *usa) +{ + buf[0] = '\0'; + + if (!usa) { + return; + } + + if (usa->sa.sa_family == AF_INET) { + getnameinfo(&usa->sa, + sizeof(usa->sin), + buf, + (unsigned)len, + NULL, + 0, + NI_NUMERICHOST); + } +#if defined(USE_IPV6) + else if (usa->sa.sa_family == AF_INET6) { + getnameinfo(&usa->sa, + sizeof(usa->sin6), + buf, + (unsigned)len, + NULL, + 0, + NI_NUMERICHOST); + } +#endif +#if defined(USE_X_DOM_SOCKET) + else if (usa->sa.sa_family == AF_UNIX) { + /* TODO: Define a remote address for unix domain sockets. + * This code will always return "localhost", identical to http+tcp: + getnameinfo(&usa->sa, + sizeof(usa->sun), + buf, + (unsigned)len, + NULL, + 0, + NI_NUMERICHOST); + */ + mg_strlcpy(buf, UNIX_DOMAIN_SOCKET_SERVER_NAME, len); + } +#endif +} + + +/* Convert time_t to a string. According to RFC2616, Sec 14.18, this must be + * included in all responses other than 100, 101, 5xx. */ +static void +gmt_time_string(char *buf, size_t buf_len, time_t *t) +{ +#if !defined(REENTRANT_TIME) + struct tm *tm; + + tm = ((t != NULL) ? gmtime(t) : NULL); + if (tm != NULL) { +#else + struct tm _tm; + struct tm *tm = &_tm; + + if (t != NULL) { + gmtime_r(t, tm); +#endif + strftime(buf, buf_len, "%a, %d %b %Y %H:%M:%S GMT", tm); + } else { + mg_strlcpy(buf, "Thu, 01 Jan 1970 00:00:00 GMT", buf_len); + } +} + + +/* difftime for struct timespec. Return value is in seconds. */ +static double +mg_difftimespec(const struct timespec *ts_now, const struct timespec *ts_before) +{ + return (double)(ts_now->tv_nsec - ts_before->tv_nsec) * 1.0E-9 + + (double)(ts_now->tv_sec - ts_before->tv_sec); +} + + +#if defined(MG_EXTERNAL_FUNCTION_mg_cry_internal_impl) +static void mg_cry_internal_impl(const struct mg_connection *conn, + const char *func, + unsigned line, + const char *fmt, + va_list ap); +#include "external_mg_cry_internal_impl.inl" +#elif !defined(NO_FILESYSTEMS) + +/* Print error message to the opened error log stream. */ +static void +mg_cry_internal_impl(const struct mg_connection *conn, + const char *func, + unsigned line, + const char *fmt, + va_list ap) +{ + char buf[MG_BUF_LEN], src_addr[IP_ADDR_STR_LEN]; + struct mg_file fi; + time_t timestamp; + + /* Unused, in the RELEASE build */ + (void)func; + (void)line; + +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif + + IGNORE_UNUSED_RESULT(vsnprintf_impl(buf, sizeof(buf), fmt, ap)); + +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic pop +#endif + + buf[sizeof(buf) - 1] = 0; + + DEBUG_TRACE("mg_cry called from %s:%u: %s", func, line, buf); + + if (!conn) { + fputs(buf, stderr); + return; + } + + /* Do not lock when getting the callback value, here and below. + * I suppose this is fine, since function cannot disappear in the + * same way string option can. */ + if ((conn->phys_ctx->callbacks.log_message == NULL) + || (conn->phys_ctx->callbacks.log_message(conn, buf) == 0)) { + + if (conn->dom_ctx->config[ERROR_LOG_FILE] != NULL) { + if (mg_fopen(conn, + conn->dom_ctx->config[ERROR_LOG_FILE], + MG_FOPEN_MODE_APPEND, + &fi) + == 0) { + fi.access.fp = NULL; + } + } else { + fi.access.fp = NULL; + } + + if (fi.access.fp != NULL) { + flockfile(fi.access.fp); + timestamp = time(NULL); + + sockaddr_to_string(src_addr, sizeof(src_addr), &conn->client.rsa); + fprintf(fi.access.fp, + "[%010lu] [error] [client %s] ", + (unsigned long)timestamp, + src_addr); + + if (conn->request_info.request_method != NULL) { + fprintf(fi.access.fp, + "%s %s: ", + conn->request_info.request_method, + conn->request_info.request_uri + ? conn->request_info.request_uri + : ""); + } + + fprintf(fi.access.fp, "%s", buf); + fputc('\n', fi.access.fp); + fflush(fi.access.fp); + funlockfile(fi.access.fp); + (void)mg_fclose(&fi.access); /* Ignore errors. We can't call + * mg_cry here anyway ;-) */ + } + } +} +#else +#error Must either enable filesystems or provide a custom mg_cry_internal_impl implementation +#endif /* Externally provided function */ + + +/* Construct fake connection structure. Used for logging, if connection + * is not applicable at the moment of logging. */ +static struct mg_connection * +fake_connection(struct mg_connection *fc, struct mg_context *ctx) +{ + static const struct mg_connection conn_zero = {0}; + *fc = conn_zero; + fc->phys_ctx = ctx; + fc->dom_ctx = &(ctx->dd); + return fc; +} + + +static void +mg_cry_internal_wrap(const struct mg_connection *conn, + struct mg_context *ctx, + const char *func, + unsigned line, + const char *fmt, + ...) +{ + va_list ap; + va_start(ap, fmt); + if (!conn && ctx) { + struct mg_connection fc; + mg_cry_internal_impl(fake_connection(&fc, ctx), func, line, fmt, ap); + } else { + mg_cry_internal_impl(conn, func, line, fmt, ap); + } + va_end(ap); +} + + +CIVETWEB_API void +mg_cry(const struct mg_connection *conn, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + mg_cry_internal_impl(conn, "user", 0, fmt, ap); + va_end(ap); +} + + +#define mg_cry DO_NOT_USE_THIS_FUNCTION__USE_mg_cry_internal + + +CIVETWEB_API const char * +mg_version(void) +{ + return CIVETWEB_VERSION; +} + + +CIVETWEB_API const struct mg_request_info * +mg_get_request_info(const struct mg_connection *conn) +{ + if (!conn) { + return NULL; + } +#if defined(MG_ALLOW_USING_GET_REQUEST_INFO_FOR_RESPONSE) + if (conn->connection_type == CONNECTION_TYPE_RESPONSE) { + char txt[16]; + struct mg_workerTLS *tls = + (struct mg_workerTLS *)pthread_getspecific(sTlsKey); + + sprintf(txt, "%03i", conn->response_info.status_code); + if (strlen(txt) == 3) { + memcpy(tls->txtbuf, txt, 4); + } else { + strcpy(tls->txtbuf, "ERR"); + } + + ((struct mg_connection *)conn)->request_info.local_uri = + tls->txtbuf; /* use thread safe buffer */ + ((struct mg_connection *)conn)->request_info.local_uri_raw = + tls->txtbuf; /* use the same thread safe buffer */ + ((struct mg_connection *)conn)->request_info.request_uri = + tls->txtbuf; /* use the same thread safe buffer */ + + ((struct mg_connection *)conn)->request_info.num_headers = + conn->response_info.num_headers; + memcpy(((struct mg_connection *)conn)->request_info.http_headers, + conn->response_info.http_headers, + sizeof(conn->response_info.http_headers)); + } else +#endif + if (conn->connection_type != CONNECTION_TYPE_REQUEST) { + return NULL; + } + return &conn->request_info; +} + + +CIVETWEB_API const struct mg_response_info * +mg_get_response_info(const struct mg_connection *conn) +{ + if (!conn) { + return NULL; + } + if (conn->connection_type != CONNECTION_TYPE_RESPONSE) { + return NULL; + } + return &conn->response_info; +} + + +static const char * +get_proto_name(const struct mg_connection *conn) +{ +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + /* Depending on USE_WEBSOCKET and NO_SSL, some oft the protocols might be + * not supported. Clang raises an "unreachable code" warning for parts of ?: + * unreachable, but splitting into four different #ifdef clauses here is + * more complicated. + */ +#endif + + const struct mg_request_info *ri = &conn->request_info; + + const char *proto = ((conn->protocol_type == PROTOCOL_TYPE_WEBSOCKET) + ? (ri->is_ssl ? "wss" : "ws") + : (ri->is_ssl ? "https" : "http")); + + return proto; + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif +} + + +static int +mg_construct_local_link(const struct mg_connection *conn, + char *buf, + size_t buflen, + const char *define_proto, + int define_port, + const char *define_uri) +{ + if ((buflen < 1) || (buf == 0) || (conn == 0)) { + return -1; + } else { + int i, j; + int truncated = 0; + const struct mg_request_info *ri = &conn->request_info; + + const char *proto = + (define_proto != NULL) ? define_proto : get_proto_name(conn); + const char *uri = + (define_uri != NULL) + ? define_uri + : ((ri->request_uri != NULL) ? ri->request_uri : ri->local_uri); + int port = (define_port > 0) ? define_port : ri->server_port; + int default_port = 80; + char *uri_encoded; + size_t uri_encoded_len; + + if (uri == NULL) { + return -1; + } + + uri_encoded_len = strlen(uri) * 3 + 1; + uri_encoded = (char *)mg_malloc_ctx(uri_encoded_len, conn->phys_ctx); + if (uri_encoded == NULL) { + return -1; + } + mg_url_encode(uri, uri_encoded, uri_encoded_len); + + /* Directory separator should be preserved. */ + for (i = j = 0; uri_encoded[i]; j++) { + if (!strncmp(uri_encoded + i, "%2f", 3)) { + uri_encoded[j] = '/'; + i += 3; + } else { + uri_encoded[j] = uri_encoded[i++]; + } + } + uri_encoded[j] = '\0'; + +#if defined(USE_X_DOM_SOCKET) + if (conn->client.lsa.sa.sa_family == AF_UNIX) { + /* TODO: Define and document a link for UNIX domain sockets. */ + /* There seems to be no official standard for this. + * Common uses seem to be "httpunix://", "http.unix://" or + * "http+unix://" as a protocol definition string, followed by + * "localhost" or "127.0.0.1" or "/tmp/unix/path" or + * "%2Ftmp%2Funix%2Fpath" (url % encoded) or + * "localhost:%2Ftmp%2Funix%2Fpath" (domain socket path as port) or + * "" (completely skipping the server name part). In any case, the + * last part is the server local path. */ + const char *server_name = UNIX_DOMAIN_SOCKET_SERVER_NAME; + mg_snprintf(conn, + &truncated, + buf, + buflen, + "%s.unix://%s%s", + proto, + server_name, + ri->local_uri); + default_port = 0; + mg_free(uri_encoded); + return 0; + } +#endif + + if (define_proto) { + /* If we got a protocol name, use the default port accordingly. */ + if ((0 == strcmp(define_proto, "https")) + || (0 == strcmp(define_proto, "wss"))) { + default_port = 443; + } + } else if (ri->is_ssl) { + /* If we did not get a protocol name, use TLS as default if it is + * already used. */ + default_port = 443; + } + + { +#if defined(USE_IPV6) + int is_ipv6 = (conn->client.lsa.sa.sa_family == AF_INET6); +#endif + int auth_domain_check_enabled = + conn->dom_ctx->config[ENABLE_AUTH_DOMAIN_CHECK] + && (!mg_strcasecmp( + conn->dom_ctx->config[ENABLE_AUTH_DOMAIN_CHECK], "yes")); + + const char *server_domain = + conn->dom_ctx->config[AUTHENTICATION_DOMAIN]; + + char portstr[16]; + char server_ip[48]; + + if (port != default_port) { + sprintf(portstr, ":%u", (unsigned)port); + } else { + portstr[0] = 0; + } + + if (!auth_domain_check_enabled || !server_domain) { + + sockaddr_to_string(server_ip, + sizeof(server_ip), + &conn->client.lsa); + + server_domain = server_ip; + } + + mg_snprintf(conn, + &truncated, + buf, + buflen, +#if defined(USE_IPV6) + "%s://%s%s%s%s%s", + proto, + (is_ipv6 && (server_domain == server_ip)) ? "[" : "", + server_domain, + (is_ipv6 && (server_domain == server_ip)) ? "]" : "", +#else + "%s://%s%s%s", + proto, + server_domain, +#endif + portstr, + uri_encoded); + + mg_free(uri_encoded); + if (truncated) { + return -1; + } + return 0; + } + } +} + + +CIVETWEB_API int +mg_get_request_link(const struct mg_connection *conn, char *buf, size_t buflen) +{ + return mg_construct_local_link(conn, buf, buflen, NULL, -1, NULL); +} + + +/* Skip the characters until one of the delimiters characters found. + * 0-terminate resulting word. Skip the delimiter and following whitespaces. + * Advance pointer to buffer to the next word. Return found 0-terminated + * word. + * Delimiters can be quoted with quotechar. */ +static char * +skip_quoted(char **buf, + const char *delimiters, + const char *whitespace, + char quotechar) +{ + char *p, *begin_word, *end_word, *end_whitespace; + + begin_word = *buf; + end_word = begin_word + strcspn(begin_word, delimiters); + + /* Check for quotechar */ + if (end_word > begin_word) { + p = end_word - 1; + while (*p == quotechar) { + /* While the delimiter is quoted, look for the next delimiter. */ + /* This happens, e.g., in calls from parse_auth_header, + * if the user name contains a " character. */ + + /* If there is anything beyond end_word, copy it. */ + if (*end_word != '\0') { + size_t end_off = strcspn(end_word + 1, delimiters); + memmove(p, end_word, end_off + 1); + p += end_off; /* p must correspond to end_word - 1 */ + end_word += end_off + 1; + } else { + *p = '\0'; + break; + } + } + for (p++; p < end_word; p++) { + *p = '\0'; + } + } + + if (*end_word == '\0') { + *buf = end_word; + } else { + +#if defined(GCC_DIAGNOSTIC) + /* Disable spurious conversion warning for GCC */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif /* defined(GCC_DIAGNOSTIC) */ + + end_whitespace = end_word + strspn(&end_word[1], whitespace) + 1; + +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic pop +#endif /* defined(GCC_DIAGNOSTIC) */ + + for (p = end_word; p < end_whitespace; p++) { + *p = '\0'; + } + + *buf = end_whitespace; + } + + return begin_word; +} + + +/* Return HTTP header value, or NULL if not found. */ +static const char * +get_header(const struct mg_header *hdr, int num_hdr, const char *name) +{ + int i; + for (i = 0; i < num_hdr; i++) { + if (!mg_strcasecmp(name, hdr[i].name)) { + return hdr[i].value; + } + } + + return NULL; +} + + +/* Retrieve requested HTTP header multiple values, and return the number of + * found occurrences */ +static int +get_req_headers(const struct mg_request_info *ri, + const char *name, + const char **output, + int output_max_size) +{ + int i; + int cnt = 0; + if (ri) { + for (i = 0; i < ri->num_headers && cnt < output_max_size; i++) { + if (!mg_strcasecmp(name, ri->http_headers[i].name)) { + output[cnt++] = ri->http_headers[i].value; + } + } + } + return cnt; +} + + +CIVETWEB_API const char * +mg_get_header(const struct mg_connection *conn, const char *name) +{ + if (!conn) { + return NULL; + } + + if (conn->connection_type == CONNECTION_TYPE_REQUEST) { + return get_header(conn->request_info.http_headers, + conn->request_info.num_headers, + name); + } + if (conn->connection_type == CONNECTION_TYPE_RESPONSE) { + return get_header(conn->response_info.http_headers, + conn->response_info.num_headers, + name); + } + return NULL; +} + + +static const char * +get_http_version(const struct mg_connection *conn) +{ + if (!conn) { + return NULL; + } + + if (conn->connection_type == CONNECTION_TYPE_REQUEST) { + return conn->request_info.http_version; + } + if (conn->connection_type == CONNECTION_TYPE_RESPONSE) { + return conn->response_info.http_version; + } + return NULL; +} + + +/* A helper function for traversing a comma separated list of values. + * It returns a list pointer shifted to the next value, or NULL if the end + * of the list found. + * Value is stored in val vector. If value has form "x=y", then eq_val + * vector is initialized to point to the "y" part, and val vector length + * is adjusted to point only to "x". */ +static const char * +next_option(const char *list, struct vec *val, struct vec *eq_val) +{ + int end; + +reparse: + if (val == NULL || list == NULL || *list == '\0') { + /* End of the list */ + return NULL; + } + + /* Skip over leading LWS */ + while (*list == ' ' || *list == '\t') + list++; + + val->ptr = list; + if ((list = strchr(val->ptr, ',')) != NULL) { + /* Comma found. Store length and shift the list ptr */ + val->len = ((size_t)(list - val->ptr)); + list++; + } else { + /* This value is the last one */ + list = val->ptr + strlen(val->ptr); + val->len = ((size_t)(list - val->ptr)); + } + + /* Adjust length for trailing LWS */ + end = (int)val->len - 1; + while (end >= 0 && ((val->ptr[end] == ' ') || (val->ptr[end] == '\t'))) + end--; + val->len = (size_t)(end) + (size_t)(1); + + if (val->len == 0) { + /* Ignore any empty entries. */ + goto reparse; + } + + if (eq_val != NULL) { + /* Value has form "x=y", adjust pointers and lengths + * so that val points to "x", and eq_val points to "y". */ + eq_val->len = 0; + eq_val->ptr = (const char *)memchr(val->ptr, '=', val->len); + if (eq_val->ptr != NULL) { + eq_val->ptr++; /* Skip over '=' character */ + eq_val->len = ((size_t)(val->ptr - eq_val->ptr)) + val->len; + val->len = ((size_t)(eq_val->ptr - val->ptr)) - 1; + } + } + + return list; +} + + +/* A helper function for checking if a comma separated list of values + * contains + * the given option (case insensitvely). + * 'header' can be NULL, in which case false is returned. */ +static int +header_has_option(const char *header, const char *option) +{ + struct vec opt_vec; + struct vec eq_vec; + + DEBUG_ASSERT(option != NULL); + DEBUG_ASSERT(option[0] != '\0'); + + while ((header = next_option(header, &opt_vec, &eq_vec)) != NULL) { + if (mg_strncasecmp(option, opt_vec.ptr, opt_vec.len) == 0) + return 1; + } + + return 0; +} + + +/* Sorting function implemented in a separate file */ +#include "sort.inl" + +/* Pattern matching has been reimplemented in a new file */ +#include "match.inl" + + +/* HTTP 1.1 assumes keep alive if "Connection:" header is not set + * This function must tolerate situations when connection info is not + * set up, for example if request parsing failed. */ +static int +should_keep_alive(const struct mg_connection *conn) +{ + const char *http_version; + const char *header; + + /* First satisfy needs of the server */ + if ((conn == NULL) || conn->must_close) { + /* Close, if civetweb framework needs to close */ + return 0; + } + + if (mg_strcasecmp(conn->dom_ctx->config[ENABLE_KEEP_ALIVE], "yes") != 0) { + /* Close, if keep alive is not enabled */ + return 0; + } + + /* Check explicit wish of the client */ + header = mg_get_header(conn, "Connection"); + if (header) { + /* If there is a connection header from the client, obey */ + if (header_has_option(header, "keep-alive")) { + return 1; + } + return 0; + } + + /* Use default of the standard */ + http_version = get_http_version(conn); + if (http_version && (0 == strcmp(http_version, "1.1"))) { + /* HTTP 1.1 default is keep alive */ + return 1; + } + + /* HTTP 1.0 (and earlier) default is to close the connection */ + return 0; +} + + +static int +should_decode_url(const struct mg_connection *conn) +{ + if (!conn || !conn->dom_ctx) { + return 0; + } + + return (mg_strcasecmp(conn->dom_ctx->config[DECODE_URL], "yes") == 0); +} + + +static int +should_decode_query_string(const struct mg_connection *conn) +{ + if (!conn || !conn->dom_ctx) { + return 0; + } + + return (mg_strcasecmp(conn->dom_ctx->config[DECODE_QUERY_STRING], "yes") + == 0); +} + + +static const char * +suggest_connection_header(const struct mg_connection *conn) +{ + return should_keep_alive(conn) ? "keep-alive" : "close"; +} + + +#include "response.inl" + + +static void +send_no_cache_header(struct mg_connection *conn) +{ + /* Send all current and obsolete cache opt-out directives. */ + mg_response_header_add(conn, + "Cache-Control", + "no-cache, no-store, " + "must-revalidate, private, max-age=0", + -1); + mg_response_header_add(conn, "Expires", "0", -1); + + if (conn->protocol_type == PROTOCOL_TYPE_HTTP1) { + /* Obsolete, but still send it for HTTP/1.0 */ + mg_response_header_add(conn, "Pragma", "no-cache", -1); + } +} + + +static void +send_static_cache_header(struct mg_connection *conn) +{ +#if !defined(NO_CACHING) + int max_age; + char val[64]; + + const char *cache_control = + conn->dom_ctx->config[STATIC_FILE_CACHE_CONTROL]; + + /* If there is a full cache-control option configured,0 use it */ + if (cache_control != NULL) { + mg_response_header_add(conn, "Cache-Control", cache_control, -1); + return; + } + + /* Read the server config to check how long a file may be cached. + * The configuration is in seconds. */ + max_age = atoi(conn->dom_ctx->config[STATIC_FILE_MAX_AGE]); + if (max_age <= 0) { + /* 0 means "do not cache". All values <0 are reserved + * and may be used differently in the future. */ + /* If a file should not be cached, do not only send + * max-age=0, but also pragmas and Expires headers. */ + send_no_cache_header(conn); + return; + } + + /* Use "Cache-Control: max-age" instead of "Expires" header. + * Reason: see https://www.mnot.net/blog/2007/05/15/expires_max-age */ + /* See also https://www.mnot.net/cache_docs/ */ + /* According to RFC 2616, Section 14.21, caching times should not exceed + * one year. A year with 365 days corresponds to 31536000 seconds, a + * leap + * year to 31622400 seconds. For the moment, we just send whatever has + * been configured, still the behavior for >1 year should be considered + * as undefined. */ + mg_snprintf( + conn, NULL, val, sizeof(val), "max-age=%lu", (unsigned long)max_age); + mg_response_header_add(conn, "Cache-Control", val, -1); + +#else /* NO_CACHING */ + + send_no_cache_header(conn); +#endif /* !NO_CACHING */ +} + + +static void +send_additional_header(struct mg_connection *conn) +{ + const char *header = conn->dom_ctx->config[ADDITIONAL_HEADER]; + +#if !defined(NO_SSL) + if (conn->dom_ctx->config[STRICT_HTTPS_MAX_AGE]) { + long max_age = atol(conn->dom_ctx->config[STRICT_HTTPS_MAX_AGE]); + if (max_age >= 0) { + char val[64]; + mg_snprintf(conn, + NULL, + val, + sizeof(val), + "max-age=%lu", + (unsigned long)max_age); + mg_response_header_add(conn, "Strict-Transport-Security", val, -1); + } + } +#endif + + // Content-Security-Policy + + if (header && header[0]) { + mg_response_header_add_lines(conn, header); + } +} + + +static void +send_cors_header(struct mg_connection *conn) +{ + const char *origin_hdr = mg_get_header(conn, "Origin"); + const char *cors_orig_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_ORIGIN]; + const char *cors_cred_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_CREDENTIALS]; + const char *cors_hdr_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_HEADERS]; + const char *cors_exphdr_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_EXPOSE_HEADERS]; + const char *cors_meth_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_METHODS]; + const char *cors_repl_asterisk_with_orig_cfg = + conn->dom_ctx->config[REPLACE_ASTERISK_WITH_ORIGIN]; + + if (cors_orig_cfg && *cors_orig_cfg && origin_hdr && *origin_hdr + && cors_repl_asterisk_with_orig_cfg + && *cors_repl_asterisk_with_orig_cfg) { + int cors_repl_asterisk_with_orig = + mg_strcasecmp(cors_repl_asterisk_with_orig_cfg, "yes"); + + /* Cross-origin resource sharing (CORS), see + * http://www.html5rocks.com/en/tutorials/cors/, + * http://www.html5rocks.com/static/images/cors_server_flowchart.png + * CORS preflight is not supported for files. */ + if (cors_repl_asterisk_with_orig == 0 && cors_orig_cfg[0] == '*') { + mg_response_header_add(conn, + "Access-Control-Allow-Origin", + origin_hdr, + -1); + } else { + mg_response_header_add(conn, + "Access-Control-Allow-Origin", + cors_orig_cfg, + -1); + } + } + + if (cors_cred_cfg && *cors_cred_cfg && origin_hdr && *origin_hdr) { + /* Cross-origin resource sharing (CORS), see + * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials + */ + mg_response_header_add(conn, + "Access-Control-Allow-Credentials", + cors_cred_cfg, + -1); + } + + if (cors_hdr_cfg && *cors_hdr_cfg) { + mg_response_header_add(conn, + "Access-Control-Allow-Headers", + cors_hdr_cfg, + -1); + } + + if (cors_exphdr_cfg && *cors_exphdr_cfg) { + mg_response_header_add(conn, + "Access-Control-Expose-Headers", + cors_exphdr_cfg, + -1); + } + + if (cors_meth_cfg && *cors_meth_cfg) { + mg_response_header_add(conn, + "Access-Control-Allow-Methods", + cors_meth_cfg, + -1); + } +} + + +#if !defined(NO_FILESYSTEMS) +static void handle_file_based_request(struct mg_connection *conn, + const char *path, + struct mg_file *filep); +#endif /* NO_FILESYSTEMS */ + + +CIVETWEB_API const char * +mg_get_response_code_text(const struct mg_connection *conn, int response_code) +{ + /* See IANA HTTP status code assignment: + * http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml + */ + + switch (response_code) { + /* RFC2616 Section 10.1 - Informational 1xx */ + case 100: + return "Continue"; /* RFC2616 Section 10.1.1 */ + case 101: + return "Switching Protocols"; /* RFC2616 Section 10.1.2 */ + case 102: + return "Processing"; /* RFC2518 Section 10.1 */ + + /* RFC2616 Section 10.2 - Successful 2xx */ + case 200: + return "OK"; /* RFC2616 Section 10.2.1 */ + case 201: + return "Created"; /* RFC2616 Section 10.2.2 */ + case 202: + return "Accepted"; /* RFC2616 Section 10.2.3 */ + case 203: + return "Non-Authoritative Information"; /* RFC2616 Section 10.2.4 */ + case 204: + return "No Content"; /* RFC2616 Section 10.2.5 */ + case 205: + return "Reset Content"; /* RFC2616 Section 10.2.6 */ + case 206: + return "Partial Content"; /* RFC2616 Section 10.2.7 */ + case 207: + return "Multi-Status"; /* RFC2518 Section 10.2, RFC4918 Section 11.1 + */ + case 208: + return "Already Reported"; /* RFC5842 Section 7.1 */ + + case 226: + return "IM used"; /* RFC3229 Section 10.4.1 */ + + /* RFC2616 Section 10.3 - Redirection 3xx */ + case 300: + return "Multiple Choices"; /* RFC2616 Section 10.3.1 */ + case 301: + return "Moved Permanently"; /* RFC2616 Section 10.3.2 */ + case 302: + return "Found"; /* RFC2616 Section 10.3.3 */ + case 303: + return "See Other"; /* RFC2616 Section 10.3.4 */ + case 304: + return "Not Modified"; /* RFC2616 Section 10.3.5 */ + case 305: + return "Use Proxy"; /* RFC2616 Section 10.3.6 */ + case 307: + return "Temporary Redirect"; /* RFC2616 Section 10.3.8 */ + case 308: + return "Permanent Redirect"; /* RFC7238 Section 3 */ + + /* RFC2616 Section 10.4 - Client Error 4xx */ + case 400: + return "Bad Request"; /* RFC2616 Section 10.4.1 */ + case 401: + return "Unauthorized"; /* RFC2616 Section 10.4.2 */ + case 402: + return "Payment Required"; /* RFC2616 Section 10.4.3 */ + case 403: + return "Forbidden"; /* RFC2616 Section 10.4.4 */ + case 404: + return "Not Found"; /* RFC2616 Section 10.4.5 */ + case 405: + return "Method Not Allowed"; /* RFC2616 Section 10.4.6 */ + case 406: + return "Not Acceptable"; /* RFC2616 Section 10.4.7 */ + case 407: + return "Proxy Authentication Required"; /* RFC2616 Section 10.4.8 */ + case 408: + return "Request Time-out"; /* RFC2616 Section 10.4.9 */ + case 409: + return "Conflict"; /* RFC2616 Section 10.4.10 */ + case 410: + return "Gone"; /* RFC2616 Section 10.4.11 */ + case 411: + return "Length Required"; /* RFC2616 Section 10.4.12 */ + case 412: + return "Precondition Failed"; /* RFC2616 Section 10.4.13 */ + case 413: + return "Request Entity Too Large"; /* RFC2616 Section 10.4.14 */ + case 414: + return "Request-URI Too Large"; /* RFC2616 Section 10.4.15 */ + case 415: + return "Unsupported Media Type"; /* RFC2616 Section 10.4.16 */ + case 416: + return "Requested range not satisfiable"; /* RFC2616 Section 10.4.17 + */ + case 417: + return "Expectation Failed"; /* RFC2616 Section 10.4.18 */ + + case 421: + return "Misdirected Request"; /* RFC7540 Section 9.1.2 */ + case 422: + return "Unproccessable entity"; /* RFC2518 Section 10.3, RFC4918 + * Section 11.2 */ + case 423: + return "Locked"; /* RFC2518 Section 10.4, RFC4918 Section 11.3 */ + case 424: + return "Failed Dependency"; /* RFC2518 Section 10.5, RFC4918 + * Section 11.4 */ + + case 426: + return "Upgrade Required"; /* RFC 2817 Section 4 */ + + case 428: + return "Precondition Required"; /* RFC 6585, Section 3 */ + case 429: + return "Too Many Requests"; /* RFC 6585, Section 4 */ + + case 431: + return "Request Header Fields Too Large"; /* RFC 6585, Section 5 */ + + case 451: + return "Unavailable For Legal Reasons"; /* draft-tbray-http-legally-restricted-status-05, + * Section 3 */ + + /* RFC2616 Section 10.5 - Server Error 5xx */ + case 500: + return "Internal Server Error"; /* RFC2616 Section 10.5.1 */ + case 501: + return "Not Implemented"; /* RFC2616 Section 10.5.2 */ + case 502: + return "Bad Gateway"; /* RFC2616 Section 10.5.3 */ + case 503: + return "Service Unavailable"; /* RFC2616 Section 10.5.4 */ + case 504: + return "Gateway Time-out"; /* RFC2616 Section 10.5.5 */ + case 505: + return "HTTP Version not supported"; /* RFC2616 Section 10.5.6 */ + case 506: + return "Variant Also Negotiates"; /* RFC 2295, Section 8.1 */ + case 507: + return "Insufficient Storage"; /* RFC2518 Section 10.6, RFC4918 + * Section 11.5 */ + case 508: + return "Loop Detected"; /* RFC5842 Section 7.1 */ + + case 510: + return "Not Extended"; /* RFC 2774, Section 7 */ + case 511: + return "Network Authentication Required"; /* RFC 6585, Section 6 */ + + /* Other status codes, not shown in the IANA HTTP status code + * assignment. + * E.g., "de facto" standards due to common use, ... */ + case 418: + return "I am a teapot"; /* RFC2324 Section 2.3.2 */ + case 419: + return "Authentication Timeout"; /* common use */ + case 420: + return "Enhance Your Calm"; /* common use */ + case 440: + return "Login Timeout"; /* common use */ + case 509: + return "Bandwidth Limit Exceeded"; /* common use */ + + default: + /* This error code is unknown. This should not happen. */ + if (conn) { + mg_cry_internal(conn, + "Unknown HTTP response code: %u", + response_code); + } + + /* Return at least a category according to RFC 2616 Section 10. */ + if (response_code >= 100 && response_code < 200) { + /* Unknown informational status code */ + return "Information"; + } + if (response_code >= 200 && response_code < 300) { + /* Unknown success code */ + return "Success"; + } + if (response_code >= 300 && response_code < 400) { + /* Unknown redirection code */ + return "Redirection"; + } + if (response_code >= 400 && response_code < 500) { + /* Unknown request error code */ + return "Client Error"; + } + if (response_code >= 500 && response_code < 600) { + /* Unknown server error code */ + return "Server Error"; + } + + /* Response code not even within reasonable range */ + return ""; + } +} + + +static int +mg_send_http_error_impl(struct mg_connection *conn, + int status, + const char *fmt, + va_list args) +{ + char errmsg_buf[MG_BUF_LEN]; + va_list ap; + int has_body; + +#if !defined(NO_FILESYSTEMS) + char path_buf[UTF8_PATH_MAX]; + int len, i, page_handler_found, scope, truncated; + const char *error_handler = NULL; + struct mg_file error_page_file = STRUCT_FILE_INITIALIZER; + const char *error_page_file_ext, *tstr; +#endif /* NO_FILESYSTEMS */ + int handled_by_callback = 0; + + if ((conn == NULL) || (fmt == NULL)) { + return -2; + } + + /* Set status (for log) */ + conn->status_code = status; + + /* Errors 1xx, 204 and 304 MUST NOT send a body */ + has_body = ((status > 199) && (status != 204) && (status != 304)); + + /* Prepare message in buf, if required */ + if (has_body + || (!conn->in_error_handler + && (conn->phys_ctx->callbacks.http_error != NULL))) { + /* Store error message in errmsg_buf */ + va_copy(ap, args); + mg_vsnprintf(conn, NULL, errmsg_buf, sizeof(errmsg_buf), fmt, ap); + va_end(ap); + /* In a debug build, print all html errors */ + DEBUG_TRACE("Error %i - [%s]", status, errmsg_buf); + } + + /* If there is a http_error callback, call it. + * But don't do it recursively, if callback calls mg_send_http_error again. + */ + if (!conn->in_error_handler + && (conn->phys_ctx->callbacks.http_error != NULL)) { + /* Mark in_error_handler to avoid recursion and call user callback. */ + conn->in_error_handler = 1; + handled_by_callback = + (conn->phys_ctx->callbacks.http_error(conn, status, errmsg_buf) + == 0); + conn->in_error_handler = 0; + } + + if (!handled_by_callback) { + /* Check for recursion */ + if (conn->in_error_handler) { + DEBUG_TRACE( + "Recursion when handling error %u - fall back to default", + status); +#if !defined(NO_FILESYSTEMS) + } else { + /* Send user defined error pages, if defined */ + error_handler = conn->dom_ctx->config[ERROR_PAGES]; + error_page_file_ext = conn->dom_ctx->config[INDEX_FILES]; + page_handler_found = 0; + + if (error_handler != NULL) { + for (scope = 1; (scope <= 3) && !page_handler_found; scope++) { + switch (scope) { + case 1: /* Handler for specific error, e.g. 404 error */ + mg_snprintf(conn, + &truncated, + path_buf, + sizeof(path_buf) - 32, + "%serror%03u.", + error_handler, + status); + break; + case 2: /* Handler for error group, e.g., 5xx error + * handler + * for all server errors (500-599) */ + mg_snprintf(conn, + &truncated, + path_buf, + sizeof(path_buf) - 32, + "%serror%01uxx.", + error_handler, + status / 100); + break; + default: /* Handler for all errors */ + mg_snprintf(conn, + &truncated, + path_buf, + sizeof(path_buf) - 32, + "%serror.", + error_handler); + break; + } + + /* String truncation in buf may only occur if + * error_handler is too long. This string is + * from the config, not from a client. */ + (void)truncated; + + /* The following code is redundant, but it should avoid + * false positives in static source code analyzers and + * vulnerability scanners. + */ + path_buf[sizeof(path_buf) - 32] = 0; + len = (int)strlen(path_buf); + if (len > (int)sizeof(path_buf) - 32) { + len = (int)sizeof(path_buf) - 32; + } + + /* Start with the file extension from the configuration. */ + tstr = strchr(error_page_file_ext, '.'); + + while (tstr) { + for (i = 1; + (i < 32) && (tstr[i] != 0) && (tstr[i] != ','); + i++) { + /* buffer overrun is not possible here, since + * (i < 32) && (len < sizeof(path_buf) - 32) + * ==> (i + len) < sizeof(path_buf) */ + path_buf[len + i - 1] = tstr[i]; + } + /* buffer overrun is not possible here, since + * (i <= 32) && (len < sizeof(path_buf) - 32) + * ==> (i + len) <= sizeof(path_buf) */ + path_buf[len + i - 1] = 0; + + if (mg_stat(conn, path_buf, &error_page_file.stat)) { + DEBUG_TRACE("Check error page %s - found", + path_buf); + page_handler_found = 1; + break; + } + DEBUG_TRACE("Check error page %s - not found", + path_buf); + + /* Continue with the next file extension from the + * configuration (if there is a next one). */ + tstr = strchr(tstr + i, '.'); + } + } + } + + if (page_handler_found) { + conn->in_error_handler = 1; + handle_file_based_request(conn, path_buf, &error_page_file); + conn->in_error_handler = 0; + return 0; + } +#endif /* NO_FILESYSTEMS */ + } + + /* No custom error page. Send default error page. */ + conn->must_close = 1; + mg_response_header_start(conn, status); + send_no_cache_header(conn); + send_additional_header(conn); + send_cors_header(conn); + if (has_body) { + mg_response_header_add(conn, + "Content-Type", + "text/plain; charset=utf-8", + -1); + } + mg_response_header_send(conn); + + /* HTTP responses 1xx, 204 and 304 MUST NOT send a body */ + if (has_body) { + /* For other errors, send a generic error message. */ + const char *status_text = mg_get_response_code_text(conn, status); + mg_printf(conn, "Error %d: %s\n", status, status_text); + mg_write(conn, errmsg_buf, strlen(errmsg_buf)); + + } else { + /* No body allowed. Close the connection. */ + DEBUG_TRACE("Error %i", status); + } + } + return 0; +} + + +CIVETWEB_API int +mg_send_http_error(struct mg_connection *conn, int status, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = mg_send_http_error_impl(conn, status, fmt, ap); + va_end(ap); + + return ret; +} + + +CIVETWEB_API int +mg_send_http_ok(struct mg_connection *conn, + const char *mime_type, + long long content_length) +{ + if ((mime_type == NULL) || (*mime_type == 0)) { + /* No content type defined: default to text/html */ + mime_type = "text/html"; + } + + mg_response_header_start(conn, 200); + send_no_cache_header(conn); + send_additional_header(conn); + send_cors_header(conn); + mg_response_header_add(conn, "Content-Type", mime_type, -1); + if (content_length < 0) { + /* Size not known. Use chunked encoding (HTTP/1.x) */ + if (conn->protocol_type == PROTOCOL_TYPE_HTTP1) { + /* Only HTTP/1.x defines "chunked" encoding, HTTP/2 does not*/ + mg_response_header_add(conn, "Transfer-Encoding", "chunked", -1); + } + } else { + char len[32]; + int trunc = 0; + mg_snprintf(conn, + &trunc, + len, + sizeof(len), + "%" UINT64_FMT, + (uint64_t)content_length); + if (!trunc) { + /* Since 32 bytes is enough to hold any 64 bit decimal number, + * !trunc is always true */ + mg_response_header_add(conn, "Content-Length", len, -1); + } + } + mg_response_header_send(conn); + + return 0; +} + + +CIVETWEB_API int +mg_send_http_redirect(struct mg_connection *conn, + const char *target_url, + int redirect_code) +{ + /* Send a 30x redirect response. + * + * Redirect types (status codes): + * + * Status | Perm/Temp | Method | Version + * 301 | permanent | POST->GET undefined | HTTP/1.0 + * 302 | temporary | POST->GET undefined | HTTP/1.0 + * 303 | temporary | always use GET | HTTP/1.1 + * 307 | temporary | always keep method | HTTP/1.1 + * 308 | permanent | always keep method | HTTP/1.1 + */ + +#if defined(MG_SEND_REDIRECT_BODY) + char redirect_body[MG_BUF_LEN]; + size_t content_len = 0; + char content_len_text[32]; +#endif + + /* In case redirect_code=0, use 307. */ + if (redirect_code == 0) { + redirect_code = 307; + } + + /* In case redirect_code is none of the above, return error. */ + if ((redirect_code != 301) && (redirect_code != 302) + && (redirect_code != 303) && (redirect_code != 307) + && (redirect_code != 308)) { + /* Parameter error */ + return -2; + } + + /* If target_url is not defined, redirect to "/". */ + if ((target_url == NULL) || (*target_url == 0)) { + target_url = "/"; + } + +#if defined(MG_SEND_REDIRECT_BODY) + /* TODO: condition name? */ + + /* Prepare a response body with a hyperlink. + * + * According to RFC2616 (and RFC1945 before): + * Unless the request method was HEAD, the entity of the + * response SHOULD contain a short hypertext note with a hyperlink to + * the new URI(s). + * + * However, this response body is not useful in M2M communication. + * Probably the original reason in the RFC was, clients not supporting + * a 30x HTTP redirect could still show the HTML page and let the user + * press the link. Since current browsers support 30x HTTP, the additional + * HTML body does not seem to make sense anymore. + * + * The new RFC7231 (Section 6.4) does no longer recommend it ("SHOULD"), + * but it only notes: + * The server's response payload usually contains a short + * hypertext note with a hyperlink to the new URI(s). + * + * Deactivated by default. If you need the 30x body, set the define. + */ + mg_snprintf( + conn, + NULL /* ignore truncation */, + redirect_body, + sizeof(redirect_body), + "%s%s", + redirect_text, + target_url, + target_url); + content_len = strlen(reply); + sprintf(content_len_text, "%lu", (unsigned long)content_len); +#endif + + /* Send all required headers */ + mg_response_header_start(conn, redirect_code); + mg_response_header_add(conn, "Location", target_url, -1); + if ((redirect_code == 301) || (redirect_code == 308)) { + /* Permanent redirect */ + send_static_cache_header(conn); + } else { + /* Temporary redirect */ + send_no_cache_header(conn); + } + send_additional_header(conn); + send_cors_header(conn); +#if defined(MG_SEND_REDIRECT_BODY) + mg_response_header_add(conn, "Content-Type", "text/html", -1); + mg_response_header_add(conn, "Content-Length", content_len_text, -1); +#else + mg_response_header_add(conn, "Content-Length", "0", 1); +#endif + mg_response_header_send(conn); + +#if defined(MG_SEND_REDIRECT_BODY) + /* Send response body */ + /* ... unless it is a HEAD request */ + if (0 != strcmp(conn->request_info.request_method, "HEAD")) { + ret = mg_write(conn, redirect_body, content_len); + } +#endif + + return 1; +} + + +#if defined(_WIN32) +/* Create substitutes for POSIX functions in Win32. */ + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#endif + + +static int +pthread_mutex_init(pthread_mutex_t *mutex, void *unused) +{ + (void)unused; + /* Always initialize as PTHREAD_MUTEX_RECURSIVE */ + InitializeCriticalSection(&mutex->sec); + return 0; +} + + +static int +pthread_mutex_destroy(pthread_mutex_t *mutex) +{ + DeleteCriticalSection(&mutex->sec); + return 0; +} + + +static int +pthread_mutex_lock(pthread_mutex_t *mutex) +{ + EnterCriticalSection(&mutex->sec); + return 0; +} + + +static int +pthread_mutex_unlock(pthread_mutex_t *mutex) +{ + LeaveCriticalSection(&mutex->sec); + return 0; +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_cond_init(pthread_cond_t *cv, const void *unused) +{ + (void)unused; + (void)pthread_mutex_init(&cv->threadIdSec, &pthread_mutex_attr); + cv->waiting_thread = NULL; + return 0; +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_cond_timedwait(pthread_cond_t *cv, + pthread_mutex_t *mutex, + FUNCTION_MAY_BE_UNUSED const struct timespec *abstime) +{ + struct mg_workerTLS **ptls, + *tls = (struct mg_workerTLS *)pthread_getspecific(sTlsKey); + int ok; + uint64_t nsnow, nswaitabs; + int64_t nswaitrel; + DWORD mswaitrel; + + pthread_mutex_lock(&cv->threadIdSec); + /* Add this thread to cv's waiting list */ + ptls = &cv->waiting_thread; + for (; *ptls != NULL; ptls = &(*ptls)->next_waiting_thread) + ; + tls->next_waiting_thread = NULL; + *ptls = tls; + pthread_mutex_unlock(&cv->threadIdSec); + + if (abstime) { + nsnow = mg_get_current_time_ns(); + nswaitabs = + (((uint64_t)abstime->tv_sec) * 1000000000) + abstime->tv_nsec; + nswaitrel = nswaitabs - nsnow; + if (nswaitrel < 0) { + nswaitrel = 0; + } + mswaitrel = (DWORD)(nswaitrel / 1000000); + } else { + mswaitrel = (DWORD)INFINITE; + } + + pthread_mutex_unlock(mutex); + ok = (WAIT_OBJECT_0 + == WaitForSingleObject(tls->pthread_cond_helper_mutex, mswaitrel)); + if (!ok) { + ok = 1; + pthread_mutex_lock(&cv->threadIdSec); + ptls = &cv->waiting_thread; + for (; *ptls != NULL; ptls = &(*ptls)->next_waiting_thread) { + if (*ptls == tls) { + *ptls = tls->next_waiting_thread; + ok = 0; + break; + } + } + pthread_mutex_unlock(&cv->threadIdSec); + if (ok) { + WaitForSingleObject(tls->pthread_cond_helper_mutex, + (DWORD)INFINITE); + } + } + /* This thread has been removed from cv's waiting list */ + pthread_mutex_lock(mutex); + + return ok ? 0 : -1; +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_cond_wait(pthread_cond_t *cv, pthread_mutex_t *mutex) +{ + return pthread_cond_timedwait(cv, mutex, NULL); +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_cond_signal(pthread_cond_t *cv) +{ + HANDLE wkup = NULL; + BOOL ok = FALSE; + + pthread_mutex_lock(&cv->threadIdSec); + if (cv->waiting_thread) { + wkup = cv->waiting_thread->pthread_cond_helper_mutex; + cv->waiting_thread = cv->waiting_thread->next_waiting_thread; + + ok = SetEvent(wkup); + DEBUG_ASSERT(ok); + } + pthread_mutex_unlock(&cv->threadIdSec); + + return ok ? 0 : 1; +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_cond_broadcast(pthread_cond_t *cv) +{ + pthread_mutex_lock(&cv->threadIdSec); + while (cv->waiting_thread) { + pthread_cond_signal(cv); + } + pthread_mutex_unlock(&cv->threadIdSec); + + return 0; +} + + +FUNCTION_MAY_BE_UNUSED +static int +pthread_cond_destroy(pthread_cond_t *cv) +{ + pthread_mutex_lock(&cv->threadIdSec); + DEBUG_ASSERT(cv->waiting_thread == NULL); + pthread_mutex_unlock(&cv->threadIdSec); + pthread_mutex_destroy(&cv->threadIdSec); + + return 0; +} + + +#if defined(ALTERNATIVE_QUEUE) +FUNCTION_MAY_BE_UNUSED +static void * +event_create(void) +{ + return (void *)CreateEvent(NULL, FALSE, FALSE, NULL); +} + + +FUNCTION_MAY_BE_UNUSED +static int +event_wait(void *eventhdl) +{ + int res = WaitForSingleObject((HANDLE)eventhdl, (DWORD)INFINITE); + return (res == WAIT_OBJECT_0); +} + + +FUNCTION_MAY_BE_UNUSED +static int +event_signal(void *eventhdl) +{ + return (int)SetEvent((HANDLE)eventhdl); +} + + +FUNCTION_MAY_BE_UNUSED +static void +event_destroy(void *eventhdl) +{ + CloseHandle((HANDLE)eventhdl); +} +#endif + + +#if defined(GCC_DIAGNOSTIC) +/* Enable unused function warning again */ +#pragma GCC diagnostic pop +#endif + + +/* For Windows, change all slashes to backslashes in path names. */ +static void +change_slashes_to_backslashes(char *path) +{ + int i; + + for (i = 0; path[i] != '\0'; i++) { + if (path[i] == '/') { + path[i] = '\\'; + } + + /* remove double backslash (check i > 0 to preserve UNC paths, + * like \\server\file.txt) */ + if ((i > 0) && (path[i] == '\\')) { + while ((path[i + 1] == '\\') || (path[i + 1] == '/')) { + (void)memmove(path + i + 1, path + i + 2, strlen(path + i + 1)); + } + } + } +} + + +static int +mg_wcscasecmp(const wchar_t *s1, const wchar_t *s2) +{ + int diff; + + do { + diff = ((*s1 >= L'A') && (*s1 <= L'Z') ? (*s1 - L'A' + L'a') : *s1) + - ((*s2 >= L'A') && (*s2 <= L'Z') ? (*s2 - L'A' + L'a') : *s2); + s1++; + s2++; + } while ((diff == 0) && (s1[-1] != L'\0')); + + return diff; +} + + +/* Encode 'path' which is assumed UTF-8 string, into UNICODE string. + * wbuf and wbuf_len is a target buffer and its length. */ +static void +path_to_unicode(const struct mg_connection *conn, + const char *path, + wchar_t *wbuf, + size_t wbuf_len) +{ + char buf[UTF8_PATH_MAX], buf2[UTF8_PATH_MAX]; + wchar_t wbuf2[UTF16_PATH_MAX + 1]; + DWORD long_len, err; + int (*fcompare)(const wchar_t *, const wchar_t *) = mg_wcscasecmp; + + mg_strlcpy(buf, path, sizeof(buf)); + change_slashes_to_backslashes(buf); + + /* Convert to Unicode and back. If doubly-converted string does not + * match the original, something is fishy, reject. */ + memset(wbuf, 0, wbuf_len * sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0, buf, -1, wbuf, (int)wbuf_len); + WideCharToMultiByte( + CP_UTF8, 0, wbuf, (int)wbuf_len, buf2, sizeof(buf2), NULL, NULL); + if (strcmp(buf, buf2) != 0) { + wbuf[0] = L'\0'; + } + + /* Windows file systems are not case sensitive, but you can still use + * uppercase and lowercase letters (on all modern file systems). + * The server can check if the URI uses the same upper/lowercase + * letters an the file system, effectively making Windows servers + * case sensitive (like Linux servers are). It is still not possible + * to use two files with the same name in different cases on Windows + * (like /a and /A) - this would be possible in Linux. + * As a default, Windows is not case sensitive, but the case sensitive + * file name check can be activated by an additional configuration. */ + if (conn) { + if (conn->dom_ctx->config[CASE_SENSITIVE_FILES] + && !mg_strcasecmp(conn->dom_ctx->config[CASE_SENSITIVE_FILES], + "yes")) { + /* Use case sensitive compare function */ + fcompare = wcscmp; + } + } + (void)conn; /* conn is currently unused */ + + /* Only accept a full file path, not a Windows short (8.3) path. */ + memset(wbuf2, 0, ARRAY_SIZE(wbuf2) * sizeof(wchar_t)); + long_len = GetLongPathNameW(wbuf, wbuf2, ARRAY_SIZE(wbuf2) - 1); + if (long_len == 0) { + err = GetLastError(); + if (err == ERROR_FILE_NOT_FOUND) { + /* File does not exist. This is not always a problem here. */ + return; + } + } + if ((long_len >= ARRAY_SIZE(wbuf2)) || (fcompare(wbuf, wbuf2) != 0)) { + /* Short name is used. */ + wbuf[0] = L'\0'; + } +} + + +#if !defined(NO_FILESYSTEMS) +/* Get file information, return 1 if file exists, 0 if not */ +static int +mg_stat(const struct mg_connection *conn, + const char *path, + struct mg_file_stat *filep) +{ + wchar_t wbuf[UTF16_PATH_MAX]; + WIN32_FILE_ATTRIBUTE_DATA info; + time_t creation_time; + size_t len; + + if (!filep) { + return 0; + } + memset(filep, 0, sizeof(*filep)); + + if (mg_path_suspicious(conn, path)) { + return 0; + } + + path_to_unicode(conn, path, wbuf, ARRAY_SIZE(wbuf)); + /* Windows happily opens files with some garbage at the end of file name. + * For example, fopen("a.cgi ", "r") on Windows successfully opens + * "a.cgi", despite one would expect an error back. */ + len = strlen(path); + if ((len > 0) && (path[len - 1] != ' ') && (path[len - 1] != '.') + && (GetFileAttributesExW(wbuf, GetFileExInfoStandard, &info) != 0)) { + filep->size = MAKEUQUAD(info.nFileSizeLow, info.nFileSizeHigh); + filep->last_modified = + SYS2UNIX_TIME(info.ftLastWriteTime.dwLowDateTime, + info.ftLastWriteTime.dwHighDateTime); + + /* On Windows, the file creation time can be higher than the + * modification time, e.g. when a file is copied. + * Since the Last-Modified timestamp is used for caching + * it should be based on the most recent timestamp. */ + creation_time = SYS2UNIX_TIME(info.ftCreationTime.dwLowDateTime, + info.ftCreationTime.dwHighDateTime); + if (creation_time > filep->last_modified) { + filep->last_modified = creation_time; + } + + filep->is_directory = info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; + return 1; + } + + return 0; +} +#endif + + +static int +mg_remove(const struct mg_connection *conn, const char *path) +{ + wchar_t wbuf[UTF16_PATH_MAX]; + path_to_unicode(conn, path, wbuf, ARRAY_SIZE(wbuf)); + return DeleteFileW(wbuf) ? 0 : -1; +} + + +static int +mg_mkdir(const struct mg_connection *conn, const char *path, int mode) +{ + wchar_t wbuf[UTF16_PATH_MAX]; + (void)mode; + path_to_unicode(conn, path, wbuf, ARRAY_SIZE(wbuf)); + return CreateDirectoryW(wbuf, NULL) ? 0 : -1; +} + + +/* Create substitutes for POSIX functions in Win32. */ + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#endif + + +/* Implementation of POSIX opendir/closedir/readdir for Windows. */ +FUNCTION_MAY_BE_UNUSED +static DIR * +mg_opendir(const struct mg_connection *conn, const char *name) +{ + DIR *dir = NULL; + wchar_t wpath[UTF16_PATH_MAX]; + DWORD attrs; + + if (name == NULL) { + SetLastError(ERROR_BAD_ARGUMENTS); + } else if ((dir = (DIR *)mg_malloc(sizeof(*dir))) == NULL) { + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + } else { + path_to_unicode(conn, name, wpath, ARRAY_SIZE(wpath)); + attrs = GetFileAttributesW(wpath); + if ((wcslen(wpath) + 2 < ARRAY_SIZE(wpath)) && (attrs != 0xFFFFFFFF) + && ((attrs & FILE_ATTRIBUTE_DIRECTORY) != 0)) { + (void)wcscat(wpath, L"\\*"); + dir->handle = FindFirstFileW(wpath, &dir->info); + dir->result.d_name[0] = '\0'; + } else { + mg_free(dir); + dir = NULL; + } + } + + return dir; +} + + +FUNCTION_MAY_BE_UNUSED +static int +mg_closedir(DIR *dir) +{ + int result = 0; + + if (dir != NULL) { + if (dir->handle != INVALID_HANDLE_VALUE) + result = FindClose(dir->handle) ? 0 : -1; + + mg_free(dir); + } else { + result = -1; + SetLastError(ERROR_BAD_ARGUMENTS); + } + + return result; +} + + +FUNCTION_MAY_BE_UNUSED +static struct dirent * +mg_readdir(DIR *dir) +{ + struct dirent *result = 0; + + if (dir) { + if (dir->handle != INVALID_HANDLE_VALUE) { + result = &dir->result; + (void)WideCharToMultiByte(CP_UTF8, + 0, + dir->info.cFileName, + -1, + result->d_name, + sizeof(result->d_name), + NULL, + NULL); + + if (!FindNextFileW(dir->handle, &dir->info)) { + (void)FindClose(dir->handle); + dir->handle = INVALID_HANDLE_VALUE; + } + + } else { + SetLastError(ERROR_FILE_NOT_FOUND); + } + } else { + SetLastError(ERROR_BAD_ARGUMENTS); + } + + return result; +} + + +#if !defined(HAVE_POLL) +#undef POLLIN +#undef POLLPRI +#undef POLLOUT +#undef POLLERR +#define POLLIN (1) /* Data ready - read will not block. */ +#define POLLPRI (2) /* Priority data ready. */ +#define POLLOUT (4) /* Send queue not full - write will not block. */ +#define POLLERR (8) /* Error event */ + +FUNCTION_MAY_BE_UNUSED +static int +poll(struct mg_pollfd *pfd, unsigned int n, int milliseconds) +{ + struct timeval tv; + fd_set rset; + fd_set wset; + fd_set eset; + unsigned int i; + int result; + SOCKET maxfd = 0; + + memset(&tv, 0, sizeof(tv)); + tv.tv_sec = milliseconds / 1000; + tv.tv_usec = (milliseconds % 1000) * 1000; + FD_ZERO(&rset); + FD_ZERO(&wset); + FD_ZERO(&eset); + + for (i = 0; i < n; i++) { + if (pfd[i].events & (POLLIN | POLLOUT | POLLERR)) { + if (pfd[i].events & POLLIN) { + FD_SET(pfd[i].fd, &rset); + } + if (pfd[i].events & POLLOUT) { + FD_SET(pfd[i].fd, &wset); + } + /* Check for errors for any FD in the set */ + FD_SET(pfd[i].fd, &eset); + } + pfd[i].revents = 0; + + if (pfd[i].fd > maxfd) { + maxfd = pfd[i].fd; + } + } + + if ((result = select((int)maxfd + 1, &rset, &wset, &eset, &tv)) > 0) { + for (i = 0; i < n; i++) { + if (FD_ISSET(pfd[i].fd, &rset)) { + pfd[i].revents |= POLLIN; + } + if (FD_ISSET(pfd[i].fd, &wset)) { + pfd[i].revents |= POLLOUT; + } + if (FD_ISSET(pfd[i].fd, &eset)) { + pfd[i].revents |= POLLERR; + } + } + } + + /* We should subtract the time used in select from remaining + * "milliseconds", in particular if called from mg_poll with a + * timeout quantum. + * Unfortunately, the remaining time is not stored in "tv" in all + * implementations, so the result in "tv" must be considered undefined. + * See http://man7.org/linux/man-pages/man2/select.2.html */ + + return result; +} +#endif /* HAVE_POLL */ + + +#if defined(GCC_DIAGNOSTIC) +/* Enable unused function warning again */ +#pragma GCC diagnostic pop +#endif + + +static void +set_close_on_exec(SOCKET sock, + const struct mg_connection *conn /* may be null */, + struct mg_context *ctx /* may be null */) +{ + (void)conn; /* Unused. */ + (void)ctx; + + (void)SetHandleInformation((HANDLE)(intptr_t)sock, HANDLE_FLAG_INHERIT, 0); +} + + +CIVETWEB_API int +mg_start_thread(mg_thread_func_t f, void *p) +{ +#if defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1) + /* Compile-time option to control stack size, e.g. + * -DUSE_STACK_SIZE=16384 + */ + return ((_beginthread((void(__cdecl *)(void *))f, USE_STACK_SIZE, p) + == ((uintptr_t)(-1L))) + ? -1 + : 0); +#else + return ( + (_beginthread((void(__cdecl *)(void *))f, 0, p) == ((uintptr_t)(-1L))) + ? -1 + : 0); +#endif /* defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1) */ +} + + +/* Start a thread storing the thread context. */ +static int +mg_start_thread_with_id(unsigned(__stdcall *f)(void *), + void *p, + pthread_t *threadidptr) +{ + uintptr_t uip; + HANDLE threadhandle; + int result = -1; + + uip = _beginthreadex(NULL, 0, f, p, 0, NULL); + threadhandle = (HANDLE)uip; + if ((uip != 0) && (threadidptr != NULL)) { + *threadidptr = threadhandle; + result = 0; + } + + return result; +} + + +/* Wait for a thread to finish. */ +static int +mg_join_thread(pthread_t threadid) +{ + int result; + DWORD dwevent; + + result = -1; + dwevent = WaitForSingleObject(threadid, (DWORD)INFINITE); + if (dwevent == WAIT_FAILED) { + DEBUG_TRACE("WaitForSingleObject() failed, error %d", ERRNO); + } else { + if (dwevent == WAIT_OBJECT_0) { + CloseHandle(threadid); + result = 0; + } + } + + return result; +} + +#if !defined(NO_SSL_DL) && !defined(NO_SSL) +/* If SSL is loaded dynamically, dlopen/dlclose is required. */ +/* Create substitutes for POSIX functions in Win32. */ + +#if defined(GCC_DIAGNOSTIC) +/* Show no warning in case system functions are not used. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#endif + + +FUNCTION_MAY_BE_UNUSED +static HANDLE +dlopen(const char *dll_name, int flags) +{ + wchar_t wbuf[UTF16_PATH_MAX]; + (void)flags; + path_to_unicode(NULL, dll_name, wbuf, ARRAY_SIZE(wbuf)); + return LoadLibraryW(wbuf); +} + + +FUNCTION_MAY_BE_UNUSED +static int +dlclose(void *handle) +{ + int result; + + if (FreeLibrary((HMODULE)handle) != 0) { + result = 0; + } else { + result = -1; + } + + return result; +} + + +#if defined(GCC_DIAGNOSTIC) +/* Enable unused function warning again */ +#pragma GCC diagnostic pop +#endif + +#endif + + +#if !defined(NO_CGI) +#define SIGKILL (0) + + +static int +kill(pid_t pid, int sig_num) +{ + (void)TerminateProcess((HANDLE)pid, (UINT)sig_num); + (void)CloseHandle((HANDLE)pid); + return 0; +} + + +#if !defined(WNOHANG) +#define WNOHANG (1) +#endif + + +static pid_t +waitpid(pid_t pid, int *status, int flags) +{ + DWORD timeout = INFINITE; + DWORD waitres; + + (void)status; /* Currently not used by any client here */ + + if ((flags | WNOHANG) == WNOHANG) { + timeout = 0; + } + + waitres = WaitForSingleObject((HANDLE)pid, timeout); + if (waitres == WAIT_OBJECT_0) { + return pid; + } + if (waitres == WAIT_TIMEOUT) { + return 0; + } + return (pid_t)-1; +} + + +static void +trim_trailing_whitespaces(char *s) +{ + char *e = s + strlen(s); + while ((e > s) && isspace((unsigned char)e[-1])) { + *(--e) = '\0'; + } +} + + +static pid_t +spawn_process(struct mg_connection *conn, + const char *prog, + char *envblk, + char *envp[], + int fdin[2], + int fdout[2], + int fderr[2], + const char *dir, + int cgi_config_idx) +{ + HANDLE me; + char *interp; + char *interp_arg = 0; + char full_dir[UTF8_PATH_MAX], cmdline[UTF8_PATH_MAX], buf[UTF8_PATH_MAX]; + int truncated; + struct mg_file file = STRUCT_FILE_INITIALIZER; + STARTUPINFOA si; + PROCESS_INFORMATION pi = {0}; + + (void)envp; + + memset(&si, 0, sizeof(si)); + si.cb = sizeof(si); + + si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; + + me = GetCurrentProcess(); + DuplicateHandle(me, + (HANDLE)_get_osfhandle(fdin[0]), + me, + &si.hStdInput, + 0, + TRUE, + DUPLICATE_SAME_ACCESS); + DuplicateHandle(me, + (HANDLE)_get_osfhandle(fdout[1]), + me, + &si.hStdOutput, + 0, + TRUE, + DUPLICATE_SAME_ACCESS); + DuplicateHandle(me, + (HANDLE)_get_osfhandle(fderr[1]), + me, + &si.hStdError, + 0, + TRUE, + DUPLICATE_SAME_ACCESS); + + /* Mark handles that should not be inherited. See + * https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499%28v=vs.85%29.aspx + */ + SetHandleInformation((HANDLE)_get_osfhandle(fdin[1]), + HANDLE_FLAG_INHERIT, + 0); + SetHandleInformation((HANDLE)_get_osfhandle(fdout[0]), + HANDLE_FLAG_INHERIT, + 0); + SetHandleInformation((HANDLE)_get_osfhandle(fderr[0]), + HANDLE_FLAG_INHERIT, + 0); + + /* First check, if there is a CGI interpreter configured for all CGI + * scripts. */ + interp = conn->dom_ctx->config[CGI_INTERPRETER + cgi_config_idx]; + if (interp != NULL) { + /* If there is a configured interpreter, check for additional arguments + */ + interp_arg = + conn->dom_ctx->config[CGI_INTERPRETER_ARGS + cgi_config_idx]; + } else { + /* Otherwise, the interpreter must be stated in the first line of the + * CGI script file, after a #! (shebang) mark. */ + buf[0] = buf[1] = '\0'; + + /* Get the full script path */ + mg_snprintf( + conn, &truncated, cmdline, sizeof(cmdline), "%s/%s", dir, prog); + + if (truncated) { + pi.hProcess = (pid_t)-1; + goto spawn_cleanup; + } + + /* Open the script file, to read the first line */ + if (mg_fopen(conn, cmdline, MG_FOPEN_MODE_READ, &file)) { + + /* Read the first line of the script into the buffer */ + mg_fgets(buf, sizeof(buf), &file); + (void)mg_fclose(&file.access); /* ignore error on read only file */ + buf[sizeof(buf) - 1] = '\0'; + } + + if ((buf[0] == '#') && (buf[1] == '!')) { + trim_trailing_whitespaces(buf + 2); + } else { + buf[2] = '\0'; + } + interp = buf + 2; + } + + GetFullPathNameA(dir, sizeof(full_dir), full_dir, NULL); + + if (interp[0] != '\0') { + /* This is an interpreted script file. We must call the interpreter. */ + if ((interp_arg != 0) && (interp_arg[0] != 0)) { + mg_snprintf(conn, + &truncated, + cmdline, + sizeof(cmdline), + "\"%s\" %s \"%s\\%s\"", + interp, + interp_arg, + full_dir, + prog); + } else { + mg_snprintf(conn, + &truncated, + cmdline, + sizeof(cmdline), + "\"%s\" \"%s\\%s\"", + interp, + full_dir, + prog); + } + } else { + /* This is (probably) a compiled program. We call it directly. */ + mg_snprintf(conn, + &truncated, + cmdline, + sizeof(cmdline), + "\"%s\\%s\"", + full_dir, + prog); + } + + if (truncated) { + pi.hProcess = (pid_t)-1; + goto spawn_cleanup; + } + + DEBUG_TRACE("Running [%s]", cmdline); + if (CreateProcessA(NULL, + cmdline, + NULL, + NULL, + TRUE, + CREATE_NEW_PROCESS_GROUP, + envblk, + NULL, + &si, + &pi) + == 0) { + mg_cry_internal( + conn, "%s: CreateProcess(%s): %ld", __func__, cmdline, (long)ERRNO); + pi.hProcess = (pid_t)-1; + /* goto spawn_cleanup; */ + } + +spawn_cleanup: + (void)CloseHandle(si.hStdOutput); + (void)CloseHandle(si.hStdError); + (void)CloseHandle(si.hStdInput); + if (pi.hThread != NULL) { + (void)CloseHandle(pi.hThread); + } + + return (pid_t)pi.hProcess; +} +#endif /* !NO_CGI */ + + +static int +set_blocking_mode(SOCKET sock) +{ + unsigned long non_blocking = 0; + return ioctlsocket(sock, (long)FIONBIO, &non_blocking); +} + + +static int +set_non_blocking_mode(SOCKET sock) +{ + unsigned long non_blocking = 1; + return ioctlsocket(sock, (long)FIONBIO, &non_blocking); +} + + +#else + + +#if !defined(NO_FILESYSTEMS) +static int +mg_stat(const struct mg_connection *conn, + const char *path, + struct mg_file_stat *filep) +{ + struct stat st; + if (!filep) { + return 0; + } + memset(filep, 0, sizeof(*filep)); + + if (mg_path_suspicious(conn, path)) { + return 0; + } + + if (0 == stat(path, &st)) { + filep->size = (uint64_t)(st.st_size); + filep->last_modified = st.st_mtime; + filep->is_directory = S_ISDIR(st.st_mode); + return 1; + } + + return 0; +} +#endif /* NO_FILESYSTEMS */ + + +static void +set_close_on_exec(int fd, + const struct mg_connection *conn /* may be null */, + struct mg_context *ctx /* may be null */) +{ +#if defined(__ZEPHYR__) + (void)fd; + (void)conn; + (void)ctx; +#else + if (fcntl(fd, F_SETFD, FD_CLOEXEC) != 0) { + if (conn || ctx) { + struct mg_connection fc; + mg_cry_internal((conn ? conn : fake_connection(&fc, ctx)), + "%s: fcntl(F_SETFD FD_CLOEXEC) failed: %s", + __func__, + strerror(ERRNO)); + } + } +#endif +} + + +CIVETWEB_API int +mg_start_thread(mg_thread_func_t func, void *param) +{ + pthread_t thread_id; + pthread_attr_t attr; + int result; + + (void)pthread_attr_init(&attr); + (void)pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + +#if defined(__ZEPHYR__) + pthread_attr_setstack(&attr, &civetweb_main_stack, ZEPHYR_STACK_SIZE); +#elif defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1) + /* Compile-time option to control stack size, + * e.g. -DUSE_STACK_SIZE=16384 */ + (void)pthread_attr_setstacksize(&attr, USE_STACK_SIZE); +#endif /* defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1) */ + + result = pthread_create(&thread_id, &attr, func, param); + pthread_attr_destroy(&attr); + + return result; +} + + +/* Start a thread storing the thread context. */ +static int +mg_start_thread_with_id(mg_thread_func_t func, + void *param, + pthread_t *threadidptr) +{ + pthread_t thread_id; + pthread_attr_t attr; + int result; + + (void)pthread_attr_init(&attr); + +#if defined(__ZEPHYR__) + pthread_attr_setstack(&attr, + &civetweb_worker_stacks[zephyr_worker_stack_index++], + ZEPHYR_STACK_SIZE); +#elif defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1) + /* Compile-time option to control stack size, + * e.g. -DUSE_STACK_SIZE=16384 */ + (void)pthread_attr_setstacksize(&attr, USE_STACK_SIZE); +#endif /* defined(USE_STACK_SIZE) && USE_STACK_SIZE > 1 */ + + result = pthread_create(&thread_id, &attr, func, param); + pthread_attr_destroy(&attr); + if ((result == 0) && (threadidptr != NULL)) { + *threadidptr = thread_id; + } + return result; +} + + +/* Wait for a thread to finish. */ +static int +mg_join_thread(pthread_t threadid) +{ + int result; + + result = pthread_join(threadid, NULL); + return result; +} + + +#if !defined(NO_CGI) +static pid_t +spawn_process(struct mg_connection *conn, + const char *prog, + char *envblk, + char *envp[], + int fdin[2], + int fdout[2], + int fderr[2], + const char *dir, + int cgi_config_idx) +{ + pid_t pid; + const char *interp; + + (void)envblk; + + if ((pid = fork()) == -1) { + /* Parent */ + mg_cry_internal(conn, "%s: fork(): %s", __func__, strerror(ERRNO)); + } else if (pid != 0) { + /* Make sure children close parent-side descriptors. + * The caller will close the child-side immediately. */ + set_close_on_exec(fdin[1], conn, NULL); /* stdin write */ + set_close_on_exec(fdout[0], conn, NULL); /* stdout read */ + set_close_on_exec(fderr[0], conn, NULL); /* stderr read */ + } else { + /* Child */ + if (chdir(dir) != 0) { + mg_cry_internal( + conn, "%s: chdir(%s): %s", __func__, dir, strerror(ERRNO)); + } else if (dup2(fdin[0], 0) == -1) { + mg_cry_internal(conn, + "%s: dup2(%d, 0): %s", + __func__, + fdin[0], + strerror(ERRNO)); + } else if (dup2(fdout[1], 1) == -1) { + mg_cry_internal(conn, + "%s: dup2(%d, 1): %s", + __func__, + fdout[1], + strerror(ERRNO)); + } else if (dup2(fderr[1], 2) == -1) { + mg_cry_internal(conn, + "%s: dup2(%d, 2): %s", + __func__, + fderr[1], + strerror(ERRNO)); + } else { + struct sigaction sa; + + /* Keep stderr and stdout in two different pipes. + * Stdout will be sent back to the client, + * stderr should go into a server error log. */ + (void)close(fdin[0]); + (void)close(fdout[1]); + (void)close(fderr[1]); + + /* Close write end fdin and read end fdout and fderr */ + (void)close(fdin[1]); + (void)close(fdout[0]); + (void)close(fderr[0]); + + /* After exec, all signal handlers are restored to their default + * values, with one exception of SIGCHLD. According to + * POSIX.1-2001 and Linux's implementation, SIGCHLD's handler + * will leave unchanged after exec if it was set to be ignored. + * Restore it to default action. */ + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = SIG_DFL; + sigaction(SIGCHLD, &sa, NULL); + + interp = conn->dom_ctx->config[CGI_INTERPRETER + cgi_config_idx]; + if (interp == NULL) { + /* no interpreter configured, call the program directly */ + (void)execle(prog, prog, NULL, envp); + mg_cry_internal(conn, + "%s: execle(%s): %s", + __func__, + prog, + strerror(ERRNO)); + } else { + /* call the configured interpreter */ + const char *interp_args = + conn->dom_ctx + ->config[CGI_INTERPRETER_ARGS + cgi_config_idx]; + + if ((interp_args != NULL) && (interp_args[0] != 0)) { + (void)execle(interp, interp, interp_args, prog, NULL, envp); + } else { + (void)execle(interp, interp, prog, NULL, envp); + } + mg_cry_internal(conn, + "%s: execle(%s %s): %s", + __func__, + interp, + prog, + strerror(ERRNO)); + } + } + exit(EXIT_FAILURE); + } + + return pid; +} +#endif /* !NO_CGI */ + + +static int +set_non_blocking_mode(SOCKET sock) +{ + int flags = fcntl(sock, F_GETFL, 0); + if (flags < 0) { + return -1; + } + + if (fcntl(sock, F_SETFL, (flags | O_NONBLOCK)) < 0) { + return -1; + } + return 0; +} + +static int +set_blocking_mode(SOCKET sock) +{ + int flags = fcntl(sock, F_GETFL, 0); + if (flags < 0) { + return -1; + } + + if (fcntl(sock, F_SETFL, flags & (~(int)(O_NONBLOCK))) < 0) { + return -1; + } + return 0; +} +#endif /* _WIN32 / else */ + +/* End of initial operating system specific define block. */ + + +/* Get a random number (independent of C rand function) */ +static uint64_t +get_random(void) +{ + static uint64_t lfsr = 0; /* Linear feedback shift register */ + static uint64_t lcg = 0; /* Linear congruential generator */ + uint64_t now = mg_get_current_time_ns(); + + if (lfsr == 0) { + /* lfsr will be only 0 if has not been initialized, + * so this code is called only once. */ + lfsr = mg_get_current_time_ns(); + lcg = mg_get_current_time_ns(); + } else { + /* Get the next step of both random number generators. */ + lfsr = (lfsr >> 1) + | ((((lfsr >> 0) ^ (lfsr >> 1) ^ (lfsr >> 3) ^ (lfsr >> 4)) & 1) + << 63); + lcg = lcg * 6364136223846793005LL + 1442695040888963407LL; + } + + /* Combining two pseudo-random number generators and a high resolution + * part + * of the current server time will make it hard (impossible?) to guess + * the + * next number. */ + return (lfsr ^ lcg ^ now); +} + + +static int +mg_poll(struct mg_pollfd *pfd, + unsigned int n, + int milliseconds, + const stop_flag_t *stop_flag) +{ + /* Call poll, but only for a maximum time of a few seconds. + * This will allow to stop the server after some seconds, instead + * of having to wait for a long socket timeout. */ + int ms_now = SOCKET_TIMEOUT_QUANTUM; /* Sleep quantum in ms */ + + int check_pollerr = 0; + if ((n == 1) && ((pfd[0].events & POLLERR) == 0)) { + /* If we wait for only one file descriptor, wait on error as well */ + pfd[0].events |= POLLERR; + check_pollerr = 1; + } + + do { + int result; + + if (!STOP_FLAG_IS_ZERO(&*stop_flag)) { + /* Shut down signal */ + return -2; + } + + if ((milliseconds >= 0) && (milliseconds < ms_now)) { + ms_now = milliseconds; + } + + result = poll(pfd, n, ms_now); + if (result != 0) { + int err = ERRNO; + if ((result == 1) || (!ERROR_TRY_AGAIN(err))) { + /* Poll returned either success (1) or error (-1). + * Forward both to the caller. */ + if ((check_pollerr) + && ((pfd[0].revents & (POLLIN | POLLOUT | POLLERR)) + == POLLERR)) { + /* One and only file descriptor returned error */ + return -1; + } + return result; + } + } + + /* Poll returned timeout (0). */ + if (milliseconds > 0) { + milliseconds -= ms_now; + } + + } while (milliseconds > 0); + + /* timeout: return 0 */ + return 0; +} + + +/* Write data to the IO channel - opened file descriptor, socket or SSL + * descriptor. + * Return value: + * >=0 .. number of bytes successfully written + * -1 .. timeout + * -2 .. error + */ +static int +push_inner(struct mg_context *ctx, + FILE *fp, + SOCKET sock, + SSL *ssl, + const char *buf, + int len, + double timeout) +{ + uint64_t start = 0, now = 0, timeout_ns = 0; + int n, err; + unsigned ms_wait = SOCKET_TIMEOUT_QUANTUM; /* Sleep quantum in ms */ + +#if defined(_WIN32) + typedef int len_t; +#else + typedef size_t len_t; +#endif + + if (timeout > 0) { + now = mg_get_current_time_ns(); + start = now; + timeout_ns = (uint64_t)(timeout * 1.0E9); + } + + if (ctx == NULL) { + return -2; + } + +#if defined(NO_SSL) && !defined(USE_MBEDTLS) && !defined(USE_GNUTLS) + if (ssl) { + return -2; + } +#endif + + /* Try to read until it succeeds, fails, times out, or the server + * shuts down. */ + for (;;) { + +#if defined(USE_MBEDTLS) + if (ssl != NULL) { + n = mbed_ssl_write(ssl, (const unsigned char *)buf, len); + if (n <= 0) { + if ((n == MBEDTLS_ERR_SSL_WANT_READ) + || (n == MBEDTLS_ERR_SSL_WANT_WRITE) + || n == MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS) { + n = 0; + } else { + fprintf(stderr, "SSL write failed, error %d\n", n); + return -2; + } + } else { + err = 0; + } + } else +#elif defined(USE_GNUTLS) + if (ssl != NULL) { + n = gtls_ssl_write(ssl, (const unsigned char *)buf, (size_t)len); + if (n < 0) { + fprintf(stderr, + "SSL write failed (%d): %s", + n, + gnutls_strerror(n)); + return -2; + } else { + err = 0; + } + } else +#elif !defined(NO_SSL) + if (ssl != NULL) { + ERR_clear_error(); + n = SSL_write(ssl, buf, len); + if (n <= 0) { + err = SSL_get_error(ssl, n); + if ((err == SSL_ERROR_SYSCALL) && (n == -1)) { + err = ERRNO; + } else if ((err == SSL_ERROR_WANT_READ) + || (err == SSL_ERROR_WANT_WRITE)) { + n = 0; + } else { + DEBUG_TRACE("SSL_write() failed, error %d", err); + ERR_clear_error(); + return -2; + } + ERR_clear_error(); + } else { + err = 0; + } + } else +#endif + + if (fp != NULL) { + n = (int)fwrite(buf, 1, (size_t)len, fp); + if (ferror(fp)) { + n = -1; + err = ERRNO; + } else { + err = 0; + } + } else { + n = (int)send(sock, buf, (len_t)len, MSG_NOSIGNAL); + err = (n < 0) ? ERRNO : 0; + if (ERROR_TRY_AGAIN(err)) { + err = 0; + n = 0; + } + if (n < 0) { + /* shutdown of the socket at client side */ + return -2; + } + } + + if (!STOP_FLAG_IS_ZERO(&ctx->stop_flag)) { + return -2; + } + + if ((n > 0) || ((n == 0) && (len == 0))) { + /* some data has been read, or no data was requested */ + return n; + } + if (n < 0) { + /* socket error - check errno */ + DEBUG_TRACE("send() failed, error %d", err); + + /* TODO (mid): error handling depending on the error code. + * These codes are different between Windows and Linux. + * Currently there is no problem with failing send calls, + * if there is a reproducible situation, it should be + * investigated in detail. + */ + return -2; + } + + /* Only in case n=0 (timeout), repeat calling the write function */ + + /* If send failed, wait before retry */ + if (fp != NULL) { + /* For files, just wait a fixed time. + * Maybe it helps, maybe not. */ + mg_sleep(5); + } else { + /* For sockets, wait for the socket using poll */ + struct mg_pollfd pfd[2]; + int pollres; + unsigned int num_sock = 1; + + pfd[0].fd = sock; + pfd[0].events = POLLOUT; + + if (ctx->context_type == CONTEXT_SERVER) { + pfd[num_sock].fd = ctx->thread_shutdown_notification_socket; + pfd[num_sock].events = POLLIN; + num_sock++; + } + + pollres = mg_poll(pfd, num_sock, (int)(ms_wait), &(ctx->stop_flag)); + if (!STOP_FLAG_IS_ZERO(&ctx->stop_flag)) { + return -2; + } + if (pollres > 0) { + continue; + } + } + + if (timeout > 0) { + now = mg_get_current_time_ns(); + if ((now - start) > timeout_ns) { + /* Timeout */ + break; + } + } + } + + (void)err; /* Avoid unused warning if NO_SSL is set and DEBUG_TRACE is not + used */ + + return -1; +} + + +static int +push_all(struct mg_context *ctx, + FILE *fp, + SOCKET sock, + SSL *ssl, + const char *buf, + int len) +{ + double timeout = -1.0; + int n, nwritten = 0; + + if (ctx == NULL) { + return -1; + } + + if (ctx->dd.config[REQUEST_TIMEOUT]) { + timeout = atoi(ctx->dd.config[REQUEST_TIMEOUT]) / 1000.0; + } + if (timeout <= 0.0) { + timeout = strtod(config_options[REQUEST_TIMEOUT].default_value, NULL) + / 1000.0; + } + + while ((len > 0) && STOP_FLAG_IS_ZERO(&ctx->stop_flag)) { + n = push_inner(ctx, fp, sock, ssl, buf + nwritten, len, timeout); + if (n < 0) { + if (nwritten == 0) { + nwritten = -1; /* Propagate the error */ + } + break; + } else if (n == 0) { + break; /* No more data to write */ + } else { + nwritten += n; + len -= n; + } + } + + return nwritten; +} + + +/* Read from IO channel - opened file descriptor, socket, or SSL descriptor. + * Return value: + * >=0 .. number of bytes successfully read + * -1 .. timeout + * -2 .. error + */ +static int +pull_inner(FILE *fp, + struct mg_connection *conn, + char *buf, + int len, + double timeout) +{ + int nread, err = 0; + +#if defined(_WIN32) + typedef int len_t; +#else + typedef size_t len_t; +#endif + + /* We need an additional wait loop around this, because in some cases + * with TLSwe may get data from the socket but not from SSL_read. + * In this case we need to repeat at least once. + */ + + if (fp != NULL) { + /* Use read() instead of fread(), because if we're reading from the + * CGI pipe, fread() may block until IO buffer is filled up. We + * cannot afford to block and must pass all read bytes immediately + * to the client. */ + nread = (int)read(fileno(fp), buf, (size_t)len); + + err = (nread < 0) ? ERRNO : 0; + if ((nread == 0) && (len > 0)) { + /* Should get data, but got EOL */ + return -2; + } + +#if defined(USE_MBEDTLS) + } else if (conn->ssl != NULL) { + struct mg_pollfd pfd[2]; + int to_read; + int pollres; + unsigned int num_sock = 1; + + to_read = mbedtls_ssl_get_bytes_avail(conn->ssl); + + if (to_read > 0) { + /* We already know there is no more data buffered in conn->buf + * but there is more available in the SSL layer. So don't poll + * conn->client.sock yet. */ + + pollres = 1; + if (to_read > len) + to_read = len; + } else { + pfd[0].fd = conn->client.sock; + pfd[0].events = POLLIN; + + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + pfd[num_sock].fd = + conn->phys_ctx->thread_shutdown_notification_socket; + pfd[num_sock].events = POLLIN; + num_sock++; + } + + to_read = len; + + pollres = mg_poll(pfd, + num_sock, + (int)(timeout * 1000.0), + &(conn->phys_ctx->stop_flag)); + + if (!STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + return -2; + } + } + + if (pollres > 0) { + nread = mbed_ssl_read(conn->ssl, (unsigned char *)buf, to_read); + if (nread <= 0) { + if ((nread == MBEDTLS_ERR_SSL_WANT_READ) + || (nread == MBEDTLS_ERR_SSL_WANT_WRITE) + || nread == MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS) { + nread = 0; + } else { + fprintf(stderr, "SSL read failed, error %d\n", nread); + return -2; + } + } else { + err = 0; + } + + } else if (pollres < 0) { + /* Error */ + return -2; + } else { + /* pollres = 0 means timeout */ + nread = 0; + } + +#elif defined(USE_GNUTLS) + } else if (conn->ssl != NULL) { + struct mg_pollfd pfd[2]; + size_t to_read; + int pollres; + unsigned int num_sock = 1; + + to_read = gnutls_record_check_pending(conn->ssl->sess); + + if (to_read > 0) { + /* We already know there is no more data buffered in conn->buf + * but there is more available in the SSL layer. So don't poll + * conn->client.sock yet. */ + + pollres = 1; + if (to_read > (size_t)len) + to_read = (size_t)len; + } else { + pfd[0].fd = conn->client.sock; + pfd[0].events = POLLIN; + + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + pfd[num_sock].fd = + conn->phys_ctx->thread_shutdown_notification_socket; + pfd[num_sock].events = POLLIN; + num_sock++; + } + + to_read = (size_t)len; + + pollres = mg_poll(pfd, + num_sock, + (int)(timeout * 1000.0), + &(conn->phys_ctx->stop_flag)); + + if (!STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + return -2; + } + } + + if (pollres > 0) { + nread = gtls_ssl_read(conn->ssl, (unsigned char *)buf, to_read); + if (nread < 0) { + fprintf(stderr, + "SSL read failed (%d): %s", + nread, + gnutls_strerror(nread)); + return -2; + } else { + err = 0; + } + } else if (pollres < 0) { + /* Error */ + return -2; + } else { + /* pollres = 0 means timeout */ + nread = 0; + } + +#elif !defined(NO_SSL) + } else if (conn->ssl != NULL) { + int ssl_pending; + struct mg_pollfd pfd[2]; + int pollres; + unsigned int num_sock = 1; + + if ((ssl_pending = SSL_pending(conn->ssl)) > 0) { + /* We already know there is no more data buffered in conn->buf + * but there is more available in the SSL layer. So don't poll + * conn->client.sock yet. */ + if (ssl_pending > len) { + ssl_pending = len; + } + pollres = 1; + } else { + pfd[0].fd = conn->client.sock; + pfd[0].events = POLLIN; + + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + pfd[num_sock].fd = + conn->phys_ctx->thread_shutdown_notification_socket; + pfd[num_sock].events = POLLIN; + num_sock++; + } + + pollres = mg_poll(pfd, + num_sock, + (int)(timeout * 1000.0), + &(conn->phys_ctx->stop_flag)); + if (!STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + return -2; + } + } + if (pollres > 0) { + ERR_clear_error(); + nread = + SSL_read(conn->ssl, buf, (ssl_pending > 0) ? ssl_pending : len); + if (nread <= 0) { + err = SSL_get_error(conn->ssl, nread); + if ((err == SSL_ERROR_SYSCALL) && (nread == -1)) { + err = ERRNO; + } else if ((err == SSL_ERROR_WANT_READ) + || (err == SSL_ERROR_WANT_WRITE)) { + nread = 0; + } else { + /* All errors should return -2 */ + DEBUG_TRACE("SSL_read() failed, error %d", err); + ERR_clear_error(); + return -2; + } + ERR_clear_error(); + } else { + err = 0; + } + } else if (pollres < 0) { + /* Error */ + return -2; + } else { + /* pollres = 0 means timeout */ + nread = 0; + } +#endif + + } else { + struct mg_pollfd pfd[2]; + int pollres; + unsigned int num_sock = 1; + + pfd[0].fd = conn->client.sock; + pfd[0].events = POLLIN; + + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + pfd[num_sock].fd = + conn->phys_ctx->thread_shutdown_notification_socket; + pfd[num_sock].events = POLLIN; + num_sock++; + } + + pollres = mg_poll(pfd, + num_sock, + (int)(timeout * 1000.0), + &(conn->phys_ctx->stop_flag)); + if (!STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + return -2; + } + if (pollres > 0) { + nread = (int)recv(conn->client.sock, buf, (len_t)len, 0); + err = (nread < 0) ? ERRNO : 0; + if (nread <= 0) { + /* shutdown of the socket at client side */ + return -2; + } + } else if (pollres < 0) { + /* error calling poll */ + return -2; + } else { + /* pollres = 0 means timeout */ + nread = 0; + } + } + + if (conn != NULL && !STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + return -2; + } + + if ((nread > 0) || ((nread == 0) && (len == 0))) { + /* some data has been read, or no data was requested */ + return nread; + } + + if (nread < 0) { + /* socket error - check errno */ +#if defined(_WIN32) + if (err == WSAEWOULDBLOCK) { + /* TODO (low): check if this is still required */ + /* standard case if called from close_socket_gracefully */ + return -2; + } else if (err == WSAETIMEDOUT) { + /* TODO (low): check if this is still required */ + /* timeout is handled by the while loop */ + return 0; + } else if (err == WSAECONNABORTED) { + /* See https://www.chilkatsoft.com/p/p_299.asp */ + return -2; + } else { + DEBUG_TRACE("read()/recv() failed, error %d", err); + return -2; + } +#else + /* TODO: POSIX returns either EAGAIN or EWOULDBLOCK in both cases, + * if the timeout is reached and if the socket was set to non- + * blocking in close_socket_gracefully, so we can not distinguish + * here. We have to wait for the timeout in both cases for now. + */ + if (ERROR_TRY_AGAIN(err)) { + /* TODO (low): check if this is still required */ + /* EAGAIN/EWOULDBLOCK: + * standard case if called from close_socket_gracefully + * => should return -1 */ + /* or timeout occurred + * => the code must stay in the while loop */ + + /* EINTR can be generated on a socket with a timeout set even + * when SA_RESTART is effective for all relevant signals + * (see signal(7)). + * => stay in the while loop */ + } else { + DEBUG_TRACE("read()/recv() failed, error %d", err); + return -2; + } +#endif + } + + /* Timeout occurred, but no data available. */ + return -1; +} + + +static int +pull_all(FILE *fp, struct mg_connection *conn, char *buf, int len) +{ + int n, nread = 0; + double timeout = -1.0; + uint64_t start_time = 0, now = 0, timeout_ns = 0; + + if (conn->dom_ctx->config[REQUEST_TIMEOUT]) { + timeout = atoi(conn->dom_ctx->config[REQUEST_TIMEOUT]) / 1000.0; + } + if (timeout <= 0.0) { + timeout = strtod(config_options[REQUEST_TIMEOUT].default_value, NULL) + / 1000.0; + } + start_time = mg_get_current_time_ns(); + timeout_ns = (uint64_t)(timeout * 1.0E9); + + while ((len > 0) && STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + n = pull_inner(fp, conn, buf + nread, len, timeout); + if (n == -2) { + if (nread == 0) { + nread = -1; /* Propagate the error */ + } + break; + } else if (n == -1) { + /* timeout */ + if (timeout >= 0.0) { + now = mg_get_current_time_ns(); + if ((now - start_time) <= timeout_ns) { + continue; + } + } + break; + } else if (n == 0) { + break; /* No more data to read */ + } else { + nread += n; + len -= n; + } + } + + return nread; +} + + +static void +discard_unread_request_data(struct mg_connection *conn) +{ + char buf[MG_BUF_LEN]; + + while (mg_read(conn, buf, sizeof(buf)) > 0) + ; +} + + +static int +mg_read_inner(struct mg_connection *conn, void *buf, size_t len) +{ + int64_t content_len, n, buffered_len, nread; + int64_t len64 = + (int64_t)((len > INT_MAX) ? INT_MAX : len); /* since the return value is + * int, we may not read more + * bytes */ + const char *body; + + if (conn == NULL) { + return 0; + } + + /* If Content-Length is not set for a response with body data, + * we do not know in advance how much data should be read. */ + content_len = conn->content_len; + if (content_len < 0) { + /* The body data is completed when the connection is closed. */ + content_len = INT64_MAX; + } + + nread = 0; + if (conn->consumed_content < content_len) { + /* Adjust number of bytes to read. */ + int64_t left_to_read = content_len - conn->consumed_content; + if (left_to_read < len64) { + /* Do not read more than the total content length of the + * request. + */ + len64 = left_to_read; + } + + /* Return buffered data */ + buffered_len = (int64_t)(conn->data_len) - (int64_t)conn->request_len + - conn->consumed_content; + if (buffered_len > 0) { + if (len64 < buffered_len) { + buffered_len = len64; + } + body = conn->buf + conn->request_len + conn->consumed_content; + memcpy(buf, body, (size_t)buffered_len); + len64 -= buffered_len; + conn->consumed_content += buffered_len; + nread += buffered_len; + buf = (char *)buf + buffered_len; + } + + /* We have returned all buffered data. Read new data from the remote + * socket. + */ + if ((n = pull_all(NULL, conn, (char *)buf, (int)len64)) >= 0) { + conn->consumed_content += n; + nread += n; + } else { + nread = ((nread > 0) ? nread : n); + } + } + return (int)nread; +} + + +/* Forward declarations */ +static void handle_request(struct mg_connection *); +static void log_access(const struct mg_connection *); + + +/* Handle request, update statistics and call access log */ +static void +handle_request_stat_log(struct mg_connection *conn) +{ +#if defined(USE_SERVER_STATS) + struct timespec tnow; + conn->conn_state = 4; /* processing */ +#endif + + handle_request(conn); + + +#if defined(USE_SERVER_STATS) + conn->conn_state = 5; /* processed */ + + clock_gettime(CLOCK_MONOTONIC, &tnow); + conn->processing_time = mg_difftimespec(&tnow, &(conn->req_time)); + + mg_atomic_add64(&(conn->phys_ctx->total_data_read), conn->consumed_content); + mg_atomic_add64(&(conn->phys_ctx->total_data_written), + conn->num_bytes_sent); +#endif + + DEBUG_TRACE("%s", "handle_request done"); + + if (conn->phys_ctx->callbacks.end_request != NULL) { + conn->phys_ctx->callbacks.end_request(conn, conn->status_code); + DEBUG_TRACE("%s", "end_request callback done"); + } + log_access(conn); +} + + +#if defined(USE_HTTP2) +#if defined(NO_SSL) +#error "HTTP2 requires ALPN, ALPN requires SSL/TLS" +#endif +#define USE_ALPN +#include "http2.inl" +/* Not supported with HTTP/2 */ +#define HTTP1_only \ + { \ + if (conn->protocol_type == PROTOCOL_TYPE_HTTP2) { \ + http2_must_use_http1(conn); \ + DEBUG_TRACE("%s", "must use HTTP/1.x"); \ + return; \ + } \ + } +#else +#define HTTP1_only +#endif + + +CIVETWEB_API int +mg_read(struct mg_connection *conn, void *buf, size_t len) +{ + if (len > INT_MAX) { + len = INT_MAX; + } + + if (conn == NULL) { + return 0; + } + + if (conn->is_chunked) { + size_t all_read = 0; + + while (len > 0) { + if (conn->is_chunked >= 3) { + /* No more data left to read */ + return 0; + } + if (conn->is_chunked != 1) { + /* Has error */ + return -1; + } + + if (conn->consumed_content != conn->content_len) { + /* copy from the current chunk */ + int read_ret = mg_read_inner(conn, (char *)buf + all_read, len); + + if (read_ret < 1) { + /* read error */ + conn->is_chunked = 2; + return -1; + } + + all_read += (size_t)read_ret; + len -= (size_t)read_ret; + + if (conn->consumed_content == conn->content_len) { + /* Add data bytes in the current chunk have been read, + * so we are expecting \r\n now. */ + char x[2]; + conn->content_len += 2; + if ((mg_read_inner(conn, x, 2) != 2) || (x[0] != '\r') + || (x[1] != '\n')) { + /* Protocol violation */ + conn->is_chunked = 2; + return -1; + } + } + + } else { + /* fetch a new chunk */ + size_t i; + char lenbuf[64]; + char *end = NULL; + unsigned long chunkSize = 0; + + for (i = 0; i < (sizeof(lenbuf) - 1); i++) { + conn->content_len++; + if (mg_read_inner(conn, lenbuf + i, 1) != 1) { + lenbuf[i] = 0; + } + if ((i > 0) && (lenbuf[i] == ';')) { + // chunk extension --> skip chars until next CR + // + // RFC 2616, 3.6.1 Chunked Transfer Coding + // (https://www.rfc-editor.org/rfc/rfc2616#page-25) + // + // chunk = chunk-size [ chunk-extension ] CRLF + // chunk-data CRLF + // ... + // chunk-extension= *( ";" chunk-ext-name [ "=" + // chunk-ext-val ] ) + do + ++conn->content_len; + while (mg_read_inner(conn, lenbuf + i, 1) == 1 + && lenbuf[i] != '\r'); + } + if ((i > 0) && (lenbuf[i] == '\r') + && (lenbuf[i - 1] != '\r')) { + continue; + } + if ((i > 1) && (lenbuf[i] == '\n') + && (lenbuf[i - 1] == '\r')) { + lenbuf[i + 1] = 0; + chunkSize = strtoul(lenbuf, &end, 16); + if (chunkSize == 0) { + /* regular end of content */ + conn->is_chunked = 3; + } + break; + } + if (!isxdigit((unsigned char)lenbuf[i])) { + /* illegal character for chunk length */ + conn->is_chunked = 2; + return -1; + } + } + if ((end == NULL) || (*end != '\r')) { + /* chunksize not set correctly */ + conn->is_chunked = 2; + return -1; + } + if (conn->is_chunked == 3) { + /* try discarding trailer for keep-alive */ + + // We found the last chunk (length 0) including the + // CRLF that terminates that chunk. Now follows a possibly + // empty trailer and a final CRLF. + // + // see RFC 2616, 3.6.1 Chunked Transfer Coding + // (https://www.rfc-editor.org/rfc/rfc2616#page-25) + // + // Chunked-Body = *chunk + // last-chunk + // trailer + // CRLF + // ... + // last-chunk = 1*("0") [ chunk-extension ] CRLF + // ... + // trailer = *(entity-header CRLF) + + int crlf_count = 2; // one CRLF already determined + + while (crlf_count < 4 && conn->is_chunked == 3) { + ++conn->content_len; + if (mg_read_inner(conn, lenbuf, 1) == 1) { + if ((crlf_count == 0 || crlf_count == 2)) { + if (lenbuf[0] == '\r') + ++crlf_count; + else + crlf_count = 0; + } else { + // previous character was a CR + // --> next character must be LF + + if (lenbuf[0] == '\n') + ++crlf_count; + else + conn->is_chunked = 2; + } + } else + // premature end of trailer + conn->is_chunked = 2; + } + + if (conn->is_chunked == 2) + return -1; + else + conn->is_chunked = 4; + + break; + } + + /* append a new chunk */ + conn->content_len += (int64_t)chunkSize; + } + } + + return (int)all_read; + } + return mg_read_inner(conn, buf, len); +} + + +CIVETWEB_API int +mg_write(struct mg_connection *conn, const void *buf, size_t len) +{ + time_t now; + int n, total, allowed; + + if (conn == NULL) { + return 0; + } + if (len > INT_MAX) { + return -1; + } + + /* Mark connection as "data sent" */ + conn->request_state = 10; +#if defined(USE_HTTP2) + if (conn->protocol_type == PROTOCOL_TYPE_HTTP2) { + http2_data_frame_head(conn, len, 0); + } +#endif + + if (conn->throttle > 0) { + if ((now = time(NULL)) != conn->last_throttle_time) { + conn->last_throttle_time = now; + conn->last_throttle_bytes = 0; + } + allowed = conn->throttle - conn->last_throttle_bytes; + if (allowed > (int)len) { + allowed = (int)len; + } + + total = push_all(conn->phys_ctx, + NULL, + conn->client.sock, + conn->ssl, + (const char *)buf, + allowed); + + if (total == allowed) { + + buf = (const char *)buf + total; + conn->last_throttle_bytes += total; + while ((total < (int)len) + && STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + allowed = (conn->throttle > ((int)len - total)) + ? (int)len - total + : conn->throttle; + + n = push_all(conn->phys_ctx, + NULL, + conn->client.sock, + conn->ssl, + (const char *)buf, + allowed); + + if (n != allowed) { + break; + } + sleep(1); + conn->last_throttle_bytes = allowed; + conn->last_throttle_time = time(NULL); + buf = (const char *)buf + n; + total += n; + } + } + } else { + total = push_all(conn->phys_ctx, + NULL, + conn->client.sock, + conn->ssl, + (const char *)buf, + (int)len); + } + if (total > 0) { + conn->num_bytes_sent += total; + } + return total; +} + + +/* Send a chunk, if "Transfer-Encoding: chunked" is used */ +CIVETWEB_API int +mg_send_chunk(struct mg_connection *conn, + const char *chunk, + unsigned int chunk_len) +{ + char lenbuf[16]; + size_t lenbuf_len; + int ret; + int t; + + /* First store the length information in a text buffer. */ + sprintf(lenbuf, "%x\r\n", chunk_len); + lenbuf_len = strlen(lenbuf); + + /* Then send length information, chunk and terminating \r\n. */ + ret = mg_write(conn, lenbuf, lenbuf_len); + if (ret != (int)lenbuf_len) { + return -1; + } + t = ret; + + ret = mg_write(conn, chunk, chunk_len); + if (ret != (int)chunk_len) { + return -1; + } + t += ret; + + ret = mg_write(conn, "\r\n", 2); + if (ret != 2) { + return -1; + } + t += ret; + + return t; +} + + +#if defined(GCC_DIAGNOSTIC) +/* This block forwards format strings to printf implementations, + * so we need to disable the format-nonliteral warning. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif + + +/* Alternative alloc_vprintf() for non-compliant C runtimes */ +static int +alloc_vprintf2(char **buf, const char *fmt, va_list ap) +{ + va_list ap_copy; + size_t size = MG_BUF_LEN / 4; + int len = -1; + + *buf = NULL; + while (len < 0) { + if (*buf) { + mg_free(*buf); + } + + size *= 4; + *buf = (char *)mg_malloc(size); + if (!*buf) { + break; + } + + va_copy(ap_copy, ap); + len = vsnprintf_impl(*buf, size - 1, fmt, ap_copy); + va_end(ap_copy); + (*buf)[size - 1] = 0; + } + + return len; +} + + +/* Print message to buffer. If buffer is large enough to hold the message, + * return buffer. If buffer is to small, allocate large enough buffer on + * heap, + * and return allocated buffer. */ +static int +alloc_vprintf(char **out_buf, + char *prealloc_buf, + size_t prealloc_size, + const char *fmt, + va_list ap) +{ + va_list ap_copy; + int len; + + /* Windows is not standard-compliant, and vsnprintf() returns -1 if + * buffer is too small. Also, older versions of msvcrt.dll do not have + * _vscprintf(). However, if size is 0, vsnprintf() behaves correctly. + * Therefore, we make two passes: on first pass, get required message + * length. + * On second pass, actually print the message. */ + va_copy(ap_copy, ap); + len = vsnprintf_impl(NULL, 0, fmt, ap_copy); + va_end(ap_copy); + + if (len < 0) { + /* C runtime is not standard compliant, vsnprintf() returned -1. + * Switch to alternative code path that uses incremental + * allocations. + */ + va_copy(ap_copy, ap); + len = alloc_vprintf2(out_buf, fmt, ap_copy); + va_end(ap_copy); + + } else if ((size_t)(len) >= prealloc_size) { + /* The pre-allocated buffer not large enough. */ + /* Allocate a new buffer. */ + *out_buf = (char *)mg_malloc((size_t)(len) + 1); + if (!*out_buf) { + /* Allocation failed. Return -1 as "out of memory" error. */ + return -1; + } + /* Buffer allocation successful. Store the string there. */ + va_copy(ap_copy, ap); + IGNORE_UNUSED_RESULT( + vsnprintf_impl(*out_buf, (size_t)(len) + 1, fmt, ap_copy)); + va_end(ap_copy); + + } else { + /* The pre-allocated buffer is large enough. + * Use it to store the string and return the address. */ + va_copy(ap_copy, ap); + IGNORE_UNUSED_RESULT( + vsnprintf_impl(prealloc_buf, prealloc_size, fmt, ap_copy)); + va_end(ap_copy); + *out_buf = prealloc_buf; + } + + return len; +} + + +static int +alloc_printf(char **out_buf, const char *fmt, ...) +{ + va_list ap; + int result; + + va_start(ap, fmt); + result = alloc_vprintf(out_buf, NULL, 0, fmt, ap); + va_end(ap); + + return result; +} + + +#if defined(GCC_DIAGNOSTIC) +/* Enable format-nonliteral warning again. */ +#pragma GCC diagnostic pop +#endif + + +static int +mg_vprintf(struct mg_connection *conn, const char *fmt, va_list ap) +{ + char mem[MG_BUF_LEN]; + char *buf = NULL; + int len; + + if ((len = alloc_vprintf(&buf, mem, sizeof(mem), fmt, ap)) > 0) { + len = mg_write(conn, buf, (size_t)len); + } + if (buf != mem) { + mg_free(buf); + } + + return len; +} + + +CIVETWEB_API int +mg_printf(struct mg_connection *conn, const char *fmt, ...) +{ + va_list ap; + int result; + + va_start(ap, fmt); + result = mg_vprintf(conn, fmt, ap); + va_end(ap); + + return result; +} + + +CIVETWEB_API int +mg_url_decode(const char *src, + int src_len, + char *dst, + int dst_len, + int is_form_url_encoded) +{ + int i, j, a, b; + +#define HEXTOI(x) (isdigit(x) ? (x - '0') : (x - 'W')) + + for (i = j = 0; (i < src_len) && (j < (dst_len - 1)); i++, j++) { + if ((i < src_len - 2) && (src[i] == '%') + && isxdigit((unsigned char)src[i + 1]) + && isxdigit((unsigned char)src[i + 2])) { + a = tolower((unsigned char)src[i + 1]); + b = tolower((unsigned char)src[i + 2]); + dst[j] = (char)((HEXTOI(a) << 4) | HEXTOI(b)); + i += 2; + } else if (is_form_url_encoded && (src[i] == '+')) { + dst[j] = ' '; + } else if ((unsigned char)src[i] <= ' ') { + return -1; /* invalid character */ + } else { + dst[j] = src[i]; + } + } + +#undef HEXTOI + + dst[j] = '\0'; /* Null-terminate the destination */ + + return (i >= src_len) ? j : -1; +} + + +/* form url decoding of an entire string */ +static void +url_decode_in_place(char *buf) +{ + int len = (int)strlen(buf); + (void)mg_url_decode(buf, len, buf, len + 1, 1); +} + + +CIVETWEB_API int +mg_get_var(const char *data, + size_t data_len, + const char *name, + char *dst, + size_t dst_len) +{ + return mg_get_var2(data, data_len, name, dst, dst_len, 0); +} + + +CIVETWEB_API int +mg_get_var2(const char *data, + size_t data_len, + const char *name, + char *dst, + size_t dst_len, + size_t occurrence) +{ + const char *p, *e, *s; + size_t name_len; + int len; + + if ((dst == NULL) || (dst_len == 0)) { + len = -2; + } else if ((data == NULL) || (name == NULL) || (data_len == 0)) { + len = -1; + dst[0] = '\0'; + } else { + name_len = strlen(name); + e = data + data_len; + len = -1; + dst[0] = '\0'; + + /* data is "var1=val1&var2=val2...". Find variable first */ + for (p = data; p + name_len < e; p++) { + if (((p == data) || (p[-1] == '&')) && (p[name_len] == '=') + && !mg_strncasecmp(name, p, name_len) && 0 == occurrence--) { + /* Point p to variable value */ + p += name_len + 1; + + /* Point s to the end of the value */ + s = (const char *)memchr(p, '&', (size_t)(e - p)); + if (s == NULL) { + s = e; + } + DEBUG_ASSERT(s >= p); + if (s < p) { + return -3; + } + + /* Decode variable into destination buffer */ + len = mg_url_decode(p, (int)(s - p), dst, (int)dst_len, 1); + + /* Redirect error code from -1 to -2 (destination buffer too + * small). */ + if (len == -1) { + len = -2; + } + break; + } + } + } + + return len; +} + + +/* split a string "key1=val1&key2=val2" into key/value pairs */ +CIVETWEB_API int +mg_split_form_urlencoded(char *data, + struct mg_header *form_fields, + unsigned num_form_fields) +{ + char *b; + int i; + int num = 0; + + if (data == NULL) { + /* parameter error */ + return -1; + } + + if ((form_fields == NULL) && (num_form_fields == 0)) { + /* determine the number of expected fields */ + if (data[0] == 0) { + return 0; + } + /* count number of & to return the number of key-value-pairs */ + num = 1; + while (*data) { + if (*data == '&') { + num++; + } + data++; + } + return num; + } + + if ((form_fields == NULL) || ((int)num_form_fields <= 0)) { + /* parameter error */ + return -1; + } + + for (i = 0; i < (int)num_form_fields; i++) { + /* extract key-value pairs from input data */ + while ((*data == ' ') || (*data == '\t')) { + /* skip initial spaces */ + data++; + } + if (*data == 0) { + /* end of string reached */ + break; + } + form_fields[num].name = data; + + /* find & or = */ + b = data; + while ((*b != 0) && (*b != '&') && (*b != '=')) { + b++; + } + + if (*b == 0) { + /* last key without value */ + form_fields[num].value = NULL; + } else if (*b == '&') { + /* mid key without value */ + form_fields[num].value = NULL; + } else { + /* terminate string */ + *b = 0; + /* value starts after '=' */ + data = b + 1; + form_fields[num].value = data; + } + + /* new field is stored */ + num++; + + /* find a next key */ + b = strchr(data, '&'); + if (b == 0) { + /* no more data */ + break; + } else { + /* terminate value of last field at '&' */ + *b = 0; + /* next key-value-pairs starts after '&' */ + data = b + 1; + } + } + + /* Decode all values */ + for (i = 0; i < num; i++) { + if (form_fields[i].name) { + url_decode_in_place((char *)form_fields[i].name); + } + if (form_fields[i].value) { + url_decode_in_place((char *)form_fields[i].value); + } + } + + /* return number of fields found */ + return num; +} + + +/* HCP24: some changes to compare whole var_name */ +CIVETWEB_API int +mg_get_cookie(const char *cookie_header, + const char *var_name, + char *dst, + size_t dst_size) +{ + const char *s, *p, *end; + int name_len, len = -1; + + if ((dst == NULL) || (dst_size == 0)) { + return -2; + } + + dst[0] = '\0'; + if ((var_name == NULL) || ((s = cookie_header) == NULL)) { + return -1; + } + + name_len = (int)strlen(var_name); + end = s + strlen(s); + for (; (s = mg_strcasestr(s, var_name)) != NULL; s += name_len) { + if (s[name_len] == '=') { + /* HCP24: now check is it a substring or a full cookie name */ + if ((s == cookie_header) || (s[-1] == ' ')) { + s += name_len + 1; + if ((p = strchr(s, ' ')) == NULL) { + p = end; + } + if (p[-1] == ';') { + p--; + } + if ((*s == '"') && (p[-1] == '"') && (p > s + 1)) { + s++; + p--; + } + if ((size_t)(p - s) < dst_size) { + len = (int)(p - s); + mg_strlcpy(dst, s, (size_t)len + 1); + } else { + len = -3; + } + break; + } + } + } + return len; +} + + +CIVETWEB_API int +mg_base64_encode(const unsigned char *src, + size_t src_len, + char *dst, + size_t *dst_len) +{ + static const char *b64 = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + size_t i, j; + int a, b, c; + + if (dst_len != NULL) { + /* Expected length including 0 termination: */ + /* IN 1 -> OUT 5, IN 2 -> OUT 5, IN 3 -> OUT 5, IN 4 -> OUT 9, + * IN 5 -> OUT 9, IN 6 -> OUT 9, IN 7 -> OUT 13, etc. */ + size_t expected_len = ((src_len + 2) / 3) * 4 + 1; + if (*dst_len < expected_len) { + if (*dst_len > 0) { + dst[0] = '\0'; + } + *dst_len = expected_len; + return 0; + } + } + + for (i = j = 0; i < src_len; i += 3) { + a = src[i]; + b = ((i + 1) >= src_len) ? 0 : src[i + 1]; + c = ((i + 2) >= src_len) ? 0 : src[i + 2]; + + dst[j++] = b64[a >> 2]; + dst[j++] = b64[((a & 3) << 4) | (b >> 4)]; + if (i + 1 < src_len) { + dst[j++] = b64[(b & 15) << 2 | (c >> 6)]; + } + if (i + 2 < src_len) { + dst[j++] = b64[c & 63]; + } + } + while (j % 4 != 0) { + dst[j++] = '='; + } + dst[j++] = '\0'; + + if (dst_len != NULL) { + *dst_len = (size_t)j; + } + + /* Return -1 for "OK" */ + return -1; +} + + +static unsigned char +b64reverse(char letter) +{ + if ((letter >= 'A') && (letter <= 'Z')) { + return (unsigned char)(letter - 'A'); + } + if ((letter >= 'a') && (letter <= 'z')) { + return (unsigned char)(letter - 'a' + 26); + } + if ((letter >= '0') && (letter <= '9')) { + return (unsigned char)(letter - '0' + 52); + } + if (letter == '+') { + return 62; + } + if (letter == '/') { + return 63; + } + if (letter == '=') { + return 255; /* normal end */ + } + return 254; /* error */ +} + + +CIVETWEB_API int +mg_base64_decode(const char *src, + size_t src_len, + unsigned char *dst, + size_t *dst_len) +{ + size_t i; + unsigned char a, b, c, d; + size_t dst_len_limit = (size_t)-1; + size_t dst_len_used = 0; + + if (dst_len != NULL) { + dst_len_limit = *dst_len; + *dst_len = 0; + } + + for (i = 0; i < src_len; i += 4) { + /* Read 4 characters from BASE64 string */ + a = b64reverse(src[i]); + if (a >= 254) { + return (int)i; + } + + b = b64reverse(((i + 1) >= src_len) ? 0 : src[i + 1]); + if (b >= 254) { + return (int)i + 1; + } + + c = b64reverse(((i + 2) >= src_len) ? 0 : src[i + 2]); + if (c == 254) { + return (int)i + 2; + } + + d = b64reverse(((i + 3) >= src_len) ? 0 : src[i + 3]); + if (d == 254) { + return (int)i + 3; + } + + /* Add first (of 3) decoded character */ + if (dst_len_used < dst_len_limit) { + dst[dst_len_used] = (unsigned char)((unsigned char)(a << 2) + + (unsigned char)(b >> 4)); + } + dst_len_used++; + + if (c != 255) { + if (dst_len_used < dst_len_limit) { + + dst[dst_len_used] = (unsigned char)((unsigned char)(b << 4) + + (unsigned char)(c >> 2)); + } + dst_len_used++; + if (d != 255) { + if (dst_len_used < dst_len_limit) { + dst[dst_len_used] = + (unsigned char)((unsigned char)(c << 6) + d); + } + dst_len_used++; + } + } + } + + /* Add terminating zero */ + if (dst_len_used < dst_len_limit) { + dst[dst_len_used] = '\0'; + } + dst_len_used++; + if (dst_len != NULL) { + *dst_len = dst_len_used; + } + + if (dst_len_used > dst_len_limit) { + /* Out of memory */ + return 0; + } + + /* Return -1 for "OK" */ + return -1; +} + + +static int +is_put_or_delete_method(const struct mg_connection *conn) +{ + if (conn) { + const char *s = conn->request_info.request_method; + if (s != NULL) { + /* PUT, DELETE, MKCOL, PATCH, LOCK, UNLOCK, PROPPATCH, MOVE, COPY */ + return (!strcmp(s, "PUT") || !strcmp(s, "DELETE") + || !strcmp(s, "MKCOL") || !strcmp(s, "PATCH") + || !strcmp(s, "LOCK") || !strcmp(s, "UNLOCK") + || !strcmp(s, "PROPPATCH") || !strcmp(s, "MOVE") + || !strcmp(s, "COPY")); + } + } + return 0; +} + + +static int +is_civetweb_webdav_method(const struct mg_connection *conn) +{ + /* Note: Here we only have to identify the WebDav methods that need special + * handling in the CivetWeb code - not all methods used in WebDav. In + * particular, methods used on directories (when using Windows Explorer as + * WebDav client). + */ + if (conn) { + const char *s = conn->request_info.request_method; + if (s != NULL) { + /* These are the civetweb builtin DAV methods */ + return (!strcmp(s, "PROPFIND") || !strcmp(s, "PROPPATCH") + || !strcmp(s, "LOCK") || !strcmp(s, "UNLOCK") + || !strcmp(s, "MOVE") || !strcmp(s, "COPY")); + } + } + return 0; +} + + +#if !defined(NO_FILES) +static int +extention_matches_script( + struct mg_connection *conn, /* in: request (must be valid) */ + const char *filename /* in: filename (must be valid) */ +) +{ +#if !defined(NO_CGI) + int cgi_config_idx, inc, max; +#endif + +#if defined(USE_LUA) + if (match_prefix_strlen(conn->dom_ctx->config[LUA_SCRIPT_EXTENSIONS], + filename) + > 0) { + return 1; + } +#endif +#if defined(USE_DUKTAPE) + if (match_prefix_strlen(conn->dom_ctx->config[DUKTAPE_SCRIPT_EXTENSIONS], + filename) + > 0) { + return 1; + } +#endif +#if !defined(NO_CGI) + inc = CGI2_EXTENSIONS - CGI_EXTENSIONS; + max = PUT_DELETE_PASSWORDS_FILE - CGI_EXTENSIONS; + for (cgi_config_idx = 0; cgi_config_idx < max; cgi_config_idx += inc) { + if ((conn->dom_ctx->config[CGI_EXTENSIONS + cgi_config_idx] != NULL) + && (match_prefix_strlen( + conn->dom_ctx->config[CGI_EXTENSIONS + cgi_config_idx], + filename) + > 0)) { + return 1; + } + } +#endif + /* filename and conn could be unused, if all preocessor conditions + * are false (no script language supported). */ + (void)filename; + (void)conn; + + return 0; +} + + +static int +extention_matches_template_text( + struct mg_connection *conn, /* in: request (must be valid) */ + const char *filename /* in: filename (must be valid) */ +) +{ +#if defined(USE_LUA) + if (match_prefix_strlen(conn->dom_ctx->config[LUA_SERVER_PAGE_EXTENSIONS], + filename) + > 0) { + return 1; + } +#endif + if (match_prefix_strlen(conn->dom_ctx->config[SSI_EXTENSIONS], filename) + > 0) { + return 1; + } + return 0; +} + + +/* For given directory path, substitute it to valid index file. + * Return 1 if index file has been found, 0 if not found. + * If the file is found, it's stats is returned in stp. */ +static int +substitute_index_file_aux(struct mg_connection *conn, + char *path, + size_t path_len, + struct mg_file_stat *filestat) +{ + const char *list = conn->dom_ctx->config[INDEX_FILES]; + struct vec filename_vec; + size_t n = strlen(path); + int found = 0; + + /* The 'path' given to us points to the directory. Remove all trailing + * directory separator characters from the end of the path, and + * then append single directory separator character. */ + while ((n > 0) && (path[n - 1] == '/')) { + n--; + } + path[n] = '/'; + + /* Traverse index files list. For each entry, append it to the given + * path and see if the file exists. If it exists, break the loop */ + while ((list = next_option(list, &filename_vec, NULL)) != NULL) { + /* Ignore too long entries that may overflow path buffer */ + if ((filename_vec.len + 1) > (path_len - (n + 1))) { + continue; + } + + /* Prepare full path to the index file */ + mg_strlcpy(path + n + 1, filename_vec.ptr, filename_vec.len + 1); + + /* Does it exist? */ + if (mg_stat(conn, path, filestat)) { + /* Yes it does, break the loop */ + found = 1; + break; + } + } + + /* If no index file exists, restore directory path */ + if (!found) { + path[n] = '\0'; + } + + return found; +} + +/* Same as above, except if the first try fails and a fallback-root is + * configured, we'll try there also */ +static int +substitute_index_file(struct mg_connection *conn, + char *path, + size_t path_len, + struct mg_file_stat *filestat) +{ + int ret = substitute_index_file_aux(conn, path, path_len, filestat); + if (ret == 0) { + const char *root_prefix = conn->dom_ctx->config[DOCUMENT_ROOT]; + const char *fallback_root_prefix = + conn->dom_ctx->config[FALLBACK_DOCUMENT_ROOT]; + if ((root_prefix) && (fallback_root_prefix)) { + const size_t root_prefix_len = strlen(root_prefix); + if ((strncmp(path, root_prefix, root_prefix_len) == 0)) { + char scratch_path[UTF8_PATH_MAX]; /* separate storage, to avoid + side effects if we fail */ + size_t sub_path_len; + + const size_t fallback_root_prefix_len = + strlen(fallback_root_prefix); + const char *sub_path = path + root_prefix_len; + while (*sub_path == '/') { + sub_path++; + } + sub_path_len = strlen(sub_path); + + if (((fallback_root_prefix_len + 1 + sub_path_len + 1) + < sizeof(scratch_path))) { + /* The concatenations below are all safe because we + * pre-verified string lengths above */ + char *nul; + strcpy(scratch_path, fallback_root_prefix); + nul = strchr(scratch_path, '\0'); + if ((nul > scratch_path) && (*(nul - 1) != '/')) { + *nul++ = '/'; + *nul = '\0'; + } + strcat(scratch_path, sub_path); + if (substitute_index_file_aux(conn, + scratch_path, + sizeof(scratch_path), + filestat)) { + mg_strlcpy(path, scratch_path, path_len); + return 1; + } + } + } + } + } + return ret; +} + +#endif + + +static void +interpret_uri(struct mg_connection *conn, /* in/out: request (must be valid) */ + char *filename, /* out: filename */ + size_t filename_buf_len, /* in: size of filename buffer */ + struct mg_file_stat *filestat, /* out: file status structure */ + int *is_found, /* out: file found (directly) */ + int *is_script_resource, /* out: handled by a script? */ + int *is_websocket_request, /* out: websocket connection? */ + int *is_put_or_delete_request, /* out: put/delete a file? */ + int *is_webdav_request, /* out: webdav request? */ + int *is_template_text /* out: SSI file or LSP file? */ +) +{ + char const *accept_encoding; + +#if !defined(NO_FILES) + const char *uri = conn->request_info.local_uri; + const char *roots[] = {conn->dom_ctx->config[DOCUMENT_ROOT], + conn->dom_ctx->config[FALLBACK_DOCUMENT_ROOT], + NULL}; + int fileExists = 0; + const char *rewrite; + struct vec a, b; + ptrdiff_t match_len; + char gz_path[UTF8_PATH_MAX]; + int truncated; + int i; +#if !defined(NO_CGI) || defined(USE_LUA) || defined(USE_DUKTAPE) + char *tmp_str; + size_t tmp_str_len, sep_pos; + int allow_substitute_script_subresources; +#endif +#else + (void)filename_buf_len; /* unused if NO_FILES is defined */ +#endif + + /* Step 1: Set all initially unknown outputs to zero */ + memset(filestat, 0, sizeof(*filestat)); + *filename = 0; + *is_found = 0; + *is_script_resource = 0; + *is_template_text = 0; + + /* Step 2: Classify the request method */ + /* Step 2a: Check if the request attempts to modify the file system */ + *is_put_or_delete_request = is_put_or_delete_method(conn); + /* Step 2b: Check if the request uses WebDav method that requires special + * handling */ + *is_webdav_request = is_civetweb_webdav_method(conn); + + /* Step 3: Check if it is a websocket request, and modify the document + * root if required */ +#if defined(USE_WEBSOCKET) + *is_websocket_request = (conn->protocol_type == PROTOCOL_TYPE_WEBSOCKET); +#if !defined(NO_FILES) + if ((*is_websocket_request) && conn->dom_ctx->config[WEBSOCKET_ROOT]) { + roots[0] = conn->dom_ctx->config[WEBSOCKET_ROOT]; + roots[1] = conn->dom_ctx->config[FALLBACK_WEBSOCKET_ROOT]; + } +#endif /* !NO_FILES */ +#else /* USE_WEBSOCKET */ + *is_websocket_request = 0; +#endif /* USE_WEBSOCKET */ + + /* Step 4: Check if gzip encoded response is allowed */ + conn->accept_gzip = 0; + if ((accept_encoding = mg_get_header(conn, "Accept-Encoding")) != NULL) { + if (strstr(accept_encoding, "gzip") != NULL) { + conn->accept_gzip = 1; + } + } + +#if !defined(NO_FILES) + /* Step 5: If there is no root directory, don't look for files. */ + /* Note that roots[0] == NULL is a regular use case here. This occurs, + * if all requests are handled by callbacks, so the WEBSOCKET_ROOT + * config is not required. */ + if (roots[0] == NULL) { + /* all file related outputs have already been set to 0, just return + */ + return; + } + + for (i = 0; roots[i] != NULL; i++) { + /* Step 6: Determine the local file path from the root path and the + * request uri. */ + /* Using filename_buf_len - 1 because memmove() for PATH_INFO may shift + * part of the path one byte on the right. */ + truncated = 0; + mg_snprintf(conn, + &truncated, + filename, + filename_buf_len - 1, + "%s%s", + roots[i], + uri); + + if (truncated) { + goto interpret_cleanup; + } + + /* Step 7: URI rewriting */ + rewrite = conn->dom_ctx->config[URL_REWRITE_PATTERN]; + while ((rewrite = next_option(rewrite, &a, &b)) != NULL) { + if ((match_len = match_prefix(a.ptr, a.len, uri)) > 0) { + mg_snprintf(conn, + &truncated, + filename, + filename_buf_len - 1, + "%.*s%s", + (int)b.len, + b.ptr, + uri + match_len); + break; + } + } + + if (truncated) { + goto interpret_cleanup; + } + + /* Step 8: Check if the file exists at the server */ + /* Local file path and name, corresponding to requested URI + * is now stored in "filename" variable. */ + if (mg_stat(conn, filename, filestat)) { + fileExists = 1; + break; + } + } + + if (fileExists) { + int uri_len = (int)strlen(uri); + int is_uri_end_slash = (uri_len > 0) && (uri[uri_len - 1] == '/'); + + /* 8.1: File exists. */ + *is_found = 1; + + /* 8.2: Check if it is a script type. */ + if (extention_matches_script(conn, filename)) { + /* The request addresses a CGI resource, Lua script or + * server-side javascript. + * The URI corresponds to the script itself (like + * /path/script.cgi), and there is no additional resource + * path (like /path/script.cgi/something). + * Requests that modify (replace or delete) a resource, like + * PUT and DELETE requests, should replace/delete the script + * file. + * Requests that read or write from/to a resource, like GET and + * POST requests, should call the script and return the + * generated response. */ + *is_script_resource = (!*is_put_or_delete_request); + } + + /* 8.3: Check for SSI and LSP files */ + if (extention_matches_template_text(conn, filename)) { + /* Same as above, but for *.lsp and *.shtml files. */ + /* A "template text" is a file delivered directly to the client, + * but with some text tags replaced by dynamic content. + * E.g. a Server Side Include (SSI) or Lua Page/Lua Server Page + * (LP, LSP) file. */ + *is_template_text = (!*is_put_or_delete_request); + } + + /* 8.4: If the request target is a directory, there could be + * a substitute file (index.html, index.cgi, ...). */ + /* But do not substitute a directory for a WebDav request */ + if (filestat->is_directory && is_uri_end_slash + && (!*is_webdav_request)) { + /* Use a local copy here, since substitute_index_file will + * change the content of the file status */ + struct mg_file_stat tmp_filestat; + memset(&tmp_filestat, 0, sizeof(tmp_filestat)); + + if (substitute_index_file( + conn, filename, filename_buf_len, &tmp_filestat)) { + + /* Substitute file found. Copy stat to the output, then + * check if the file is a script file */ + *filestat = tmp_filestat; + + if (extention_matches_script(conn, filename)) { + /* Substitute file is a script file */ + *is_script_resource = 1; + } else if (extention_matches_template_text(conn, filename)) { + /* Substitute file is a LSP or SSI file */ + *is_template_text = 1; + } else { + /* Substitute file is a regular file */ + *is_script_resource = 0; + *is_found = (mg_stat(conn, filename, filestat) ? 1 : 0); + } + } + /* If there is no substitute file, the server could return + * a directory listing in a later step */ + } + return; + } + + /* Step 9: Check for zipped files: */ + /* If we can't find the actual file, look for the file + * with the same name but a .gz extension. If we find it, + * use that and set the gzipped flag in the file struct + * to indicate that the response need to have the content- + * encoding: gzip header. + * We can only do this if the browser declares support. */ + if (conn->accept_gzip) { + mg_snprintf( + conn, &truncated, gz_path, sizeof(gz_path), "%s.gz", filename); + + if (truncated) { + goto interpret_cleanup; + } + + if (mg_stat(conn, gz_path, filestat)) { + if (filestat) { + filestat->is_gzipped = 1; + *is_found = 1; + } + /* Currently gz files can not be scripts. */ + return; + } + } + +#if !defined(NO_CGI) || defined(USE_LUA) || defined(USE_DUKTAPE) + /* Step 10: Script resources may handle sub-resources */ + /* Support PATH_INFO for CGI scripts. */ + tmp_str_len = strlen(filename); + tmp_str = + (char *)mg_malloc_ctx(tmp_str_len + UTF8_PATH_MAX + 1, conn->phys_ctx); + if (!tmp_str) { + /* Out of memory */ + goto interpret_cleanup; + } + memcpy(tmp_str, filename, tmp_str_len + 1); + + /* Check config, if index scripts may have sub-resources */ + allow_substitute_script_subresources = + !mg_strcasecmp(conn->dom_ctx->config[ALLOW_INDEX_SCRIPT_SUB_RES], + "yes"); + if (*is_webdav_request) { + /* TO BE DEFINED: Should scripts handle special WebDAV methods lile + * PROPFIND for their subresources? */ + /* allow_substitute_script_subresources = 0; */ + } + + sep_pos = tmp_str_len; + while (sep_pos > 0) { + sep_pos--; + if (tmp_str[sep_pos] == '/') { + int is_script = 0, does_exist = 0; + + tmp_str[sep_pos] = 0; + if (tmp_str[0]) { + is_script = extention_matches_script(conn, tmp_str); + does_exist = mg_stat(conn, tmp_str, filestat); + } + + if (does_exist && is_script) { + filename[sep_pos] = 0; + memmove(filename + sep_pos + 2, + filename + sep_pos + 1, + strlen(filename + sep_pos + 1) + 1); + conn->path_info = filename + sep_pos + 1; + filename[sep_pos + 1] = '/'; + *is_script_resource = 1; + *is_found = 1; + break; + } + + if (allow_substitute_script_subresources) { + if (substitute_index_file( + conn, tmp_str, tmp_str_len + UTF8_PATH_MAX, filestat)) { + + /* some intermediate directory has an index file */ + if (extention_matches_script(conn, tmp_str)) { + + size_t script_name_len = strlen(tmp_str); + + /* subres_name read before this memory locatio will be + overwritten */ + char *subres_name = filename + sep_pos; + size_t subres_name_len = strlen(subres_name); + + DEBUG_TRACE("Substitute script %s serving path %s", + tmp_str, + filename); + + /* this index file is a script */ + if ((script_name_len + subres_name_len + 2) + >= filename_buf_len) { + mg_free(tmp_str); + goto interpret_cleanup; + } + + conn->path_info = + filename + script_name_len + 1; /* new target */ + memmove(conn->path_info, subres_name, subres_name_len); + conn->path_info[subres_name_len] = 0; + memcpy(filename, tmp_str, script_name_len + 1); + + *is_script_resource = 1; + *is_found = 1; + break; + + } else { + + DEBUG_TRACE("Substitute file %s serving path %s", + tmp_str, + filename); + + /* non-script files will not have sub-resources */ + filename[sep_pos] = 0; + conn->path_info = 0; + *is_script_resource = 0; + *is_found = 0; + break; + } + } + } + + tmp_str[sep_pos] = '/'; + } + } + + mg_free(tmp_str); + +#endif /* !defined(NO_CGI) || defined(USE_LUA) || defined(USE_DUKTAPE) */ +#endif /* !defined(NO_FILES) */ + return; + +#if !defined(NO_FILES) +/* Reset all outputs */ +interpret_cleanup: + memset(filestat, 0, sizeof(*filestat)); + *filename = 0; + *is_found = 0; + *is_script_resource = 0; + *is_websocket_request = 0; + *is_put_or_delete_request = 0; +#endif /* !defined(NO_FILES) */ +} + + +/* Check whether full request is buffered. Return: + * -1 if request or response is malformed + * 0 if request or response is not yet fully buffered + * >0 actual request length, including last \r\n\r\n */ +static int +get_http_header_len(const char *buf, int buflen) +{ + int i; + for (i = 0; i < buflen; i++) { + /* Do an unsigned comparison in some conditions below */ + const unsigned char c = (unsigned char)buf[i]; + + if ((c < 128) && ((char)c != '\r') && ((char)c != '\n') + && !isprint(c)) { + /* abort scan as soon as one malformed character is found */ + return -1; + } + + if (i < buflen - 1) { + if ((buf[i] == '\n') && (buf[i + 1] == '\n')) { + /* Two newline, no carriage return - not standard compliant, + * but it should be accepted */ + return i + 2; + } + } + + if (i < buflen - 3) { + if ((buf[i] == '\r') && (buf[i + 1] == '\n') && (buf[i + 2] == '\r') + && (buf[i + 3] == '\n')) { + /* Two \r\n - standard compliant */ + return i + 4; + } + } + } + + return 0; +} + + +#if !defined(NO_CACHING) +/* Convert month to the month number. Return -1 on error, or month number */ +static int +get_month_index(const char *s) +{ + size_t i; + + for (i = 0; i < ARRAY_SIZE(month_names); i++) { + if (!strcmp(s, month_names[i])) { + return (int)i; + } + } + + return -1; +} + + +/* Parse UTC date-time string, and return the corresponding time_t value. */ +static time_t +parse_date_string(const char *datetime) +{ + char month_str[32] = {0}; + int second, minute, hour, day, month, year; + time_t result = (time_t)0; + struct tm tm; + + if ((sscanf(datetime, + "%d/%3s/%d %d:%d:%d", + &day, + month_str, + &year, + &hour, + &minute, + &second) + == 6) + || (sscanf(datetime, + "%d %3s %d %d:%d:%d", + &day, + month_str, + &year, + &hour, + &minute, + &second) + == 6) + || (sscanf(datetime, + "%*3s, %d %3s %d %d:%d:%d", + &day, + month_str, + &year, + &hour, + &minute, + &second) + == 6) + || (sscanf(datetime, + "%d-%3s-%d %d:%d:%d", + &day, + month_str, + &year, + &hour, + &minute, + &second) + == 6)) { + month = get_month_index(month_str); + if ((month >= 0) && (year >= 1970)) { + memset(&tm, 0, sizeof(tm)); + tm.tm_year = year - 1900; + tm.tm_mon = month; + tm.tm_mday = day; + tm.tm_hour = hour; + tm.tm_min = minute; + tm.tm_sec = second; + result = timegm(&tm); + } + } + + return result; +} +#endif /* !NO_CACHING */ + + +/* Pre-process URIs according to RFC + protect against directory disclosure + * attacks by removing '..', excessive '/' and '\' characters */ +static void +remove_dot_segments(char *inout) +{ + /* Windows backend protection + * (https://tools.ietf.org/html/rfc3986#section-7.3): Replace backslash + * in URI by slash */ + char *out_end = inout; + char *in = inout; + + if (!in) { + /* Param error. */ + return; + } + + while (*in) { + if (*in == '\\') { + *in = '/'; + } + in++; + } + + /* Algorithm "remove_dot_segments" from + * https://tools.ietf.org/html/rfc3986#section-5.2.4 */ + /* Step 1: + * The input buffer is initialized. + * The output buffer is initialized to the empty string. + */ + in = inout; + + /* Step 2: + * While the input buffer is not empty, loop as follows: + */ + /* Less than out_end of the inout buffer is used as output, so keep + * condition: out_end <= in */ + while (*in) { + /* Step 2a: + * If the input buffer begins with a prefix of "../" or "./", + * then remove that prefix from the input buffer; + */ + if (!strncmp(in, "../", 3)) { + in += 3; + } else if (!strncmp(in, "./", 2)) { + in += 2; + } + /* otherwise */ + /* Step 2b: + * if the input buffer begins with a prefix of "/./" or "/.", + * where "." is a complete path segment, then replace that + * prefix with "/" in the input buffer; + */ + else if (!strncmp(in, "/./", 3)) { + in += 2; + } else if (!strcmp(in, "/.")) { + in[1] = 0; + } + /* otherwise */ + /* Step 2c: + * if the input buffer begins with a prefix of "/../" or "/..", + * where ".." is a complete path segment, then replace that + * prefix with "/" in the input buffer and remove the last + * segment and its preceding "/" (if any) from the output + * buffer; + */ + else if (!strncmp(in, "/../", 4)) { + in += 3; + if (inout != out_end) { + /* remove last segment */ + do { + out_end--; + } while ((inout != out_end) && (*out_end != '/')); + } + } else if (!strcmp(in, "/..")) { + in[1] = 0; + if (inout != out_end) { + /* remove last segment */ + do { + out_end--; + } while ((inout != out_end) && (*out_end != '/')); + } + } + /* otherwise */ + /* Step 2d: + * if the input buffer consists only of "." or "..", then remove + * that from the input buffer; + */ + else if (!strcmp(in, ".") || !strcmp(in, "..")) { + *in = 0; + } + /* otherwise */ + /* Step 2e: + * move the first path segment in the input buffer to the end of + * the output buffer, including the initial "/" character (if + * any) and any subsequent characters up to, but not including, + * the next "/" character or the end of the input buffer. + */ + else { + do { + *out_end = *in; + out_end++; + in++; + } while ((*in != 0) && (*in != '/')); + } + } + + /* Step 3: + * Finally, the output buffer is returned as the result of + * remove_dot_segments. + */ + /* Terminate output */ + *out_end = 0; + + /* For Windows, the files/folders "x" and "x." (with a dot but without + * extension) are identical. Replace all "./" by "/" and remove a "." at + * the end. Also replace all "//" by "/". Repeat until there is no "./" + * or "//" anymore. + */ + out_end = in = inout; + while (*in) { + if (*in == '.') { + /* remove . at the end or preceding of / */ + char *in_ahead = in; + do { + in_ahead++; + } while (*in_ahead == '.'); + if (*in_ahead == '/') { + in = in_ahead; + if ((out_end != inout) && (out_end[-1] == '/')) { + /* remove generated // */ + out_end--; + } + } else if (*in_ahead == 0) { + in = in_ahead; + } else { + do { + *out_end++ = '.'; + in++; + } while (in != in_ahead); + } + } else if (*in == '/') { + /* replace // by / */ + *out_end++ = '/'; + do { + in++; + } while (*in == '/'); + } else { + *out_end++ = *in; + in++; + } + } + *out_end = 0; +} + + +static const struct { + const char *extension; + size_t ext_len; + const char *mime_type; +} builtin_mime_types[] = { + /* IANA registered MIME types + * (http://www.iana.org/assignments/media-types) + * application types */ + {".bin", 4, "application/octet-stream"}, + {".cer", 4, "application/pkix-cert"}, + {".crl", 4, "application/pkix-crl"}, + {".crt", 4, "application/pkix-cert"}, + {".deb", 4, "application/octet-stream"}, + {".dmg", 4, "application/octet-stream"}, + {".dll", 4, "application/octet-stream"}, + {".doc", 4, "application/msword"}, + {".eps", 4, "application/postscript"}, + {".exe", 4, "application/octet-stream"}, + {".iso", 4, "application/octet-stream"}, + {".js", 3, "application/javascript"}, + {".json", 5, "application/json"}, + {".mjs", 4, "application/javascript"}, + {".msi", 4, "application/octet-stream"}, + {".pem", 4, "application/x-pem-file"}, + {".pdf", 4, "application/pdf"}, + {".ps", 3, "application/postscript"}, + {".rtf", 4, "application/rtf"}, + {".wasm", 5, "application/wasm"}, + {".xhtml", 6, "application/xhtml+xml"}, + {".xsl", 4, "application/xml"}, + {".xslt", 5, "application/xml"}, + + /* fonts */ + {".ttf", 4, "application/font-sfnt"}, + {".cff", 4, "application/font-sfnt"}, + {".otf", 4, "application/font-sfnt"}, + {".aat", 4, "application/font-sfnt"}, + {".sil", 4, "application/font-sfnt"}, + {".pfr", 4, "application/font-tdpfr"}, + {".woff", 5, "application/font-woff"}, + {".woff2", 6, "application/font-woff2"}, + + /* audio */ + {".mp3", 4, "audio/mpeg"}, + {".oga", 4, "audio/ogg"}, + {".ogg", 4, "audio/ogg"}, + + /* image */ + {".gif", 4, "image/gif"}, + {".ief", 4, "image/ief"}, + {".jpeg", 5, "image/jpeg"}, + {".jpg", 4, "image/jpeg"}, + {".jpm", 4, "image/jpm"}, + {".jpx", 4, "image/jpx"}, + {".png", 4, "image/png"}, + {".svg", 4, "image/svg+xml"}, + {".tif", 4, "image/tiff"}, + {".tiff", 5, "image/tiff"}, + + /* model */ + {".wrl", 4, "model/vrml"}, + + /* text */ + {".css", 4, "text/css"}, + {".csv", 4, "text/csv"}, + {".htm", 4, "text/html"}, + {".html", 5, "text/html"}, + {".sgm", 4, "text/sgml"}, + {".shtm", 5, "text/html"}, + {".shtml", 6, "text/html"}, + {".txt", 4, "text/plain"}, + {".xml", 4, "text/xml"}, + + /* video */ + {".mov", 4, "video/quicktime"}, + {".mp4", 4, "video/mp4"}, + {".mpeg", 5, "video/mpeg"}, + {".mpg", 4, "video/mpeg"}, + {".ogv", 4, "video/ogg"}, + {".qt", 3, "video/quicktime"}, + + /* not registered types + * (http://reference.sitepoint.com/html/mime-types-full, + * http://www.hansenb.pdx.edu/DMKB/dict/tutorials/mime_typ.php, ..) */ + {".arj", 4, "application/x-arj-compressed"}, + {".gz", 3, "application/x-gunzip"}, + {".rar", 4, "application/x-arj-compressed"}, + {".swf", 4, "application/x-shockwave-flash"}, + {".tar", 4, "application/x-tar"}, + {".tgz", 4, "application/x-tar-gz"}, + {".torrent", 8, "application/x-bittorrent"}, + {".ppt", 4, "application/x-mspowerpoint"}, + {".xls", 4, "application/x-msexcel"}, + {".zip", 4, "application/x-zip-compressed"}, + {".aac", + 4, + "audio/aac"}, /* http://en.wikipedia.org/wiki/Advanced_Audio_Coding */ + {".flac", 5, "audio/flac"}, + {".aif", 4, "audio/x-aif"}, + {".m3u", 4, "audio/x-mpegurl"}, + {".mid", 4, "audio/x-midi"}, + {".ra", 3, "audio/x-pn-realaudio"}, + {".ram", 4, "audio/x-pn-realaudio"}, + {".wav", 4, "audio/x-wav"}, + {".bmp", 4, "image/bmp"}, + {".ico", 4, "image/x-icon"}, + {".pct", 4, "image/x-pct"}, + {".pict", 5, "image/pict"}, + {".rgb", 4, "image/x-rgb"}, + {".webm", 5, "video/webm"}, /* http://en.wikipedia.org/wiki/WebM */ + {".asf", 4, "video/x-ms-asf"}, + {".avi", 4, "video/x-msvideo"}, + {".m4v", 4, "video/x-m4v"}, + {NULL, 0, NULL}}; + + +CIVETWEB_API const char * +mg_get_builtin_mime_type(const char *path) +{ + const char *ext; + size_t i, path_len; + + path_len = strlen(path); + + for (i = 0; builtin_mime_types[i].extension != NULL; i++) { + ext = path + (path_len - builtin_mime_types[i].ext_len); + if ((path_len > builtin_mime_types[i].ext_len) + && (mg_strcasecmp(ext, builtin_mime_types[i].extension) == 0)) { + return builtin_mime_types[i].mime_type; + } + } + + return "text/plain"; +} + + +/* Look at the "path" extension and figure what mime type it has. + * Store mime type in the vector. */ +static void +get_mime_type(struct mg_connection *conn, const char *path, struct vec *vec) +{ + struct vec ext_vec, mime_vec; + const char *list, *ext; + size_t path_len; + + path_len = strlen(path); + + if ((conn == NULL) || (vec == NULL)) { + if (vec != NULL) { + memset(vec, '\0', sizeof(struct vec)); + } + return; + } + + /* Scan user-defined mime types first, in case user wants to + * override default mime types. */ + list = conn->dom_ctx->config[EXTRA_MIME_TYPES]; + while ((list = next_option(list, &ext_vec, &mime_vec)) != NULL) { + /* ext now points to the path suffix */ + ext = path + path_len - ext_vec.len; + if (mg_strncasecmp(ext, ext_vec.ptr, ext_vec.len) == 0) { + *vec = mime_vec; + return; + } + } + + vec->ptr = mg_get_builtin_mime_type(path); + vec->len = strlen(vec->ptr); +} + + +/* Stringify binary data. Output buffer must be twice as big as input, + * because each byte takes 2 bytes in string representation */ +static void +bin2str(char *to, const unsigned char *p, size_t len) +{ + static const char *hex = "0123456789abcdef"; + + for (; len--; p++) { + *to++ = hex[p[0] >> 4]; + *to++ = hex[p[0] & 0x0f]; + } + *to = '\0'; +} + + +/* Return stringified MD5 hash for list of strings. Buffer must be 33 bytes. + */ +CIVETWEB_API char * +mg_md5(char buf[33], ...) +{ + md5_byte_t hash[16]; + const char *p; + va_list ap; + md5_state_t ctx; + + md5_init(&ctx); + + va_start(ap, buf); + while ((p = va_arg(ap, const char *)) != NULL) { + md5_append(&ctx, (const md5_byte_t *)p, strlen(p)); + } + va_end(ap); + + md5_finish(&ctx, hash); + bin2str(buf, hash, sizeof(hash)); + return buf; +} + + +/* Check the user's password, return 1 if OK */ +static int +check_password_digest(const char *method, + const char *ha1, + const char *uri, + const char *nonce, + const char *nc, + const char *cnonce, + const char *qop, + const char *response) +{ + char ha2[32 + 1], expected_response[32 + 1]; + + /* Some of the parameters may be NULL */ + if ((method == NULL) || (nonce == NULL) || (nc == NULL) || (cnonce == NULL) + || (qop == NULL) || (response == NULL)) { + return 0; + } + + /* NOTE(lsm): due to a bug in MSIE, we do not compare the URI */ + if (strlen(response) != 32) { + return 0; + } + + mg_md5(ha2, method, ":", uri, NULL); + mg_md5(expected_response, + ha1, + ":", + nonce, + ":", + nc, + ":", + cnonce, + ":", + qop, + ":", + ha2, + NULL); + + return mg_strcasecmp(response, expected_response) == 0; +} + + +#if !defined(NO_FILESYSTEMS) +/* Use the global passwords file, if specified by auth_gpass option, + * or search for .htpasswd in the requested directory. */ +static void +open_auth_file(struct mg_connection *conn, + const char *path, + struct mg_file *filep) +{ + if ((conn != NULL) && (conn->dom_ctx != NULL)) { + char name[UTF8_PATH_MAX]; + const char *p, *e, + *gpass = conn->dom_ctx->config[GLOBAL_PASSWORDS_FILE]; + int truncated; + + if (gpass != NULL) { + /* Use global passwords file */ + if (!mg_fopen(conn, gpass, MG_FOPEN_MODE_READ, filep)) { +#if defined(DEBUG) + /* Use mg_cry_internal here, since gpass has been + * configured. */ + mg_cry_internal(conn, "fopen(%s): %s", gpass, strerror(ERRNO)); +#endif + } + /* Important: using local struct mg_file to test path for + * is_directory flag. If filep is used, mg_stat() makes it + * appear as if auth file was opened. + * TODO(mid): Check if this is still required after rewriting + * mg_stat */ + } else if (mg_stat(conn, path, &filep->stat) + && filep->stat.is_directory) { + mg_snprintf(conn, + &truncated, + name, + sizeof(name), + "%s/%s", + path, + PASSWORDS_FILE_NAME); + + if (truncated || !mg_fopen(conn, name, MG_FOPEN_MODE_READ, filep)) { +#if defined(DEBUG) + /* Don't use mg_cry_internal here, but only a trace, since + * this is a typical case. It will occur for every directory + * without a password file. */ + DEBUG_TRACE("fopen(%s): %s", name, strerror(ERRNO)); +#endif + } + } else { + /* Try to find .htpasswd in requested directory. */ + for (p = path, e = p + strlen(p) - 1; e > p; e--) { + if (e[0] == '/') { + break; + } + } + mg_snprintf(conn, + &truncated, + name, + sizeof(name), + "%.*s/%s", + (int)(e - p), + p, + PASSWORDS_FILE_NAME); + + if (truncated || !mg_fopen(conn, name, MG_FOPEN_MODE_READ, filep)) { +#if defined(DEBUG) + /* Don't use mg_cry_internal here, but only a trace, since + * this is a typical case. It will occur for every directory + * without a password file. */ + DEBUG_TRACE("fopen(%s): %s", name, strerror(ERRNO)); +#endif + } + } + } +} +#endif /* NO_FILESYSTEMS */ + + +/* Parsed Authorization header */ +struct auth_header { + char *user; + int type; /* 1 = basic, 2 = digest */ + char *plain_password; /* Basic only */ + char *uri, *cnonce, *response, *qop, *nc, *nonce; /* Digest only */ +}; + + +/* Return 1 on success. Always initializes the auth_header structure. */ +static int +parse_auth_header(struct mg_connection *conn, + char *buf, + size_t buf_size, + struct auth_header *auth_header) +{ + char *name, *value, *s; + const char *ah; + uint64_t nonce; + + if (!auth_header || !conn) { + return 0; + } + + (void)memset(auth_header, 0, sizeof(*auth_header)); + ah = mg_get_header(conn, "Authorization"); + + if (ah == NULL) { + /* No Authorization header at all */ + return 0; + } + if (0 == mg_strncasecmp(ah, "Basic ", 6)) { + /* Basic Auth (we never asked for this, but some client may send it) */ + char *split; + const char *userpw_b64 = ah + 6; + size_t userpw_b64_len = strlen(userpw_b64); + size_t buf_len_r = buf_size; + if (mg_base64_decode( + userpw_b64, userpw_b64_len, (unsigned char *)buf, &buf_len_r) + != -1) { + return 0; /* decode error */ + } + split = strchr(buf, ':'); + if (!split) { + return 0; /* Format error */ + } + + /* Separate string at ':' */ + *split = 0; + + /* User name is before ':', Password is after ':' */ + auth_header->user = buf; + auth_header->type = 1; + auth_header->plain_password = split + 1; + + return 1; + + } else if (0 == mg_strncasecmp(ah, "Digest ", 7)) { + /* Digest Auth ... implemented below */ + auth_header->type = 2; + + } else { + /* Unknown or invalid Auth method */ + return 0; + } + + /* Make modifiable copy of the auth header */ + (void)mg_strlcpy(buf, ah + 7, buf_size); + s = buf; + + /* Parse authorization header */ + for (;;) { + /* Gobble initial spaces */ + while (isspace((unsigned char)*s)) { + s++; + } + name = skip_quoted(&s, "=", " ", 0); + /* Value is either quote-delimited, or ends at first comma or space. + */ + if (s[0] == '\"') { + s++; + value = skip_quoted(&s, "\"", " ", '\\'); + if (s[0] == ',') { + s++; + } + } else { + value = skip_quoted(&s, ", ", " ", 0); /* IE uses commas, FF + * uses spaces */ + } + if (*name == '\0') { + break; + } + + if (!strcmp(name, "username")) { + auth_header->user = value; + } else if (!strcmp(name, "cnonce")) { + auth_header->cnonce = value; + } else if (!strcmp(name, "response")) { + auth_header->response = value; + } else if (!strcmp(name, "uri")) { + auth_header->uri = value; + } else if (!strcmp(name, "qop")) { + auth_header->qop = value; + } else if (!strcmp(name, "nc")) { + auth_header->nc = value; + } else if (!strcmp(name, "nonce")) { + auth_header->nonce = value; + } + } + +#if !defined(NO_NONCE_CHECK) + /* Read the nonce from the response. */ + if (auth_header->nonce == NULL) { + return 0; + } + s = NULL; + nonce = strtoull(auth_header->nonce, &s, 10); + if ((s == NULL) || (*s != 0)) { + return 0; + } + + /* Convert the nonce from the client to a number. */ + nonce ^= conn->dom_ctx->auth_nonce_mask; + + /* The converted number corresponds to the time the nounce has been + * created. This should not be earlier than the server start. */ + /* Server side nonce check is valuable in all situations but one: + * if the server restarts frequently, but the client should not see + * that, so the server should accept nonces from previous starts. */ + /* However, the reasonable default is to not accept a nonce from a + * previous start, so if anyone changed the access rights between + * two restarts, a new login is required. */ + if (nonce < (uint64_t)conn->phys_ctx->start_time) { + /* nonce is from a previous start of the server and no longer valid + * (replay attack?) */ + return 0; + } + /* Check if the nonce is too high, so it has not (yet) been used by the + * server. */ + if (nonce >= ((uint64_t)conn->phys_ctx->start_time + + conn->dom_ctx->nonce_count)) { + return 0; + } +#else + (void)nonce; +#endif + + return (auth_header->user != NULL); +} + + +static const char * +mg_fgets(char *buf, size_t size, struct mg_file *filep) +{ + if (!filep) { + return NULL; + } + + if (filep->access.fp != NULL) { + return fgets(buf, (int)size, filep->access.fp); + } else { + return NULL; + } +} + +/* Define the initial recursion depth for procesesing htpasswd files that + * include other htpasswd + * (or even the same) files. It is not difficult to provide a file or files + * s.t. they force civetweb + * to infinitely recurse and then crash. + */ +#define INITIAL_DEPTH 9 +#if INITIAL_DEPTH <= 0 +#error Bad INITIAL_DEPTH for recursion, set to at least 1 +#endif + +#if !defined(NO_FILESYSTEMS) +struct read_auth_file_struct { + struct mg_connection *conn; + struct auth_header auth_header; + const char *domain; + char buf[256 + 256 + 40]; + const char *f_user; + const char *f_domain; + const char *f_ha1; +}; + + +static int +read_auth_file(struct mg_file *filep, + struct read_auth_file_struct *workdata, + int depth) +{ + int is_authorized = 0; + struct mg_file fp; + size_t l; + + if (!filep || !workdata || (0 == depth)) { + return 0; + } + + /* Loop over passwords file */ + while (mg_fgets(workdata->buf, sizeof(workdata->buf), filep) != NULL) { + l = strlen(workdata->buf); + while (l > 0) { + if (isspace((unsigned char)workdata->buf[l - 1]) + || iscntrl((unsigned char)workdata->buf[l - 1])) { + l--; + workdata->buf[l] = 0; + } else + break; + } + if (l < 1) { + continue; + } + + workdata->f_user = workdata->buf; + + if (workdata->f_user[0] == ':') { + /* user names may not contain a ':' and may not be empty, + * so lines starting with ':' may be used for a special purpose + */ + if (workdata->f_user[1] == '#') { + /* :# is a comment */ + continue; + } else if (!strncmp(workdata->f_user + 1, "include=", 8)) { + if (mg_fopen(workdata->conn, + workdata->f_user + 9, + MG_FOPEN_MODE_READ, + &fp)) { + is_authorized = read_auth_file(&fp, workdata, depth - 1); + (void)mg_fclose( + &fp.access); /* ignore error on read only file */ + + /* No need to continue processing files once we have a + * match, since nothing will reset it back + * to 0. + */ + if (is_authorized) { + return is_authorized; + } + } else { + mg_cry_internal(workdata->conn, + "%s: cannot open authorization file: %s", + __func__, + workdata->buf); + } + continue; + } + /* everything is invalid for the moment (might change in the + * future) */ + mg_cry_internal(workdata->conn, + "%s: syntax error in authorization file: %s", + __func__, + workdata->buf); + continue; + } + + workdata->f_domain = strchr(workdata->f_user, ':'); + if (workdata->f_domain == NULL) { + mg_cry_internal(workdata->conn, + "%s: syntax error in authorization file: %s", + __func__, + workdata->buf); + continue; + } + *(char *)(workdata->f_domain) = 0; + (workdata->f_domain)++; + + workdata->f_ha1 = strchr(workdata->f_domain, ':'); + if (workdata->f_ha1 == NULL) { + mg_cry_internal(workdata->conn, + "%s: syntax error in authorization file: %s", + __func__, + workdata->buf); + continue; + } + *(char *)(workdata->f_ha1) = 0; + (workdata->f_ha1)++; + + if (!strcmp(workdata->auth_header.user, workdata->f_user) + && !strcmp(workdata->domain, workdata->f_domain)) { + switch (workdata->auth_header.type) { + case 1: /* Basic */ + { + char md5[33]; + mg_md5(md5, + workdata->f_user, + ":", + workdata->domain, + ":", + workdata->auth_header.plain_password, + NULL); + return 0 == memcmp(workdata->f_ha1, md5, 33); + } + case 2: /* Digest */ + return check_password_digest( + workdata->conn->request_info.request_method, + workdata->f_ha1, + workdata->auth_header.uri, + workdata->auth_header.nonce, + workdata->auth_header.nc, + workdata->auth_header.cnonce, + workdata->auth_header.qop, + workdata->auth_header.response); + default: /* None/Other/Unknown */ + return 0; + } + } + } + + return is_authorized; +} + + +/* Authorize against the opened passwords file. Return 1 if authorized. */ +static int +authorize(struct mg_connection *conn, struct mg_file *filep, const char *realm) +{ + struct read_auth_file_struct workdata; + char buf[MG_BUF_LEN]; + + if (!conn || !conn->dom_ctx) { + return 0; + } + + memset(&workdata, 0, sizeof(workdata)); + workdata.conn = conn; + + if (!parse_auth_header(conn, buf, sizeof(buf), &workdata.auth_header)) { + return 0; + } + + /* CGI needs it as REMOTE_USER */ + conn->request_info.remote_user = + mg_strdup_ctx(workdata.auth_header.user, conn->phys_ctx); + + if (realm) { + workdata.domain = realm; + } else { + workdata.domain = conn->dom_ctx->config[AUTHENTICATION_DOMAIN]; + } + + return read_auth_file(filep, &workdata, INITIAL_DEPTH); +} + + +/* Public function to check http digest authentication header */ +CIVETWEB_API int +mg_check_digest_access_authentication(struct mg_connection *conn, + const char *realm, + const char *filename) +{ + struct mg_file file = STRUCT_FILE_INITIALIZER; + int auth; + + if (!conn || !filename) { + return -1; + } + if (!mg_fopen(conn, filename, MG_FOPEN_MODE_READ, &file)) { + return -2; + } + + auth = authorize(conn, &file, realm); + + mg_fclose(&file.access); + + return auth; +} +#endif /* NO_FILESYSTEMS */ + + +/* Return 1 if request is authorised, 0 otherwise. */ +static int +check_authorization(struct mg_connection *conn, const char *path) +{ +#if !defined(NO_FILESYSTEMS) + char fname[UTF8_PATH_MAX]; + struct vec uri_vec, filename_vec; + const char *list; + struct mg_file file = STRUCT_FILE_INITIALIZER; + int authorized = 1, truncated; + + if (!conn || !conn->dom_ctx) { + return 0; + } + + list = conn->dom_ctx->config[PROTECT_URI]; + while ((list = next_option(list, &uri_vec, &filename_vec)) != NULL) { + if (!memcmp(conn->request_info.local_uri, uri_vec.ptr, uri_vec.len)) { + mg_snprintf(conn, + &truncated, + fname, + sizeof(fname), + "%.*s", + (int)filename_vec.len, + filename_vec.ptr); + + if (truncated + || !mg_fopen(conn, fname, MG_FOPEN_MODE_READ, &file)) { + mg_cry_internal(conn, + "%s: cannot open %s: %s", + __func__, + fname, + strerror(errno)); + } + break; + } + } + + if (!is_file_opened(&file.access)) { + open_auth_file(conn, path, &file); + } + + if (is_file_opened(&file.access)) { + authorized = authorize(conn, &file, NULL); + (void)mg_fclose(&file.access); /* ignore error on read only file */ + } + + return authorized; +#else + (void)conn; + (void)path; + return 1; +#endif /* NO_FILESYSTEMS */ +} + + +/* Internal function. Assumes conn is valid */ +static void +send_authorization_request(struct mg_connection *conn, const char *realm) +{ + uint64_t nonce = (uint64_t)(conn->phys_ctx->start_time); + int trunc = 0; + char buf[128]; + + if (!realm) { + realm = conn->dom_ctx->config[AUTHENTICATION_DOMAIN]; + } + + mg_lock_context(conn->phys_ctx); + nonce += conn->dom_ctx->nonce_count; + ++conn->dom_ctx->nonce_count; + mg_unlock_context(conn->phys_ctx); + + nonce ^= conn->dom_ctx->auth_nonce_mask; + conn->must_close = 1; + + /* Create 401 response */ + mg_response_header_start(conn, 401); + send_no_cache_header(conn); + send_additional_header(conn); + mg_response_header_add(conn, "Content-Length", "0", -1); + + /* Content for "WWW-Authenticate" header */ + mg_snprintf(conn, + &trunc, + buf, + sizeof(buf), + "Digest qop=\"auth\", realm=\"%s\", " + "nonce=\"%" UINT64_FMT "\"", + realm, + nonce); + + if (!trunc) { + /* !trunc should always be true */ + mg_response_header_add(conn, "WWW-Authenticate", buf, -1); + } + + /* Send all headers */ + mg_response_header_send(conn); +} + + +/* Interface function. Parameters are provided by the user, so do + * at least some basic checks. + */ +CIVETWEB_API int +mg_send_digest_access_authentication_request(struct mg_connection *conn, + const char *realm) +{ + if (conn && conn->dom_ctx) { + send_authorization_request(conn, realm); + return 0; + } + return -1; +} + + +#if !defined(NO_FILES) +static int +is_authorized_for_put(struct mg_connection *conn) +{ + int ret = 0; + + if (conn) { + struct mg_file file = STRUCT_FILE_INITIALIZER; + const char *passfile = conn->dom_ctx->config[PUT_DELETE_PASSWORDS_FILE]; + + if (passfile != NULL + && mg_fopen(conn, passfile, MG_FOPEN_MODE_READ, &file)) { + ret = authorize(conn, &file, NULL); + (void)mg_fclose(&file.access); /* ignore error on read only file */ + } + } + + DEBUG_TRACE("file write authorization: %i", ret); + return ret; +} +#endif + + +CIVETWEB_API int +mg_modify_passwords_file_ha1(const char *fname, + const char *domain, + const char *user, + const char *ha1) +{ + int found = 0, i, result = 1; + char line[512], u[256], d[256], h[256]; + struct stat st = {0}; + FILE *fp = NULL; + char *temp_file = NULL; + int temp_file_offs = 0; + + /* Regard empty password as no password - remove user record. */ + if ((ha1 != NULL) && (ha1[0] == '\0')) { + ha1 = NULL; + } + + /* Other arguments must not be empty */ + if ((fname == NULL) || (domain == NULL) || (user == NULL)) { + return 0; + } + + /* Using the given file format, user name and domain must not contain + * the ':' character */ + if (strchr(user, ':') != NULL) { + return 0; + } + if (strchr(domain, ':') != NULL) { + return 0; + } + + /* Do not allow control characters like newline in user name and domain. + * Do not allow excessively long names either. */ + for (i = 0; ((i < 255) && (user[i] != 0)); i++) { + if (iscntrl((unsigned char)user[i])) { + return 0; + } + } + if (user[i]) { + return 0; /* user name too long */ + } + for (i = 0; ((i < 255) && (domain[i] != 0)); i++) { + if (iscntrl((unsigned char)domain[i])) { + return 0; + } + } + if (domain[i]) { + return 0; /* domain name too long */ + } + + /* The maximum length of the path to the password file is limited */ + if (strlen(fname) >= UTF8_PATH_MAX) { + return 0; + } + + /* Check if the file exists, and get file size */ + if (0 == stat(fname, &st)) { + int temp_buf_len; + if (st.st_size > 10485760) { + /* Some funster provided a >10 MB text file */ + return 0; + } + + /* Add enough space for one more line */ + temp_buf_len = (int)st.st_size + 1024; + + /* Allocate memory (instead of using a temporary file) */ + temp_file = (char *)mg_calloc((size_t)temp_buf_len, 1); + if (!temp_file) { + /* Out of memory */ + return 0; + } + + /* File exists. Read it into a memory buffer. */ + fp = fopen(fname, "r"); + if (fp == NULL) { + /* Cannot read file. No permission? */ + mg_free(temp_file); + return 0; + } + + /* Read content and store in memory */ + while ((fgets(line, sizeof(line), fp) != NULL) + && ((temp_file_offs + 600) < temp_buf_len)) { + /* file format is "user:domain:hash\n" */ + if (sscanf(line, "%255[^:]:%255[^:]:%255s", u, d, h) != 3) { + continue; + } + u[255] = 0; + d[255] = 0; + h[255] = 0; + + if (!strcmp(u, user) && !strcmp(d, domain)) { + /* Found the user: change the password hash or drop the user + */ + if ((ha1 != NULL) && (!found)) { + i = sprintf(temp_file + temp_file_offs, + "%s:%s:%s\n", + user, + domain, + ha1); + if (i < 1) { + fclose(fp); + mg_free(temp_file); + return 0; + } + temp_file_offs += i; + } + found = 1; + } else { + /* Copy existing user, including password hash */ + i = sprintf(temp_file + temp_file_offs, "%s:%s:%s\n", u, d, h); + if (i < 1) { + fclose(fp); + mg_free(temp_file); + return 0; + } + temp_file_offs += i; + } + } + fclose(fp); + } + + /* Create new file */ + fp = fopen(fname, "w"); + if (!fp) { + mg_free(temp_file); + return 0; + } + +#if !defined(_WIN32) + /* On Linux & co., restrict file read/write permissions to the owner */ + if (fchmod(fileno(fp), S_IRUSR | S_IWUSR) != 0) { + result = 0; + } +#endif + + if ((temp_file != NULL) && (temp_file_offs > 0)) { + /* Store buffered content of old file */ + if (fwrite(temp_file, 1, (size_t)temp_file_offs, fp) + != (size_t)temp_file_offs) { + result = 0; + } + } + + /* If new user, just add it */ + if ((ha1 != NULL) && (!found)) { + if (fprintf(fp, "%s:%s:%s\n", user, domain, ha1) < 6) { + result = 0; + } + } + + /* All data written */ + if (fclose(fp) != 0) { + result = 0; + } + + mg_free(temp_file); + return result; +} + + +CIVETWEB_API int +mg_modify_passwords_file(const char *fname, + const char *domain, + const char *user, + const char *pass) +{ + char ha1buf[33]; + if ((fname == NULL) || (domain == NULL) || (user == NULL)) { + return 0; + } + if ((pass == NULL) || (pass[0] == 0)) { + return mg_modify_passwords_file_ha1(fname, domain, user, NULL); + } + + mg_md5(ha1buf, user, ":", domain, ":", pass, NULL); + return mg_modify_passwords_file_ha1(fname, domain, user, ha1buf); +} + + +static int +is_valid_port(unsigned long port) +{ + return (port <= 0xffff); +} + + +static int +mg_inet_pton(int af, const char *src, void *dst, size_t dstlen, int resolve_src) +{ + struct addrinfo hints, *res, *ressave; + int func_ret = 0; + int gai_ret; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = af; + if (!resolve_src) { + hints.ai_flags = AI_NUMERICHOST; + } + + gai_ret = getaddrinfo(src, NULL, &hints, &res); + if (gai_ret != 0) { + /* gai_strerror could be used to convert gai_ret to a string */ + /* POSIX return values: see + * http://pubs.opengroup.org/onlinepubs/9699919799/functions/freeaddrinfo.html + */ + /* Windows return values: see + * https://msdn.microsoft.com/en-us/library/windows/desktop/ms738520%28v=vs.85%29.aspx + */ + return 0; + } + + ressave = res; + + while (res) { + if ((dstlen >= (size_t)res->ai_addrlen) + && (res->ai_addr->sa_family == af)) { + memcpy(dst, res->ai_addr, res->ai_addrlen); + func_ret = 1; + } + res = res->ai_next; + } + + freeaddrinfo(ressave); + return func_ret; +} + + +static int +connect_socket( + struct mg_context *ctx /* may be NULL */, + const char *host, + int port, /* 1..65535, or -99 for domain sockets (may be changed) */ + int use_ssl, /* 0 or 1 */ + struct mg_error_data *error, + SOCKET *sock /* output: socket, must not be NULL */, + union usa *sa /* output: socket address, must not be NULL */ +) +{ + int ip_ver = 0; + int conn_ret = -1; + int sockerr = 0; + *sock = INVALID_SOCKET; + memset(sa, 0, sizeof(*sa)); + + if (host == NULL) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_PARAM; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "%s", + "NULL host"); + } + return 0; + } + +#if defined(USE_X_DOM_SOCKET) + if (port == -99) { + /* Unix domain socket */ + size_t hostlen = strlen(host); + if (hostlen >= sizeof(sa->sun.sun_path)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_PARAM; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "%s", + "host length exceeds limit"); + } + return 0; + } + } else +#endif + if ((port <= 0) || !is_valid_port((unsigned)port)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_PARAM; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "%s", + "invalid port"); + } + return 0; + } + +#if !defined(NO_SSL) && !defined(USE_MBEDTLS) && !defined(USE_GNUTLS) \ + && !defined(NO_SSL_DL) +#if defined(OPENSSL_API_1_1) || defined(OPENSSL_API_3_0) + if (use_ssl && (TLS_client_method == NULL)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_LIBRARY_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "%s", + "SSL is not initialized"); + } + return 0; + } +#else + if (use_ssl && (SSLv23_client_method == NULL)) { + if (error != 0) { + error->code = MG_ERROR_DATA_CODE_INIT_LIBRARY_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "%s", + "SSL is not initialized"); + } + return 0; + } +#endif /* OPENSSL_API_1_1 || OPENSSL_API_3_0*/ +#else + (void)use_ssl; +#endif /* NO SSL */ + +#if defined(USE_X_DOM_SOCKET) + if (port == -99) { + size_t hostlen = strlen(host); + /* check (hostlen < sizeof(sun.sun_path)) already passed above */ + ip_ver = -99; + sa->sun.sun_family = AF_UNIX; + memset(sa->sun.sun_path, 0, sizeof(sa->sun.sun_path)); + memcpy(sa->sun.sun_path, host, hostlen); + } else +#endif + if (mg_inet_pton(AF_INET, host, &sa->sin, sizeof(sa->sin), 1)) { + sa->sin.sin_port = htons((uint16_t)port); + ip_ver = 4; +#if defined(USE_IPV6) + } else if (mg_inet_pton(AF_INET6, host, &sa->sin6, sizeof(sa->sin6), 1)) { + sa->sin6.sin6_port = htons((uint16_t)port); + ip_ver = 6; + } else if (host[0] == '[') { + /* While getaddrinfo on Windows will work with [::1], + * getaddrinfo on Linux only works with ::1 (without []). */ + size_t l = strlen(host + 1); + char *h = (l > 1) ? mg_strdup_ctx(host + 1, ctx) : NULL; + if (h) { + h[l - 1] = 0; + if (mg_inet_pton(AF_INET6, h, &sa->sin6, sizeof(sa->sin6), 0)) { + sa->sin6.sin6_port = htons((uint16_t)port); + ip_ver = 6; + } + mg_free(h); + } +#endif + } + + if (ip_ver == 0) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_HOST_NOT_FOUND; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "%s", + "host not found"); + } + return 0; + } + + if (ip_ver == 4) { + *sock = socket(PF_INET, SOCK_STREAM, 0); + } +#if defined(USE_IPV6) + else if (ip_ver == 6) { + *sock = socket(PF_INET6, SOCK_STREAM, 0); + } +#endif +#if defined(USE_X_DOM_SOCKET) + else if (ip_ver == -99) { + *sock = socket(AF_UNIX, SOCK_STREAM, 0); + } +#endif + + if (*sock == INVALID_SOCKET) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OS_ERROR; + error->code_sub = (unsigned)ERRNO; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "socket(): %s", + strerror(ERRNO)); + } + return 0; + } + + if (0 != set_non_blocking_mode(*sock)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OS_ERROR; + error->code_sub = (unsigned)ERRNO; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "Cannot set socket to non-blocking: %s", + strerror(ERRNO)); + } + closesocket(*sock); + *sock = INVALID_SOCKET; + return 0; + } + + set_close_on_exec(*sock, NULL, ctx); + + if (ip_ver == 4) { + /* connected with IPv4 */ + conn_ret = connect(*sock, + (struct sockaddr *)((void *)&sa->sin), + sizeof(sa->sin)); + } +#if defined(USE_IPV6) + else if (ip_ver == 6) { + /* connected with IPv6 */ + conn_ret = connect(*sock, + (struct sockaddr *)((void *)&sa->sin6), + sizeof(sa->sin6)); + } +#endif +#if defined(USE_X_DOM_SOCKET) + else if (ip_ver == -99) { + /* connected to domain socket */ + conn_ret = connect(*sock, + (struct sockaddr *)((void *)&sa->sun), + sizeof(sa->sun)); + } +#endif + + if (conn_ret != 0) { + sockerr = ERRNO; + } + +#if defined(_WIN32) + if ((conn_ret != 0) && (sockerr == WSAEWOULDBLOCK)) { +#else + if ((conn_ret != 0) && (sockerr == EINPROGRESS)) { +#endif + /* Data for getsockopt */ + void *psockerr = &sockerr; + int ret; + +#if defined(_WIN32) + int len = (int)sizeof(sockerr); +#else + socklen_t len = (socklen_t)sizeof(sockerr); +#endif + + /* Data for poll */ + struct mg_pollfd pfd[2]; + int pollres; + int ms_wait = 10000; /* 10 second timeout */ + stop_flag_t nonstop = 0; /* STOP_FLAG_ASSIGN(&nonstop, 0); */ + unsigned int num_sock = 1; /* use one or two sockets */ + + /* For a non-blocking socket, the connect sequence is: + * 1) call connect (will not block) + * 2) wait until the socket is ready for writing (select or poll) + * 3) check connection state with getsockopt + */ + pfd[0].fd = *sock; + pfd[0].events = POLLOUT; + + if (ctx && (ctx->context_type == CONTEXT_SERVER)) { + pfd[num_sock].fd = ctx->thread_shutdown_notification_socket; + pfd[num_sock].events = POLLIN; + num_sock++; + } + + pollres = + mg_poll(pfd, num_sock, ms_wait, ctx ? &(ctx->stop_flag) : &nonstop); + + if (pollres != 1) { + /* Not connected */ + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_CONNECT_TIMEOUT; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "connect(%s:%d): timeout", + host, + port); + } + closesocket(*sock); + *sock = INVALID_SOCKET; + return 0; + } + +#if defined(_WIN32) + ret = getsockopt(*sock, SOL_SOCKET, SO_ERROR, (char *)psockerr, &len); +#else + ret = getsockopt(*sock, SOL_SOCKET, SO_ERROR, psockerr, &len); +#endif + + if ((ret == 0) && (sockerr == 0)) { + conn_ret = 0; + } + } + + if (conn_ret != 0) { + /* Not connected */ + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_CONNECT_FAILED; + error->code_sub = (unsigned)ERRNO; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "connect(%s:%d): error %s", + host, + port, + strerror(sockerr)); + } + closesocket(*sock); + *sock = INVALID_SOCKET; + return 0; + } + + return 1; +} + + +CIVETWEB_API int +mg_url_encode(const char *src, char *dst, size_t dst_len) +{ + static const char *dont_escape = "._-$,;~()"; + static const char *hex = "0123456789abcdef"; + char *pos = dst; + const char *end = dst + dst_len - 1; + + for (; ((*src != '\0') && (pos < end)); src++, pos++) { + if (isalnum((unsigned char)*src) + || (strchr(dont_escape, *src) != NULL)) { + *pos = *src; + } else if (pos + 2 < end) { + pos[0] = '%'; + pos[1] = hex[(unsigned char)*src >> 4]; + pos[2] = hex[(unsigned char)*src & 0xf]; + pos += 2; + } else { + break; + } + } + + *pos = '\0'; + return (*src == '\0') ? (int)(pos - dst) : -1; +} + +/* Return 0 on success, non-zero if an error occurs. */ + +static int +print_dir_entry(struct mg_connection *conn, struct de *de) +{ + size_t namesize, escsize, i; + char *href, *esc, *p; + char size[64], mod[64]; +#if defined(REENTRANT_TIME) + struct tm _tm; + struct tm *tm = &_tm; +#else + struct tm *tm; +#endif + + /* Estimate worst case size for encoding and escaping */ + namesize = strlen(de->file_name) + 1; + escsize = de->file_name[strcspn(de->file_name, "&<>")] ? namesize * 5 : 0; + href = (char *)mg_malloc(namesize * 3 + escsize); + if (href == NULL) { + return -1; + } + mg_url_encode(de->file_name, href, namesize * 3); + esc = NULL; + if (escsize > 0) { + /* HTML escaping needed */ + esc = href + namesize * 3; + for (i = 0, p = esc; de->file_name[i]; i++, p += strlen(p)) { + mg_strlcpy(p, de->file_name + i, 2); + if (*p == '&') { + strcpy(p, "&"); + } else if (*p == '<') { + strcpy(p, "<"); + } else if (*p == '>') { + strcpy(p, ">"); + } + } + } + + if (de->file.is_directory) { + mg_snprintf(conn, + NULL, /* Buffer is big enough */ + size, + sizeof(size), + "%s", + "[DIRECTORY]"); + } else { + /* We use (signed) cast below because MSVC 6 compiler cannot + * convert unsigned __int64 to double. Sigh. */ + if (de->file.size < 1024) { + mg_snprintf(conn, + NULL, /* Buffer is big enough */ + size, + sizeof(size), + "%d", + (int)de->file.size); + } else if (de->file.size < 0x100000) { + mg_snprintf(conn, + NULL, /* Buffer is big enough */ + size, + sizeof(size), + "%.1fk", + (double)de->file.size / 1024.0); + } else if (de->file.size < 0x40000000) { + mg_snprintf(conn, + NULL, /* Buffer is big enough */ + size, + sizeof(size), + "%.1fM", + (double)de->file.size / 1048576); + } else { + mg_snprintf(conn, + NULL, /* Buffer is big enough */ + size, + sizeof(size), + "%.1fG", + (double)de->file.size / 1073741824); + } + } + + /* Note: mg_snprintf will not cause a buffer overflow above. + * So, string truncation checks are not required here. */ + +#if defined(REENTRANT_TIME) + localtime_r(&de->file.last_modified, tm); +#else + tm = localtime(&de->file.last_modified); +#endif + if (tm != NULL) { + strftime(mod, sizeof(mod), "%d-%b-%Y %H:%M", tm); + } else { + mg_strlcpy(mod, "01-Jan-1970 00:00", sizeof(mod)); + } + mg_printf(conn, + "%s%s" + " %s  %s\n", + href, + de->file.is_directory ? "/" : "", + esc ? esc : de->file_name, + de->file.is_directory ? "/" : "", + mod, + size); + mg_free(href); + return 0; +} + + +/* This function is called from send_directory() and used for + * sorting directory entries by size, name, or modification time. */ +static int +compare_dir_entries(const void *p1, const void *p2, void *arg) +{ + const char *query_string = (const char *)(arg != NULL ? arg : ""); + if (p1 && p2) { + const struct de *a = (const struct de *)p1, *b = (const struct de *)p2; + int cmp_result = 0; + + if ((query_string == NULL) || (query_string[0] == '\0')) { + query_string = "n"; + } + + /* Sort Directories vs Files */ + if (a->file.is_directory && !b->file.is_directory) { + return -1; /* Always put directories on top */ + } else if (!a->file.is_directory && b->file.is_directory) { + return 1; /* Always put directories on top */ + } + + /* Sort by size or date */ + if (*query_string == 's') { + cmp_result = (a->file.size == b->file.size) + ? 0 + : ((a->file.size > b->file.size) ? 1 : -1); + } else if (*query_string == 'd') { + cmp_result = + (a->file.last_modified == b->file.last_modified) + ? 0 + : ((a->file.last_modified > b->file.last_modified) ? 1 + : -1); + } + + /* Sort by name: + * if (*query_string == 'n') ... + * but also sort files of same size/date by name as secondary criterion. + */ + if (cmp_result == 0) { + cmp_result = strcmp(a->file_name, b->file_name); + } + + /* For descending order, invert result */ + return (query_string[1] == 'd') ? -cmp_result : cmp_result; + } + return 0; +} + + +static int +must_hide_file(struct mg_connection *conn, const char *path) +{ + if (conn && conn->dom_ctx) { + const char *pw_pattern = "**" PASSWORDS_FILE_NAME "$"; + const char *pattern = conn->dom_ctx->config[HIDE_FILES]; + return (match_prefix_strlen(pw_pattern, path) > 0) + || (match_prefix_strlen(pattern, path) > 0); + } + return 0; +} + + +#if !defined(NO_FILESYSTEMS) +static int +scan_directory(struct mg_connection *conn, + const char *dir, + void *data, + int (*cb)(struct de *, void *)) +{ + char path[UTF8_PATH_MAX]; + struct dirent *dp; + DIR *dirp; + struct de de; + int truncated; + + if ((dirp = mg_opendir(conn, dir)) == NULL) { + return 0; + } else { + + while ((dp = mg_readdir(dirp)) != NULL) { + /* Do not show current dir and hidden files */ + if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..") + || must_hide_file(conn, dp->d_name)) { + continue; + } + + mg_snprintf( + conn, &truncated, path, sizeof(path), "%s/%s", dir, dp->d_name); + + /* If we don't memset stat structure to zero, mtime will have + * garbage and strftime() will segfault later on in + * print_dir_entry(). memset is required only if mg_stat() + * fails. For more details, see + * http://code.google.com/p/mongoose/issues/detail?id=79 */ + memset(&de.file, 0, sizeof(de.file)); + + if (truncated) { + /* If the path is not complete, skip processing. */ + continue; + } + + if (!mg_stat(conn, path, &de.file)) { + mg_cry_internal(conn, + "%s: mg_stat(%s) failed: %s", + __func__, + path, + strerror(ERRNO)); + } + de.file_name = dp->d_name; + if (cb(&de, data)) { + /* stopped */ + break; + } + } + (void)mg_closedir(dirp); + } + return 1; +} +#endif /* NO_FILESYSTEMS */ + + +#if !defined(NO_FILES) +static int +remove_directory(struct mg_connection *conn, const char *dir) +{ + char path[UTF8_PATH_MAX]; + struct dirent *dp; + DIR *dirp; + struct de de; + int truncated; + int ok = 1; + + if ((dirp = mg_opendir(conn, dir)) == NULL) { + return 0; + } else { + + while ((dp = mg_readdir(dirp)) != NULL) { + /* Do not show current dir (but show hidden files as they will + * also be removed) */ + if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..")) { + continue; + } + + mg_snprintf( + conn, &truncated, path, sizeof(path), "%s/%s", dir, dp->d_name); + + /* If we don't memset stat structure to zero, mtime will have + * garbage and strftime() will segfault later on in + * print_dir_entry(). memset is required only if mg_stat() + * fails. For more details, see + * http://code.google.com/p/mongoose/issues/detail?id=79 */ + memset(&de.file, 0, sizeof(de.file)); + + if (truncated) { + /* Do not delete anything shorter */ + ok = 0; + continue; + } + + if (!mg_stat(conn, path, &de.file)) { + mg_cry_internal(conn, + "%s: mg_stat(%s) failed: %s", + __func__, + path, + strerror(ERRNO)); + ok = 0; + } + + if (de.file.is_directory) { + if (remove_directory(conn, path) == 0) { + ok = 0; + } + } else { + /* This will fail file is the file is in memory */ + if (mg_remove(conn, path) == 0) { + ok = 0; + } + } + } + (void)mg_closedir(dirp); + + IGNORE_UNUSED_RESULT(rmdir(dir)); + } + + return ok; +} +#endif + + +struct dir_scan_data { + struct de *entries; + size_t num_entries; + size_t arr_size; +}; + + +#if !defined(NO_FILESYSTEMS) +static int +dir_scan_callback(struct de *de, void *data) +{ + struct dir_scan_data *dsd = (struct dir_scan_data *)data; + struct de *entries = dsd->entries; + + if ((entries == NULL) || (dsd->num_entries >= dsd->arr_size)) { + /* Here "entries" is a temporary pointer and can be replaced, + * "dsd->entries" is the original pointer */ + entries = + (struct de *)mg_realloc(entries, + dsd->arr_size * 2 * sizeof(entries[0])); + if (entries == NULL) { + /* stop scan */ + return 1; + } + dsd->entries = entries; + dsd->arr_size *= 2; + } + entries[dsd->num_entries].file_name = mg_strdup(de->file_name); + if (entries[dsd->num_entries].file_name == NULL) { + /* stop scan */ + return 1; + } + entries[dsd->num_entries].file = de->file; + dsd->num_entries++; + + return 0; +} + + +static void +handle_directory_request(struct mg_connection *conn, const char *dir) +{ + size_t i; + int sort_direction; + struct dir_scan_data data = {NULL, 0, 128}; + char date[64], *esc, *p; + const char *title; + time_t curtime = time(NULL); + + if (!conn) { + return; + } + + if (!scan_directory(conn, dir, &data, dir_scan_callback)) { + mg_send_http_error(conn, + 500, + "Error: Cannot open directory\nopendir(%s): %s", + dir, + strerror(ERRNO)); + return; + } + + gmt_time_string(date, sizeof(date), &curtime); + + esc = NULL; + title = conn->request_info.local_uri; + if (title[strcspn(title, "&<>")]) { + /* HTML escaping needed */ + esc = (char *)mg_malloc(strlen(title) * 5 + 1); + if (esc) { + for (i = 0, p = esc; title[i]; i++, p += strlen(p)) { + mg_strlcpy(p, title + i, 2); + if (*p == '&') { + strcpy(p, "&"); + } else if (*p == '<') { + strcpy(p, "<"); + } else if (*p == '>') { + strcpy(p, ">"); + } + } + } else { + title = ""; + } + } + + sort_direction = ((conn->request_info.query_string != NULL) + && (conn->request_info.query_string[0] != '\0') + && (conn->request_info.query_string[1] == 'd')) + ? 'a' + : 'd'; + + conn->must_close = 1; + + /* Create 200 OK response */ + mg_response_header_start(conn, 200); + send_static_cache_header(conn); + send_additional_header(conn); + mg_response_header_add(conn, + "Content-Type", + "text/html; charset=utf-8", + -1); + + /* Send all headers */ + mg_response_header_send(conn); + + /* Body */ + mg_printf(conn, + "" + "Index of %s" + "" + "

Index of %s

"
+	          ""
+	          ""
+	          ""
+	          "",
+	          esc ? esc : title,
+	          esc ? esc : title,
+	          sort_direction,
+	          sort_direction,
+	          sort_direction);
+	mg_free(esc);
+
+	/* Print first entry - link to a parent directory */
+	mg_printf(conn,
+	          ""
+	          "\n",
+	          "..",
+	          "Parent directory",
+	          "-",
+	          "-");
+
+	/* Sort and print directory entries */
+	if (data.entries != NULL) {
+		mg_sort(data.entries,
+		        data.num_entries,
+		        sizeof(data.entries[0]),
+		        compare_dir_entries,
+		        (void *)conn->request_info.query_string);
+		for (i = 0; i < data.num_entries; i++) {
+			print_dir_entry(conn, &data.entries[i]);
+			mg_free(data.entries[i].file_name);
+		}
+		mg_free(data.entries);
+	}
+
+	mg_printf(conn, "%s", "
NameModifiedSize

%s %s  %s
"); + conn->status_code = 200; +} +#endif /* NO_FILESYSTEMS */ + + +/* Send len bytes from the opened file to the client. */ +static void +send_file_data(struct mg_connection *conn, + struct mg_file *filep, + int64_t offset, + int64_t len, + int no_buffering) +{ + char buf[MG_BUF_LEN]; + int to_read, num_read, num_written; + int64_t size; + + if (!filep || !conn) { + return; + } + + /* Sanity check the offset */ + size = (filep->stat.size > INT64_MAX) ? INT64_MAX + : (int64_t)(filep->stat.size); + offset = (offset < 0) ? 0 : ((offset > size) ? size : offset); + + if (len > 0 && filep->access.fp != NULL) { + /* file stored on disk */ +#if defined(__linux__) + /* sendfile is only available for Linux */ + if ((conn->ssl == 0) && (conn->throttle == 0) + && (!mg_strcasecmp(conn->dom_ctx->config[ALLOW_SENDFILE_CALL], + "yes"))) { + off_t sf_offs = (off_t)offset; + ssize_t sf_sent; + int sf_file = fileno(filep->access.fp); + int loop_cnt = 0; + + do { + /* 2147479552 (0x7FFFF000) is a limit found by experiment on + * 64 bit Linux (2^31 minus one memory page of 4k?). */ + size_t sf_tosend = + (size_t)((len < 0x7FFFF000) ? len : 0x7FFFF000); + sf_sent = + sendfile(conn->client.sock, sf_file, &sf_offs, sf_tosend); + if (sf_sent > 0) { + len -= sf_sent; + offset += sf_sent; + } else if (loop_cnt == 0) { + /* This file can not be sent using sendfile. + * This might be the case for pseudo-files in the + * /sys/ and /proc/ file system. + * Use the regular user mode copy code instead. */ + break; + } else if (sf_sent == 0) { + /* No error, but 0 bytes sent. May be EOF? */ + return; + } + loop_cnt++; + + } while ((len > 0) && (sf_sent >= 0)); + + if (sf_sent > 0) { + return; /* OK */ + } + + /* sf_sent<0 means error, thus fall back to the classic way */ + /* This is always the case, if sf_file is not a "normal" file, + * e.g., for sending data from the output of a CGI process. */ + offset = (int64_t)sf_offs; + } +#endif + if ((offset > 0) && (fseeko(filep->access.fp, offset, SEEK_SET) != 0)) { + mg_cry_internal(conn, + "%s: fseeko() failed: %s", + __func__, + strerror(ERRNO)); + mg_send_http_error( + conn, + 500, + "%s", + "Error: Unable to access file at requested position."); + } else { + while (len > 0) { + /* Calculate how much to read from the file into the buffer. */ + /* If no_buffering is set, we should not wait until the + * CGI->Server buffer is filled, but send everything + * immediately. In theory buffering could be turned off using + * setbuf(filep->access.fp, NULL); + * setvbuf(filep->access.fp, NULL, _IONBF, 0); + * but in practice this does not work. A "Linux only" solution + * may be to use select(). The only portable way is to read byte + * by byte, but this is quite inefficient from a performance + * point of view. */ + to_read = no_buffering ? 1 : sizeof(buf); + if ((int64_t)to_read > len) { + to_read = (int)len; + } + + /* Read from file, exit the loop on error */ + if ((num_read = pull_inner(filep->access.fp, + NULL, + buf, + to_read, + /* unused */ 0.0)) + <= 0) { + break; + } + + /* Send read bytes to the client, exit the loop on error */ + if ((num_written = mg_write(conn, buf, (size_t)num_read)) + != num_read) { + break; + } + + /* Both read and were successful, adjust counters */ + len -= num_written; + } + } + } +} + + +static int +parse_range_header(const char *header, int64_t *a, int64_t *b) +{ + return sscanf(header, + "bytes=%" INT64_FMT "-%" INT64_FMT, + a, + b); // NOLINT(cert-err34-c) 'sscanf' used to convert a string + // to an integer value, but function will not report + // conversion errors; consider using 'strtol' instead +} + + +static void +construct_etag(char *buf, size_t buf_len, const struct mg_file_stat *filestat) +{ + if ((filestat != NULL) && (buf != NULL)) { + mg_snprintf(NULL, + NULL, /* All calls to construct_etag use 64 byte buffer */ + buf, + buf_len, + "\"%lx.%" INT64_FMT "\"", + (unsigned long)filestat->last_modified, + filestat->size); + } +} + + +static void +fclose_on_exec(struct mg_file_access *filep, struct mg_connection *conn) +{ + if (filep != NULL && filep->fp != NULL) { +#if defined(_WIN32) + (void)conn; /* Unused. */ +#else + if (fcntl(fileno(filep->fp), F_SETFD, FD_CLOEXEC) != 0) { + mg_cry_internal(conn, + "%s: fcntl(F_SETFD FD_CLOEXEC) failed: %s", + __func__, + strerror(ERRNO)); + } +#endif + } +} + + +#if defined(USE_ZLIB) +#include "mod_zlib.inl" +#endif + + +#if !defined(NO_FILESYSTEMS) +static void +handle_static_file_request(struct mg_connection *conn, + const char *path, + struct mg_file *filep, + const char *mime_type, + const char *additional_headers) +{ + char lm[64], etag[64]; + char range[128]; /* large enough, so there will be no overflow */ + const char *range_hdr; + int64_t cl, r1, r2; + struct vec mime_vec; + int n, truncated; + char gz_path[UTF8_PATH_MAX]; + const char *encoding = 0; + int is_head_request; + +#if defined(USE_ZLIB) + /* Compression is allowed, unless there is a reason not to use + * compression. If the file is already compressed, too small or a + * "range" request was made, on the fly compression is not possible. */ + int allow_on_the_fly_compression = 1; +#endif + + if ((conn == NULL) || (conn->dom_ctx == NULL) || (filep == NULL)) { + return; + } + + is_head_request = !strcmp(conn->request_info.request_method, "HEAD"); + + if (mime_type == NULL) { + get_mime_type(conn, path, &mime_vec); + } else { + mime_vec.ptr = mime_type; + mime_vec.len = strlen(mime_type); + } + if (filep->stat.size > INT64_MAX) { + mg_send_http_error(conn, + 500, + "Error: File size is too large to send\n%" INT64_FMT, + filep->stat.size); + return; + } + cl = (int64_t)filep->stat.size; + conn->status_code = 200; + range[0] = '\0'; + +#if defined(USE_ZLIB) + /* if this file is in fact a pre-gzipped file, rewrite its filename + * it's important to rewrite the filename after resolving + * the mime type from it, to preserve the actual file's type */ + if (!conn->accept_gzip) { + allow_on_the_fly_compression = 0; + } +#endif + + /* Check if there is a range header */ + range_hdr = mg_get_header(conn, "Range"); + + /* For gzipped files, add *.gz */ + if (filep->stat.is_gzipped) { + mg_snprintf(conn, &truncated, gz_path, sizeof(gz_path), "%s.gz", path); + + if (truncated) { + mg_send_http_error(conn, + 500, + "Error: Path of zipped file too long (%s)", + path); + return; + } + + path = gz_path; + encoding = "gzip"; + +#if defined(USE_ZLIB) + /* File is already compressed. No "on the fly" compression. */ + allow_on_the_fly_compression = 0; +#endif + } else if ((conn->accept_gzip) && (range_hdr == NULL) + && (filep->stat.size >= MG_FILE_COMPRESSION_SIZE_LIMIT)) { + struct mg_file_stat file_stat; + + mg_snprintf(conn, &truncated, gz_path, sizeof(gz_path), "%s.gz", path); + + if (!truncated && mg_stat(conn, gz_path, &file_stat) + && !file_stat.is_directory) { + file_stat.is_gzipped = 1; + filep->stat = file_stat; + cl = (int64_t)filep->stat.size; + path = gz_path; + encoding = "gzip"; + +#if defined(USE_ZLIB) + /* File is already compressed. No "on the fly" compression. */ + allow_on_the_fly_compression = 0; +#endif + } + } + + if (!mg_fopen(conn, path, MG_FOPEN_MODE_READ, filep)) { + mg_send_http_error(conn, + 500, + "Error: Cannot open file\nfopen(%s): %s", + path, + strerror(ERRNO)); + return; + } + + fclose_on_exec(&filep->access, conn); + + /* If "Range" request was made: parse header, send only selected part + * of the file. */ + r1 = r2 = 0; + if ((range_hdr != NULL) + && ((n = parse_range_header(range_hdr, &r1, &r2)) > 0) && (r1 >= 0) + && (r2 >= 0)) { + /* actually, range requests don't play well with a pre-gzipped + * file (since the range is specified in the uncompressed space) */ + if (filep->stat.is_gzipped) { + mg_send_http_error( + conn, + 416, /* 416 = Range Not Satisfiable */ + "%s", + "Error: Range requests in gzipped files are not supported"); + (void)mg_fclose( + &filep->access); /* ignore error on read only file */ + return; + } + conn->status_code = 206; + cl = (n == 2) ? (((r2 > cl) ? cl : r2) - r1 + 1) : (cl - r1); + mg_snprintf(conn, + NULL, /* range buffer is big enough */ + range, + sizeof(range), + "bytes " + "%" INT64_FMT "-%" INT64_FMT "/%" INT64_FMT, + r1, + r1 + cl - 1, + filep->stat.size); + +#if defined(USE_ZLIB) + /* Do not compress ranges. */ + allow_on_the_fly_compression = 0; +#endif + } + + /* Do not compress small files. Small files do not benefit from file + * compression, but there is still some overhead. */ +#if defined(USE_ZLIB) + if (filep->stat.size < MG_FILE_COMPRESSION_SIZE_LIMIT) { + /* File is below the size limit. */ + allow_on_the_fly_compression = 0; + } +#endif + + /* Prepare Etag, and Last-Modified headers. */ + gmt_time_string(lm, sizeof(lm), &filep->stat.last_modified); + construct_etag(etag, sizeof(etag), &filep->stat); + + /* Create 2xx (200, 206) response */ + mg_response_header_start(conn, conn->status_code); + send_static_cache_header(conn); + send_additional_header(conn); + send_cors_header(conn); + mg_response_header_add(conn, + "Content-Type", + mime_vec.ptr, + (int)mime_vec.len); + mg_response_header_add(conn, "Last-Modified", lm, -1); + mg_response_header_add(conn, "Etag", etag, -1); + +#if defined(USE_ZLIB) + /* On the fly compression allowed */ + if (allow_on_the_fly_compression) { + /* For on the fly compression, we don't know the content size in + * advance, so we have to use chunked encoding */ + encoding = "gzip"; + if (conn->protocol_type == PROTOCOL_TYPE_HTTP1) { + /* HTTP/2 is always using "chunks" (frames) */ + mg_response_header_add(conn, "Transfer-Encoding", "chunked", -1); + } + + } else +#endif + { + /* Without on-the-fly compression, we know the content-length + * and we can use ranges (with on-the-fly compression we cannot). + * So we send these response headers only in this case. */ + char len[32]; + int trunc = 0; + mg_snprintf(conn, &trunc, len, sizeof(len), "%" INT64_FMT, cl); + + if (!trunc) { + mg_response_header_add(conn, "Content-Length", len, -1); + } + + mg_response_header_add(conn, "Accept-Ranges", "bytes", -1); + } + + if (encoding) { + mg_response_header_add(conn, "Content-Encoding", encoding, -1); + } + if (range[0] != 0) { + mg_response_header_add(conn, "Content-Range", range, -1); + } + + /* The code above does not add any header starting with X- to make + * sure no one of the additional_headers is included twice */ + if ((additional_headers != NULL) && (*additional_headers != 0)) { + mg_response_header_add_lines(conn, additional_headers); + } + + /* Send all headers */ + mg_response_header_send(conn); + + if (!is_head_request) { +#if defined(USE_ZLIB) + if (allow_on_the_fly_compression) { + /* Compress and send */ + send_compressed_data(conn, filep); + } else +#endif + { + /* Send file directly */ + send_file_data(conn, filep, r1, cl, 0); /* send static file */ + } + } + (void)mg_fclose(&filep->access); /* ignore error on read only file */ +} + + +CIVETWEB_API int +mg_send_file_body(struct mg_connection *conn, const char *path) +{ + struct mg_file file = STRUCT_FILE_INITIALIZER; + if (!mg_fopen(conn, path, MG_FOPEN_MODE_READ, &file)) { + return -1; + } + fclose_on_exec(&file.access, conn); + send_file_data(conn, &file, 0, INT64_MAX, 0); /* send static file */ + (void)mg_fclose(&file.access); /* Ignore errors for readonly files */ + return 0; /* >= 0 for OK */ +} +#endif /* NO_FILESYSTEMS */ + + +#if !defined(NO_CACHING) +/* Return True if we should reply 304 Not Modified. */ +static int +is_not_modified(const struct mg_connection *conn, + const struct mg_file_stat *filestat) +{ + char etag[64]; + const char *ims = mg_get_header(conn, "If-Modified-Since"); + const char *inm = mg_get_header(conn, "If-None-Match"); + construct_etag(etag, sizeof(etag), filestat); + + if (inm) { + return !mg_strcasecmp(etag, inm); + } + if (ims) { + return (filestat->last_modified <= parse_date_string(ims)); + } + return 0; +} + + +static void +handle_not_modified_static_file_request(struct mg_connection *conn, + struct mg_file *filep) +{ + char lm[64], etag[64]; + + if ((conn == NULL) || (filep == NULL)) { + return; + } + + gmt_time_string(lm, sizeof(lm), &filep->stat.last_modified); + construct_etag(etag, sizeof(etag), &filep->stat); + + /* Create 304 "not modified" response */ + mg_response_header_start(conn, 304); + send_static_cache_header(conn); + send_additional_header(conn); + mg_response_header_add(conn, "Last-Modified", lm, -1); + mg_response_header_add(conn, "Etag", etag, -1); + + /* Send all headers */ + mg_response_header_send(conn); +} +#endif + + +#if !defined(NO_FILESYSTEMS) +CIVETWEB_API void +mg_send_file(struct mg_connection *conn, const char *path) +{ + mg_send_mime_file2(conn, path, NULL, NULL); +} + + +CIVETWEB_API void +mg_send_mime_file(struct mg_connection *conn, + const char *path, + const char *mime_type) +{ + mg_send_mime_file2(conn, path, mime_type, NULL); +} + + +CIVETWEB_API void +mg_send_mime_file2(struct mg_connection *conn, + const char *path, + const char *mime_type, + const char *additional_headers) +{ + struct mg_file file = STRUCT_FILE_INITIALIZER; + + if (!conn) { + /* No conn */ + return; + } + + if (mg_stat(conn, path, &file.stat)) { +#if !defined(NO_CACHING) + if (is_not_modified(conn, &file.stat)) { + /* Send 304 "Not Modified" - this must not send any body data */ + handle_not_modified_static_file_request(conn, &file); + } else +#endif /* NO_CACHING */ + if (file.stat.is_directory) { + if (!mg_strcasecmp(conn->dom_ctx->config[ENABLE_DIRECTORY_LISTING], + "yes")) { + handle_directory_request(conn, path); + } else { + mg_send_http_error(conn, + 403, + "%s", + "Error: Directory listing denied"); + } + } else { + handle_static_file_request( + conn, path, &file, mime_type, additional_headers); + } + } else { + mg_send_http_error(conn, 404, "%s", "Error: File not found"); + } +} + + +/* For a given PUT path, create all intermediate subdirectories. + * Return 0 if the path itself is a directory. + * Return 1 if the path leads to a file. + * Return -1 for if the path is too long. + * Return -2 if path can not be created. + */ +static int +put_dir(struct mg_connection *conn, const char *path) +{ + char buf[UTF8_PATH_MAX]; + const char *s, *p; + struct mg_file file = STRUCT_FILE_INITIALIZER; + size_t len; + int res = 1; + + for (s = p = path + 2; (p = strchr(s, '/')) != NULL; s = ++p) { + len = (size_t)(p - path); + if (len >= sizeof(buf)) { + /* path too long */ + res = -1; + break; + } + memcpy(buf, path, len); + buf[len] = '\0'; + + /* Try to create intermediate directory */ + DEBUG_TRACE("mkdir(%s)", buf); + if (!mg_stat(conn, buf, &file.stat) && mg_mkdir(conn, buf, 0755) != 0) { + /* path does not exist and can not be created */ + res = -2; + break; + } + + /* Is path itself a directory? */ + if (p[1] == '\0') { + res = 0; + } + } + + return res; +} + + +static void +remove_bad_file(const struct mg_connection *conn, const char *path) +{ + int r = mg_remove(conn, path); + if (r != 0) { + mg_cry_internal(conn, + "%s: Cannot remove invalid file %s", + __func__, + path); + } +} + + +CIVETWEB_API long long +mg_store_body(struct mg_connection *conn, const char *path) +{ + char buf[MG_BUF_LEN]; + long long len = 0; + int ret, n; + struct mg_file fi; + + if (conn->consumed_content != 0) { + mg_cry_internal(conn, "%s: Contents already consumed", __func__); + return -11; + } + + ret = put_dir(conn, path); + if (ret < 0) { + /* -1 for path too long, + * -2 for path can not be created. */ + return ret; + } + if (ret != 1) { + /* Return 0 means, path itself is a directory. */ + return 0; + } + + if (mg_fopen(conn, path, MG_FOPEN_MODE_WRITE, &fi) == 0) { + return -12; + } + + ret = mg_read(conn, buf, sizeof(buf)); + while (ret > 0) { + n = (int)fwrite(buf, 1, (size_t)ret, fi.access.fp); + if (n != ret) { + (void)mg_fclose( + &fi.access); /* File is bad and will be removed anyway. */ + remove_bad_file(conn, path); + return -13; + } + len += ret; + ret = mg_read(conn, buf, sizeof(buf)); + } + + /* File is open for writing. If fclose fails, there was probably an + * error flushing the buffer to disk, so the file on disk might be + * broken. Delete it and return an error to the caller. */ + if (mg_fclose(&fi.access) != 0) { + remove_bad_file(conn, path); + return -14; + } + + return len; +} +#endif /* NO_FILESYSTEMS */ + + +/* Parse a buffer: + * Forward the string pointer till the end of a word, then + * terminate it and forward till the begin of the next word. + */ +static int +skip_to_end_of_word_and_terminate(char **ppw, int eol) +{ + /* Forward until a space is found - use isgraph here */ + /* Extended ASCII characters are also treated as word characters. */ + /* See http://www.cplusplus.com/reference/cctype/ */ + while ((unsigned char)**ppw > 127 || isgraph((unsigned char)**ppw)) { + (*ppw)++; + } + + /* Check end of word */ + if (eol) { + /* must be a end of line */ + if ((**ppw != '\r') && (**ppw != '\n')) { + return -1; + } + } else { + /* must be a end of a word, but not a line */ + if (**ppw != ' ') { + return -1; + } + } + + /* Terminate and forward to the next word */ + do { + **ppw = 0; + (*ppw)++; + } while (isspace((unsigned char)**ppw)); + + /* Check after term */ + if (!eol) { + /* if it's not the end of line, there must be a next word */ + if (!isgraph((unsigned char)**ppw)) { + return -1; + } + } + + /* ok */ + return 1; +} + + +/* Parse HTTP headers from the given buffer, advance buf pointer + * to the point where parsing stopped. + * All parameters must be valid pointers (not NULL). + * Return <0 on error. */ +static int +parse_http_headers(char **buf, struct mg_header hdr[MG_MAX_HEADERS]) +{ + int i; + int num_headers = 0; + + for (i = 0; i < (int)MG_MAX_HEADERS; i++) { + char *dp = *buf; + + /* Skip all ASCII characters (>SPACE, <127), to find a ':' */ + while ((*dp != ':') && (*dp >= 33) && (*dp <= 126)) { + dp++; + } + if (dp == *buf) { + /* End of headers reached. */ + break; + } + + /* Drop all spaces after header name before : */ + while (*dp == ' ') { + *dp = 0; + dp++; + } + if (*dp != ':') { + /* This is not a valid field. */ + return -1; + } + + /* End of header key (*dp == ':') */ + /* Truncate here and set the key name */ + *dp = 0; + hdr[i].name = *buf; + + /* Skip all spaces */ + do { + dp++; + } while ((*dp == ' ') || (*dp == '\t')); + + /* The rest of the line is the value */ + hdr[i].value = dp; + + /* Find end of line */ + while ((*dp != 0) && (*dp != '\r') && (*dp != '\n')) { + dp++; + }; + + /* eliminate \r */ + if (*dp == '\r') { + *dp = 0; + dp++; + if (*dp != '\n') { + /* This is not a valid line. */ + return -1; + } + } + + /* here *dp is either 0 or '\n' */ + /* in any case, we have found a complete header */ + num_headers = i + 1; + + if (*dp) { + *dp = 0; + dp++; + *buf = dp; + + if ((dp[0] == '\r') || (dp[0] == '\n')) { + /* We've had CRLF twice in a row + * This is the end of the headers */ + break; + } + /* continue within the loop, find the next header */ + } else { + *buf = dp; + break; + } + } + return num_headers; +} + + +struct mg_http_method_info { + const char *name; + int request_has_body; + int response_has_body; + int is_safe; + int is_idempotent; + int is_cacheable; +}; + + +/* https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods */ +static const struct mg_http_method_info http_methods[] = { + /* HTTP (RFC 2616) */ + {"GET", 0, 1, 1, 1, 1}, + {"POST", 1, 1, 0, 0, 0}, + {"PUT", 1, 0, 0, 1, 0}, + {"DELETE", 0, 0, 0, 1, 0}, + {"HEAD", 0, 0, 1, 1, 1}, + {"OPTIONS", 0, 0, 1, 1, 0}, + {"CONNECT", 1, 1, 0, 0, 0}, + /* TRACE method (RFC 2616) is not supported for security reasons */ + + /* PATCH method (RFC 5789) */ + {"PATCH", 1, 0, 0, 0, 0}, + /* PATCH method only allowed for CGI/Lua/LSP and callbacks. */ + + /* WEBDAV (RFC 2518) */ + {"PROPFIND", 0, 1, 1, 1, 0}, + /* http://www.webdav.org/specs/rfc4918.html, 9.1: + * Some PROPFIND results MAY be cached, with care, + * as there is no cache validation mechanism for + * most properties. This method is both safe and + * idempotent (see Section 9.1 of [RFC2616]). */ + {"MKCOL", 0, 0, 0, 1, 0}, + /* http://www.webdav.org/specs/rfc4918.html, 9.1: + * When MKCOL is invoked without a request body, + * the newly created collection SHOULD have no + * members. A MKCOL request message may contain + * a message body. The precise behavior of a MKCOL + * request when the body is present is undefined, + * ... ==> We do not support MKCOL with body data. + * This method is idempotent, but not safe (see + * Section 9.1 of [RFC2616]). Responses to this + * method MUST NOT be cached. */ + + /* Methods for write access to files on WEBDAV (RFC 2518) */ + {"LOCK", 1, 1, 0, 0, 0}, + {"UNLOCK", 1, 0, 0, 0, 0}, + {"PROPPATCH", 1, 1, 0, 0, 0}, + {"COPY", 1, 0, 0, 0, 0}, + {"MOVE", 1, 1, 0, 0, 0}, + + /* Unsupported WEBDAV Methods: */ + /* + 11 methods from RFC 3253 */ + /* ORDERPATCH (RFC 3648) */ + /* ACL (RFC 3744) */ + /* SEARCH (RFC 5323) */ + /* + MicroSoft extensions + * https://msdn.microsoft.com/en-us/library/aa142917.aspx */ + + /* REPORT method (RFC 3253) */ + {"REPORT", 1, 1, 1, 1, 1}, + /* REPORT method only allowed for CGI/Lua/LSP and callbacks. */ + /* It was defined for WEBDAV in RFC 3253, Sec. 3.6 + * (https://tools.ietf.org/html/rfc3253#section-3.6), but seems + * to be useful for REST in case a "GET request with body" is + * required. */ + + {NULL, 0, 0, 0, 0, 0} + /* end of list */ +}; + + +/* All method names */ +static char *all_methods = NULL; /* Built by mg_init_library */ + + +static const struct mg_http_method_info * +get_http_method_info(const char *method) +{ + /* Check if the method is known to the server. The list of all known + * HTTP methods can be found here at + * http://www.iana.org/assignments/http-methods/http-methods.xhtml + */ + const struct mg_http_method_info *m = http_methods; + + while (m->name) { + if (!strcmp(m->name, method)) { + return m; + } + m++; + } + return NULL; +} + + +static int +is_valid_http_method(const char *method) +{ + return (get_http_method_info(method) != NULL); +} + + +/* Parse HTTP request, fill in mg_request_info structure. + * This function modifies the buffer by NUL-terminating + * HTTP request components, header names and header values. + * Parameters: + * buf (in/out): pointer to the HTTP header to parse and split + * len (in): length of HTTP header buffer + * re (out): parsed header as mg_request_info + * buf and ri must be valid pointers (not NULL), len>0. + * Returns <0 on error. */ +static int +parse_http_request(char *buf, int len, struct mg_request_info *ri) +{ + int request_length; + int init_skip = 0; + + /* Reset attributes. DO NOT TOUCH is_ssl, remote_addr, + * remote_port */ + ri->remote_user = ri->request_method = ri->request_uri = ri->http_version = + NULL; + ri->num_headers = 0; + + /* RFC says that all initial whitespaces should be ignored */ + /* This included all leading \r and \n (isspace) */ + /* See table: http://www.cplusplus.com/reference/cctype/ */ + while ((len > 0) && isspace((unsigned char)*buf)) { + buf++; + len--; + init_skip++; + } + + if (len == 0) { + /* Incomplete request */ + return 0; + } + + /* Control characters are not allowed, including zero */ + if (iscntrl((unsigned char)*buf)) { + return -1; + } + + /* Find end of HTTP header */ + request_length = get_http_header_len(buf, len); + if (request_length <= 0) { + return request_length; + } + buf[request_length - 1] = '\0'; + + if ((*buf == 0) || (*buf == '\r') || (*buf == '\n')) { + return -1; + } + + /* The first word has to be the HTTP method */ + ri->request_method = buf; + + if (skip_to_end_of_word_and_terminate(&buf, 0) <= 0) { + return -1; + } + + /* The second word is the URI */ + ri->request_uri = buf; + + if (skip_to_end_of_word_and_terminate(&buf, 0) <= 0) { + return -1; + } + + /* Next would be the HTTP version */ + ri->http_version = buf; + + if (skip_to_end_of_word_and_terminate(&buf, 1) <= 0) { + return -1; + } + + /* Check for a valid HTTP version key */ + if (strncmp(ri->http_version, "HTTP/", 5) != 0) { + /* Invalid request */ + return -1; + } + ri->http_version += 5; + + /* Check for a valid http method */ + if (!is_valid_http_method(ri->request_method)) { + return -1; + } + + /* Parse all HTTP headers */ + ri->num_headers = parse_http_headers(&buf, ri->http_headers); + if (ri->num_headers < 0) { + /* Error while parsing headers */ + return -1; + } + + return request_length + init_skip; +} + + +static int +parse_http_response(char *buf, int len, struct mg_response_info *ri) +{ + int response_length; + int init_skip = 0; + char *tmp, *tmp2; + long l; + + /* Initialize elements. */ + ri->http_version = ri->status_text = NULL; + ri->num_headers = ri->status_code = 0; + + /* RFC says that all initial whitespaces should be ignored */ + /* This included all leading \r and \n (isspace) */ + /* See table: http://www.cplusplus.com/reference/cctype/ */ + while ((len > 0) && isspace((unsigned char)*buf)) { + buf++; + len--; + init_skip++; + } + + if (len == 0) { + /* Incomplete request */ + return 0; + } + + /* Control characters are not allowed, including zero */ + if (iscntrl((unsigned char)*buf)) { + return -1; + } + + /* Find end of HTTP header */ + response_length = get_http_header_len(buf, len); + if (response_length <= 0) { + return response_length; + } + buf[response_length - 1] = '\0'; + + if ((*buf == 0) || (*buf == '\r') || (*buf == '\n')) { + return -1; + } + + /* The first word is the HTTP version */ + /* Check for a valid HTTP version key */ + if (strncmp(buf, "HTTP/", 5) != 0) { + /* Invalid request */ + return -1; + } + buf += 5; + if (!isgraph((unsigned char)buf[0])) { + /* Invalid request */ + return -1; + } + ri->http_version = buf; + + if (skip_to_end_of_word_and_terminate(&buf, 0) <= 0) { + return -1; + } + + /* The second word is the status as a number */ + tmp = buf; + + if (skip_to_end_of_word_and_terminate(&buf, 0) <= 0) { + return -1; + } + + l = strtol(tmp, &tmp2, 10); + if ((l < 100) || (l >= 1000) || ((tmp2 - tmp) != 3) || (*tmp2 != 0)) { + /* Everything else but a 3 digit code is invalid */ + return -1; + } + ri->status_code = (int)l; + + /* The rest of the line is the status text */ + ri->status_text = buf; + + /* Find end of status text */ + /* isgraph or isspace = isprint */ + while (isprint((unsigned char)*buf)) { + buf++; + } + if ((*buf != '\r') && (*buf != '\n')) { + return -1; + } + /* Terminate string and forward buf to next line */ + do { + *buf = 0; + buf++; + } while (isspace((unsigned char)*buf)); + + /* Parse all HTTP headers */ + ri->num_headers = parse_http_headers(&buf, ri->http_headers); + if (ri->num_headers < 0) { + /* Error while parsing headers */ + return -1; + } + + return response_length + init_skip; +} + + +/* Keep reading the input (either opened file descriptor fd, or socket sock, + * or SSL descriptor ssl) into buffer buf, until \r\n\r\n appears in the + * buffer (which marks the end of HTTP request). Buffer buf may already + * have some data. The length of the data is stored in nread. + * Upon every read operation, increase nread by the number of bytes read. */ +static int +read_message(FILE *fp, + struct mg_connection *conn, + char *buf, + int bufsiz, + int *nread) +{ + int request_len, n = 0; + struct timespec last_action_time; + double request_timeout; + + if (!conn) { + return 0; + } + + memset(&last_action_time, 0, sizeof(last_action_time)); + + if (conn->dom_ctx->config[REQUEST_TIMEOUT]) { + /* value of request_timeout is in seconds, config in milliseconds */ + request_timeout = + strtod(conn->dom_ctx->config[REQUEST_TIMEOUT], NULL) / 1000.0; + } else { + request_timeout = + strtod(config_options[REQUEST_TIMEOUT].default_value, NULL) + / 1000.0; + } + if (conn->handled_requests > 0) { + if (conn->dom_ctx->config[KEEP_ALIVE_TIMEOUT]) { + request_timeout = + strtod(conn->dom_ctx->config[KEEP_ALIVE_TIMEOUT], NULL) + / 1000.0; + } + } + + request_len = get_http_header_len(buf, *nread); + + while (request_len == 0) { + /* Full request not yet received */ + if (!STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + /* Server is to be stopped. */ + return -1; + } + + if (*nread >= bufsiz) { + /* Request too long */ + return -2; + } + + n = pull_inner( + fp, conn, buf + *nread, bufsiz - *nread, request_timeout); + if (n == -2) { + /* Receive error */ + return -1; + } + + /* update clock after every read request */ + clock_gettime(CLOCK_MONOTONIC, &last_action_time); + + if (n > 0) { + *nread += n; + request_len = get_http_header_len(buf, *nread); + } + + if ((n <= 0) && (request_timeout >= 0)) { + if (mg_difftimespec(&last_action_time, &(conn->req_time)) + > request_timeout) { + /* Timeout */ + return -3; + } + } + } + + return request_len; +} + + +#if !defined(NO_CGI) || !defined(NO_FILES) +static int +forward_body_data(struct mg_connection *conn, FILE *fp, SOCKET sock, SSL *ssl) +{ + const char *expect; + char buf[MG_BUF_LEN]; + int success = 0; + + if (!conn) { + return 0; + } + + expect = mg_get_header(conn, "Expect"); + DEBUG_ASSERT(fp != NULL); + if (!fp) { + mg_send_http_error(conn, 500, "%s", "Error: NULL File"); + return 0; + } + + if ((expect != NULL) && (mg_strcasecmp(expect, "100-continue") != 0)) { + /* Client sent an "Expect: xyz" header and xyz is not 100-continue. + */ + mg_send_http_error(conn, 417, "Error: Can not fulfill expectation"); + } else { + if (expect != NULL) { + (void)mg_printf(conn, "%s", "HTTP/1.1 100 Continue\r\n\r\n"); + conn->status_code = 100; + } else { + conn->status_code = 200; + } + + DEBUG_ASSERT(conn->consumed_content == 0); + + if (conn->consumed_content != 0) { + mg_send_http_error(conn, 500, "%s", "Error: Size mismatch"); + return 0; + } + + for (;;) { + int nread = mg_read(conn, buf, sizeof(buf)); + if (nread <= 0) { + success = (nread == 0); + break; + } + if (push_all(conn->phys_ctx, fp, sock, ssl, buf, nread) != nread) { + break; + } + } + + /* Each error code path in this function must send an error */ + if (!success) { + /* NOTE: Maybe some data has already been sent. */ + /* TODO (low): If some data has been sent, a correct error + * reply can no longer be sent, so just close the connection */ + mg_send_http_error(conn, 500, "%s", ""); + } + } + + return success; +} +#endif + + +#if defined(USE_TIMERS) + +#define TIMER_API static +#include "timer.inl" + +#endif /* USE_TIMERS */ + + +#if !defined(NO_CGI) +/* This structure helps to create an environment for the spawned CGI + * program. + * Environment is an array of "VARIABLE=VALUE\0" ASCII strings, + * last element must be NULL. + * However, on Windows there is a requirement that all these + * VARIABLE=VALUE\0 + * strings must reside in a contiguous buffer. The end of the buffer is + * marked by two '\0' characters. + * We satisfy both worlds: we create an envp array (which is vars), all + * entries are actually pointers inside buf. */ +struct cgi_environment { + struct mg_connection *conn; + /* Data block */ + char *buf; /* Environment buffer */ + size_t buflen; /* Space available in buf */ + size_t bufused; /* Space taken in buf */ + /* Index block */ + char **var; /* char **envp */ + size_t varlen; /* Number of variables available in var */ + size_t varused; /* Number of variables stored in var */ +}; + + +static void addenv(struct cgi_environment *env, + PRINTF_FORMAT_STRING(const char *fmt), + ...) PRINTF_ARGS(2, 3); + +/* Append VARIABLE=VALUE\0 string to the buffer, and add a respective + * pointer into the vars array. Assumes env != NULL and fmt != NULL. */ +static void +addenv(struct cgi_environment *env, const char *fmt, ...) +{ + size_t i, n, space; + int truncated = 0; + char *added; + va_list ap; + + if ((env->varlen - env->varused) < 2) { + mg_cry_internal(env->conn, + "%s: Cannot register CGI variable [%s]", + __func__, + fmt); + return; + } + + /* Calculate how much space is left in the buffer */ + space = (env->buflen - env->bufused); + + do { + /* Space for "\0\0" is always needed. */ + if (space <= 2) { + /* Allocate new buffer */ + n = env->buflen + CGI_ENVIRONMENT_SIZE; + added = (char *)mg_realloc_ctx(env->buf, n, env->conn->phys_ctx); + if (!added) { + /* Out of memory */ + mg_cry_internal( + env->conn, + "%s: Cannot allocate memory for CGI variable [%s]", + __func__, + fmt); + return; + } + /* Retarget pointers */ + env->buf = added; + env->buflen = n; + for (i = 0, n = 0; i < env->varused; i++) { + env->var[i] = added + n; + n += strlen(added + n) + 1; + } + space = (env->buflen - env->bufused); + } + + /* Make a pointer to the free space int the buffer */ + added = env->buf + env->bufused; + + /* Copy VARIABLE=VALUE\0 string into the free space */ + va_start(ap, fmt); + mg_vsnprintf(env->conn, &truncated, added, space - 1, fmt, ap); + va_end(ap); + + /* Do not add truncated strings to the environment */ + if (truncated) { + /* Reallocate the buffer */ + space = 0; + } + } while (truncated); + + /* Calculate number of bytes added to the environment */ + n = strlen(added) + 1; + env->bufused += n; + + /* Append a pointer to the added string into the envp array */ + env->var[env->varused] = added; + env->varused++; +} + +/* Return 0 on success, non-zero if an error occurs. */ + +static int +prepare_cgi_environment(struct mg_connection *conn, + const char *prog, + struct cgi_environment *env, + int cgi_config_idx) +{ + const char *s; + struct vec var_vec; + char *p, src_addr[IP_ADDR_STR_LEN], http_var_name[128]; + int i, truncated, uri_len; + + if ((conn == NULL) || (prog == NULL) || (env == NULL)) { + return -1; + } + + env->conn = conn; + env->buflen = CGI_ENVIRONMENT_SIZE; + env->bufused = 0; + env->buf = (char *)mg_malloc_ctx(env->buflen, conn->phys_ctx); + if (env->buf == NULL) { + mg_cry_internal(conn, + "%s: Not enough memory for environmental buffer", + __func__); + return -1; + } + env->varlen = MAX_CGI_ENVIR_VARS; + env->varused = 0; + env->var = + (char **)mg_malloc_ctx(env->varlen * sizeof(char *), conn->phys_ctx); + if (env->var == NULL) { + mg_cry_internal(conn, + "%s: Not enough memory for environmental variables", + __func__); + mg_free(env->buf); + return -1; + } + + addenv(env, "SERVER_NAME=%s", conn->dom_ctx->config[AUTHENTICATION_DOMAIN]); + addenv(env, "SERVER_ROOT=%s", conn->dom_ctx->config[DOCUMENT_ROOT]); + addenv(env, "DOCUMENT_ROOT=%s", conn->dom_ctx->config[DOCUMENT_ROOT]); + if (conn->dom_ctx->config[FALLBACK_DOCUMENT_ROOT]) { + addenv(env, + "FALLBACK_DOCUMENT_ROOT=%s", + conn->dom_ctx->config[FALLBACK_DOCUMENT_ROOT]); + } + addenv(env, "SERVER_SOFTWARE=CivetWeb/%s", mg_version()); + + /* Prepare the environment block */ + addenv(env, "%s", "GATEWAY_INTERFACE=CGI/1.1"); + addenv(env, "%s", "SERVER_PROTOCOL=HTTP/1.1"); + addenv(env, "%s", "REDIRECT_STATUS=200"); /* For PHP */ + + addenv(env, "SERVER_PORT=%d", conn->request_info.server_port); + + sockaddr_to_string(src_addr, sizeof(src_addr), &conn->client.rsa); + addenv(env, "REMOTE_ADDR=%s", src_addr); + + addenv(env, "REQUEST_METHOD=%s", conn->request_info.request_method); + addenv(env, "REMOTE_PORT=%d", conn->request_info.remote_port); + + addenv(env, "REQUEST_URI=%s", conn->request_info.request_uri); + addenv(env, "LOCAL_URI=%s", conn->request_info.local_uri); + addenv(env, "LOCAL_URI_RAW=%s", conn->request_info.local_uri_raw); + + /* SCRIPT_NAME */ + uri_len = (int)strlen(conn->request_info.local_uri); + if (conn->path_info == NULL) { + if (conn->request_info.local_uri[uri_len - 1] != '/') { + /* URI: /path_to_script/script.cgi */ + addenv(env, "SCRIPT_NAME=%s", conn->request_info.local_uri); + } else { + /* URI: /path_to_script/ ... using index.cgi */ + const char *index_file = strrchr(prog, '/'); + if (index_file) { + addenv(env, + "SCRIPT_NAME=%s%s", + conn->request_info.local_uri, + index_file + 1); + } + } + } else { + /* URI: /path_to_script/script.cgi/path_info */ + addenv(env, + "SCRIPT_NAME=%.*s", + uri_len - (int)strlen(conn->path_info), + conn->request_info.local_uri); + } + + addenv(env, "SCRIPT_FILENAME=%s", prog); + if (conn->path_info == NULL) { + addenv(env, "PATH_TRANSLATED=%s", conn->dom_ctx->config[DOCUMENT_ROOT]); + } else { + addenv(env, + "PATH_TRANSLATED=%s%s", + conn->dom_ctx->config[DOCUMENT_ROOT], + conn->path_info); + } + + addenv(env, "HTTPS=%s", (conn->ssl == NULL) ? "off" : "on"); + + if ((s = mg_get_header(conn, "Content-Type")) != NULL) { + addenv(env, "CONTENT_TYPE=%s", s); + } + if (conn->request_info.query_string != NULL) { + addenv(env, "QUERY_STRING=%s", conn->request_info.query_string); + } + if ((s = mg_get_header(conn, "Content-Length")) != NULL) { + addenv(env, "CONTENT_LENGTH=%s", s); + } + if ((s = getenv("PATH")) != NULL) { + addenv(env, "PATH=%s", s); + } + if (conn->path_info != NULL) { + addenv(env, "PATH_INFO=%s", conn->path_info); + } + + if (conn->status_code > 0) { + /* CGI error handler should show the status code */ + addenv(env, "STATUS=%d", conn->status_code); + } + +#if defined(_WIN32) + if ((s = getenv("COMSPEC")) != NULL) { + addenv(env, "COMSPEC=%s", s); + } + if ((s = getenv("SYSTEMROOT")) != NULL) { + addenv(env, "SYSTEMROOT=%s", s); + } + if ((s = getenv("SystemDrive")) != NULL) { + addenv(env, "SystemDrive=%s", s); + } + if ((s = getenv("ProgramFiles")) != NULL) { + addenv(env, "ProgramFiles=%s", s); + } + if ((s = getenv("ProgramFiles(x86)")) != NULL) { + addenv(env, "ProgramFiles(x86)=%s", s); + } +#else + if ((s = getenv("LD_LIBRARY_PATH")) != NULL) { + addenv(env, "LD_LIBRARY_PATH=%s", s); + } +#endif /* _WIN32 */ + + if ((s = getenv("PERLLIB")) != NULL) { + addenv(env, "PERLLIB=%s", s); + } + + if (conn->request_info.remote_user != NULL) { + addenv(env, "REMOTE_USER=%s", conn->request_info.remote_user); + addenv(env, "%s", "AUTH_TYPE=Digest"); + } + + /* Add all headers as HTTP_* variables */ + for (i = 0; i < conn->request_info.num_headers; i++) { + + (void)mg_snprintf(conn, + &truncated, + http_var_name, + sizeof(http_var_name), + "HTTP_%s", + conn->request_info.http_headers[i].name); + + if (truncated) { + mg_cry_internal(conn, + "%s: HTTP header variable too long [%s]", + __func__, + conn->request_info.http_headers[i].name); + continue; + } + + /* Convert variable name into uppercase, and change - to _ */ + for (p = http_var_name; *p != '\0'; p++) { + if (*p == '-') { + *p = '_'; + } + *p = (char)toupper((unsigned char)*p); + } + + addenv(env, + "%s=%s", + http_var_name, + conn->request_info.http_headers[i].value); + } + + /* Add user-specified variables */ + s = conn->dom_ctx->config[CGI_ENVIRONMENT + cgi_config_idx]; + while ((s = next_option(s, &var_vec, NULL)) != NULL) { + addenv(env, "%.*s", (int)var_vec.len, var_vec.ptr); + } + + env->var[env->varused] = NULL; + env->buf[env->bufused] = '\0'; + + return 0; +} + + +/* Data for CGI process control: PID and number of references */ +struct process_control_data { + pid_t pid; + ptrdiff_t references; +}; + +static int +abort_cgi_process(void *data) +{ + /* Waitpid checks for child status and won't work for a pid that does + * not identify a child of the current process. Thus, if the pid is + * reused, we will not affect a different process. */ + struct process_control_data *proc = (struct process_control_data *)data; + int status = 0; + ptrdiff_t refs; + pid_t ret_pid; + + ret_pid = waitpid(proc->pid, &status, WNOHANG); + if ((ret_pid != (pid_t)-1) && (status == 0)) { + /* Stop child process */ + DEBUG_TRACE("CGI timer: Stop child process %d\n", proc->pid); + kill(proc->pid, SIGABRT); + + /* Wait until process is terminated (don't leave zombies) */ + while (waitpid(proc->pid, &status, 0) != (pid_t)-1) /* nop */ + ; + } else { + DEBUG_TRACE("CGI timer: Child process %d already stopped\n", proc->pid); + } + /* Dec reference counter */ + refs = mg_atomic_dec(&proc->references); + if (refs == 0) { + /* no more references - free data */ + mg_free(data); + } + + return 0; +} + + +/* Local (static) function assumes all arguments are valid. */ +static void +handle_cgi_request(struct mg_connection *conn, + const char *prog, + int cgi_config_idx) +{ + char *buf; + size_t buflen; + int headers_len, data_len, i, truncated; + int fdin[2] = {-1, -1}, fdout[2] = {-1, -1}, fderr[2] = {-1, -1}; + const char *status, *status_text; + char *pbuf, dir[UTF8_PATH_MAX], *p; + struct mg_request_info ri; + struct cgi_environment blk; + FILE *in = NULL, *out = NULL, *err = NULL; + struct mg_file fout = STRUCT_FILE_INITIALIZER; + pid_t pid = (pid_t)-1; + struct process_control_data *proc = NULL; + char *cfg_buffering = conn->dom_ctx->config[CGI_BUFFERING + cgi_config_idx]; + int no_buffering = 0; + +#if defined(USE_TIMERS) + double cgi_timeout; + if (conn->dom_ctx->config[CGI_TIMEOUT + cgi_config_idx]) { + /* Get timeout in seconds */ + cgi_timeout = + atof(conn->dom_ctx->config[CGI_TIMEOUT + cgi_config_idx]) * 0.001; + } else { + cgi_timeout = + atof(config_options[REQUEST_TIMEOUT].default_value) * 0.001; + } +#endif + if (cfg_buffering != NULL) { + if (!mg_strcasecmp(cfg_buffering, "no")) { + no_buffering = 1; + } + } + + buf = NULL; + buflen = conn->phys_ctx->max_request_size; + i = prepare_cgi_environment(conn, prog, &blk, cgi_config_idx); + if (i != 0) { + blk.buf = NULL; + blk.var = NULL; + goto done; + } + + /* CGI must be executed in its own directory. 'dir' must point to the + * directory containing executable program, 'p' must point to the + * executable program name relative to 'dir'. */ + (void)mg_snprintf(conn, &truncated, dir, sizeof(dir), "%s", prog); + + if (truncated) { + mg_cry_internal(conn, "Error: CGI program \"%s\": Path too long", prog); + mg_send_http_error(conn, 500, "Error: %s", "CGI path too long"); + goto done; + } + + if ((p = strrchr(dir, '/')) != NULL) { + *p++ = '\0'; + } else { + dir[0] = '.'; + dir[1] = '\0'; + p = (char *)prog; + } + + if ((pipe(fdin) != 0) || (pipe(fdout) != 0) || (pipe(fderr) != 0)) { + status = strerror(ERRNO); + mg_cry_internal( + conn, + "Error: CGI program \"%s\": Can not create CGI pipes: %s", + prog, + status); + mg_send_http_error(conn, + 500, + "Error: Cannot create CGI pipe: %s", + status); + goto done; + } + + proc = (struct process_control_data *) + mg_malloc_ctx(sizeof(struct process_control_data), conn->phys_ctx); + if (proc == NULL) { + mg_cry_internal(conn, "Error: CGI program \"%s\": Out or memory", prog); + mg_send_http_error(conn, 500, "Error: Out of memory [%s]", prog); + goto done; + } + + DEBUG_TRACE("CGI: spawn %s %s\n", dir, p); + pid = spawn_process( + conn, p, blk.buf, blk.var, fdin, fdout, fderr, dir, cgi_config_idx); + + if (pid == (pid_t)-1) { + status = strerror(ERRNO); + mg_cry_internal( + conn, + "Error: CGI program \"%s\": Can not spawn CGI process: %s", + prog, + status); + mg_send_http_error(conn, 500, "Error: Cannot spawn CGI process"); + mg_free(proc); + proc = NULL; + goto done; + } + + /* Store data in shared process_control_data */ + proc->pid = pid; + proc->references = 1; + +#if defined(USE_TIMERS) + if (cgi_timeout > 0.0) { + proc->references = 2; + + // Start a timer for CGI + timer_add(conn->phys_ctx, + cgi_timeout /* in seconds */, + 0.0, + 1, + abort_cgi_process, + (void *)proc, + NULL); + } +#endif + + /* Parent closes only one side of the pipes. + * If we don't mark them as closed, close() attempt before + * return from this function throws an exception on Windows. + * Windows does not like when closed descriptor is closed again. */ + (void)close(fdin[0]); + (void)close(fdout[1]); + (void)close(fderr[1]); + fdin[0] = fdout[1] = fderr[1] = -1; + + if (((in = fdopen(fdin[1], "wb")) == NULL) + || ((out = fdopen(fdout[0], "rb")) == NULL) + || ((err = fdopen(fderr[0], "rb")) == NULL)) { + status = strerror(ERRNO); + mg_cry_internal(conn, + "Error: CGI program \"%s\": Can not open fd: %s", + prog, + status); + mg_send_http_error(conn, + 500, + "Error: CGI can not open fd\nfdopen: %s", + status); + goto done; + } + + setbuf(in, NULL); + setbuf(out, NULL); + setbuf(err, NULL); + fout.access.fp = out; + + if ((conn->content_len != 0) || (conn->is_chunked)) { + DEBUG_TRACE("CGI: send body data (%" INT64_FMT ")\n", + conn->content_len); + + /* This is a POST/PUT request, or another request with body data. */ + if (!forward_body_data(conn, in, INVALID_SOCKET, NULL)) { + /* Error sending the body data */ + mg_cry_internal( + conn, + "Error: CGI program \"%s\": Forward body data failed", + prog); + goto done; + } + } + + /* Close so child gets an EOF. */ + fclose(in); + in = NULL; + fdin[1] = -1; + + /* Now read CGI reply into a buffer. We need to set correct + * status code, thus we need to see all HTTP headers first. + * Do not send anything back to client, until we buffer in all + * HTTP headers. */ + data_len = 0; + buf = (char *)mg_malloc_ctx(buflen, conn->phys_ctx); + if (buf == NULL) { + mg_send_http_error(conn, + 500, + "Error: Not enough memory for CGI buffer (%u bytes)", + (unsigned int)buflen); + mg_cry_internal( + conn, + "Error: CGI program \"%s\": Not enough memory for buffer (%u " + "bytes)", + prog, + (unsigned int)buflen); + goto done; + } + + DEBUG_TRACE("CGI: %s", "wait for response"); + headers_len = read_message(out, conn, buf, (int)buflen, &data_len); + DEBUG_TRACE("CGI: response: %li", (signed long)headers_len); + + if (headers_len <= 0) { + + /* Could not parse the CGI response. Check if some error message on + * stderr. */ + i = pull_all(err, conn, buf, (int)buflen); + if (i > 0) { + /* CGI program explicitly sent an error */ + /* Write the error message to the internal log */ + mg_cry_internal(conn, + "Error: CGI program \"%s\" sent error " + "message: [%.*s]", + prog, + i, + buf); + /* Don't send the error message back to the client */ + mg_send_http_error(conn, + 500, + "Error: CGI program \"%s\" failed.", + prog); + } else { + /* CGI program did not explicitly send an error, but a broken + * respon header */ + mg_cry_internal(conn, + "Error: CGI program sent malformed or too big " + "(>%u bytes) HTTP headers: [%.*s]", + (unsigned)buflen, + data_len, + buf); + + mg_send_http_error(conn, + 500, + "Error: CGI program sent malformed or too big " + "(>%u bytes) HTTP headers: [%.*s]", + (unsigned)buflen, + data_len, + buf); + } + + /* in both cases, abort processing CGI */ + goto done; + } + + pbuf = buf; + buf[headers_len - 1] = '\0'; + ri.num_headers = parse_http_headers(&pbuf, ri.http_headers); + + /* Make up and send the status line */ + status_text = "OK"; + if ((status = get_header(ri.http_headers, ri.num_headers, "Status")) + != NULL) { + conn->status_code = atoi(status); + status_text = status; + while (isdigit((unsigned char)*status_text) || *status_text == ' ') { + status_text++; + } + } else if (get_header(ri.http_headers, ri.num_headers, "Location") + != NULL) { + conn->status_code = 307; + } else { + conn->status_code = 200; + } + + if (!should_keep_alive(conn)) { + conn->must_close = 1; + } + + DEBUG_TRACE("CGI: response %u %s", conn->status_code, status_text); + + (void)mg_printf(conn, "HTTP/1.1 %d %s\r\n", conn->status_code, status_text); + + /* Send headers */ + for (i = 0; i < ri.num_headers; i++) { + DEBUG_TRACE("CGI header: %s: %s", + ri.http_headers[i].name, + ri.http_headers[i].value); + mg_printf(conn, + "%s: %s\r\n", + ri.http_headers[i].name, + ri.http_headers[i].value); + } + mg_write(conn, "\r\n", 2); + + /* Send chunk of data that may have been read after the headers */ + mg_write(conn, buf + headers_len, (size_t)(data_len - headers_len)); + + /* Read the rest of CGI output and send to the client */ + DEBUG_TRACE("CGI: %s", "forward all data"); + send_file_data(conn, &fout, 0, INT64_MAX, no_buffering); /* send CGI data */ + DEBUG_TRACE("CGI: %s", "all data sent"); + +done: + mg_free(blk.var); + mg_free(blk.buf); + + if (pid != (pid_t)-1) { + abort_cgi_process((void *)proc); + } + + if (fdin[0] != -1) { + close(fdin[0]); + } + if (fdout[1] != -1) { + close(fdout[1]); + } + if (fderr[1] != -1) { + close(fderr[1]); + } + + if (in != NULL) { + fclose(in); + } else if (fdin[1] != -1) { + close(fdin[1]); + } + + if (out != NULL) { + fclose(out); + } else if (fdout[0] != -1) { + close(fdout[0]); + } + + if (err != NULL) { + fclose(err); + } else if (fderr[0] != -1) { + close(fderr[0]); + } + + mg_free(buf); +} +#endif /* !NO_CGI */ + + +#if !defined(NO_FILES) +static void +dav_mkcol(struct mg_connection *conn, const char *path) +{ + int rc, body_len; + struct de de; + + if (conn == NULL) { + return; + } + + /* TODO (mid): Check the mg_send_http_error situations in this function + */ + + memset(&de.file, 0, sizeof(de.file)); + if (!mg_stat(conn, path, &de.file)) { + mg_cry_internal(conn, + "%s: mg_stat(%s) failed: %s", + __func__, + path, + strerror(ERRNO)); + } + + if (de.file.last_modified) { + /* TODO (mid): This check does not seem to make any sense ! */ + /* TODO (mid): Add a webdav unit test first, before changing + * anything here. */ + mg_send_http_error( + conn, 405, "Error: mkcol(%s): %s", path, strerror(ERRNO)); + return; + } + + body_len = conn->data_len - conn->request_len; + if (body_len > 0) { + mg_send_http_error( + conn, 415, "Error: mkcol(%s): %s", path, strerror(ERRNO)); + return; + } + + rc = mg_mkdir(conn, path, 0755); + DEBUG_TRACE("mkdir %s: %i", path, rc); + if (rc == 0) { + /* Create 201 "Created" response */ + mg_response_header_start(conn, 201); + send_static_cache_header(conn); + send_additional_header(conn); + mg_response_header_add(conn, "Content-Length", "0", -1); + + /* Send all headers - there is no body */ + mg_response_header_send(conn); + } else { + int http_status = 500; + switch (errno) { + case EEXIST: + http_status = 405; + break; + case EACCES: + http_status = 403; + break; + case ENOENT: + http_status = 409; + break; + } + + mg_send_http_error(conn, + http_status, + "Error processing %s: %s", + path, + strerror(ERRNO)); + } +} + + +/* Forward decrlaration */ +static int get_uri_type(const char *uri); +static const char * +get_rel_url_at_current_server(const char *uri, + const struct mg_connection *conn); + + +static void +dav_move_file(struct mg_connection *conn, const char *path, int do_copy) +{ + const char *overwrite_hdr; + const char *destination_hdr; + const char *root; + int rc, dest_uri_type; + int http_status = 400; + int do_overwrite = 0; + int destination_ok = 0; + char dest_path[UTF8_PATH_MAX]; + struct mg_file_stat ignored; + + if (conn == NULL) { + return; + } + + root = conn->dom_ctx->config[DOCUMENT_ROOT]; + overwrite_hdr = mg_get_header(conn, "Overwrite"); + destination_hdr = mg_get_header(conn, "Destination"); + if ((overwrite_hdr != NULL) && (toupper(overwrite_hdr[0]) == 'T')) { + do_overwrite = 1; + } + + if ((destination_hdr == NULL) || (destination_hdr[0] == 0)) { + mg_send_http_error(conn, 400, "%s", "Missing destination"); + return; + } + + if (root != NULL) { + char *local_dest = NULL; + dest_uri_type = get_uri_type(destination_hdr); + if (dest_uri_type == 2) { + local_dest = mg_strdup_ctx(destination_hdr, conn->phys_ctx); + } else if ((dest_uri_type == 3) || (dest_uri_type == 4)) { + const char *h = + get_rel_url_at_current_server(destination_hdr, conn); + if (h) { + size_t len = strlen(h); + local_dest = mg_malloc_ctx(len + 1, conn->phys_ctx); + mg_url_decode(h, (int)len, local_dest, (int)len + 1, 0); + } + } + if (local_dest != NULL) { + remove_dot_segments(local_dest); + if (local_dest[0] == '/') { + int trunc_check = 0; + mg_snprintf(conn, + &trunc_check, + dest_path, + sizeof(dest_path), + "%s/%s", + root, + local_dest); + if (trunc_check == 0) { + destination_ok = 1; + } + } + mg_free(local_dest); + } + } + + if (!destination_ok) { + mg_send_http_error(conn, 502, "%s", "Illegal destination"); + return; + } + + /* Check now if this file exists */ + if (mg_stat(conn, dest_path, &ignored)) { + /* File exists */ + if (do_overwrite) { + /* Overwrite allowed: delete the file first */ + if (0 != remove(dest_path)) { + /* No overwrite: return error */ + mg_send_http_error(conn, + 403, + "Cannot overwrite file: %s", + dest_path); + return; + } + } else { + /* No overwrite: return error */ + mg_send_http_error(conn, + 412, + "Destination already exists: %s", + dest_path); + return; + } + } + + /* Copy / Move / Rename operation. */ + DEBUG_TRACE("%s %s to %s", (do_copy ? "copy" : "move"), path, dest_path); +#if defined(_WIN32) + { + /* For Windows, we need to convert from UTF-8 to UTF-16 first. */ + wchar_t wSource[UTF16_PATH_MAX]; + wchar_t wDest[UTF16_PATH_MAX]; + BOOL ok; + + path_to_unicode(conn, path, wSource, ARRAY_SIZE(wSource)); + path_to_unicode(conn, dest_path, wDest, ARRAY_SIZE(wDest)); + if (do_copy) { + ok = CopyFileW(wSource, wDest, do_overwrite ? FALSE : TRUE); + } else { + ok = MoveFileExW(wSource, + wDest, + do_overwrite ? MOVEFILE_REPLACE_EXISTING : 0); + } + if (ok) { + rc = 0; + } else { + DWORD lastErr = GetLastError(); + if (lastErr == ERROR_ALREADY_EXISTS) { + mg_send_http_error(conn, + 412, + "Destination already exists: %s", + dest_path); + return; + } + rc = -1; + http_status = 400; + } + } + +#else + { + /* Linux uses already UTF-8, we don't need to convert file names. */ + + if (do_copy) { + /* TODO: COPY for Linux. */ + mg_send_http_error(conn, 403, "%s", "COPY forbidden"); + return; + } + + rc = rename(path, dest_path); + if (rc) { + switch (errno) { + case EEXIST: + http_status = 412; + break; + case EACCES: + http_status = 403; + break; + case ENOENT: + http_status = 409; + break; + } + } + } +#endif + + if (rc == 0) { + /* Create 204 "No Content" response */ + mg_response_header_start(conn, 204); + mg_response_header_add(conn, "Content-Length", "0", -1); + + /* Send all headers - there is no body */ + mg_response_header_send(conn); + } else { + mg_send_http_error(conn, http_status, "Operation failed"); + } +} + + +static void +put_file(struct mg_connection *conn, const char *path) +{ + struct mg_file file = STRUCT_FILE_INITIALIZER; + const char *range; + int64_t r1, r2; + int rc; + + if (conn == NULL) { + return; + } + + DEBUG_TRACE("store %s", path); + + if (mg_stat(conn, path, &file.stat)) { + /* File already exists */ + conn->status_code = 200; + + if (file.stat.is_directory) { + /* This is an already existing directory, + * so there is nothing to do for the server. */ + rc = 0; + + } else { + /* File exists and is not a directory. */ + /* Can it be replaced? */ + + /* Check if the server may write this file */ + if (access(path, W_OK) == 0) { + /* Access granted */ + rc = 1; + } else { + mg_send_http_error( + conn, + 403, + "Error: Put not possible\nReplacing %s is not allowed", + path); + return; + } + } + } else { + /* File should be created */ + conn->status_code = 201; + rc = put_dir(conn, path); + } + + if (rc == 0) { + /* put_dir returns 0 if path is a directory */ + + /* Create response */ + mg_response_header_start(conn, conn->status_code); + send_no_cache_header(conn); + send_additional_header(conn); + mg_response_header_add(conn, "Content-Length", "0", -1); + + /* Send all headers - there is no body */ + mg_response_header_send(conn); + + /* Request to create a directory has been fulfilled successfully. + * No need to put a file. */ + return; + } + + if (rc == -1) { + /* put_dir returns -1 if the path is too long */ + mg_send_http_error(conn, + 414, + "Error: Path too long\nput_dir(%s): %s", + path, + strerror(ERRNO)); + return; + } + + if (rc == -2) { + /* put_dir returns -2 if the directory can not be created */ + mg_send_http_error(conn, + 500, + "Error: Can not create directory\nput_dir(%s): %s", + path, + strerror(ERRNO)); + return; + } + + /* A file should be created or overwritten. */ + /* Currently CivetWeb does not need read+write access. */ + if (!mg_fopen(conn, path, MG_FOPEN_MODE_WRITE, &file) + || file.access.fp == NULL) { + (void)mg_fclose(&file.access); + mg_send_http_error(conn, + 500, + "Error: Can not create file\nfopen(%s): %s", + path, + strerror(ERRNO)); + return; + } + + fclose_on_exec(&file.access, conn); + range = mg_get_header(conn, "Content-Range"); + r1 = r2 = 0; + if ((range != NULL) && parse_range_header(range, &r1, &r2) > 0) { + conn->status_code = 206; /* Partial content */ + if (0 != fseeko(file.access.fp, r1, SEEK_SET)) { + mg_send_http_error(conn, + 500, + "Error: Internal error processing file %s", + path); + return; + } + } + + if (!forward_body_data(conn, file.access.fp, INVALID_SOCKET, NULL)) { + /* forward_body_data failed. + * The error code has already been sent to the client, + * and conn->status_code is already set. */ + (void)mg_fclose(&file.access); + return; + } + + if (mg_fclose(&file.access) != 0) { + /* fclose failed. This might have different reasons, but a likely + * one is "no space on disk", http 507. */ + conn->status_code = 507; + } + + /* Create response (status_code has been set before) */ + mg_response_header_start(conn, conn->status_code); + send_no_cache_header(conn); + send_additional_header(conn); + mg_response_header_add(conn, "Content-Length", "0", -1); + + /* Send all headers - there is no body */ + mg_response_header_send(conn); +} + + +static void +delete_file(struct mg_connection *conn, const char *path) +{ + struct de de; + memset(&de.file, 0, sizeof(de.file)); + if (!mg_stat(conn, path, &de.file)) { + /* mg_stat returns 0 if the file does not exist */ + mg_send_http_error(conn, + 404, + "Error: Cannot delete file\nFile %s not found", + path); + return; + } + + DEBUG_TRACE("delete %s", path); + + if (de.file.is_directory) { + if (remove_directory(conn, path)) { + /* Delete is successful: Return 204 without content. */ + mg_send_http_error(conn, 204, "%s", ""); + } else { + /* Delete is not successful: Return 500 (Server error). */ + mg_send_http_error(conn, 500, "Error: Could not delete %s", path); + } + return; + } + + /* This is an existing file (not a directory). + * Check if write permission is granted. */ + if (access(path, W_OK) != 0) { + /* File is read only */ + mg_send_http_error( + conn, + 403, + "Error: Delete not possible\nDeleting %s is not allowed", + path); + return; + } + + /* Try to delete it. */ + if (mg_remove(conn, path) == 0) { + /* Delete was successful: Return 204 without content. */ + mg_response_header_start(conn, 204); + send_no_cache_header(conn); + send_additional_header(conn); + mg_response_header_add(conn, "Content-Length", "0", -1); + mg_response_header_send(conn); + + } else { + /* Delete not successful (file locked). */ + mg_send_http_error(conn, + 423, + "Error: Cannot delete file\nremove(%s): %s", + path, + strerror(ERRNO)); + } +} +#endif /* !NO_FILES */ + + +#if !defined(NO_FILESYSTEMS) +static void +send_ssi_file(struct mg_connection *, const char *, struct mg_file *, int); + + +static void +do_ssi_include(struct mg_connection *conn, + const char *ssi, + char *tag, + int include_level) +{ + char file_name[MG_BUF_LEN], path[512], *p; + struct mg_file file = STRUCT_FILE_INITIALIZER; + size_t len; + int truncated = 0; + + if (conn == NULL) { + return; + } + + /* sscanf() is safe here, since send_ssi_file() also uses buffer + * of size MG_BUF_LEN to get the tag. So strlen(tag) is + * always < MG_BUF_LEN. */ + if (sscanf(tag, " virtual=\"%511[^\"]\"", file_name) == 1) { + /* File name is relative to the webserver root */ + file_name[511] = 0; + (void)mg_snprintf(conn, + &truncated, + path, + sizeof(path), + "%s/%s", + conn->dom_ctx->config[DOCUMENT_ROOT], + file_name); + + } else if (sscanf(tag, " abspath=\"%511[^\"]\"", file_name) == 1) { + /* File name is relative to the webserver working directory + * or it is absolute system path */ + file_name[511] = 0; + (void) + mg_snprintf(conn, &truncated, path, sizeof(path), "%s", file_name); + + } else if ((sscanf(tag, " file=\"%511[^\"]\"", file_name) == 1) + || (sscanf(tag, " \"%511[^\"]\"", file_name) == 1)) { + /* File name is relative to the current document */ + file_name[511] = 0; + (void)mg_snprintf(conn, &truncated, path, sizeof(path), "%s", ssi); + + if (!truncated) { + if ((p = strrchr(path, '/')) != NULL) { + p[1] = '\0'; + } + len = strlen(path); + (void)mg_snprintf(conn, + &truncated, + path + len, + sizeof(path) - len, + "%s", + file_name); + } + + } else { + mg_cry_internal(conn, "Bad SSI #include: [%s]", tag); + return; + } + + if (truncated) { + mg_cry_internal(conn, "SSI #include path length overflow: [%s]", tag); + return; + } + + if (!mg_fopen(conn, path, MG_FOPEN_MODE_READ, &file)) { + mg_cry_internal(conn, + "Cannot open SSI #include: [%s]: fopen(%s): %s", + tag, + path, + strerror(ERRNO)); + } else { + fclose_on_exec(&file.access, conn); + if (match_prefix_strlen(conn->dom_ctx->config[SSI_EXTENSIONS], path) + > 0) { + send_ssi_file(conn, path, &file, include_level + 1); + } else { + send_file_data(conn, &file, 0, INT64_MAX, 0); /* send static file */ + } + (void)mg_fclose(&file.access); /* Ignore errors for readonly files */ + } +} + + +#if !defined(NO_POPEN) +static void +do_ssi_exec(struct mg_connection *conn, char *tag) +{ + char cmd[1024] = ""; + struct mg_file file = STRUCT_FILE_INITIALIZER; + + if (sscanf(tag, " \"%1023[^\"]\"", cmd) != 1) { + mg_cry_internal(conn, "Bad SSI #exec: [%s]", tag); + } else { + cmd[1023] = 0; + if ((file.access.fp = popen(cmd, "r")) == NULL) { + mg_cry_internal(conn, + "Cannot SSI #exec: [%s]: %s", + cmd, + strerror(ERRNO)); + } else { + send_file_data(conn, &file, 0, INT64_MAX, 0); /* send static file */ + pclose(file.access.fp); + } + } +} +#endif /* !NO_POPEN */ + + +static int +mg_fgetc(struct mg_file *filep) +{ + if (filep == NULL) { + return EOF; + } + + if (filep->access.fp != NULL) { + return fgetc(filep->access.fp); + } else { + return EOF; + } +} + + +static void +send_ssi_file(struct mg_connection *conn, + const char *path, + struct mg_file *filep, + int include_level) +{ + char buf[MG_BUF_LEN]; + int ch, len, in_tag, in_ssi_tag; + + if (include_level > 10) { + mg_cry_internal(conn, "SSI #include level is too deep (%s)", path); + return; + } + + in_tag = in_ssi_tag = len = 0; + + /* Read file, byte by byte, and look for SSI include tags */ + while ((ch = mg_fgetc(filep)) != EOF) { + + if (in_tag) { + /* We are in a tag, either SSI tag or html tag */ + + if (ch == '>') { + /* Tag is closing */ + buf[len++] = '>'; + + if (in_ssi_tag) { + /* Handle SSI tag */ + buf[len] = 0; + + if ((len > 12) && !memcmp(buf + 5, "include", 7)) { + do_ssi_include(conn, path, buf + 12, include_level + 1); +#if !defined(NO_POPEN) + } else if ((len > 9) && !memcmp(buf + 5, "exec", 4)) { + do_ssi_exec(conn, buf + 9); +#endif /* !NO_POPEN */ + } else { + mg_cry_internal(conn, + "%s: unknown SSI " + "command: \"%s\"", + path, + buf); + } + len = 0; + in_ssi_tag = in_tag = 0; + + } else { + /* Not an SSI tag */ + /* Flush buffer */ + (void)mg_write(conn, buf, (size_t)len); + len = 0; + in_tag = 0; + } + + } else { + /* Tag is still open */ + buf[len++] = (char)(ch & 0xff); + + if ((len == 5) && !memcmp(buf, " Error */ + return -1; + } + + /* Upgrade to ... */ + if (0 != mg_strcasestr(upgrade_to, "websocket")) { + /* The headers "Host", "Sec-WebSocket-Key", "Sec-WebSocket-Protocol" and + * "Sec-WebSocket-Version" are also required. + * Don't check them here, since even an unsupported websocket protocol + * request still IS a websocket request (in contrast to a standard HTTP + * request). It will fail later in handle_websocket_request. + */ + return PROTOCOL_TYPE_WEBSOCKET; /* Websocket */ + } + if (0 != mg_strcasestr(upgrade_to, "h2")) { + return PROTOCOL_TYPE_HTTP2; /* Websocket */ + } + + /* Upgrade to another protocol */ + return -1; +} + + +static int +parse_match_net(const struct vec *vec, const union usa *sa, int no_strict) +{ + int n; + unsigned int a, b, c, d, slash; + + if (sscanf(vec->ptr, "%u.%u.%u.%u/%u%n", &a, &b, &c, &d, &slash, &n) + != 5) { // NOLINT(cert-err34-c) 'sscanf' used to convert a string to an + // integer value, but function will not report conversion + // errors; consider using 'strtol' instead + slash = 32; + if (sscanf(vec->ptr, "%u.%u.%u.%u%n", &a, &b, &c, &d, &n) + != 4) { // NOLINT(cert-err34-c) 'sscanf' used to convert a string to + // an integer value, but function will not report conversion + // errors; consider using 'strtol' instead + n = 0; + } + } + + if ((n > 0) && ((size_t)n == vec->len)) { + if ((a < 256) && (b < 256) && (c < 256) && (d < 256) && (slash < 33)) { + /* IPv4 format */ + if (sa->sa.sa_family == AF_INET) { + uint32_t ip = ntohl(sa->sin.sin_addr.s_addr); + uint32_t net = ((uint32_t)a << 24) | ((uint32_t)b << 16) + | ((uint32_t)c << 8) | (uint32_t)d; + uint32_t mask = slash ? (0xFFFFFFFFu << (32 - slash)) : 0; + return (ip & mask) == net; + } + return 0; + } + } +#if defined(USE_IPV6) + else { + char ad[50]; + const char *p; + + if (sscanf(vec->ptr, "[%49[^]]]/%u%n", ad, &slash, &n) != 2) { + slash = 128; + if (sscanf(vec->ptr, "[%49[^]]]%n", ad, &n) != 1) { + n = 0; + } + } + + if ((n <= 0) && no_strict) { + /* no square brackets? */ + p = strchr(vec->ptr, '/'); + if (p && (p < (vec->ptr + vec->len))) { + if (((size_t)(p - vec->ptr) < sizeof(ad)) + && (sscanf(p, "/%u%n", &slash, &n) == 1)) { + n += (int)(p - vec->ptr); + mg_strlcpy(ad, vec->ptr, (size_t)(p - vec->ptr) + 1); + } else { + n = 0; + } + } else if (vec->len < sizeof(ad)) { + n = (int)vec->len; + slash = 128; + mg_strlcpy(ad, vec->ptr, vec->len + 1); + } + } + + if ((n > 0) && ((size_t)n == vec->len) && (slash < 129)) { + p = ad; + c = 0; + /* zone indexes are unsupported, at least two colons are needed */ + while (isxdigit((unsigned char)*p) || (*p == '.') || (*p == ':')) { + if (*(p++) == ':') { + c++; + } + } + if ((*p == '\0') && (c >= 2)) { + struct sockaddr_in6 sin6; + unsigned int i; + + /* for strict validation, an actual IPv6 argument is needed */ + if (sa->sa.sa_family != AF_INET6) { + return 0; + } + if (mg_inet_pton(AF_INET6, ad, &sin6, sizeof(sin6), 0)) { + /* IPv6 format */ + for (i = 0; i < 16; i++) { + uint8_t ip = sa->sin6.sin6_addr.s6_addr[i]; + uint8_t net = sin6.sin6_addr.s6_addr[i]; + uint8_t mask = 0; + + if (8 * i + 8 < slash) { + mask = 0xFFu; + } else if (8 * i < slash) { + mask = (uint8_t)(0xFFu << (8 * i + 8 - slash)); + } + if ((ip & mask) != net) { + return 0; + } + } + return 1; + } + } + } + } +#else + (void)no_strict; +#endif + + /* malformed */ + return -1; +} + + +static int +set_throttle(const char *spec, const union usa *rsa, const char *uri) +{ + int throttle = 0; + struct vec vec, val; + char mult; + double v; + + while ((spec = next_option(spec, &vec, &val)) != NULL) { + mult = ','; + if ((val.ptr == NULL) + || (sscanf(val.ptr, "%lf%c", &v, &mult) + < 1) // NOLINT(cert-err34-c) 'sscanf' used to convert a string + // to an integer value, but function will not report + // conversion errors; consider using 'strtol' instead + || (v < 0) + || ((lowercase(&mult) != 'k') && (lowercase(&mult) != 'm') + && (mult != ','))) { + continue; + } + v *= (lowercase(&mult) == 'k') + ? 1024 + : ((lowercase(&mult) == 'm') ? 1048576 : 1); + if (vec.len == 1 && vec.ptr[0] == '*') { + throttle = (int)v; + } else { + int matched = parse_match_net(&vec, rsa, 0); + if (matched >= 0) { + /* a valid IP subnet */ + if (matched) { + throttle = (int)v; + } + } else if (match_prefix(vec.ptr, vec.len, uri) > 0) { + throttle = (int)v; + } + } + } + + return throttle; +} + + +/* The mg_upload function is superseded by mg_handle_form_request. */ +#include "handle_form.inl" + + +static int +get_first_ssl_listener_index(const struct mg_context *ctx) +{ + unsigned int i; + int idx = -1; + if (ctx) { + for (i = 0; ((idx == -1) && (i < ctx->num_listening_sockets)); i++) { + idx = ctx->listening_sockets[i].is_ssl ? ((int)(i)) : -1; + } + } + return idx; +} + + +/* Return host (without port) */ +static void +get_host_from_request_info(struct vec *host, const struct mg_request_info *ri) +{ + const char *host_header = + get_header(ri->http_headers, ri->num_headers, "Host"); + + host->ptr = NULL; + host->len = 0; + + if (host_header != NULL) { + const char *pos; + + /* If the "Host" is an IPv6 address, like [::1], parse until ] + * is found. */ + if (*host_header == '[') { + pos = strchr(host_header, ']'); + if (!pos) { + /* Malformed hostname starts with '[', but no ']' found */ + DEBUG_TRACE("%s", "Host name format error '[' without ']'"); + return; + } + /* terminate after ']' */ + host->ptr = host_header; + host->len = (size_t)(pos + 1 - host_header); + } else { + /* Otherwise, a ':' separates hostname and port number */ + pos = strchr(host_header, ':'); + if (pos != NULL) { + host->len = (size_t)(pos - host_header); + } else { + host->len = strlen(host_header); + } + host->ptr = host_header; + } + } +} + + +static int +switch_domain_context(struct mg_connection *conn) +{ + struct vec host; + + get_host_from_request_info(&host, &conn->request_info); + + if (host.ptr) { + if (conn->ssl) { + /* This is a HTTPS connection, maybe we have a hostname + * from SNI (set in ssl_servername_callback). */ + const char *sslhost = conn->dom_ctx->config[AUTHENTICATION_DOMAIN]; + if (sslhost && (conn->dom_ctx != &(conn->phys_ctx->dd))) { + /* We are not using the default domain */ + if ((strlen(sslhost) != host.len) + || mg_strncasecmp(host.ptr, sslhost, host.len)) { + /* Mismatch between SNI domain and HTTP domain */ + DEBUG_TRACE("Host mismatch: SNI: %s, HTTPS: %.*s", + sslhost, + (int)host.len, + host.ptr); + return 0; + } + } + + } else { + struct mg_domain_context *dom = &(conn->phys_ctx->dd); + while (dom) { + const char *domName = dom->config[AUTHENTICATION_DOMAIN]; + size_t domNameLen = strlen(domName); + if ((domNameLen == host.len) + && !mg_strncasecmp(host.ptr, domName, host.len)) { + + /* Found matching domain */ + DEBUG_TRACE("HTTP domain %s found", + dom->config[AUTHENTICATION_DOMAIN]); + + /* TODO: Check if this is a HTTP or HTTPS domain */ + conn->dom_ctx = dom; + break; + } + mg_lock_context(conn->phys_ctx); + dom = dom->next; + mg_unlock_context(conn->phys_ctx); + } + } + + DEBUG_TRACE("HTTP%s Host: %.*s", + conn->ssl ? "S" : "", + (int)host.len, + host.ptr); + + } else { + DEBUG_TRACE("HTTP%s Host is not set", conn->ssl ? "S" : ""); + return 1; + } + + return 1; +} + + +static void +redirect_to_https_port(struct mg_connection *conn, int port) +{ + char target_url[MG_BUF_LEN]; + int truncated = 0; + const char *expect_proto = + (conn->protocol_type == PROTOCOL_TYPE_WEBSOCKET) ? "wss" : "https"; + + /* Use "308 Permanent Redirect" */ + int redirect_code = 308; + + /* In any case, close the current connection */ + conn->must_close = 1; + + /* Send host, port, uri and (if it exists) ?query_string */ + if (mg_construct_local_link( + conn, target_url, sizeof(target_url), expect_proto, port, NULL) + < 0) { + truncated = 1; + } else if (conn->request_info.query_string != NULL) { + size_t slen1 = strlen(target_url); + size_t slen2 = strlen(conn->request_info.query_string); + if ((slen1 + slen2 + 2) < sizeof(target_url)) { + target_url[slen1] = '?'; + memcpy(target_url + slen1 + 1, + conn->request_info.query_string, + slen2); + target_url[slen1 + slen2 + 1] = 0; + } else { + truncated = 1; + } + } + + /* Check overflow in location buffer (will not occur if MG_BUF_LEN + * is used as buffer size) */ + if (truncated) { + mg_send_http_error(conn, 500, "%s", "Redirect URL too long"); + return; + } + + /* Use redirect helper function */ + mg_send_http_redirect(conn, target_url, redirect_code); +} + + +static void +mg_set_handler_type(struct mg_context *phys_ctx, + struct mg_domain_context *dom_ctx, + const char *uri, + int handler_type, + int is_delete_request, + mg_request_handler handler, + struct mg_websocket_subprotocols *subprotocols, + mg_websocket_connect_handler connect_handler, + mg_websocket_ready_handler ready_handler, + mg_websocket_data_handler data_handler, + mg_websocket_close_handler close_handler, + mg_authorization_handler auth_handler, + void *cbdata) +{ + struct mg_handler_info *tmp_rh, **lastref; + size_t urilen = strlen(uri); + + if (handler_type == WEBSOCKET_HANDLER) { + DEBUG_ASSERT(handler == NULL); + DEBUG_ASSERT(is_delete_request || connect_handler != NULL + || ready_handler != NULL || data_handler != NULL + || close_handler != NULL); + + DEBUG_ASSERT(auth_handler == NULL); + if (handler != NULL) { + return; + } + if (!is_delete_request && (connect_handler == NULL) + && (ready_handler == NULL) && (data_handler == NULL) + && (close_handler == NULL)) { + return; + } + if (auth_handler != NULL) { + return; + } + + } else if (handler_type == REQUEST_HANDLER) { + DEBUG_ASSERT(connect_handler == NULL && ready_handler == NULL + && data_handler == NULL && close_handler == NULL); + DEBUG_ASSERT(is_delete_request || (handler != NULL)); + DEBUG_ASSERT(auth_handler == NULL); + + if ((connect_handler != NULL) || (ready_handler != NULL) + || (data_handler != NULL) || (close_handler != NULL)) { + return; + } + if (!is_delete_request && (handler == NULL)) { + return; + } + if (auth_handler != NULL) { + return; + } + + } else if (handler_type == AUTH_HANDLER) { + DEBUG_ASSERT(handler == NULL); + DEBUG_ASSERT(connect_handler == NULL && ready_handler == NULL + && data_handler == NULL && close_handler == NULL); + DEBUG_ASSERT(is_delete_request || (auth_handler != NULL)); + if (handler != NULL) { + return; + } + if ((connect_handler != NULL) || (ready_handler != NULL) + || (data_handler != NULL) || (close_handler != NULL)) { + return; + } + if (!is_delete_request && (auth_handler == NULL)) { + return; + } + } else { + /* Unknown handler type. */ + return; + } + + if (!phys_ctx || !dom_ctx) { + /* no context available */ + return; + } + + mg_lock_context(phys_ctx); + + /* first try to find an existing handler */ + do { + lastref = &(dom_ctx->handlers); + for (tmp_rh = dom_ctx->handlers; tmp_rh != NULL; + tmp_rh = tmp_rh->next) { + if (tmp_rh->handler_type == handler_type + && (urilen == tmp_rh->uri_len) && !strcmp(tmp_rh->uri, uri)) { + if (!is_delete_request) { + /* update existing handler */ + if (handler_type == REQUEST_HANDLER) { + /* Wait for end of use before updating */ + if (tmp_rh->refcount) { + mg_unlock_context(phys_ctx); + mg_sleep(1); + mg_lock_context(phys_ctx); + /* tmp_rh might have been freed, search again. */ + break; + } + /* Ok, the handler is no more use -> Update it */ + tmp_rh->handler = handler; + } else if (handler_type == WEBSOCKET_HANDLER) { + tmp_rh->subprotocols = subprotocols; + tmp_rh->connect_handler = connect_handler; + tmp_rh->ready_handler = ready_handler; + tmp_rh->data_handler = data_handler; + tmp_rh->close_handler = close_handler; + } else { /* AUTH_HANDLER */ + tmp_rh->auth_handler = auth_handler; + } + tmp_rh->cbdata = cbdata; + } else { + /* remove existing handler */ + if (handler_type == REQUEST_HANDLER) { + /* Wait for end of use before removing */ + if (tmp_rh->refcount) { + tmp_rh->removing = 1; + mg_unlock_context(phys_ctx); + mg_sleep(1); + mg_lock_context(phys_ctx); + /* tmp_rh might have been freed, search again. */ + break; + } + /* Ok, the handler is no more used */ + } + *lastref = tmp_rh->next; + mg_free(tmp_rh->uri); + mg_free(tmp_rh); + } + mg_unlock_context(phys_ctx); + return; + } + lastref = &(tmp_rh->next); + } + } while (tmp_rh != NULL); + + if (is_delete_request) { + /* no handler to set, this was a remove request to a non-existing + * handler */ + mg_unlock_context(phys_ctx); + return; + } + + tmp_rh = + (struct mg_handler_info *)mg_calloc_ctx(1, + sizeof(struct mg_handler_info), + phys_ctx); + if (tmp_rh == NULL) { + mg_unlock_context(phys_ctx); + mg_cry_ctx_internal(phys_ctx, + "%s", + "Cannot create new request handler struct, OOM"); + return; + } + tmp_rh->uri = mg_strdup_ctx(uri, phys_ctx); + if (!tmp_rh->uri) { + mg_unlock_context(phys_ctx); + mg_free(tmp_rh); + mg_cry_ctx_internal(phys_ctx, + "%s", + "Cannot create new request handler struct, OOM"); + return; + } + tmp_rh->uri_len = urilen; + if (handler_type == REQUEST_HANDLER) { + tmp_rh->refcount = 0; + tmp_rh->removing = 0; + tmp_rh->handler = handler; + } else if (handler_type == WEBSOCKET_HANDLER) { + tmp_rh->subprotocols = subprotocols; + tmp_rh->connect_handler = connect_handler; + tmp_rh->ready_handler = ready_handler; + tmp_rh->data_handler = data_handler; + tmp_rh->close_handler = close_handler; + } else { /* AUTH_HANDLER */ + tmp_rh->auth_handler = auth_handler; + } + tmp_rh->cbdata = cbdata; + tmp_rh->handler_type = handler_type; + tmp_rh->next = NULL; + + *lastref = tmp_rh; + mg_unlock_context(phys_ctx); +} + + +CIVETWEB_API void +mg_set_request_handler(struct mg_context *ctx, + const char *uri, + mg_request_handler handler, + void *cbdata) +{ + mg_set_handler_type(ctx, + &(ctx->dd), + uri, + REQUEST_HANDLER, + handler == NULL, + handler, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + cbdata); +} + + +CIVETWEB_API void +mg_set_websocket_handler(struct mg_context *ctx, + const char *uri, + mg_websocket_connect_handler connect_handler, + mg_websocket_ready_handler ready_handler, + mg_websocket_data_handler data_handler, + mg_websocket_close_handler close_handler, + void *cbdata) +{ + mg_set_websocket_handler_with_subprotocols(ctx, + uri, + NULL, + connect_handler, + ready_handler, + data_handler, + close_handler, + cbdata); +} + + +CIVETWEB_API void +mg_set_websocket_handler_with_subprotocols( + struct mg_context *ctx, + const char *uri, + struct mg_websocket_subprotocols *subprotocols, + mg_websocket_connect_handler connect_handler, + mg_websocket_ready_handler ready_handler, + mg_websocket_data_handler data_handler, + mg_websocket_close_handler close_handler, + void *cbdata) +{ + int is_delete_request = (connect_handler == NULL) && (ready_handler == NULL) + && (data_handler == NULL) + && (close_handler == NULL); + mg_set_handler_type(ctx, + &(ctx->dd), + uri, + WEBSOCKET_HANDLER, + is_delete_request, + NULL, + subprotocols, + connect_handler, + ready_handler, + data_handler, + close_handler, + NULL, + cbdata); +} + + +CIVETWEB_API void +mg_set_auth_handler(struct mg_context *ctx, + const char *uri, + mg_authorization_handler handler, + void *cbdata) +{ + mg_set_handler_type(ctx, + &(ctx->dd), + uri, + AUTH_HANDLER, + handler == NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + handler, + cbdata); +} + + +static int +get_request_handler(struct mg_connection *conn, + int handler_type, + mg_request_handler *handler, + struct mg_websocket_subprotocols **subprotocols, + mg_websocket_connect_handler *connect_handler, + mg_websocket_ready_handler *ready_handler, + mg_websocket_data_handler *data_handler, + mg_websocket_close_handler *close_handler, + mg_authorization_handler *auth_handler, + void **cbdata, + struct mg_handler_info **handler_info) +{ + const struct mg_request_info *request_info = mg_get_request_info(conn); + if (request_info) { + const char *uri = request_info->local_uri; + size_t urilen = strlen(uri); + struct mg_handler_info *tmp_rh; + int step, matched; + + if (!conn || !conn->phys_ctx || !conn->dom_ctx) { + return 0; + } + + mg_lock_context(conn->phys_ctx); + + for (step = 0; step < 3; step++) { + for (tmp_rh = conn->dom_ctx->handlers; tmp_rh != NULL; + tmp_rh = tmp_rh->next) { + if (tmp_rh->handler_type != handler_type) { + continue; + } + if (step == 0) { + /* first try for an exact match */ + matched = (tmp_rh->uri_len == urilen) + && (strcmp(tmp_rh->uri, uri) == 0); + } else if (step == 1) { + /* next try for a partial match, we will accept + uri/something */ + matched = + (tmp_rh->uri_len < urilen) + && (uri[tmp_rh->uri_len] == '/') + && (memcmp(tmp_rh->uri, uri, tmp_rh->uri_len) == 0); + } else { + /* finally try for pattern match */ + matched = + match_prefix(tmp_rh->uri, tmp_rh->uri_len, uri) > 0; + } + if (matched) { + if (handler_type == WEBSOCKET_HANDLER) { + *subprotocols = tmp_rh->subprotocols; + *connect_handler = tmp_rh->connect_handler; + *ready_handler = tmp_rh->ready_handler; + *data_handler = tmp_rh->data_handler; + *close_handler = tmp_rh->close_handler; + } else if (handler_type == REQUEST_HANDLER) { + if (tmp_rh->removing) { + /* Treat as none found */ + step = 2; + break; + } + *handler = tmp_rh->handler; + /* Acquire handler and give it back */ + tmp_rh->refcount++; + *handler_info = tmp_rh; + } else { /* AUTH_HANDLER */ + *auth_handler = tmp_rh->auth_handler; + } + *cbdata = tmp_rh->cbdata; + mg_unlock_context(conn->phys_ctx); + return 1; + } + } + } + + mg_unlock_context(conn->phys_ctx); + } + return 0; /* none found */ +} + + +/* Check if the script file is in a path, allowed for script files. + * This can be used if uploading files is possible not only for the server + * admin, and the upload mechanism does not check the file extension. + */ +static int +is_in_script_path(const struct mg_connection *conn, const char *path) +{ + /* TODO (Feature): Add config value for allowed script path. + * Default: All allowed. */ + (void)conn; + (void)path; + return 1; +} + + +#if defined(USE_WEBSOCKET) && defined(MG_EXPERIMENTAL_INTERFACES) +static int +experimental_websocket_client_data_wrapper(struct mg_connection *conn, + int bits, + char *data, + size_t len, + void *cbdata) +{ + struct mg_callbacks *pcallbacks = (struct mg_callbacks *)cbdata; + if (pcallbacks->websocket_data) { + return pcallbacks->websocket_data(conn, bits, data, len); + } + /* No handler set - assume "OK" */ + return 1; +} + + +static void +experimental_websocket_client_close_wrapper(const struct mg_connection *conn, + void *cbdata) +{ + struct mg_callbacks *pcallbacks = (struct mg_callbacks *)cbdata; + if (pcallbacks->connection_close) { + pcallbacks->connection_close(conn); + } +} +#endif + + +/* Decrement recount of handler. conn must not be NULL, handler_info may be NULL + */ +static void +release_handler_ref(struct mg_connection *conn, + struct mg_handler_info *handler_info) +{ + if (handler_info != NULL) { + /* Use context lock for ref counter */ + mg_lock_context(conn->phys_ctx); + handler_info->refcount--; + mg_unlock_context(conn->phys_ctx); + } +} + + +/* This is the heart of the Civetweb's logic. + * This function is called when the request is read, parsed and validated, + * and Civetweb must decide what action to take: serve a file, or + * a directory, or call embedded function, etcetera. */ +static void +handle_request(struct mg_connection *conn) +{ + struct mg_request_info *ri = &conn->request_info; + char path[UTF8_PATH_MAX]; + int uri_len, ssl_index; + int is_found = 0, is_script_resource = 0, is_websocket_request = 0, + is_put_or_delete_request = 0, is_callback_resource = 0, + is_template_text_file = 0, is_webdav_request = 0; + int i; + struct mg_file file = STRUCT_FILE_INITIALIZER; + mg_request_handler callback_handler = NULL; + struct mg_handler_info *handler_info = NULL; + struct mg_websocket_subprotocols *subprotocols; + mg_websocket_connect_handler ws_connect_handler = NULL; + mg_websocket_ready_handler ws_ready_handler = NULL; + mg_websocket_data_handler ws_data_handler = NULL; + mg_websocket_close_handler ws_close_handler = NULL; + void *callback_data = NULL; + mg_authorization_handler auth_handler = NULL; + void *auth_callback_data = NULL; + int handler_type; + time_t curtime = time(NULL); + char date[64]; + char *tmp; + + path[0] = 0; + + /* 0. Reset internal state (required for HTTP/2 proxy) */ + conn->request_state = 0; + + /* 1. get the request url */ + /* 1.1. split into url and query string */ + if ((conn->request_info.query_string = strchr(ri->request_uri, '?')) + != NULL) { + *((char *)conn->request_info.query_string++) = '\0'; + } + + /* 1.2. do a https redirect, if required. Do not decode URIs yet. */ + if (!conn->client.is_ssl && conn->client.ssl_redir) { + ssl_index = get_first_ssl_listener_index(conn->phys_ctx); + if (ssl_index >= 0) { + int port = (int)ntohs(USA_IN_PORT_UNSAFE( + &(conn->phys_ctx->listening_sockets[ssl_index].lsa))); + redirect_to_https_port(conn, port); + } else { + /* A http to https forward port has been specified, + * but no https port to forward to. */ + mg_send_http_error(conn, + 503, + "%s", + "Error: SSL forward not configured properly"); + mg_cry_internal(conn, + "%s", + "Can not redirect to SSL, no SSL port available"); + } + return; + } + + + /* 1.3. decode url (if config says so) */ + if (should_decode_url(conn)) { + url_decode_in_place((char *)ri->local_uri); + } + + /* URL decode the query-string only if explicitly set in the configuration + */ + if (conn->request_info.query_string) { + if (should_decode_query_string(conn)) { + url_decode_in_place((char *)conn->request_info.query_string); + } + } + + /* 1.4. clean URIs, so a path like allowed_dir/../forbidden_file is not + * possible. The fact that we cleaned the URI is stored in that the + * pointer to ri->local_ur and ri->local_uri_raw are now different. + * ri->local_uri_raw still points to memory allocated in + * worker_thread_run(). ri->local_uri is private to the request so we + * don't have to use preallocated memory here. */ + tmp = mg_strdup(ri->local_uri_raw); + if (!tmp) { + /* Out of memory. We cannot do anything reasonable here. */ + return; + } + remove_dot_segments(tmp); + ri->local_uri = tmp; +#if !defined(NO_FILES) /* Only compute if later code can actually use it */ + /* Cache URI length once; recompute only if the buffer changes later. */ + uri_len = (int)strlen(ri->local_uri); +#endif + + + /* step 1. completed, the url is known now */ + DEBUG_TRACE("REQUEST: %s %s", ri->request_method, ri->local_uri); + + /* 2. if this ip has limited speed, set it for this connection */ + conn->throttle = set_throttle(conn->dom_ctx->config[THROTTLE], + &conn->client.rsa, + ri->local_uri); + + /* 3. call a "handle everything" callback, if registered */ + if (conn->phys_ctx->callbacks.begin_request != NULL) { + /* Note that since V1.7 the "begin_request" function is called + * before an authorization check. If an authorization check is + * required, use a request_handler instead. */ + i = conn->phys_ctx->callbacks.begin_request(conn); + if (i > 0) { + /* callback already processed the request. Store the + return value as a status code for the access log. */ + conn->status_code = i; + if (!conn->must_close) { + discard_unread_request_data(conn); + } + DEBUG_TRACE("%s", "begin_request handled request"); + return; + } else if (i == 0) { + /* civetweb should process the request */ + } else { + /* unspecified - may change with the next version */ + DEBUG_TRACE("%s", "done (undocumented behavior)"); + return; + } + } + + /* request not yet handled by a handler or redirect, so the request + * is processed here */ + + /* 4. Check for CORS preflight requests and handle them (if configured). + * https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS + */ + if (!strcmp(ri->request_method, "OPTIONS")) { + /* Send a response to CORS preflights only if + * access_control_allow_methods is not NULL and not an empty string. + * In this case, scripts can still handle CORS. */ + const char *cors_meth_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_METHODS]; + const char *cors_orig_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_ORIGIN]; + const char *cors_origin = + get_header(ri->http_headers, ri->num_headers, "Origin"); + const char *cors_acrm = get_header(ri->http_headers, + ri->num_headers, + "Access-Control-Request-Method"); + const char *cors_repl_asterisk_with_orig_cfg = + conn->dom_ctx->config[REPLACE_ASTERISK_WITH_ORIGIN]; + + /* Todo: check if cors_origin is in cors_orig_cfg. + * Or, let the client check this. */ + + if ((cors_meth_cfg != NULL) && (*cors_meth_cfg != 0) + && (cors_orig_cfg != NULL) && (*cors_orig_cfg != 0) + && (cors_origin != NULL) && (cors_acrm != NULL) + && (cors_repl_asterisk_with_orig_cfg != NULL) + && (*cors_repl_asterisk_with_orig_cfg != 0)) { + int cors_repl_asterisk_with_orig = + mg_strcasecmp(cors_repl_asterisk_with_orig_cfg, "yes"); + + /* This is a valid CORS preflight, and the server is configured + * to handle it automatically. */ + const char *cors_acrh = + get_header(ri->http_headers, + ri->num_headers, + "Access-Control-Request-Headers"); + const char *cors_cred_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_CREDENTIALS]; + const char *cors_exphdr_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_EXPOSE_HEADERS]; + + gmt_time_string(date, sizeof(date), &curtime); + mg_printf(conn, + "HTTP/1.1 200 OK\r\n" + "Date: %s\r\n" + "Access-Control-Allow-Origin: %s\r\n" + "Access-Control-Allow-Methods: %s\r\n" + "Content-Length: 0\r\n" + "Connection: %s\r\n", + date, + (cors_repl_asterisk_with_orig == 0 + && cors_orig_cfg[0] == '*') + ? cors_origin + : cors_orig_cfg, + ((cors_meth_cfg[0] == '*') ? cors_acrm : cors_meth_cfg), + suggest_connection_header(conn)); + + if (cors_cred_cfg && *cors_cred_cfg) { + mg_printf(conn, + "Access-Control-Allow-Credentials: %s\r\n", + cors_cred_cfg); + } + + if (cors_exphdr_cfg && *cors_exphdr_cfg) { + mg_printf(conn, + "Access-Control-Expose-Headers: %s\r\n", + cors_exphdr_cfg); + } + + if (cors_acrh || (cors_cred_cfg && *cors_cred_cfg)) { + /* CORS request is asking for additional headers */ + const char *cors_hdr_cfg = + conn->dom_ctx->config[ACCESS_CONTROL_ALLOW_HEADERS]; + + if ((cors_hdr_cfg != NULL) && (*cors_hdr_cfg != 0)) { + /* Allow only if access_control_allow_headers is + * not NULL and not an empty string. If this + * configuration is set to *, allow everything. + * Otherwise this configuration must be a list + * of allowed HTTP header names. */ + mg_printf(conn, + "Access-Control-Allow-Headers: %s\r\n", + ((cors_hdr_cfg[0] == '*') ? cors_acrh + : cors_hdr_cfg)); + } + } + mg_printf(conn, "Access-Control-Max-Age: 60\r\n"); + mg_printf(conn, "\r\n"); + DEBUG_TRACE("%s", "OPTIONS done"); + return; + } + } + + /* 5. interpret the url to find out how the request must be handled + */ + /* 5.1. first test, if the request targets the regular http(s):// + * protocol namespace or the websocket ws(s):// protocol namespace. + */ + is_websocket_request = (conn->protocol_type == PROTOCOL_TYPE_WEBSOCKET); +#if defined(USE_WEBSOCKET) + handler_type = is_websocket_request ? WEBSOCKET_HANDLER : REQUEST_HANDLER; +#else + handler_type = REQUEST_HANDLER; +#endif /* defined(USE_WEBSOCKET) */ + + if (is_websocket_request) { + HTTP1_only; + } + + /* 5.2. check if the request will be handled by a callback */ + if (get_request_handler(conn, + handler_type, + &callback_handler, + &subprotocols, + &ws_connect_handler, + &ws_ready_handler, + &ws_data_handler, + &ws_close_handler, + NULL, + &callback_data, + &handler_info)) { + /* 5.2.1. A callback will handle this request. All requests + * handled by a callback have to be considered as requests + * to a script resource. */ + is_callback_resource = 1; + is_script_resource = 1; + is_put_or_delete_request = is_put_or_delete_method(conn); + /* Never handle a C callback according to File WebDav rules, + * even if it is a webdav method */ + is_webdav_request = 0; /* is_civetweb_webdav_method(conn); */ + } else { + no_callback_resource: + + /* 5.2.2. No callback is responsible for this request. The URI + * addresses a file based resource (static content or Lua/cgi + * scripts in the file system). */ + is_callback_resource = 0; + interpret_uri(conn, + path, + sizeof(path), + &file.stat, + &is_found, + &is_script_resource, + &is_websocket_request, + &is_put_or_delete_request, + &is_webdav_request, + &is_template_text_file); + } + + /* 5.3. A webdav request (PROPFIND/PROPPATCH/LOCK/UNLOCK) */ + if (is_webdav_request) { + /* TODO: Do we need a config option? */ + const char *webdav_enable = conn->dom_ctx->config[ENABLE_WEBDAV]; + if (webdav_enable[0] != 'y') { + mg_send_http_error(conn, + 405, + "%s method not allowed", + conn->request_info.request_method); + DEBUG_TRACE("%s", "webdav rejected"); + return; + } + } + + /* 6. authorization check */ + /* 6.1. a custom authorization handler is installed */ + if (get_request_handler(conn, + AUTH_HANDLER, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &auth_handler, + &auth_callback_data, + NULL)) { + if (!auth_handler(conn, auth_callback_data)) { + + /* Callback handler will not be used anymore. Release it */ + release_handler_ref(conn, handler_info); + DEBUG_TRACE("%s", "auth handler rejected request"); + return; + } + } else if (is_put_or_delete_request && !is_script_resource + && !is_callback_resource) { + HTTP1_only; + /* 6.2. this request is a PUT/DELETE to a real file */ + /* 6.2.1. thus, the server must have real files */ +#if defined(NO_FILES) + if (1) { +#else + if (conn->dom_ctx->config[DOCUMENT_ROOT] == NULL + || conn->dom_ctx->config[PUT_DELETE_PASSWORDS_FILE] == NULL) { +#endif + /* This code path will not be called for request handlers */ + DEBUG_ASSERT(handler_info == NULL); + + /* This server does not have any real files, thus the + * PUT/DELETE methods are not valid. */ + mg_send_http_error(conn, + 405, + "%s method not allowed", + conn->request_info.request_method); + DEBUG_TRACE("%s", "all file based put/delete requests rejected"); + return; + } + +#if !defined(NO_FILES) + /* 6.2.2. Check if put authorization for static files is + * available. + */ + if (!is_authorized_for_put(conn)) { + send_authorization_request(conn, NULL); + DEBUG_TRACE("%s", "file write needs authorization"); + return; + } +#endif + + } else { + /* 6.3. This is either a OPTIONS, GET, HEAD or POST request, + * or it is a PUT or DELETE request to a resource that does not + * correspond to a file. Check authorization. */ + if (!check_authorization(conn, path)) { + send_authorization_request(conn, NULL); + + /* Callback handler will not be used anymore. Release it */ + release_handler_ref(conn, handler_info); + DEBUG_TRACE("%s", "access authorization required"); + return; + } + } + + /* request is authorized or does not need authorization */ + + /* 7. check if there are request handlers for this uri */ + if (is_callback_resource) { + HTTP1_only; + if (!is_websocket_request) { + i = callback_handler(conn, callback_data); + + /* Callback handler will not be used anymore. Release it */ + release_handler_ref(conn, handler_info); + + if (i > 0) { + /* Do nothing, callback has served the request. Store + * then return value as status code for the log and discard + * all data from the client not used by the callback. */ + conn->status_code = i; + if (!conn->must_close) { + discard_unread_request_data(conn); + } + } else { + /* The handler did NOT handle the request. */ + /* Some proper reactions would be: + * a) close the connections without sending anything + * b) send a 404 not found + * c) try if there is a file matching the URI + * It would be possible to do a, b or c in the callback + * implementation, and return 1 - we cannot do anything + * here, that is not possible in the callback. + * + * TODO: What would be the best reaction here? + * (Note: The reaction may change, if there is a better + * idea.) + */ + + /* For the moment, use option c: We look for a proper file, + * but since a file request is not always a script resource, + * the authorization check might be different. */ + callback_handler = NULL; + + /* Here we are at a dead end: + * According to URI matching, a callback should be + * responsible for handling the request, + * we called it, but the callback declared itself + * not responsible. + * We use a goto here, to get out of this dead end, + * and continue with the default handling. + * A goto here is simpler and better to understand + * than some curious loop. */ + goto no_callback_resource; + } + } else { +#if defined(USE_WEBSOCKET) + handle_websocket_request(conn, + path, + is_callback_resource, + subprotocols, + ws_connect_handler, + ws_ready_handler, + ws_data_handler, + ws_close_handler, + callback_data); +#endif + } + DEBUG_TRACE("%s", "websocket handling done"); + return; + } + + /* 8. handle websocket requests */ +#if defined(USE_WEBSOCKET) + if (is_websocket_request) { + HTTP1_only; + if (is_script_resource) { + + if (is_in_script_path(conn, path)) { + /* Websocket Lua script */ + handle_websocket_request(conn, + path, + 0 /* Lua Script */, + NULL, + NULL, + NULL, + NULL, + NULL, + conn->phys_ctx->user_data); + } else { + /* Script was in an illegal path */ + mg_send_http_error(conn, 403, "%s", "Forbidden"); + } + } else { + mg_send_http_error(conn, 404, "%s", "Not found"); + } + DEBUG_TRACE("%s", "websocket script done"); + return; + } else +#endif + +#if defined(NO_FILES) + /* 9a. In case the server uses only callbacks, this uri is + * unknown. + * Then, all request handling ends here. */ + mg_send_http_error(conn, 404, "%s", "Not Found"); + +#else + /* 9b. This request is either for a static file or resource handled + * by a script file. Thus, a DOCUMENT_ROOT must exist. */ + if (conn->dom_ctx->config[DOCUMENT_ROOT] == NULL) { + mg_send_http_error(conn, 404, "%s", "Not Found"); + DEBUG_TRACE("%s", "no document root available"); + return; + } + + /* 10. Request is handled by a script */ + if (is_script_resource) { + HTTP1_only; + handle_file_based_request(conn, path, &file); + DEBUG_TRACE("%s", "script handling done"); + return; + } + + /* Request was not handled by a callback or script. It will be + * handled by a server internal method. */ + + /* 11. Handle put/delete/mkcol requests */ + if (is_put_or_delete_request) { + HTTP1_only; + /* 11.1. PUT method */ + if (!strcmp(ri->request_method, "PUT")) { + put_file(conn, path); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + /* 11.2. DELETE method */ + if (!strcmp(ri->request_method, "DELETE")) { + delete_file(conn, path); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + /* 11.3. MKCOL method */ + if (!strcmp(ri->request_method, "MKCOL")) { + dav_mkcol(conn, path); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + /* 11.4. MOVE method */ + if (!strcmp(ri->request_method, "MOVE")) { + dav_move_file(conn, path, 0); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + if (!strcmp(ri->request_method, "COPY")) { + dav_move_file(conn, path, 1); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + /* 11.5. LOCK method */ + if (!strcmp(ri->request_method, "LOCK")) { + dav_lock_file(conn, path); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + /* 11.6. UNLOCK method */ + if (!strcmp(ri->request_method, "UNLOCK")) { + dav_unlock_file(conn, path); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + /* 11.7. PROPPATCH method */ + if (!strcmp(ri->request_method, "PROPPATCH")) { + dav_proppatch(conn, path); + DEBUG_TRACE("handling %s request to %s done", + ri->request_method, + path); + return; + } + /* 11.8. Other methods, e.g.: PATCH + * This method is not supported for static resources, + * only for scripts (Lua, CGI) and callbacks. */ + mg_send_http_error(conn, + 405, + "%s method not allowed", + conn->request_info.request_method); + DEBUG_TRACE("method %s on %s is not supported", + ri->request_method, + path); + return; + } + + /* 11. File does not exist, or it was configured that it should be + * hidden */ + if (!is_found || (must_hide_file(conn, path))) { + mg_send_http_error(conn, 404, "%s", "Not found"); + DEBUG_TRACE("handling %s request to %s: file not found", + ri->request_method, + path); + return; + } + + /* 12. Directory uris should end with a slash */ + if (file.stat.is_directory && (uri_len > 0) + && (ri->local_uri[uri_len - 1] != '/')) { + + + /* Path + server root */ + size_t buflen = UTF8_PATH_MAX * 2 + 2; + char *new_path; + + if (ri->query_string) { + buflen += strlen(ri->query_string); + } + new_path = (char *)mg_malloc_ctx(buflen, conn->phys_ctx); + if (!new_path) { + mg_send_http_error(conn, 500, "out or memory"); + } else { + mg_get_request_link(conn, new_path, buflen - 1); + + size_t len = strlen(new_path); + if (len + 1 < buflen) { + new_path[len] = '/'; + new_path[len + 1] = '\0'; + len++; + } + + if (ri->query_string) { + if (len + 1 < buflen) { + new_path[len] = '?'; + new_path[len + 1] = '\0'; + len++; + } + + /* Append with size of space left for query string + null + * terminator */ + size_t max_append = buflen - len - 1; + strncat(new_path, ri->query_string, max_append); + } + + mg_send_http_redirect(conn, new_path, 301); + mg_free(new_path); + } + DEBUG_TRACE("%s request to %s: directory redirection sent", + ri->request_method, + path); + return; + } + + /* 13. Handle other methods than GET/HEAD */ + /* 13.1. Handle PROPFIND */ + if (!strcmp(ri->request_method, "PROPFIND")) { + handle_propfind(conn, path, &file.stat); + DEBUG_TRACE("handling %s request to %s done", ri->request_method, path); + return; + } + /* 13.2. Handle OPTIONS for files */ + if (!strcmp(ri->request_method, "OPTIONS")) { + /* This standard handler is only used for real files. + * Scripts should support the OPTIONS method themselves, to allow a + * maximum flexibility. + * Lua and CGI scripts may fully support CORS this way (including + * preflights). */ + send_options(conn); + DEBUG_TRACE("handling %s request to %s done", ri->request_method, path); + return; + } + /* 13.3. everything but GET and HEAD (e.g. POST) */ + if ((0 != strcmp(ri->request_method, "GET")) + && (0 != strcmp(ri->request_method, "HEAD"))) { + mg_send_http_error(conn, + 405, + "%s method not allowed", + conn->request_info.request_method); + DEBUG_TRACE("handling %s request to %s done", ri->request_method, path); + return; + } + + /* 14. directories */ + if (file.stat.is_directory) { + /* Substitute files have already been handled above. */ + /* Here we can either generate and send a directory listing, + * or send an "access denied" error. */ + if (!mg_strcasecmp(conn->dom_ctx->config[ENABLE_DIRECTORY_LISTING], + "yes")) { + handle_directory_request(conn, path); + } else { + mg_send_http_error(conn, + 403, + "%s", + "Error: Directory listing denied"); + } + DEBUG_TRACE("handling %s request to %s done", ri->request_method, path); + return; + } + + /* 15. Files with search/replace patterns: LSP and SSI */ + if (is_template_text_file) { + HTTP1_only; + handle_file_based_request(conn, path, &file); + DEBUG_TRACE("handling %s request to %s done (template)", + ri->request_method, + path); + return; + } + + /* 16. Static file - maybe cached */ +#if !defined(NO_CACHING) + if ((!conn->in_error_handler) && is_not_modified(conn, &file.stat)) { + /* Send 304 "Not Modified" - this must not send any body data */ + handle_not_modified_static_file_request(conn, &file); + DEBUG_TRACE("handling %s request to %s done (not modified)", + ri->request_method, + path); + return; + } +#endif /* !NO_CACHING */ + + /* 17. Static file - not cached */ + handle_static_file_request(conn, path, &file, NULL, NULL); + DEBUG_TRACE("handling %s request to %s done (static)", + ri->request_method, + path); + +#endif /* !defined(NO_FILES) */ +} + + +#if !defined(NO_FILESYSTEMS) +static void +handle_file_based_request(struct mg_connection *conn, + const char *path, + struct mg_file *file) +{ +#if !defined(NO_CGI) + int cgi_config_idx, inc, max; +#endif + + if (!conn || !conn->dom_ctx) { + return; + } + +#if defined(USE_LUA) + if (match_prefix_strlen(conn->dom_ctx->config[LUA_SERVER_PAGE_EXTENSIONS], + path) + > 0) { + if (is_in_script_path(conn, path)) { + /* Lua server page: an SSI like page containing mostly plain + * html code plus some tags with server generated contents. */ + handle_lsp_request(conn, path, file, NULL); + } else { + /* Script was in an illegal path */ + mg_send_http_error(conn, 403, "%s", "Forbidden"); + } + return; + } + + if (match_prefix_strlen(conn->dom_ctx->config[LUA_SCRIPT_EXTENSIONS], path) + > 0) { + if (is_in_script_path(conn, path)) { + /* Lua in-server module script: a CGI like script used to + * generate the entire reply. */ + mg_exec_lua_script(conn, path, NULL); + } else { + /* Script was in an illegal path */ + mg_send_http_error(conn, 403, "%s", "Forbidden"); + } + return; + } +#endif + +#if defined(USE_DUKTAPE) + if (match_prefix_strlen(conn->dom_ctx->config[DUKTAPE_SCRIPT_EXTENSIONS], + path) + > 0) { + if (is_in_script_path(conn, path)) { + /* Call duktape to generate the page */ + mg_exec_duktape_script(conn, path); + } else { + /* Script was in an illegal path */ + mg_send_http_error(conn, 403, "%s", "Forbidden"); + } + return; + } +#endif + +#if !defined(NO_CGI) + inc = CGI2_EXTENSIONS - CGI_EXTENSIONS; + max = PUT_DELETE_PASSWORDS_FILE - CGI_EXTENSIONS; + for (cgi_config_idx = 0; cgi_config_idx < max; cgi_config_idx += inc) { + if (conn->dom_ctx->config[CGI_EXTENSIONS + cgi_config_idx] != NULL) { + if (match_prefix_strlen( + conn->dom_ctx->config[CGI_EXTENSIONS + cgi_config_idx], + path) + > 0) { + if (is_in_script_path(conn, path)) { + /* CGI scripts may support all HTTP methods */ + handle_cgi_request(conn, path, cgi_config_idx); + } else { + /* Script was in an illegal path */ + mg_send_http_error(conn, 403, "%s", "Forbidden"); + } + return; + } + } + } +#endif /* !NO_CGI */ + + if (match_prefix_strlen(conn->dom_ctx->config[SSI_EXTENSIONS], path) > 0) { + if (is_in_script_path(conn, path)) { + handle_ssi_file_request(conn, path, file); + } else { + /* Script was in an illegal path */ + mg_send_http_error(conn, 403, "%s", "Forbidden"); + } + return; + } + +#if !defined(NO_CACHING) + if ((!conn->in_error_handler) && is_not_modified(conn, &file->stat)) { + /* Send 304 "Not Modified" - this must not send any body data */ + handle_not_modified_static_file_request(conn, file); + return; + } +#endif /* !NO_CACHING */ + + handle_static_file_request(conn, path, file, NULL, NULL); +} +#endif /* NO_FILESYSTEMS */ + + +static void +close_all_listening_sockets(struct mg_context *ctx) +{ + unsigned int i; + if (!ctx) { + return; + } + + for (i = 0; i < ctx->num_listening_sockets; i++) { + closesocket(ctx->listening_sockets[i].sock); +#if defined(USE_X_DOM_SOCKET) + /* For unix domain sockets, the socket name represents a file that has + * to be deleted. */ + /* See + * https://stackoverflow.com/questions/15716302/so-reuseaddr-and-af-unix + */ + if ((ctx->listening_sockets[i].lsa.sin.sin_family == AF_UNIX) + && (ctx->listening_sockets[i].sock != INVALID_SOCKET)) { + IGNORE_UNUSED_RESULT( + remove(ctx->listening_sockets[i].lsa.sun.sun_path)); + } +#endif + ctx->listening_sockets[i].sock = INVALID_SOCKET; + } + mg_free(ctx->listening_sockets); + ctx->listening_sockets = NULL; + mg_free(ctx->listening_socket_fds); + ctx->listening_socket_fds = NULL; +} + + +/* Valid listening port specification is: [ip_address:]port[s] + * Examples for IPv4: 80, 443s, 127.0.0.1:3128, 192.0.2.3:8080s + * Examples for IPv6: [::]:80, [::1]:80, + * [2001:0db8:7654:3210:FEDC:BA98:7654:3210]:443s + * see https://tools.ietf.org/html/rfc3513#section-2.2 + * In order to bind to both, IPv4 and IPv6, you can either add + * both ports using 8080,[::]:8080, or the short form +8080. + * Both forms differ in detail: 8080,[::]:8080 create two sockets, + * one only accepting IPv4 the other only IPv6. +8080 creates + * one socket accepting IPv4 and IPv6. Depending on the IPv6 + * environment, they might work differently, or might not work + * at all - it must be tested what options work best in the + * relevant network environment. + */ +static int +parse_port_string(const struct vec *vec, struct socket *so, int *ip_version) +{ + unsigned int a, b, c, d; + unsigned port; + unsigned long portUL; + int len; + const char *cb; + char *endptr; +#if defined(USE_IPV6) + char buf[100] = {0}; +#endif + + /* MacOS needs that. If we do not zero it, subsequent bind() will fail. + * Also, all-zeroes in the socket address means binding to all addresses + * for both IPv4 and IPv6 (INADDR_ANY and IN6ADDR_ANY_INIT). */ + memset(so, 0, sizeof(*so)); + so->lsa.sin.sin_family = AF_INET; + *ip_version = 0; + + /* Initialize len as invalid. */ + port = 0; + len = 0; + + /* Test for different ways to format this string */ + if (sscanf(vec->ptr, + "%u.%u.%u.%u:%u%n", + &a, + &b, + &c, + &d, + &port, + &len) // NOLINT(cert-err34-c) 'sscanf' used to convert a string + // to an integer value, but function will not report + // conversion errors; consider using 'strtol' instead + == 5) { + /* Bind to a specific IPv4 address, e.g. 192.168.1.5:8080 */ + so->lsa.sin.sin_addr.s_addr = + htonl((a << 24) | (b << 16) | (c << 8) | d); + so->lsa.sin.sin_port = htons((uint16_t)port); + *ip_version = 4; + +#if defined(USE_IPV6) + } else if (sscanf(vec->ptr, "[%49[^]]]:%u%n", buf, &port, &len) == 2 + && ((size_t)len <= vec->len) + && mg_inet_pton( + AF_INET6, buf, &so->lsa.sin6, sizeof(so->lsa.sin6), 0)) { + /* IPv6 address, examples: see above */ + /* so->lsa.sin6.sin6_family = AF_INET6; already set by mg_inet_pton + */ + so->lsa.sin6.sin6_port = htons((uint16_t)port); + *ip_version = 6; +#endif + + } else if ((vec->ptr[0] == '+') + && (sscanf(vec->ptr + 1, "%u%n", &port, &len) + == 1)) { // NOLINT(cert-err34-c) 'sscanf' used to convert a + // string to an integer value, but function will not + // report conversion errors; consider using 'strtol' + // instead + + /* Port is specified with a +, bind to IPv6 and IPv4, INADDR_ANY */ + /* Add 1 to len for the + character we skipped before */ + len++; + +#if defined(USE_IPV6) + /* Set socket family to IPv6, do not use IPV6_V6ONLY */ + so->lsa.sin6.sin6_family = AF_INET6; + so->lsa.sin6.sin6_port = htons((uint16_t)port); + *ip_version = 4 + 6; +#else + /* Bind to IPv4 only, since IPv6 is not built in. */ + so->lsa.sin.sin_port = htons((uint16_t)port); + *ip_version = 4; +#endif + + } else if (is_valid_port(portUL = strtoul(vec->ptr, &endptr, 0)) + && (vec->ptr != endptr)) { + len = (int)(endptr - vec->ptr); + port = (uint16_t)portUL; + /* If only port is specified, bind to IPv4, INADDR_ANY */ + so->lsa.sin.sin_port = htons((uint16_t)port); + *ip_version = 4; + + } else if ((cb = strchr(vec->ptr, ':')) != NULL) { + /* String could be a hostname. This check algorithm + * will only work for RFC 952 compliant hostnames, + * starting with a letter, containing only letters, + * digits and hyphen ('-'). Newer specs may allow + * more, but this is not guaranteed here, since it + * may interfere with rules for port option lists. */ + + /* According to RFC 1035, hostnames are restricted to 255 characters + * in total (63 between two dots). */ + char hostname[256]; + size_t hostnlen = (size_t)(cb - vec->ptr); + + if ((hostnlen >= vec->len) || (hostnlen >= sizeof(hostname))) { + /* This would be invalid in any case */ + *ip_version = 0; + return 0; + } + + mg_strlcpy(hostname, vec->ptr, hostnlen + 1); + + if (mg_inet_pton( + AF_INET, hostname, &so->lsa.sin, sizeof(so->lsa.sin), 1)) { + if (sscanf(cb + 1, "%u%n", &port, &len) + == 1) { // NOLINT(cert-err34-c) 'sscanf' used to convert a + // string to an integer value, but function will not + // report conversion errors; consider using 'strtol' + // instead + *ip_version = 4; + so->lsa.sin.sin_port = htons((uint16_t)port); + len += (int)(hostnlen + 1); + } else { + len = 0; + } +#if defined(USE_IPV6) + } else if (mg_inet_pton(AF_INET6, + hostname, + &so->lsa.sin6, + sizeof(so->lsa.sin6), + 1)) { + if (sscanf(cb + 1, "%u%n", &port, &len) == 1) { + *ip_version = 6; + so->lsa.sin6.sin6_port = htons((uint16_t)port); + len += (int)(hostnlen + 1); + } else { + len = 0; + } +#endif + } else { + len = 0; + } + +#if defined(USE_X_DOM_SOCKET) + + } else if (vec->ptr[0] == 'x') { + /* unix (linux) domain socket */ + if (vec->len < sizeof(so->lsa.sun.sun_path)) { + len = vec->len; + so->lsa.sun.sun_family = AF_UNIX; + memset(so->lsa.sun.sun_path, 0, sizeof(so->lsa.sun.sun_path)); + memcpy(so->lsa.sun.sun_path, (char *)vec->ptr + 1, vec->len - 1); + port = 0; + *ip_version = 99; + } else { + /* String too long */ + len = 0; + } +#endif + + } else { + /* Parsing failure. */ + len = 0; + } + + /* sscanf and the option splitting code ensure the following condition + * Make sure the port is valid and vector ends with the port, 'o', 's', or + * 'r' */ + if ((len > 0) && (is_valid_port(port))) { + int bad_suffix = 0; + size_t i; + + /* Parse any suffix character(s) after the port number */ + for (i = len; i < vec->len; i++) { + unsigned char *opt = NULL; + switch (vec->ptr[i]) { + case 'o': + opt = &so->is_optional; + break; + case 'r': + opt = &so->ssl_redir; + break; + case 's': + opt = &so->is_ssl; + break; + default: /* empty */ + break; + } + + if ((opt) && (*opt == 0)) + *opt = 1; + else { + bad_suffix = 1; + break; + } + } + + if ((bad_suffix == 0) && ((so->is_ssl == 0) || (so->ssl_redir == 0))) { + return 1; + } + } + + /* Reset ip_version to 0 if there is an error */ + *ip_version = 0; + return 0; +} + + +/* Is there any SSL port in use? */ +static int +is_ssl_port_used(const char *ports) +{ + if (ports) { + /* There are several different allowed syntax variants: + * - "80" for a single port using every network interface + * - "localhost:80" for a single port using only localhost + * - "80,localhost:8080" for two ports, one bound to localhost + * - "80,127.0.0.1:8084,[::1]:8086" for three ports, one bound + * to IPv4 localhost, one to IPv6 localhost + * - "+80" use port 80 for IPv4 and IPv6 + * - "+80r,+443s" port 80 (HTTP) is a redirect to port 443 (HTTPS), + * for both: IPv4 and IPv4 + * - "+443s,localhost:8080" port 443 (HTTPS) for every interface, + * additionally port 8080 bound to localhost connections + * + * If we just look for 's' anywhere in the string, "localhost:80" + * will be detected as SSL (false positive). + * Looking for 's' after a digit may cause false positives in + * "my24service:8080". + * Looking from 's' backward if there are only ':' and numbers + * before will not work for "24service:8080" (non SSL, port 8080) + * or "24s" (SSL, port 24). + * + * Remark: Initially hostnames were not allowed to start with a + * digit (according to RFC 952), this was allowed later (RFC 1123, + * Section 2.1). + * + * To get this correct, the entire string must be parsed as a whole, + * reading it as a list element for element and parsing with an + * algorithm equivalent to parse_port_string. + * + * In fact, we use local interface names here, not arbitrary + * hostnames, so in most cases the only name will be "localhost". + * + * So, for now, we use this simple algorithm, that may still return + * a false positive in bizarre cases. + */ + int i; + int portslen = (int)strlen(ports); + char prevIsNumber = 0; + + for (i = 0; i < portslen; i++) { + if (prevIsNumber) { + int suffixCharIdx = (ports[i] == 'o') + ? (i + 1) + : i; /* allow "os" and "or" suffixes */ + if (ports[suffixCharIdx] == 's' + || ports[suffixCharIdx] == 'r') { + return 1; + } + } + if (ports[i] >= '0' && ports[i] <= '9') { + prevIsNumber = 1; + } else { + prevIsNumber = 0; + } + } + } + return 0; +} + + +static int +set_ports_option(struct mg_context *phys_ctx) +{ + const char *list; + int on = 1; +#if defined(USE_IPV6) + int off = 0; +#endif + struct vec vec; + struct socket so, *ptr; + + struct mg_pollfd *pfd; + union usa usa; + socklen_t len; + int ip_version; + + int portsTotal = 0; + int portsOk = 0; + + const char *opt_txt; + long opt_listen_backlog; + + if (!phys_ctx) { + return 0; + } + + memset(&so, 0, sizeof(so)); + memset(&usa, 0, sizeof(usa)); + len = sizeof(usa); + list = phys_ctx->dd.config[LISTENING_PORTS]; + + while ((list = next_option(list, &vec, NULL)) != NULL) { + + portsTotal++; + + if (!parse_port_string(&vec, &so, &ip_version)) { + mg_cry_ctx_internal( + phys_ctx, + "%.*s: invalid port spec (entry %i). Expecting list of: %s", + (int)vec.len, + vec.ptr, + portsTotal, + "[IP_ADDRESS:]PORT[s|r]"); + continue; + } + +#if !defined(NO_SSL) + if (so.is_ssl && phys_ctx->dd.ssl_ctx == NULL) { + + mg_cry_ctx_internal(phys_ctx, + "Cannot add SSL socket (entry %i)", + portsTotal); + continue; + } +#endif + /* Create socket. */ + /* For a list of protocol numbers (e.g., TCP==6) see: + * https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml + */ + if ((so.sock = + socket(so.lsa.sa.sa_family, + SOCK_STREAM, + (ip_version == 99) ? (/* LOCAL */ 0) : (/* TCP */ 6))) + == INVALID_SOCKET) { + + mg_cry_ctx_internal(phys_ctx, + "cannot create socket (entry %i)", + portsTotal); + if (so.is_optional) { + portsOk++; /* it's okay if we couldn't create a socket, + this port is optional anyway */ + } + continue; + } + +#if defined(_WIN32) + /* Windows SO_REUSEADDR lets many procs binds to a + * socket, SO_EXCLUSIVEADDRUSE makes the bind fail + * if someone already has the socket -- DTL */ + /* NOTE: If SO_EXCLUSIVEADDRUSE is used, + * Windows might need a few seconds before + * the same port can be used again in the + * same process, so a short Sleep may be + * required between mg_stop and mg_start. + */ + if (setsockopt(so.sock, + SOL_SOCKET, + SO_EXCLUSIVEADDRUSE, + (SOCK_OPT_TYPE)&on, + sizeof(on)) + != 0) { + + /* Set reuse option, but don't abort on errors. */ + mg_cry_ctx_internal( + phys_ctx, + "cannot set socket option SO_EXCLUSIVEADDRUSE (entry %i)", + portsTotal); + } +#else + if (setsockopt(so.sock, + SOL_SOCKET, + SO_REUSEADDR, + (SOCK_OPT_TYPE)&on, + sizeof(on)) + != 0) { + + /* Set reuse option, but don't abort on errors. */ + mg_cry_ctx_internal( + phys_ctx, + "cannot set socket option SO_REUSEADDR (entry %i)", + portsTotal); + } +#endif + +#if defined(USE_X_DOM_SOCKET) + if (ip_version == 99) { + /* Unix domain socket */ + } else +#endif + + if (ip_version > 4) { + /* Could be 6 for IPv6 onlyor 10 (4+6) for IPv4+IPv6 */ +#if defined(USE_IPV6) + if (ip_version > 6) { + if (so.lsa.sa.sa_family == AF_INET6 + && setsockopt(so.sock, + IPPROTO_IPV6, + IPV6_V6ONLY, + (void *)&off, + sizeof(off)) + != 0) { + + /* Set IPv6 only option, but don't abort on errors. */ + mg_cry_ctx_internal(phys_ctx, + "cannot set socket option " + "IPV6_V6ONLY=off (entry %i)", + portsTotal); + } + } else { + if (so.lsa.sa.sa_family == AF_INET6 + && setsockopt(so.sock, + IPPROTO_IPV6, + IPV6_V6ONLY, + (void *)&on, + sizeof(on)) + != 0) { + + /* Set IPv6 only option, but don't abort on errors. */ + mg_cry_ctx_internal(phys_ctx, + "cannot set socket option " + "IPV6_V6ONLY=on (entry %i)", + portsTotal); + } + } +#else + mg_cry_ctx_internal(phys_ctx, "%s", "IPv6 not available"); + closesocket(so.sock); + if (so.is_optional) { + portsOk++; /* it's okay if we couldn't set the socket option, + this port is optional anyway */ + } + so.sock = INVALID_SOCKET; + continue; +#endif + } + + if (so.lsa.sa.sa_family == AF_INET) { + + len = sizeof(so.lsa.sin); + if (bind(so.sock, &so.lsa.sa, len) != 0) { + mg_cry_ctx_internal(phys_ctx, + "cannot bind to %.*s: %d (%s)", + (int)vec.len, + vec.ptr, + (int)ERRNO, + strerror(errno)); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + if (so.is_optional) { + portsOk++; /* it's okay if we couldn't bind, this port is + optional anyway */ + } + continue; + } + } +#if defined(USE_IPV6) + else if (so.lsa.sa.sa_family == AF_INET6) { + + len = sizeof(so.lsa.sin6); + if (bind(so.sock, &so.lsa.sa, len) != 0) { + mg_cry_ctx_internal(phys_ctx, + "cannot bind to IPv6 %.*s: %d (%s)", + (int)vec.len, + vec.ptr, + (int)ERRNO, + strerror(errno)); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + if (so.is_optional) { + portsOk++; /* it's okay if we couldn't bind, this port is + optional anyway */ + } + continue; + } + } +#endif +#if defined(USE_X_DOM_SOCKET) + else if (so.lsa.sa.sa_family == AF_UNIX) { + + len = sizeof(so.lsa.sun); + if (bind(so.sock, &so.lsa.sa, len) != 0) { + mg_cry_ctx_internal(phys_ctx, + "cannot bind to unix socket %s: %d (%s)", + so.lsa.sun.sun_path, + (int)ERRNO, + strerror(errno)); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + if (so.is_optional) { + portsOk++; /* it's okay if we couldn't bind, this port is + optional anyway */ + } + continue; + } + } +#endif + else { + mg_cry_ctx_internal( + phys_ctx, + "cannot bind: address family not supported (entry %i)", + portsTotal); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + continue; + } + + opt_txt = phys_ctx->dd.config[LISTEN_BACKLOG_SIZE]; + opt_listen_backlog = strtol(opt_txt, NULL, 10); + if ((opt_listen_backlog > INT_MAX) || (opt_listen_backlog < 1)) { + mg_cry_ctx_internal(phys_ctx, + "%s value \"%s\" is invalid", + config_options[LISTEN_BACKLOG_SIZE].name, + opt_txt); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + continue; + } + + if (listen(so.sock, (int)opt_listen_backlog) != 0) { + + mg_cry_ctx_internal(phys_ctx, + "cannot listen to %.*s: %d (%s)", + (int)vec.len, + vec.ptr, + (int)ERRNO, + strerror(errno)); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + continue; + } + + if ((getsockname(so.sock, &(usa.sa), &len) != 0) + || (usa.sa.sa_family != so.lsa.sa.sa_family)) { + + int err = (int)ERRNO; + mg_cry_ctx_internal(phys_ctx, + "call to getsockname failed %.*s: %d (%s)", + (int)vec.len, + vec.ptr, + err, + strerror(errno)); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + continue; + } + + /* Update lsa port in case of random free ports */ +#if defined(USE_IPV6) + if (so.lsa.sa.sa_family == AF_INET6) { + so.lsa.sin6.sin6_port = usa.sin6.sin6_port; + } else +#endif + { + so.lsa.sin.sin_port = usa.sin.sin_port; + } + + if ((ptr = (struct socket *) + mg_realloc_ctx(phys_ctx->listening_sockets, + (phys_ctx->num_listening_sockets + 1) + * sizeof(phys_ctx->listening_sockets[0]), + phys_ctx)) + == NULL) { + + mg_cry_ctx_internal(phys_ctx, "%s", "Out of memory"); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + continue; + } + + /* The +2 below includes the original +1 (for the socket we're about to + * add), plus another +1 for the thread_shutdown_notification_socket + * that we'll also want to poll() on so that mg_stop() can return + * quickly + */ + if ((pfd = (struct mg_pollfd *) + mg_realloc_ctx(phys_ctx->listening_socket_fds, + (phys_ctx->num_listening_sockets + 2) + * sizeof(phys_ctx->listening_socket_fds[0]), + phys_ctx)) + == NULL) { + + mg_cry_ctx_internal(phys_ctx, "%s", "Out of memory"); + closesocket(so.sock); + so.sock = INVALID_SOCKET; + mg_free(ptr); + continue; + } + + set_close_on_exec(so.sock, NULL, phys_ctx); + phys_ctx->listening_sockets = ptr; + phys_ctx->listening_sockets[phys_ctx->num_listening_sockets] = so; + phys_ctx->listening_socket_fds = pfd; + phys_ctx->num_listening_sockets++; + portsOk++; + } + + if (portsOk != portsTotal) { + close_all_listening_sockets(phys_ctx); + portsOk = 0; + } + + return portsOk; +} + + +static const char * +header_val(const struct mg_connection *conn, const char *header) +{ + const char *header_value; + + if ((header_value = mg_get_header(conn, header)) == NULL) { + return "-"; + } else { + return header_value; + } +} + + +#if defined(MG_EXTERNAL_FUNCTION_log_access) +#include "external_log_access.inl" +#elif !defined(NO_FILESYSTEMS) + +static void +log_access(const struct mg_connection *conn) +{ + const struct mg_request_info *ri; + struct mg_file fi; + char date[64], src_addr[IP_ADDR_STR_LEN]; +#if defined(REENTRANT_TIME) + struct tm _tm; + struct tm *tm = &_tm; +#else + struct tm *tm; +#endif + + const char *referer; + const char *user_agent; + + char log_buf[4096]; + + if (!conn || !conn->dom_ctx) { + return; + } + + /* Set log message to "empty" */ + log_buf[0] = 0; + +#if defined(USE_LUA) + if (conn->phys_ctx->lua_bg_log_available) { + int ret; + struct mg_context *ctx = conn->phys_ctx; + lua_State *lstate = (lua_State *)ctx->lua_background_state; + pthread_mutex_lock(&ctx->lua_bg_mutex); + /* call "log()" in Lua */ + lua_getglobal(lstate, "log"); + prepare_lua_request_info_inner(conn, lstate); + push_lua_response_log_data(conn, lstate); + + ret = lua_pcall(lstate, /* args */ 2, /* results */ 1, 0); + if (ret == 0) { + int t = lua_type(lstate, -1); + if (t == LUA_TBOOLEAN) { + if (lua_toboolean(lstate, -1) == 0) { + /* log() returned false: do not log */ + pthread_mutex_unlock(&ctx->lua_bg_mutex); + return; + } + /* log returned true: continue logging */ + } else if (t == LUA_TSTRING) { + size_t len; + const char *txt = lua_tolstring(lstate, -1, &len); + if ((len == 0) || (*txt == 0)) { + /* log() returned empty string: do not log */ + pthread_mutex_unlock(&ctx->lua_bg_mutex); + return; + } + /* Copy test from Lua into log_buf */ + if (len >= sizeof(log_buf)) { + len = sizeof(log_buf) - 1; + } + memcpy(log_buf, txt, len); + log_buf[len] = 0; + } + } else { + lua_cry(conn, ret, lstate, "lua_background_script", "log"); + } + pthread_mutex_unlock(&ctx->lua_bg_mutex); + } +#endif + + if (conn->dom_ctx->config[ACCESS_LOG_FILE] != NULL) { + if (mg_fopen(conn, + conn->dom_ctx->config[ACCESS_LOG_FILE], + MG_FOPEN_MODE_APPEND, + &fi) + == 0) { + fi.access.fp = NULL; + } + } else { + fi.access.fp = NULL; + } + + /* Log is written to a file and/or a callback. If both are not set, + * executing the rest of the function is pointless. */ + if ((fi.access.fp == NULL) + && (conn->phys_ctx->callbacks.log_access == NULL)) { + return; + } + + /* If we did not get a log message from Lua, create it here. */ + if (!log_buf[0]) { +#if defined(REENTRANT_TIME) + localtime_r(&conn->conn_birth_time, tm); +#else + tm = localtime(&conn->conn_birth_time); +#endif + if (tm != NULL) { + strftime(date, sizeof(date), "%d/%b/%Y:%H:%M:%S %z", tm); + } else { + mg_strlcpy(date, "01/Jan/1970:00:00:00 +0000", sizeof(date)); + } + + ri = &conn->request_info; + + sockaddr_to_string(src_addr, sizeof(src_addr), &conn->client.rsa); + referer = header_val(conn, "Referer"); + user_agent = header_val(conn, "User-Agent"); + + mg_snprintf(conn, + NULL, /* Ignore truncation in access log */ + log_buf, + sizeof(log_buf), + "%s - %s [%s] \"%s %s%s%s HTTP/%s\" %d %" INT64_FMT + " %s %s", + src_addr, + (ri->remote_user == NULL) ? "-" : ri->remote_user, + date, + ri->request_method ? ri->request_method : "-", + ri->request_uri ? ri->request_uri : "-", + ri->query_string ? "?" : "", + ri->query_string ? ri->query_string : "", + ri->http_version, + conn->status_code, + conn->num_bytes_sent, + referer, + user_agent); + } + + /* Here we have a log message in log_buf. Call the callback */ + if (conn->phys_ctx->callbacks.log_access) { + if (conn->phys_ctx->callbacks.log_access(conn, log_buf)) { + /* do not log if callback returns non-zero */ + if (fi.access.fp) { + mg_fclose(&fi.access); + } + return; + } + } + + /* Store in file */ + if (fi.access.fp) { + int ok = 1; + flockfile(fi.access.fp); + if (fprintf(fi.access.fp, "%s\n", log_buf) < 1) { + ok = 0; + } + if (fflush(fi.access.fp) != 0) { + ok = 0; + } + funlockfile(fi.access.fp); + if (mg_fclose(&fi.access) != 0) { + ok = 0; + } + if (!ok) { + mg_cry_internal(conn, + "Error writing log file %s", + conn->dom_ctx->config[ACCESS_LOG_FILE]); + } + } +} +#else +#error "Either enable filesystems or provide a custom log_access implementation" +#endif /* Externally provided function */ + + +/* Verify given socket address against the ACL. + * Return -1 if ACL is malformed, 0 if address is disallowed, 1 if allowed. + */ +static int +check_acl(struct mg_context *phys_ctx, const union usa *sa) +{ + int allowed, flag, matched; + struct vec vec; + + if (phys_ctx) { + const char *list = phys_ctx->dd.config[ACCESS_CONTROL_LIST]; + + /* If any ACL is set, deny by default */ + allowed = (list == NULL) ? '+' : '-'; + + while ((list = next_option(list, &vec, NULL)) != NULL) { + flag = vec.ptr[0]; + matched = -1; + if ((vec.len > 0) && ((flag == '+') || (flag == '-'))) { + vec.ptr++; + vec.len--; + matched = parse_match_net(&vec, sa, 1); + } + if (matched < 0) { + mg_cry_ctx_internal(phys_ctx, + "%s: subnet must be [+|-]IP-addr[/x]", + __func__); + return -1; + } + if (matched) { + allowed = flag; + } + } + + return allowed == '+'; + } + return -1; +} + + +#if !defined(_WIN32) && !defined(__ZEPHYR__) +static int +set_uid_option(struct mg_context *phys_ctx) +{ + int success = 0; + + if (phys_ctx) { + /* We are currently running as curr_uid. */ + const uid_t curr_uid = getuid(); + /* If set, we want to run as run_as_user. */ + const char *run_as_user = phys_ctx->dd.config[RUN_AS_USER]; + const struct passwd *to_pw = NULL; + + if ((run_as_user != NULL) && (to_pw = getpwnam(run_as_user)) == NULL) { + /* run_as_user does not exist on the system. We can't proceed + * further. */ + mg_cry_ctx_internal(phys_ctx, + "%s: unknown user [%s]", + __func__, + run_as_user); + } else if ((run_as_user == NULL) || (curr_uid == to_pw->pw_uid)) { + /* There was either no request to change user, or we're already + * running as run_as_user. Nothing else to do. + */ + success = 1; + } else { + /* Valid change request. */ + if (setgid(to_pw->pw_gid) == -1) { + mg_cry_ctx_internal(phys_ctx, + "%s: setgid(%s): %s", + __func__, + run_as_user, + strerror(errno)); + } else if (setgroups(0, NULL) == -1) { + mg_cry_ctx_internal(phys_ctx, + "%s: setgroups(): %s", + __func__, + strerror(errno)); + } else if (setuid(to_pw->pw_uid) == -1) { + mg_cry_ctx_internal(phys_ctx, + "%s: setuid(%s): %s", + __func__, + run_as_user, + strerror(errno)); + } else { + success = 1; + } + } + } + + return success; +} +#endif /* !_WIN32 */ + + +static void +tls_dtor(void *key) +{ + struct mg_workerTLS *tls = (struct mg_workerTLS *)key; + /* key == pthread_getspecific(sTlsKey); */ + + if (tls) { + if (tls->is_master == 2) { + tls->is_master = -3; /* Mark memory as dead */ + mg_free(tls); + } + } + pthread_setspecific(sTlsKey, NULL); +} + + +#if defined(USE_MBEDTLS) +/* Check if SSL is required. + * If so, set up ctx->ssl_ctx pointer. */ +static int +mg_sslctx_init(struct mg_context *phys_ctx, struct mg_domain_context *dom_ctx) +{ + if (!phys_ctx) { + return 0; + } + + if (!dom_ctx) { + dom_ctx = &(phys_ctx->dd); + } + + if (!is_ssl_port_used(dom_ctx->config[LISTENING_PORTS])) { + /* No SSL port is set. No need to setup SSL. */ + return 1; + } + + dom_ctx->ssl_ctx = (SSL_CTX *)mg_calloc(1, sizeof(*dom_ctx->ssl_ctx)); + if (dom_ctx->ssl_ctx == NULL) { + fprintf(stderr, "ssl_ctx malloc failed\n"); + return 0; + } + + return mbed_sslctx_init(dom_ctx->ssl_ctx, dom_ctx->config[SSL_CERTIFICATE], + dom_ctx->config[SSL_CIPHER_LIST]) + == 0 + ? 1 + : 0; +} + +#elif defined(USE_GNUTLS) +/* Check if SSL is required. + * If so, set up ctx->ssl_ctx pointer. */ +static int +mg_sslctx_init(struct mg_context *phys_ctx, struct mg_domain_context *dom_ctx) +{ + if (!phys_ctx) { + return 0; + } + + if (!dom_ctx) { + dom_ctx = &(phys_ctx->dd); + } + + if (!is_ssl_port_used(dom_ctx->config[LISTENING_PORTS])) { + /* No SSL port is set. No need to setup SSL. */ + return 1; + } + + dom_ctx->ssl_ctx = (SSL_CTX *)mg_calloc(1, sizeof(*dom_ctx->ssl_ctx)); + if (dom_ctx->ssl_ctx == NULL) { + fprintf(stderr, "ssl_ctx malloc failed\n"); + return 0; + } + + return gtls_sslctx_init(dom_ctx->ssl_ctx, dom_ctx->config[SSL_CERTIFICATE]) + == 0 + ? 1 + : 0; +} + +#elif !defined(NO_SSL) + +static int ssl_use_pem_file(struct mg_context *phys_ctx, + struct mg_domain_context *dom_ctx, + const char *pem, + const char *chain); +static const char *ssl_error(void); + + +static int +refresh_trust(struct mg_connection *conn) +{ + struct stat cert_buf; + int64_t t = 0; + const char *pem; + const char *chain; + int should_verify_peer; + + if ((pem = conn->dom_ctx->config[SSL_CERTIFICATE]) == NULL) { + /* If pem is NULL and conn->phys_ctx->callbacks.init_ssl is not, + * refresh_trust still can not work. */ + return 0; + } + chain = conn->dom_ctx->config[SSL_CERTIFICATE_CHAIN]; + if (chain == NULL) { + /* pem is not NULL here */ + chain = pem; + } + if (*chain == 0) { + chain = NULL; + } + + if (stat(pem, &cert_buf) != -1) { + t = (int64_t)cert_buf.st_mtime; + } + + mg_lock_context(conn->phys_ctx); + if ((t != 0) && (conn->dom_ctx->ssl_cert_last_mtime != t)) { + conn->dom_ctx->ssl_cert_last_mtime = t; + + should_verify_peer = 0; + if (conn->dom_ctx->config[SSL_DO_VERIFY_PEER] != NULL) { + if (mg_strcasecmp(conn->dom_ctx->config[SSL_DO_VERIFY_PEER], "yes") + == 0) { + should_verify_peer = 1; + } else if (mg_strcasecmp(conn->dom_ctx->config[SSL_DO_VERIFY_PEER], + "optional") + == 0) { + should_verify_peer = 1; + } + } + + if (should_verify_peer) { + char *ca_path = conn->dom_ctx->config[SSL_CA_PATH]; + char *ca_file = conn->dom_ctx->config[SSL_CA_FILE]; + if (SSL_CTX_load_verify_locations(conn->dom_ctx->ssl_ctx, + ca_file, + ca_path) + != 1) { + mg_unlock_context(conn->phys_ctx); + mg_cry_ctx_internal( + conn->phys_ctx, + "SSL_CTX_load_verify_locations error: %s " + "ssl_verify_peer requires setting " + "either ssl_ca_path or ssl_ca_file. Is any of them " + "present in " + "the .conf file?", + ssl_error()); + return 0; + } + } + + if (ssl_use_pem_file(conn->phys_ctx, conn->dom_ctx, pem, chain) == 0) { + mg_unlock_context(conn->phys_ctx); + return 0; + } + } + mg_unlock_context(conn->phys_ctx); + + return 1; +} + +#if defined(OPENSSL_API_1_1) +#else +static pthread_mutex_t *ssl_mutexes; +#endif /* OPENSSL_API_1_1 */ + +static int +sslize(struct mg_connection *conn, + int (*func)(SSL *), + const struct mg_client_options *client_options) +{ + int ret, err; + int short_trust; + unsigned timeout = 1024; + unsigned i; + + if (!conn) { + return 0; + } + + short_trust = + (conn->dom_ctx->config[SSL_SHORT_TRUST] != NULL) + && (mg_strcasecmp(conn->dom_ctx->config[SSL_SHORT_TRUST], "yes") == 0); + + if (short_trust) { + int trust_ret = refresh_trust(conn); + if (!trust_ret) { + return trust_ret; + } + } + + mg_lock_context(conn->phys_ctx); + conn->ssl = SSL_new(conn->dom_ctx->ssl_ctx); + mg_unlock_context(conn->phys_ctx); + if (conn->ssl == NULL) { + mg_cry_internal(conn, "sslize error: %s", ssl_error()); + OPENSSL_REMOVE_THREAD_STATE(); + return 0; + } + SSL_set_app_data(conn->ssl, (char *)conn); + + ret = SSL_set_fd(conn->ssl, conn->client.sock); + if (ret != 1) { + mg_cry_internal(conn, "sslize error: %s", ssl_error()); + SSL_free(conn->ssl); + conn->ssl = NULL; + OPENSSL_REMOVE_THREAD_STATE(); + return 0; + } + + if (client_options) { + if (client_options->host_name) { + SSL_set_tlsext_host_name(conn->ssl, client_options->host_name); + } + } + + /* Reuse the request timeout for the SSL_Accept/SSL_connect timeout */ + if (conn->dom_ctx->config[REQUEST_TIMEOUT]) { + /* NOTE: The loop below acts as a back-off, so we can end + * up sleeping for more (or less) than the REQUEST_TIMEOUT. */ + int to = atoi(conn->dom_ctx->config[REQUEST_TIMEOUT]); + if (to >= 0) { + timeout = (unsigned)to; + } + } + + /* SSL functions may fail and require to be called again: + * see https://www.openssl.org/docs/manmaster/ssl/SSL_get_error.html + * Here "func" could be SSL_connect or SSL_accept. */ + for (i = 0; i <= timeout; i += 50) { + ERR_clear_error(); + /* conn->dom_ctx may be changed here (see ssl_servername_callback) */ + ret = func(conn->ssl); + if (ret != 1) { + err = SSL_get_error(conn->ssl, ret); + if ((err == SSL_ERROR_WANT_CONNECT) + || (err == SSL_ERROR_WANT_ACCEPT) + || (err == SSL_ERROR_WANT_READ) || (err == SSL_ERROR_WANT_WRITE) + || (err == SSL_ERROR_WANT_X509_LOOKUP)) { + if (!STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag)) { + /* Don't wait if the server is going to be stopped. */ + break; + } + if (err == SSL_ERROR_WANT_X509_LOOKUP) { + /* Simply retry the function call. */ + mg_sleep(50); + } else { + /* Need to retry the function call "later". + * See https://linux.die.net/man/3/ssl_get_error + * This is typical for non-blocking sockets. */ + struct mg_pollfd pfd[2]; + int pollres; + unsigned int num_sock = 1; + pfd[0].fd = conn->client.sock; + pfd[0].events = ((err == SSL_ERROR_WANT_CONNECT) + || (err == SSL_ERROR_WANT_WRITE)) + ? POLLOUT + : POLLIN; + + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + pfd[num_sock].fd = + conn->phys_ctx->thread_shutdown_notification_socket; + pfd[num_sock].events = POLLIN; + num_sock++; + } + + pollres = mg_poll(pfd, + num_sock, + 50, + &(conn->phys_ctx->stop_flag)); + if (pollres < 0) { + /* Break if error occurred (-1) + * or server shutdown (-2) */ + break; + } + } + + } else if (err == SSL_ERROR_SYSCALL) { + /* This is an IO error. Look at errno. */ + mg_cry_internal(conn, "SSL syscall error %i", ERRNO); + break; + + } else { + /* This is an SSL specific error, e.g. SSL_ERROR_SSL */ + mg_cry_internal(conn, "sslize error: %s", ssl_error()); + break; + } + + } else { + /* success */ + break; + } + } + ERR_clear_error(); + + if (ret != 1) { + SSL_free(conn->ssl); + conn->ssl = NULL; + OPENSSL_REMOVE_THREAD_STATE(); + return 0; + } + + return 1; +} + + +/* Return OpenSSL error message (from CRYPTO lib) */ +static const char * +ssl_error(void) +{ + unsigned long err; + err = ERR_get_error(); + return ((err == 0) ? "" : ERR_error_string(err, NULL)); +} + + +static int +hexdump2string(void *mem, int memlen, char *buf, int buflen) +{ + int i; + const char hexdigit[] = "0123456789abcdef"; + + if ((memlen <= 0) || (buflen <= 0)) { + return 0; + } + if (buflen < (3 * memlen)) { + return 0; + } + + for (i = 0; i < memlen; i++) { + if (i > 0) { + buf[3 * i - 1] = ' '; + } + buf[3 * i] = hexdigit[(((uint8_t *)mem)[i] >> 4) & 0xF]; + buf[3 * i + 1] = hexdigit[((uint8_t *)mem)[i] & 0xF]; + } + buf[3 * memlen - 1] = 0; + + return 1; +} + + +static int +ssl_get_client_cert_info(const struct mg_connection *conn, + struct mg_client_cert *client_cert) +{ + X509 *cert = SSL_get_peer_certificate(conn->ssl); + if (cert) { + char str_buf[1024]; + unsigned char buf[256]; + char *str_serial = NULL; + unsigned int ulen; + int ilen; + unsigned char *tmp_buf; + unsigned char *tmp_p; + + /* Handle to algorithm used for fingerprint */ + const EVP_MD *digest = EVP_get_digestbyname("sha1"); + + /* Get Subject and issuer */ + X509_NAME *subj = X509_get_subject_name(cert); + X509_NAME *iss = X509_get_issuer_name(cert); + + /* Get serial number */ + ASN1_INTEGER *serial = X509_get_serialNumber(cert); + + /* Translate serial number to a hex string */ + BIGNUM *serial_bn = ASN1_INTEGER_to_BN(serial, NULL); + if (serial_bn) { + str_serial = BN_bn2hex(serial_bn); + BN_free(serial_bn); + } + client_cert->serial = + str_serial ? mg_strdup_ctx(str_serial, conn->phys_ctx) : NULL; + + /* Translate subject and issuer to a string */ + (void)X509_NAME_oneline(subj, str_buf, (int)sizeof(str_buf)); + client_cert->subject = mg_strdup_ctx(str_buf, conn->phys_ctx); + (void)X509_NAME_oneline(iss, str_buf, (int)sizeof(str_buf)); + client_cert->issuer = mg_strdup_ctx(str_buf, conn->phys_ctx); + + /* Calculate SHA1 fingerprint and store as a hex string */ + ulen = 0; + + /* ASN1_digest is deprecated. Do the calculation manually, + * using EVP_Digest. */ + ilen = i2d_X509(cert, NULL); + tmp_buf = (ilen > 0) + ? (unsigned char *)mg_malloc_ctx((unsigned)ilen + 1, + conn->phys_ctx) + : NULL; + if (tmp_buf) { + tmp_p = tmp_buf; + (void)i2d_X509(cert, &tmp_p); + if (!EVP_Digest( + tmp_buf, (unsigned)ilen, buf, &ulen, digest, NULL)) { + ulen = 0; + } + mg_free(tmp_buf); + } + + if (!hexdump2string(buf, (int)ulen, str_buf, (int)sizeof(str_buf))) { + *str_buf = 0; + } + client_cert->finger = mg_strdup_ctx(str_buf, conn->phys_ctx); + + client_cert->peer_cert = (void *)cert; + + /* Strings returned from bn_bn2hex must be freed using OPENSSL_free, + * see https://linux.die.net/man/3/bn_bn2hex */ + OPENSSL_free(str_serial); + return 1; + } + return 0; +} + + +#if defined(OPENSSL_API_1_1) +#else +static void +ssl_locking_callback(int mode, int mutex_num, const char *file, int line) +{ + (void)line; + (void)file; + + if (mode & 1) { + /* 1 is CRYPTO_LOCK */ + (void)pthread_mutex_lock(&ssl_mutexes[mutex_num]); + } else { + (void)pthread_mutex_unlock(&ssl_mutexes[mutex_num]); + } +} +#endif /* OPENSSL_API_1_1 */ + + +#if !defined(NO_SSL_DL) +/* Load a DLL/Shared Object with a TLS/SSL implementation. */ +static void * +load_tls_dll(char *ebuf, + size_t ebuf_len, + const char *dll_name, + struct ssl_func *sw, + int *feature_missing) +{ + union { + void *p; + void (*fp)(void); + } u; + void *dll_handle; + struct ssl_func *fp; + int ok; + int truncated = 0; + + if ((dll_handle = dlopen(dll_name, RTLD_LAZY)) == NULL) { + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s: cannot load %s", + __func__, + dll_name); + return NULL; + } + + ok = 1; + for (fp = sw; fp->name != NULL; fp++) { +#if defined(_WIN32) + /* GetProcAddress() returns pointer to function */ + u.fp = (void (*)(void))dlsym(dll_handle, fp->name); +#else + /* dlsym() on UNIX returns void *. ISO C forbids casts of data + * pointers to function pointers. We need to use a union to make a + * cast. */ + u.p = dlsym(dll_handle, fp->name); +#endif /* _WIN32 */ + + /* Set pointer (might be NULL) */ + fp->ptr = u.fp; + + if (u.fp == NULL) { + DEBUG_TRACE("Missing function: %s\n", fp->name); + if (feature_missing) { + feature_missing[fp->required]++; + } + if (fp->required == TLS_Mandatory) { + /* Mandatory function is missing */ + if (ok) { + /* This is the first missing function. + * Create a new error message. */ + mg_snprintf(NULL, + &truncated, + ebuf, + ebuf_len, + "%s: %s: cannot find %s", + __func__, + dll_name, + fp->name); + ok = 0; + } else { + /* This is yet anothermissing function. + * Append existing error message. */ + size_t cur_len = strlen(ebuf); + if (!truncated && ((ebuf_len - cur_len) > 3)) { + mg_snprintf(NULL, + &truncated, + ebuf + cur_len, + ebuf_len - cur_len - 3, + ", %s", + fp->name); + if (truncated) { + /* If truncated, add "..." */ + strcat(ebuf, "..."); + } + } + } + } + } + } + + if (!ok) { + (void)dlclose(dll_handle); + return NULL; + } + + return dll_handle; +} + + +static void *ssllib_dll_handle; /* Store the ssl library handle. */ +static void *cryptolib_dll_handle; /* Store the crypto library handle. */ + +#endif /* NO_SSL_DL */ + + +#if defined(SSL_ALREADY_INITIALIZED) +static volatile ptrdiff_t cryptolib_users = + 1; /* Reference counter for crypto library. */ +#else +static volatile ptrdiff_t cryptolib_users = + 0; /* Reference counter for crypto library. */ +#endif + + +static int +initialize_openssl(char *ebuf, size_t ebuf_len) +{ +#if !defined(OPENSSL_API_1_1) && !defined(OPENSSL_API_3_0) + int i, num_locks; + size_t size; +#endif + + if (ebuf_len > 0) { + ebuf[0] = 0; + } + +#if !defined(NO_SSL_DL) + if (!cryptolib_dll_handle) { + memset(tls_feature_missing, 0, sizeof(tls_feature_missing)); + cryptolib_dll_handle = load_tls_dll( + ebuf, ebuf_len, CRYPTO_LIB, crypto_sw, tls_feature_missing); + if (!cryptolib_dll_handle) { + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s: error loading library %s", + __func__, + CRYPTO_LIB); + DEBUG_TRACE("%s", ebuf); + return 0; + } + } +#endif /* NO_SSL_DL */ + + if (mg_atomic_inc(&cryptolib_users) > 1) { + return 1; + } + +#if !defined(OPENSSL_API_1_1) && !defined(OPENSSL_API_3_0) + /* Initialize locking callbacks, needed for thread safety. + * http://www.openssl.org/support/faq.html#PROG1 + */ + num_locks = CRYPTO_num_locks(); + if (num_locks < 0) { + num_locks = 0; + } + size = sizeof(pthread_mutex_t) * ((size_t)(num_locks)); + + /* allocate mutex array, if required */ + if (num_locks == 0) { + /* No mutex array required */ + ssl_mutexes = NULL; + } else { + /* Mutex array required - allocate it */ + ssl_mutexes = (pthread_mutex_t *)mg_malloc(size); + + /* Check OOM */ + if (ssl_mutexes == NULL) { + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s: cannot allocate mutexes: %s", + __func__, + ssl_error()); + DEBUG_TRACE("%s", ebuf); + return 0; + } + + /* initialize mutex array */ + for (i = 0; i < num_locks; i++) { + if (0 != pthread_mutex_init(&ssl_mutexes[i], &pthread_mutex_attr)) { + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s: error initializing mutex %i of %i", + __func__, + i, + num_locks); + DEBUG_TRACE("%s", ebuf); + mg_free(ssl_mutexes); + return 0; + } + } + } + + CRYPTO_set_locking_callback(&ssl_locking_callback); + CRYPTO_set_id_callback(&mg_current_thread_id); +#endif /* OPENSSL_API_1_1 || OPENSSL_API_3_0 */ + +#if !defined(NO_SSL_DL) + if (!ssllib_dll_handle) { + ssllib_dll_handle = + load_tls_dll(ebuf, ebuf_len, SSL_LIB, ssl_sw, tls_feature_missing); + if (!ssllib_dll_handle) { +#if !defined(OPENSSL_API_1_1) + mg_free(ssl_mutexes); +#endif + DEBUG_TRACE("%s", ebuf); + return 0; + } + } +#endif /* NO_SSL_DL */ + +#if (defined(OPENSSL_API_1_1) || defined(OPENSSL_API_3_0)) \ + && !defined(NO_SSL_DL) + /* Initialize SSL library */ + OPENSSL_init_ssl(0, NULL); + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, + NULL); +#else + /* Initialize SSL library */ + SSL_library_init(); + SSL_load_error_strings(); +#endif + + return 1; +} + + +static int +ssl_use_pem_file(struct mg_context *phys_ctx, + struct mg_domain_context *dom_ctx, + const char *pem, + const char *chain) +{ + if (SSL_CTX_use_certificate_file(dom_ctx->ssl_ctx, pem, 1) == 0) { + mg_cry_ctx_internal(phys_ctx, + "%s: cannot open certificate file %s: %s", + __func__, + pem, + ssl_error()); + return 0; + } + + /* could use SSL_CTX_set_default_passwd_cb_userdata */ + if (SSL_CTX_use_PrivateKey_file(dom_ctx->ssl_ctx, pem, 1) == 0) { + mg_cry_ctx_internal(phys_ctx, + "%s: cannot open private key file %s: %s", + __func__, + pem, + ssl_error()); + return 0; + } + + if (SSL_CTX_check_private_key(dom_ctx->ssl_ctx) == 0) { + mg_cry_ctx_internal(phys_ctx, + "%s: certificate and private key do not match: %s", + __func__, + pem); + return 0; + } + + /* In contrast to OpenSSL, wolfSSL does not support certificate + * chain files that contain private keys and certificates in + * SSL_CTX_use_certificate_chain_file. + * The CivetWeb-Server used pem-Files that contained both information. + * In order to make wolfSSL work, it is split in two files. + * One file that contains key and certificate used by the server and + * an optional chain file for the ssl stack. + */ + if (chain) { + if (SSL_CTX_use_certificate_chain_file(dom_ctx->ssl_ctx, chain) == 0) { + mg_cry_ctx_internal(phys_ctx, + "%s: cannot use certificate chain file %s: %s", + __func__, + chain, + ssl_error()); + return 0; + } + } + return 1; +} + + +#if defined(OPENSSL_API_1_1) +static unsigned long +ssl_get_protocol(int version_id) +{ + long unsigned ret = (long unsigned)SSL_OP_ALL; + if (version_id > 0) + ret |= SSL_OP_NO_SSLv2; + if (version_id > 1) + ret |= SSL_OP_NO_SSLv3; + if (version_id > 2) + ret |= SSL_OP_NO_TLSv1; + if (version_id > 3) + ret |= SSL_OP_NO_TLSv1_1; + if (version_id > 4) + ret |= SSL_OP_NO_TLSv1_2; +#if defined(SSL_OP_NO_TLSv1_3) + if (version_id > 5) + ret |= SSL_OP_NO_TLSv1_3; +#endif + return ret; +} +#else +static long +ssl_get_protocol(int version_id) +{ + unsigned long ret = (unsigned long)SSL_OP_ALL; + if (version_id > 0) + ret |= SSL_OP_NO_SSLv2; + if (version_id > 1) + ret |= SSL_OP_NO_SSLv3; + if (version_id > 2) + ret |= SSL_OP_NO_TLSv1; + if (version_id > 3) + ret |= SSL_OP_NO_TLSv1_1; + if (version_id > 4) + ret |= SSL_OP_NO_TLSv1_2; +#if defined(SSL_OP_NO_TLSv1_3) + if (version_id > 5) + ret |= SSL_OP_NO_TLSv1_3; +#endif + return (long)ret; +} +#endif /* OPENSSL_API_1_1 */ + + +/* SSL callback documentation: + * https://www.openssl.org/docs/man1.1.0/ssl/SSL_set_info_callback.html + * https://wiki.openssl.org/index.php/Manual:SSL_CTX_set_info_callback(3) + * https://linux.die.net/man/3/ssl_set_info_callback */ +/* Note: There is no "const" for the first argument in the documentation + * examples, however some (maybe most, but not all) headers of OpenSSL + * versions / OpenSSL compatibility layers have it. Having a different + * definition will cause a warning in C and an error in C++. Use "const SSL + * *", while automatic conversion from "SSL *" works for all compilers, + * but not other way around */ +static void +ssl_info_callback(const SSL *ssl, int what, int ret) +{ + (void)ret; + + if (what & SSL_CB_HANDSHAKE_START) { + SSL_get_app_data(ssl); + } + if (what & SSL_CB_HANDSHAKE_DONE) { + /* TODO: check for openSSL 1.1 */ + //#define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 + // ssl->s3->flags |= SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS; + } +} + + +static int +ssl_servername_callback(SSL *ssl, int *ad, void *arg) +{ +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" +#endif /* defined(GCC_DIAGNOSTIC) */ + + /* We used an aligned pointer in SSL_set_app_data */ + struct mg_connection *conn = (struct mg_connection *)SSL_get_app_data(ssl); + +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic pop +#endif /* defined(GCC_DIAGNOSTIC) */ + + const char *servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); + + (void)ad; + (void)arg; + + if ((conn == NULL) || (conn->phys_ctx == NULL)) { + DEBUG_ASSERT(0); + return SSL_TLSEXT_ERR_NOACK; + } + conn->dom_ctx = &(conn->phys_ctx->dd); + + /* Old clients (Win XP) will not support SNI. Then, there + * is no server name available in the request - we can + * only work with the default certificate. + * Multiple HTTPS hosts on one IP+port are only possible + * with a certificate containing all alternative names. + */ + if ((servername == NULL) || (*servername == 0)) { + DEBUG_TRACE("%s", "SSL connection not supporting SNI"); + mg_lock_context(conn->phys_ctx); + SSL_set_SSL_CTX(ssl, conn->dom_ctx->ssl_ctx); + mg_unlock_context(conn->phys_ctx); + return SSL_TLSEXT_ERR_NOACK; + } + + DEBUG_TRACE("TLS connection to host %s", servername); + + while (conn->dom_ctx) { + if (!mg_strcasecmp(servername, + conn->dom_ctx->config[AUTHENTICATION_DOMAIN])) { + /* Found matching domain */ + DEBUG_TRACE("TLS domain %s found", + conn->dom_ctx->config[AUTHENTICATION_DOMAIN]); + break; + } + mg_lock_context(conn->phys_ctx); + conn->dom_ctx = conn->dom_ctx->next; + mg_unlock_context(conn->phys_ctx); + } + + if (conn->dom_ctx == NULL) { + /* Default domain */ + DEBUG_TRACE("TLS default domain %s used", + conn->phys_ctx->dd.config[AUTHENTICATION_DOMAIN]); + conn->dom_ctx = &(conn->phys_ctx->dd); + } + mg_lock_context(conn->phys_ctx); + SSL_set_SSL_CTX(ssl, conn->dom_ctx->ssl_ctx); + mg_unlock_context(conn->phys_ctx); + return SSL_TLSEXT_ERR_OK; +} + + +#if defined(USE_ALPN) +static const char alpn_proto_list[] = "\x02h2\x08http/1.1\x08http/1.0"; +static const char *alpn_proto_order_http1[] = {alpn_proto_list + 3, + alpn_proto_list + 3 + 8, + NULL}; +#if defined(USE_HTTP2) +static const char *alpn_proto_order_http2[] = {alpn_proto_list, + alpn_proto_list + 3, + alpn_proto_list + 3 + 8, + NULL}; +#endif + +static int +alpn_select_cb(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg) +{ + struct mg_domain_context *dom_ctx = (struct mg_domain_context *)arg; + unsigned int i, j, enable_http2 = 0; + const char **alpn_proto_order = alpn_proto_order_http1; + + struct mg_workerTLS *tls = + (struct mg_workerTLS *)pthread_getspecific(sTlsKey); + + (void)ssl; + + if (tls == NULL) { + /* Need to store protocol in Thread Local Storage */ + /* If there is no Thread Local Storage, don't use ALPN */ + return SSL_TLSEXT_ERR_NOACK; + } + +#if defined(USE_HTTP2) + enable_http2 = (0 == strcmp(dom_ctx->config[ENABLE_HTTP2], "yes")); + if (enable_http2) { + alpn_proto_order = alpn_proto_order_http2; + } +#endif + + for (j = 0; alpn_proto_order[j] != NULL; j++) { + /* check all accepted protocols in this order */ + const char *alpn_proto = alpn_proto_order[j]; + /* search input for matching protocol */ + for (i = 0; i < inlen; i++) { + if (!memcmp(in + i, alpn_proto, (unsigned char)alpn_proto[0])) { + *out = in + i + 1; + *outlen = in[i]; + tls->alpn_proto = alpn_proto; + return SSL_TLSEXT_ERR_OK; + } + } + } + + /* Nothing found */ + return SSL_TLSEXT_ERR_NOACK; +} + + +static int +next_protos_advertised_cb(SSL *ssl, + const unsigned char **data, + unsigned int *len, + void *arg) +{ + struct mg_domain_context *dom_ctx = (struct mg_domain_context *)arg; + *data = (const unsigned char *)alpn_proto_list; + *len = (unsigned int)strlen((const char *)data); + + (void)ssl; + (void)dom_ctx; + + return SSL_TLSEXT_ERR_OK; +} + + +static int +init_alpn(struct mg_context *phys_ctx, struct mg_domain_context *dom_ctx) +{ + unsigned int alpn_len = (unsigned int)strlen((char *)alpn_proto_list); + int ret = SSL_CTX_set_alpn_protos(dom_ctx->ssl_ctx, + (const unsigned char *)alpn_proto_list, + alpn_len); + if (ret != 0) { + mg_cry_ctx_internal(phys_ctx, + "SSL_CTX_set_alpn_protos error: %s", + ssl_error()); + } + + SSL_CTX_set_alpn_select_cb(dom_ctx->ssl_ctx, + alpn_select_cb, + (void *)dom_ctx); + + SSL_CTX_set_next_protos_advertised_cb(dom_ctx->ssl_ctx, + next_protos_advertised_cb, + (void *)dom_ctx); + + return ret; +} +#endif + + +/* Setup SSL CTX as required by CivetWeb */ +static int +init_ssl_ctx_impl(struct mg_context *phys_ctx, + struct mg_domain_context *dom_ctx, + const char *pem, + const char *chain) +{ + int callback_ret; + int should_verify_peer; + int peer_certificate_optional; + const char *ca_path; + const char *ca_file; + int use_default_verify_paths; + int verify_depth; + struct timespec now_mt; + md5_byte_t ssl_context_id[16]; + md5_state_t md5state; + int protocol_ver; + int ssl_cache_timeout; + +#if (defined(OPENSSL_API_1_1) || defined(OPENSSL_API_3_0)) \ + && !defined(NO_SSL_DL) + if ((dom_ctx->ssl_ctx = SSL_CTX_new(TLS_server_method())) == NULL) { + mg_cry_ctx_internal(phys_ctx, + "SSL_CTX_new (server) error: %s", + ssl_error()); + return 0; + } +#else + if ((dom_ctx->ssl_ctx = SSL_CTX_new(SSLv23_server_method())) == NULL) { + mg_cry_ctx_internal(phys_ctx, + "SSL_CTX_new (server) error: %s", + ssl_error()); + return 0; + } +#endif /* OPENSSL_API_1_1 || OPENSSL_API_3_0 */ + +#if defined(SSL_OP_NO_TLSv1_3) + SSL_CTX_clear_options(dom_ctx->ssl_ctx, + SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 + | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2 + | SSL_OP_NO_TLSv1_3); +#else + SSL_CTX_clear_options(dom_ctx->ssl_ctx, + SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 + | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2); +#endif + + protocol_ver = atoi(dom_ctx->config[SSL_PROTOCOL_VERSION]); + SSL_CTX_set_options(dom_ctx->ssl_ctx, ssl_get_protocol(protocol_ver)); + SSL_CTX_set_options(dom_ctx->ssl_ctx, SSL_OP_SINGLE_DH_USE); + SSL_CTX_set_options(dom_ctx->ssl_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); + SSL_CTX_set_options(dom_ctx->ssl_ctx, + SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); + SSL_CTX_set_options(dom_ctx->ssl_ctx, SSL_OP_NO_COMPRESSION); + +#if defined(SSL_OP_NO_RENEGOTIATION) + SSL_CTX_set_options(dom_ctx->ssl_ctx, SSL_OP_NO_RENEGOTIATION); +#endif + +#if !defined(NO_SSL_DL) + SSL_CTX_set_ecdh_auto(dom_ctx->ssl_ctx, 1); +#endif /* NO_SSL_DL */ + + /* In SSL documentation examples callback defined without const + * specifier 'void (*)(SSL *, int, int)' See: + * https://www.openssl.org/docs/man1.0.2/ssl/ssl.html + * https://www.openssl.org/docs/man1.1.0/ssl/ssl.html + * But in the source code const SSL is used: + * 'void (*)(const SSL *, int, int)' See: + * https://github.com/openssl/openssl/blob/1d97c8435171a7af575f73c526d79e1ef0ee5960/ssl/ssl.h#L1173 + * Problem about wrong documentation described, but not resolved: + * https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/1147526 + * Wrong const cast ignored on C or can be suppressed by compiler flags. + * But when compiled with modern C++ compiler, correct const should be + * provided + */ + SSL_CTX_set_info_callback(dom_ctx->ssl_ctx, ssl_info_callback); + + SSL_CTX_set_tlsext_servername_callback(dom_ctx->ssl_ctx, + ssl_servername_callback); + + /* If a callback has been specified, call it. */ + callback_ret = (phys_ctx->callbacks.init_ssl == NULL) + ? 0 + : (phys_ctx->callbacks.init_ssl(dom_ctx->ssl_ctx, + phys_ctx->user_data)); + + /* If callback returns 0, civetweb sets up the SSL certificate. + * If it returns 1, civetweb assumes the callback already did this. + * If it returns -1, initializing ssl fails. */ + if (callback_ret < 0) { + mg_cry_ctx_internal(phys_ctx, + "SSL callback returned error: %i", + callback_ret); + return 0; + } + if (callback_ret > 0) { + /* Callback did everything. */ + return 1; + } + + /* If a domain callback has been specified, call it. */ + callback_ret = (phys_ctx->callbacks.init_ssl_domain == NULL) + ? 0 + : (phys_ctx->callbacks.init_ssl_domain( + dom_ctx->config[AUTHENTICATION_DOMAIN], + dom_ctx->ssl_ctx, + phys_ctx->user_data)); + + /* If domain callback returns 0, civetweb sets up the SSL certificate. + * If it returns 1, civetweb assumes the callback already did this. + * If it returns -1, initializing ssl fails. */ + if (callback_ret < 0) { + mg_cry_ctx_internal(phys_ctx, + "Domain SSL callback returned error: %i", + callback_ret); + return 0; + } + if (callback_ret > 0) { + /* Domain callback did everything. */ + return 1; + } + + /* Use some combination of start time, domain and port as a SSL + * context ID. This should be unique on the current machine. */ + md5_init(&md5state); + clock_gettime(CLOCK_MONOTONIC, &now_mt); + md5_append(&md5state, (const md5_byte_t *)&now_mt, sizeof(now_mt)); + md5_append(&md5state, + (const md5_byte_t *)phys_ctx->dd.config[LISTENING_PORTS], + strlen(phys_ctx->dd.config[LISTENING_PORTS])); + md5_append(&md5state, + (const md5_byte_t *)dom_ctx->config[AUTHENTICATION_DOMAIN], + strlen(dom_ctx->config[AUTHENTICATION_DOMAIN])); + md5_append(&md5state, (const md5_byte_t *)phys_ctx, sizeof(*phys_ctx)); + md5_append(&md5state, (const md5_byte_t *)dom_ctx, sizeof(*dom_ctx)); + md5_finish(&md5state, ssl_context_id); + + SSL_CTX_set_session_id_context(dom_ctx->ssl_ctx, + (unsigned char *)ssl_context_id, + sizeof(ssl_context_id)); + + if (pem != NULL) { + if (!ssl_use_pem_file(phys_ctx, dom_ctx, pem, chain)) { + return 0; + } + } + + /* Should we support client certificates? */ + /* Default is "no". */ + should_verify_peer = 0; + peer_certificate_optional = 0; + if (dom_ctx->config[SSL_DO_VERIFY_PEER] != NULL) { + if (mg_strcasecmp(dom_ctx->config[SSL_DO_VERIFY_PEER], "yes") == 0) { + /* Yes, they are mandatory */ + should_verify_peer = 1; + } else if (mg_strcasecmp(dom_ctx->config[SSL_DO_VERIFY_PEER], + "optional") + == 0) { + /* Yes, they are optional */ + should_verify_peer = 1; + peer_certificate_optional = 1; + } + } + + use_default_verify_paths = + (dom_ctx->config[SSL_DEFAULT_VERIFY_PATHS] != NULL) + && (mg_strcasecmp(dom_ctx->config[SSL_DEFAULT_VERIFY_PATHS], "yes") + == 0); + + if (should_verify_peer) { + ca_path = dom_ctx->config[SSL_CA_PATH]; + ca_file = dom_ctx->config[SSL_CA_FILE]; + if (SSL_CTX_load_verify_locations(dom_ctx->ssl_ctx, ca_file, ca_path) + != 1) { + mg_cry_ctx_internal(phys_ctx, + "SSL_CTX_load_verify_locations error: %s " + "ssl_verify_peer requires setting " + "either ssl_ca_path or ssl_ca_file. " + "Is any of them present in the " + ".conf file?", + ssl_error()); + return 0; + } + + if (peer_certificate_optional) { + SSL_CTX_set_verify(dom_ctx->ssl_ctx, SSL_VERIFY_PEER, NULL); + } else { + SSL_CTX_set_verify(dom_ctx->ssl_ctx, + SSL_VERIFY_PEER + | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, + NULL); + } + + if (use_default_verify_paths + && (SSL_CTX_set_default_verify_paths(dom_ctx->ssl_ctx) != 1)) { + mg_cry_ctx_internal(phys_ctx, + "SSL_CTX_set_default_verify_paths error: %s", + ssl_error()); + return 0; + } + + if (dom_ctx->config[SSL_VERIFY_DEPTH]) { + verify_depth = atoi(dom_ctx->config[SSL_VERIFY_DEPTH]); + SSL_CTX_set_verify_depth(dom_ctx->ssl_ctx, verify_depth); + } + } + + if (dom_ctx->config[SSL_CIPHER_LIST] != NULL) { + if (SSL_CTX_set_cipher_list(dom_ctx->ssl_ctx, + dom_ctx->config[SSL_CIPHER_LIST]) + != 1) { + mg_cry_ctx_internal(phys_ctx, + "SSL_CTX_set_cipher_list error: %s", + ssl_error()); + } + } + + /* SSL session caching */ + ssl_cache_timeout = ((dom_ctx->config[SSL_CACHE_TIMEOUT] != NULL) + ? atoi(dom_ctx->config[SSL_CACHE_TIMEOUT]) + : 0); + if (ssl_cache_timeout > 0) { + SSL_CTX_set_session_cache_mode(dom_ctx->ssl_ctx, SSL_SESS_CACHE_BOTH); + /* SSL_CTX_sess_set_cache_size(dom_ctx->ssl_ctx, 10000); ... use + * default */ + SSL_CTX_set_timeout(dom_ctx->ssl_ctx, (long)ssl_cache_timeout); + } + +#if defined(USE_ALPN) + /* Initialize ALPN only of TLS library (OpenSSL version) supports ALPN */ +#if !defined(NO_SSL_DL) + if (!tls_feature_missing[TLS_ALPN]) +#endif + { + init_alpn(phys_ctx, dom_ctx); + } +#endif + + return 1; +} + + +/* Check if SSL is required. + * If so, dynamically load SSL library + * and set up ctx->ssl_ctx pointer. */ +static int +init_ssl_ctx(struct mg_context *phys_ctx, struct mg_domain_context *dom_ctx) +{ + void *ssl_ctx = 0; + int callback_ret; + const char *pem; + const char *chain; + char ebuf[128]; + + if (!phys_ctx) { + return 0; + } + + if (!dom_ctx) { + dom_ctx = &(phys_ctx->dd); + } + + if (!is_ssl_port_used(dom_ctx->config[LISTENING_PORTS])) { + /* No SSL port is set. No need to setup SSL. */ + return 1; + } + + /* Check for external SSL_CTX */ + callback_ret = + (phys_ctx->callbacks.external_ssl_ctx == NULL) + ? 0 + : (phys_ctx->callbacks.external_ssl_ctx(&ssl_ctx, + phys_ctx->user_data)); + + if (callback_ret < 0) { + /* Callback exists and returns <0: Initializing failed. */ + mg_cry_ctx_internal(phys_ctx, + "external_ssl_ctx callback returned error: %i", + callback_ret); + return 0; + } else if (callback_ret > 0) { + /* Callback exists and returns >0: Initializing complete, + * civetweb should not modify the SSL context. */ + dom_ctx->ssl_ctx = (SSL_CTX *)ssl_ctx; + if (!initialize_openssl(ebuf, sizeof(ebuf))) { + mg_cry_ctx_internal(phys_ctx, "%s", ebuf); + return 0; + } + return 1; + } + /* If the callback does not exist or return 0, civetweb must initialize + * the SSL context. Handle "domain" callback next. */ + + /* Check for external domain SSL_CTX callback. */ + callback_ret = (phys_ctx->callbacks.external_ssl_ctx_domain == NULL) + ? 0 + : (phys_ctx->callbacks.external_ssl_ctx_domain( + dom_ctx->config[AUTHENTICATION_DOMAIN], + &ssl_ctx, + phys_ctx->user_data)); + + if (callback_ret < 0) { + /* Callback < 0: Error. Abort init. */ + mg_cry_ctx_internal( + phys_ctx, + "external_ssl_ctx_domain callback returned error: %i", + callback_ret); + return 0; + } else if (callback_ret > 0) { + /* Callback > 0: Consider init done. */ + dom_ctx->ssl_ctx = (SSL_CTX *)ssl_ctx; + if (!initialize_openssl(ebuf, sizeof(ebuf))) { + mg_cry_ctx_internal(phys_ctx, "%s", ebuf); + return 0; + } + return 1; + } + /* else: external_ssl_ctx/external_ssl_ctx_domain do not exist or return + * 0, CivetWeb should continue initializing SSL */ + + /* If PEM file is not specified and the init_ssl callbacks + * are not specified, setup will fail. */ + if (((pem = dom_ctx->config[SSL_CERTIFICATE]) == NULL) + && (phys_ctx->callbacks.init_ssl == NULL) + && (phys_ctx->callbacks.init_ssl_domain == NULL)) { + /* No certificate and no init_ssl callbacks: + * Essential data to set up TLS is missing. + */ + mg_cry_ctx_internal(phys_ctx, + "Initializing SSL failed: -%s is not set", + config_options[SSL_CERTIFICATE].name); + return 0; + } + + /* If a certificate chain is configured, use it. */ + chain = dom_ctx->config[SSL_CERTIFICATE_CHAIN]; + if (chain == NULL) { + /* Default: certificate chain in PEM file */ + chain = pem; + } + if ((chain != NULL) && (*chain == 0)) { + /* If the chain is an empty string, don't use it. */ + chain = NULL; + } + + if (!initialize_openssl(ebuf, sizeof(ebuf))) { + mg_cry_ctx_internal(phys_ctx, "%s", ebuf); + return 0; + } + + return init_ssl_ctx_impl(phys_ctx, dom_ctx, pem, chain); +} + + +static void +uninitialize_openssl(void) +{ +#if defined(OPENSSL_API_1_1) || defined(OPENSSL_API_3_0) + + if (mg_atomic_dec(&cryptolib_users) == 0) { + + /* Shutdown according to + * https://wiki.openssl.org/index.php/Library_Initialization#Cleanup + * http://stackoverflow.com/questions/29845527/how-to-properly-uninitialize-openssl + */ + CONF_modules_unload(1); +#else + int i; + + if (mg_atomic_dec(&cryptolib_users) == 0) { + + /* Shutdown according to + * https://wiki.openssl.org/index.php/Library_Initialization#Cleanup + * http://stackoverflow.com/questions/29845527/how-to-properly-uninitialize-openssl + */ + CRYPTO_set_locking_callback(NULL); + CRYPTO_set_id_callback(NULL); + ENGINE_cleanup(); + CONF_modules_unload(1); + ERR_free_strings(); + EVP_cleanup(); + CRYPTO_cleanup_all_ex_data(); + OPENSSL_REMOVE_THREAD_STATE(); + + for (i = 0; i < CRYPTO_num_locks(); i++) { + pthread_mutex_destroy(&ssl_mutexes[i]); + } + mg_free(ssl_mutexes); + ssl_mutexes = NULL; +#endif /* OPENSSL_API_1_1 || OPENSSL_API_3_0 */ + } +} +#endif /* !defined(NO_SSL) && !defined(USE_MBEDTLS) && !defined(USE_GNUTLS) */ + + +#if !defined(NO_FILESYSTEMS) +static int +set_gpass_option(struct mg_context *phys_ctx, struct mg_domain_context *dom_ctx) +{ + if (phys_ctx) { + struct mg_file file = STRUCT_FILE_INITIALIZER; + const char *path; + struct mg_connection fc; + if (!dom_ctx) { + dom_ctx = &(phys_ctx->dd); + } + path = dom_ctx->config[GLOBAL_PASSWORDS_FILE]; + if ((path != NULL) + && !mg_stat(fake_connection(&fc, phys_ctx), path, &file.stat)) { + mg_cry_ctx_internal(phys_ctx, + "Cannot open %s: %s", + path, + strerror(ERRNO)); + return 0; + } + return 1; + } + return 0; +} +#endif /* NO_FILESYSTEMS */ + + +static int +set_acl_option(struct mg_context *phys_ctx) +{ + union usa sa; + memset(&sa, 0, sizeof(sa)); +#if defined(USE_IPV6) + sa.sin6.sin6_family = AF_INET6; +#else + sa.sin.sin_family = AF_INET; +#endif + return check_acl(phys_ctx, &sa) != -1; +} + + +static void +reset_per_request_attributes(struct mg_connection *conn) +{ + if (!conn) { + return; + } + + conn->num_bytes_sent = conn->consumed_content = 0; + + conn->path_info = NULL; + conn->status_code = -1; + conn->content_len = -1; + conn->is_chunked = 0; + conn->must_close = 0; + conn->request_len = 0; + conn->request_state = 0; + conn->throttle = 0; + conn->accept_gzip = 0; + + conn->response_info.content_length = conn->request_info.content_length = -1; + conn->response_info.http_version = conn->request_info.http_version = NULL; + conn->response_info.num_headers = conn->request_info.num_headers = 0; + conn->response_info.status_text = NULL; + conn->response_info.status_code = 0; + + conn->request_info.remote_user = NULL; + conn->request_info.request_method = NULL; + conn->request_info.request_uri = NULL; + + /* Free cleaned local URI (if any) */ + if (conn->request_info.local_uri != conn->request_info.local_uri_raw) { + mg_free((void *)conn->request_info.local_uri); + conn->request_info.local_uri = NULL; + } + conn->request_info.local_uri = NULL; + +#if defined(USE_SERVER_STATS) + conn->processing_time = 0; +#endif +} + + +static int +set_tcp_nodelay(const struct socket *so, int nodelay_on) +{ + if ((so->lsa.sa.sa_family == AF_INET) + || (so->lsa.sa.sa_family == AF_INET6)) { + /* Only for TCP sockets */ + if (setsockopt(so->sock, + IPPROTO_TCP, + TCP_NODELAY, + (SOCK_OPT_TYPE)&nodelay_on, + sizeof(nodelay_on)) + != 0) { + /* Error */ + return 1; + } + } + /* OK */ + return 0; +} + + +#if !defined(__ZEPHYR__) +static void +close_socket_gracefully(struct mg_connection *conn) +{ +#if defined(_WIN32) + char buf[MG_BUF_LEN]; + int n; +#endif + struct linger linger; + int error_code = 0; + int linger_timeout = -2; + socklen_t opt_len = sizeof(error_code); + + if (!conn) { + return; + } + + /* http://msdn.microsoft.com/en-us/library/ms739165(v=vs.85).aspx: + * "Note that enabling a nonzero timeout on a nonblocking socket + * is not recommended.", so set it to blocking now */ + set_blocking_mode(conn->client.sock); + + /* Send FIN to the client */ + shutdown(conn->client.sock, SHUTDOWN_WR); + +#if defined(_WIN32) + /* Read and discard pending incoming data. If we do not do that and + * close + * the socket, the data in the send buffer may be discarded. This + * behaviour is seen on Windows, when client keeps sending data + * when server decides to close the connection; then when client + * does recv() it gets no data back. */ + do { + n = pull_inner(NULL, conn, buf, sizeof(buf), /* Timeout in s: */ 1.0); + } while (n > 0); +#endif + + if (conn->dom_ctx->config[LINGER_TIMEOUT]) { + linger_timeout = atoi(conn->dom_ctx->config[LINGER_TIMEOUT]); + } + + /* Set linger option according to configuration */ + if (linger_timeout >= 0) { + /* Set linger option to avoid socket hanging out after close. This + * prevent ephemeral port exhaust problem under high QPS. */ + linger.l_onoff = 1; + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4244) +#endif +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + /* Data type of linger structure elements may differ, + * so we don't know what cast we need here. + * Disable type conversion warnings. */ + + linger.l_linger = (linger_timeout + 999) / 1000; + +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic pop +#endif +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + + } else { + linger.l_onoff = 0; + linger.l_linger = 0; + } + + if (linger_timeout < -1) { + /* Default: don't configure any linger */ + } else if (getsockopt(conn->client.sock, + SOL_SOCKET, + SO_ERROR, +#if defined(_WIN32) /* WinSock uses different data type here */ + (char *)&error_code, +#else + &error_code, +#endif + &opt_len) + != 0) { + /* Cannot determine if socket is already closed. This should + * not occur and never did in a test. Log an error message + * and continue. */ + mg_cry_internal(conn, + "%s: getsockopt(SOL_SOCKET SO_ERROR) failed: %s", + __func__, + strerror(ERRNO)); +#if defined(_WIN32) + } else if (error_code == WSAECONNRESET) { +#else + } else if (error_code == ECONNRESET) { +#endif + /* Socket already closed by client/peer, close socket without linger + */ + } else { + + /* Set linger timeout */ + if (setsockopt(conn->client.sock, + SOL_SOCKET, + SO_LINGER, + (char *)&linger, + sizeof(linger)) + != 0) { + mg_cry_internal( + conn, + "%s: setsockopt(SOL_SOCKET SO_LINGER(%i,%i)) failed: %s", + __func__, + linger.l_onoff, + linger.l_linger, + strerror(ERRNO)); + } + } + + /* Now we know that our FIN is ACK-ed, safe to close */ + closesocket(conn->client.sock); + conn->client.sock = INVALID_SOCKET; +} +#endif + + +static void +close_connection(struct mg_connection *conn) +{ +#if defined(USE_SERVER_STATS) + conn->conn_state = 6; /* to close */ +#endif + +#if defined(USE_LUA) && defined(USE_WEBSOCKET) + if (conn->lua_websocket_state) { + lua_websocket_close(conn, conn->lua_websocket_state); + conn->lua_websocket_state = NULL; + } +#endif + + mg_lock_connection(conn); + + /* Set close flag, so keep-alive loops will stop */ + conn->must_close = 1; + + /* call the connection_close callback if assigned */ + if (conn->phys_ctx->callbacks.connection_close != NULL) { + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + conn->phys_ctx->callbacks.connection_close(conn); + } + } + + /* Reset user data, after close callback is called. + * Do not reuse it. If the user needs a destructor, + * it must be done in the connection_close callback. */ + mg_set_user_connection_data(conn, NULL); + +#if defined(USE_SERVER_STATS) + conn->conn_state = 7; /* closing */ +#endif + +#if defined(USE_MBEDTLS) + if (conn->ssl != NULL) { + mbed_ssl_close(conn->ssl); + conn->ssl = NULL; + } +#elif defined(USE_GNUTLS) + if (conn->ssl != NULL) { + gtls_ssl_close(conn->ssl); + conn->ssl = NULL; + } +#elif !defined(NO_SSL) + if (conn->ssl != NULL) { + /* Run SSL_shutdown twice to ensure completely close SSL connection + */ + SSL_shutdown(conn->ssl); + SSL_free(conn->ssl); + OPENSSL_REMOVE_THREAD_STATE(); + conn->ssl = NULL; + } +#endif + if (conn->client.sock != INVALID_SOCKET) { +#if defined(__ZEPHYR__) + closesocket(conn->client.sock); +#else + close_socket_gracefully(conn); +#endif + conn->client.sock = INVALID_SOCKET; + } + + /* call the connection_closed callback if assigned */ + if (conn->phys_ctx->callbacks.connection_closed != NULL) { + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + conn->phys_ctx->callbacks.connection_closed(conn); + } + } + + mg_unlock_connection(conn); + +#if defined(USE_SERVER_STATS) + conn->conn_state = 8; /* closed */ +#endif +} + + +CIVETWEB_API void +mg_close_connection(struct mg_connection *conn) +{ + if ((conn == NULL) || (conn->phys_ctx == NULL)) { + return; + } + +#if defined(USE_WEBSOCKET) + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + if (conn->in_websocket_handling) { + /* Set close flag, so the server thread can exit. */ + conn->must_close = 1; + return; + } + } + if (conn->phys_ctx->context_type == CONTEXT_WS_CLIENT) { + + unsigned int i; + + /* client context: loops must end */ + STOP_FLAG_ASSIGN(&conn->phys_ctx->stop_flag, 1); + conn->must_close = 1; + + /* We need to get the client thread out of the select/recv call + * here. */ + /* Since we use a sleep quantum of some seconds to check for recv + * timeouts, we will just wait a few seconds in mg_join_thread. */ + + /* join worker thread */ + for (i = 0; i < conn->phys_ctx->spawned_worker_threads; i++) { + mg_join_thread(conn->phys_ctx->worker_threadids[i]); + } + } +#endif /* defined(USE_WEBSOCKET) */ + + close_connection(conn); + +#if !defined(NO_SSL) && !defined(USE_MBEDTLS) \ + && !defined(USE_GNUTLS) // TODO: mbedTLS client + if (((conn->phys_ctx->context_type == CONTEXT_HTTP_CLIENT) + || (conn->phys_ctx->context_type == CONTEXT_WS_CLIENT)) + && (conn->phys_ctx->dd.ssl_ctx != NULL)) { + SSL_CTX_free(conn->phys_ctx->dd.ssl_ctx); + } +#endif + +#if defined(USE_WEBSOCKET) + if (conn->phys_ctx->context_type == CONTEXT_WS_CLIENT) { + mg_free(conn->phys_ctx->worker_threadids); + (void)pthread_mutex_destroy(&conn->mutex); + mg_free(conn); + } else if (conn->phys_ctx->context_type == CONTEXT_HTTP_CLIENT) { + (void)pthread_mutex_destroy(&conn->mutex); + mg_free(conn); + } +#else + if (conn->phys_ctx->context_type == CONTEXT_HTTP_CLIENT) { /* Client */ + (void)pthread_mutex_destroy(&conn->mutex); + mg_free(conn); + } +#endif /* defined(USE_WEBSOCKET) */ +} + + +static struct mg_connection * +mg_connect_client_impl(const struct mg_client_options *client_options, + int use_ssl, + struct mg_init_data *init, + struct mg_error_data *error) +{ + struct mg_connection *conn = NULL; + SOCKET sock; + union usa sa; + struct sockaddr *psa; + socklen_t len; + + unsigned max_req_size = + (unsigned)atoi(config_options[MAX_REQUEST_SIZE].default_value); + + /* Size of structures, aligned to 8 bytes */ + size_t conn_size = ((sizeof(struct mg_connection) + 7) >> 3) << 3; + size_t ctx_size = ((sizeof(struct mg_context) + 7) >> 3) << 3; + size_t alloc_size = conn_size + ctx_size + max_req_size; + + (void)init; /* TODO: Implement required options */ + + conn = (struct mg_connection *)mg_calloc(1, alloc_size); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OK; + error->code_sub = 0; + if (error->text_buffer_size > 0) { + error->text[0] = 0; + } + } + + if (conn == NULL) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)alloc_size; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "calloc(): %s", + strerror(ERRNO)); + } + return NULL; + } + +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" +#endif /* defined(GCC_DIAGNOSTIC) */ + /* conn_size is aligned to 8 bytes */ + + conn->phys_ctx = (struct mg_context *)(((char *)conn) + conn_size); + +#if defined(GCC_DIAGNOSTIC) +#pragma GCC diagnostic pop +#endif /* defined(GCC_DIAGNOSTIC) */ + + conn->buf = (((char *)conn) + conn_size + ctx_size); + conn->buf_size = (int)max_req_size; + conn->phys_ctx->context_type = CONTEXT_HTTP_CLIENT; + conn->dom_ctx = &(conn->phys_ctx->dd); + + if (!connect_socket(conn->phys_ctx, + client_options->host, + client_options->port, + use_ssl, + error, + &sock, + &sa)) { + /* "error" will be set by connect_socket. */ + /* free all memory and return NULL; */ + mg_free(conn); + return NULL; + } + +#if !defined(NO_SSL) && !defined(USE_MBEDTLS) \ + && !defined(USE_GNUTLS) // TODO: mbedTLS client +#if (defined(OPENSSL_API_1_1) || defined(OPENSSL_API_3_0)) \ + && !defined(NO_SSL_DL) + + if (use_ssl + && (conn->dom_ctx->ssl_ctx = SSL_CTX_new(TLS_client_method())) + == NULL) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_TLS_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "SSL_CTX_new error: %s", + ssl_error()); + } + + closesocket(sock); + mg_free(conn); + return NULL; + } + +#else + + if (use_ssl + && (conn->dom_ctx->ssl_ctx = SSL_CTX_new(SSLv23_client_method())) + == NULL) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_TLS_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "SSL_CTX_new error: %s", + ssl_error()); + } + + closesocket(sock); + mg_free(conn); + return NULL; + } + +#endif /* OPENSSL_API_1_1 || OPENSSL_API_3_0 */ +#endif /* NO_SSL */ + +#if defined(USE_IPV6) + len = (sa.sa.sa_family == AF_INET) ? sizeof(conn->client.rsa.sin) + : sizeof(conn->client.rsa.sin6); + psa = (sa.sa.sa_family == AF_INET) + ? (struct sockaddr *)&(conn->client.rsa.sin) + : (struct sockaddr *)&(conn->client.rsa.sin6); +#else + len = sizeof(conn->client.rsa.sin); + psa = (struct sockaddr *)&(conn->client.rsa.sin); +#endif + + conn->client.sock = sock; + conn->client.lsa = sa; + + if (getsockname(sock, psa, &len) != 0) { + mg_cry_internal(conn, + "%s: getsockname() failed: %s", + __func__, + strerror(ERRNO)); + } + + conn->client.is_ssl = use_ssl ? 1 : 0; + if (0 != pthread_mutex_init(&conn->mutex, &pthread_mutex_attr)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OS_ERROR; + error->code_sub = (unsigned)ERRNO; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "Can not create mutex"); + } +#if !defined(NO_SSL) && !defined(USE_MBEDTLS) \ + && !defined(USE_GNUTLS) // TODO: mbedTLS client + SSL_CTX_free(conn->dom_ctx->ssl_ctx); +#endif + closesocket(sock); + mg_free(conn); + return NULL; + } + +#if !defined(NO_SSL) && !defined(USE_MBEDTLS) \ + && !defined(USE_GNUTLS) // TODO: mbedTLS client + if (use_ssl) { + /* TODO: Check ssl_verify_peer and ssl_ca_path here. + * SSL_CTX_set_verify call is needed to switch off server + * certificate checking, which is off by default in OpenSSL and + * on in yaSSL. */ + /* TODO: SSL_CTX_set_verify(conn->dom_ctx, + * SSL_VERIFY_PEER, verify_ssl_server); */ + + if (client_options->client_cert) { + if (!ssl_use_pem_file(conn->phys_ctx, + conn->dom_ctx, + client_options->client_cert, + NULL)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_TLS_CLIENT_CERT_ERROR; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "Can not use SSL client certificate"); + } + + SSL_CTX_free(conn->dom_ctx->ssl_ctx); + closesocket(sock); + mg_free(conn); + return NULL; + } + } + + if (client_options->server_cert) { + if (SSL_CTX_load_verify_locations(conn->dom_ctx->ssl_ctx, + client_options->server_cert, + NULL) + != 1) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_TLS_SERVER_CERT_ERROR; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "SSL_CTX_load_verify_locations error: %s", + ssl_error()); + } + SSL_CTX_free(conn->dom_ctx->ssl_ctx); + closesocket(sock); + mg_free(conn); + return NULL; + } + SSL_CTX_set_verify(conn->dom_ctx->ssl_ctx, SSL_VERIFY_PEER, NULL); + } else { + SSL_CTX_set_verify(conn->dom_ctx->ssl_ctx, SSL_VERIFY_NONE, NULL); + } + + if (!sslize(conn, SSL_connect, client_options)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_TLS_CONNECT_ERROR; + mg_snprintf(NULL, + NULL, /* No truncation check for ebuf */ + error->text, + error->text_buffer_size, + "SSL connection error"); + } + SSL_CTX_free(conn->dom_ctx->ssl_ctx); + closesocket(sock); + mg_free(conn); + return NULL; + } + } +#endif + + return conn; +} + + +CIVETWEB_API struct mg_connection * +mg_connect_client_secure(const struct mg_client_options *client_options, + char *error_buffer, + size_t error_buffer_size) +{ + struct mg_init_data init; + struct mg_error_data error; + + memset(&init, 0, sizeof(init)); + memset(&error, 0, sizeof(error)); + error.text_buffer_size = error_buffer_size; + error.text = error_buffer; + return mg_connect_client_impl(client_options, 1, &init, &error); +} + + +CIVETWEB_API struct mg_connection * +mg_connect_client(const char *host, + int port, + int use_ssl, + char *error_buffer, + size_t error_buffer_size) +{ + struct mg_client_options opts; + struct mg_init_data init; + struct mg_error_data error; + + memset(&init, 0, sizeof(init)); + + memset(&error, 0, sizeof(error)); + error.text_buffer_size = error_buffer_size; + error.text = error_buffer; + + memset(&opts, 0, sizeof(opts)); + opts.host = host; + opts.port = port; + if (use_ssl) { + opts.host_name = host; + } + + return mg_connect_client_impl(&opts, use_ssl, &init, &error); +} + + +#if defined(MG_EXPERIMENTAL_INTERFACES) +CIVETWEB_API struct mg_connection * +mg_connect_client2(const char *host, + const char *protocol, + int port, + const char *path, + struct mg_init_data *init, + struct mg_error_data *error) +{ + (void)path; + + int is_ssl, is_ws; + /* void *user_data = (init != NULL) ? init->user_data : NULL; -- TODO */ + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OK; + error->code_sub = 0; + if (error->text_buffer_size > 0) { + *error->text = 0; + } + } + + if ((host == NULL) || (protocol == NULL)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_PARAM; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + "Invalid parameters"); + } + return NULL; + } + + /* check all known protocols */ + if (!mg_strcasecmp(protocol, "http")) { + is_ssl = 0; + is_ws = 0; + } else if (!mg_strcasecmp(protocol, "https")) { + is_ssl = 1; + is_ws = 0; +#if defined(USE_WEBSOCKET) + } else if (!mg_strcasecmp(protocol, "ws")) { + is_ssl = 0; + is_ws = 1; + } else if (!mg_strcasecmp(protocol, "wss")) { + is_ssl = 1; + is_ws = 1; +#endif + } else { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_PARAM; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Protocol %s not supported", + protocol); + } + return NULL; + } + + /* TODO: The current implementation here just calls the old + * implementations, without using any new options. This is just a first + * step to test the new interfaces. */ +#if defined(USE_WEBSOCKET) + if (is_ws) { + /* TODO: implement all options */ + return mg_connect_websocket_client( + host, + port, + is_ssl, + ((error != NULL) ? error->text : NULL), + ((error != NULL) ? error->text_buffer_size : 0), + (path ? path : ""), + NULL /* TODO: origin */, + experimental_websocket_client_data_wrapper, + experimental_websocket_client_close_wrapper, + (void *)init->callbacks); + } +#else + (void)is_ws; +#endif + + /* TODO: all additional options */ + struct mg_client_options opts; + + memset(&opts, 0, sizeof(opts)); + opts.host = host; + opts.port = port; + + return mg_connect_client_impl(&opts, is_ssl, init, error); +} +#endif + + +static const struct { + const char *proto; + size_t proto_len; + unsigned default_port; +} abs_uri_protocols[] = {{"http://", 7, 80}, + {"https://", 8, 443}, + {"ws://", 5, 80}, + {"wss://", 6, 443}, + {NULL, 0, 0}}; + + +/* Check if the uri is valid. + * return 0 for invalid uri, + * return 1 for *, + * return 2 for relative uri, + * return 3 for absolute uri without port, + * return 4 for absolute uri with port */ +static int +get_uri_type(const char *uri) +{ + int i; + const char *hostend, *portbegin; + char *portend; + unsigned long port; + + /* According to the HTTP standard + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2 + * URI can be an asterisk (*) or should start with slash (relative uri), + * or it should start with the protocol (absolute uri). */ + if ((uri[0] == '*') && (uri[1] == '\0')) { + /* asterisk */ + return 1; + } + + /* Valid URIs according to RFC 3986 + * (https://www.ietf.org/rfc/rfc3986.txt) + * must only contain reserved characters :/?#[]@!$&'()*+,;= + * and unreserved characters A-Z a-z 0-9 and -._~ + * and % encoded symbols. + */ + for (i = 0; uri[i] != 0; i++) { + /* Check for CRLF injection attempts */ + if (uri[i] == '%') { + if (uri[i + 1] == '0' && (uri[i + 2] == 'd' || uri[i + 2] == 'D')) { + /* Found %0d (CR) */ + DEBUG_TRACE("CRLF injection attempt detected: %s\r\n", uri); + return 0; + } + if (uri[i + 1] == '0' && (uri[i + 2] == 'a' || uri[i + 2] == 'A')) { + /* Found %0a (LF) */ + DEBUG_TRACE("CRLF injection attempt detected: %s\r\n", uri); + return 0; + } + } + if ((unsigned char)uri[i] < 33) { + /* control characters and spaces are invalid */ + return 0; + } + /* Allow everything else here (See #894) */ + } + + /* A relative uri starts with a / character */ + if (uri[0] == '/') { + /* relative uri */ + return 2; + } + + /* It could be an absolute uri: */ + /* This function only checks if the uri is valid, not if it is + * addressing the current server. So civetweb can also be used + * as a proxy server. */ + for (i = 0; abs_uri_protocols[i].proto != NULL; i++) { + if (mg_strncasecmp(uri, + abs_uri_protocols[i].proto, + abs_uri_protocols[i].proto_len) + == 0) { + + hostend = strchr(uri + abs_uri_protocols[i].proto_len, '/'); + if (!hostend) { + return 0; + } + portbegin = strchr(uri + abs_uri_protocols[i].proto_len, ':'); + if (!portbegin) { + return 3; + } + + port = strtoul(portbegin + 1, &portend, 10); + if ((portend != hostend) || (port <= 0) || !is_valid_port(port)) { + return 0; + } + + return 4; + } + } + + return 0; +} + + +/* Return NULL or the relative uri at the current server */ +static const char * +get_rel_url_at_current_server(const char *uri, const struct mg_connection *conn) +{ + const char *server_domain; + size_t server_domain_len; + size_t request_domain_len = 0; + unsigned long port = 0; + int i, auth_domain_check_enabled; + const char *hostbegin = NULL; + const char *hostend = NULL; + const char *portbegin; + char *portend; + + auth_domain_check_enabled = + !mg_strcasecmp(conn->dom_ctx->config[ENABLE_AUTH_DOMAIN_CHECK], "yes"); + + /* DNS is case insensitive, so use case insensitive string compare here + */ + for (i = 0; abs_uri_protocols[i].proto != NULL; i++) { + if (mg_strncasecmp(uri, + abs_uri_protocols[i].proto, + abs_uri_protocols[i].proto_len) + == 0) { + + hostbegin = uri + abs_uri_protocols[i].proto_len; + hostend = strchr(hostbegin, '/'); + if (!hostend) { + return 0; + } + portbegin = strchr(hostbegin, ':'); + if ((!portbegin) || (portbegin > hostend)) { + port = abs_uri_protocols[i].default_port; + request_domain_len = (size_t)(hostend - hostbegin); + } else { + port = strtoul(portbegin + 1, &portend, 10); + if ((portend != hostend) || (port <= 0) + || !is_valid_port(port)) { + return 0; + } + request_domain_len = (size_t)(portbegin - hostbegin); + } + /* protocol found, port set */ + break; + } + } + + if (!port) { + /* port remains 0 if the protocol is not found */ + return 0; + } + + /* Check if the request is directed to a different server. */ + /* First check if the port is the same. */ + if (ntohs(USA_IN_PORT_UNSAFE(&conn->client.lsa)) != port) { + /* Request is directed to a different port */ + return 0; + } + + /* Finally check if the server corresponds to the authentication + * domain of the server (the server domain). + * Allow full matches (like http://mydomain.com/path/file.ext), and + * allow subdomain matches (like http://www.mydomain.com/path/file.ext), + * but do not allow substrings (like + * http://notmydomain.com/path/file.ext + * or http://mydomain.com.fake/path/file.ext). + */ + if (auth_domain_check_enabled) { + server_domain = conn->dom_ctx->config[AUTHENTICATION_DOMAIN]; + server_domain_len = strlen(server_domain); + if ((server_domain_len == 0) || (hostbegin == NULL)) { + return 0; + } + if ((request_domain_len == server_domain_len) + && (!memcmp(server_domain, hostbegin, server_domain_len))) { + /* Request is directed to this server - full name match. */ + } else { + if (request_domain_len < (server_domain_len + 2)) { + /* Request is directed to another server: The server name + * is longer than the request name. + * Drop this case here to avoid overflows in the + * following checks. */ + return 0; + } + if (hostbegin[request_domain_len - server_domain_len - 1] != '.') { + /* Request is directed to another server: It could be a + * substring + * like notmyserver.com */ + return 0; + } + if (0 + != memcmp(server_domain, + hostbegin + request_domain_len - server_domain_len, + server_domain_len)) { + /* Request is directed to another server: + * The server name is different. */ + return 0; + } + } + } + + return hostend; +} + + +static int +get_message(struct mg_connection *conn, char *ebuf, size_t ebuf_len, int *err) +{ + if (ebuf_len > 0) { + ebuf[0] = '\0'; + } + *err = 0; + + reset_per_request_attributes(conn); + + if (!conn) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Internal error"); + *err = 500; + return 0; + } + + /* Set the time the request was received. This value should be used for + * timeouts. */ + clock_gettime(CLOCK_MONOTONIC, &(conn->req_time)); + + conn->request_len = + read_message(NULL, conn, conn->buf, conn->buf_size, &conn->data_len); + DEBUG_ASSERT(conn->request_len < 0 || conn->data_len >= conn->request_len); + if ((conn->request_len >= 0) && (conn->data_len < conn->request_len)) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Invalid message size"); + *err = 500; + return 0; + } + + if ((conn->request_len == 0) && (conn->data_len == conn->buf_size)) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Message too large"); + *err = 413; + return 0; + } + + if (conn->request_len <= 0) { + if (conn->data_len > 0) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + conn->request_len == -3 ? "Request timeout" + : "Malformed message"); + *err = 400; + } else { + /* Server did not recv anything -> just close the connection */ + conn->must_close = 1; + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "No data received"); + *err = 0; + } + return 0; + } + return 1; +} + + +static int +get_request(struct mg_connection *conn, char *ebuf, size_t ebuf_len, int *err) +{ + const char *cl; + + conn->connection_type = + CONNECTION_TYPE_REQUEST; /* request (valid of not) */ + + if (!get_message(conn, ebuf, ebuf_len, err)) { + return 0; + } + + if (parse_http_request(conn->buf, conn->buf_size, &conn->request_info) + <= 0) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Bad request"); + *err = 400; + return 0; + } + + /* Message is a valid request */ + + if (!switch_domain_context(conn)) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Bad request: Host mismatch"); + *err = 400; + return 0; + } + +#if USE_ZLIB + if (((cl = get_header(conn->request_info.http_headers, + conn->request_info.num_headers, + "Accept-Encoding")) + != NULL) + && strstr(cl, "gzip")) { + conn->accept_gzip = 1; + } +#endif + if (((cl = get_header(conn->request_info.http_headers, + conn->request_info.num_headers, + "Transfer-Encoding")) + != NULL) + && mg_strcasecmp(cl, "identity")) { + if (mg_strcasecmp(cl, "chunked")) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Bad request"); + *err = 400; + return 0; + } + conn->is_chunked = 1; + conn->content_len = 0; /* not yet read */ + } else if ((cl = get_header(conn->request_info.http_headers, + conn->request_info.num_headers, + "Content-Length")) + != NULL) { + /* Request has content length set */ + char *endptr = NULL; + conn->content_len = strtoll(cl, &endptr, 10); + if ((endptr == cl) || (conn->content_len < 0)) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Bad request"); + *err = 411; + return 0; + } + /* Publish the content length back to the request info. */ + conn->request_info.content_length = conn->content_len; + } else { + /* There is no exception, see RFC7230. */ + conn->content_len = 0; + } + + return 1; +} + + +/* conn is assumed to be valid in this internal function */ +static int +get_response(struct mg_connection *conn, char *ebuf, size_t ebuf_len, int *err) +{ + const char *cl; + + conn->connection_type = + CONNECTION_TYPE_RESPONSE; /* response (valid or not) */ + + if (!get_message(conn, ebuf, ebuf_len, err)) { + return 0; + } + + if (parse_http_response(conn->buf, conn->buf_size, &conn->response_info) + <= 0) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Bad response"); + *err = 400; + return 0; + } + + /* Message is a valid response */ + + if (((cl = get_header(conn->response_info.http_headers, + conn->response_info.num_headers, + "Transfer-Encoding")) + != NULL) + && mg_strcasecmp(cl, "identity")) { + if (mg_strcasecmp(cl, "chunked")) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Bad request"); + *err = 400; + return 0; + } + conn->is_chunked = 1; + conn->content_len = 0; /* not yet read */ + } else if ((cl = get_header(conn->response_info.http_headers, + conn->response_info.num_headers, + "Content-Length")) + != NULL) { + char *endptr = NULL; + conn->content_len = strtoll(cl, &endptr, 10); + if ((endptr == cl) || (conn->content_len < 0)) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Bad request"); + *err = 411; + return 0; + } + /* Publish the content length back to the response info. */ + conn->response_info.content_length = conn->content_len; + + /* TODO: check if it is still used in response_info */ + conn->request_info.content_length = conn->content_len; + + /* TODO: we should also consider HEAD method */ + if (conn->response_info.status_code == 304) { + conn->content_len = 0; + } + } else { + /* TODO: we should also consider HEAD method */ + if (((conn->response_info.status_code >= 100) + && (conn->response_info.status_code <= 199)) + || (conn->response_info.status_code == 204) + || (conn->response_info.status_code == 304)) { + conn->content_len = 0; + } else { + conn->content_len = -1; /* unknown content length */ + } + } + + return 1; +} + + +CIVETWEB_API int +mg_get_response(struct mg_connection *conn, + char *ebuf, + size_t ebuf_len, + int timeout) +{ + int err, ret; + char txt[32]; /* will not overflow */ + char *save_timeout; + char *new_timeout; + + if (ebuf_len > 0) { + ebuf[0] = '\0'; + } + + if (!conn) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Parameter error"); + return -1; + } + + /* Reset the previous responses */ + conn->data_len = 0; + + /* Implementation of API function for HTTP clients */ + save_timeout = conn->dom_ctx->config[REQUEST_TIMEOUT]; + + if (timeout >= 0) { + mg_snprintf(conn, NULL, txt, sizeof(txt), "%i", timeout); + new_timeout = txt; + } else { + new_timeout = NULL; + } + + conn->dom_ctx->config[REQUEST_TIMEOUT] = new_timeout; + ret = get_response(conn, ebuf, ebuf_len, &err); + conn->dom_ctx->config[REQUEST_TIMEOUT] = save_timeout; + + /* TODO: here, the URI is the http response code */ + conn->request_info.local_uri_raw = conn->request_info.request_uri; + conn->request_info.local_uri = conn->request_info.local_uri_raw; + + /* TODO (mid): Define proper return values - maybe return length? + * For the first test use <0 for error and >0 for OK */ + return (ret == 0) ? -1 : +1; +} + + +CIVETWEB_API struct mg_connection * +mg_download(const char *host, + int port, + int use_ssl, + char *ebuf, + size_t ebuf_len, + const char *fmt, + ...) +{ + struct mg_connection *conn; + va_list ap; + int i; + int reqerr; + + if (ebuf_len > 0) { + ebuf[0] = '\0'; + } + + va_start(ap, fmt); + + /* open a connection */ + conn = mg_connect_client(host, port, use_ssl, ebuf, ebuf_len); + + if (conn != NULL) { + i = mg_vprintf(conn, fmt, ap); + if (i <= 0) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + ebuf_len, + "%s", + "Error sending request"); + } else { + /* make sure the buffer is clear */ + conn->data_len = 0; + get_response(conn, ebuf, ebuf_len, &reqerr); + + /* TODO: here, the URI is the http response code */ + conn->request_info.local_uri = conn->request_info.request_uri; + } + } + + /* if an error occurred, close the connection */ + if ((ebuf[0] != '\0') && (conn != NULL)) { + mg_close_connection(conn); + conn = NULL; + } + + va_end(ap); + return conn; +} + + +struct websocket_client_thread_data { + struct mg_connection *conn; + mg_websocket_data_handler data_handler; + mg_websocket_close_handler close_handler; + void *callback_data; +}; + + +#if defined(USE_WEBSOCKET) +#if defined(_WIN32) +static unsigned __stdcall websocket_client_thread(void *data) +#else +static void * +websocket_client_thread(void *data) +#endif +{ + struct websocket_client_thread_data *cdata = + (struct websocket_client_thread_data *)data; + + void *user_thread_ptr = NULL; + +#if !defined(_WIN32) && !defined(__ZEPHYR__) + struct sigaction sa; + + /* Ignore SIGPIPE */ + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = SIG_IGN; + sigaction(SIGPIPE, &sa, NULL); +#endif + + mg_set_thread_name("ws-clnt"); + + if (cdata->conn->phys_ctx) { + if (cdata->conn->phys_ctx->callbacks.init_thread) { + /* 3 indicates a websocket client thread */ + /* TODO: check if conn->phys_ctx can be set */ + user_thread_ptr = cdata->conn->phys_ctx->callbacks.init_thread( + cdata->conn->phys_ctx, 3); + } + } + + read_websocket(cdata->conn, cdata->data_handler, cdata->callback_data); + + DEBUG_TRACE("%s", "Websocket client thread exited\n"); + + if (cdata->close_handler != NULL) { + cdata->close_handler(cdata->conn, cdata->callback_data); + } + + /* The websocket_client context has only this thread. If it runs out, + set the stop_flag to 2 (= "stopped"). */ + STOP_FLAG_ASSIGN(&cdata->conn->phys_ctx->stop_flag, 2); + + if (cdata->conn->phys_ctx->callbacks.exit_thread) { + cdata->conn->phys_ctx->callbacks.exit_thread(cdata->conn->phys_ctx, + 3, + user_thread_ptr); + } + + mg_free((void *)cdata); + +#if defined(_WIN32) + return 0; +#else + return NULL; +#endif +} +#endif + + +#if defined(USE_WEBSOCKET) +static void +generate_websocket_magic(char *magic25) +{ + uint64_t rnd; + unsigned char buffer[2 * sizeof(rnd)]; + + rnd = get_random(); + memcpy(buffer, &rnd, sizeof(rnd)); + rnd = get_random(); + memcpy(buffer + sizeof(rnd), &rnd, sizeof(rnd)); + + size_t dst_len = 24 + 1; + mg_base64_encode(buffer, sizeof(buffer), magic25, &dst_len); +} +#endif + + +static struct mg_connection * +mg_connect_websocket_client_impl(const struct mg_client_options *client_options, + int use_ssl, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + const char *extensions, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data) +{ + struct mg_connection *conn = NULL; + +#if defined(USE_WEBSOCKET) + struct websocket_client_thread_data *thread_data; + char magic[32]; + generate_websocket_magic(magic); + + const char *host = client_options->host; + int i; + + struct mg_init_data init; + struct mg_error_data error; + + memset(&init, 0, sizeof(init)); + memset(&error, 0, sizeof(error)); + error.text_buffer_size = error_buffer_size; + error.text = error_buffer; + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wformat-nonliteral" +#endif + + /* Establish the client connection and request upgrade */ + conn = mg_connect_client_impl(client_options, use_ssl, &init, &error); + + /* Connection object will be null if something goes wrong */ + if (conn == NULL) { + /* error_buffer should be already filled ... */ + if (!error_buffer[0]) { + /* ... if not add an error message */ + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + error_buffer, + error_buffer_size, + "Unexpected error"); + } + return NULL; + } + + if (origin != NULL) { + if (extensions != NULL) { + i = mg_printf(conn, + "GET %s HTTP/1.1\r\n" + "Host: %s\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Key: %s\r\n" + "Sec-WebSocket-Version: 13\r\n" + "Sec-WebSocket-Extensions: %s\r\n" + "Origin: %s\r\n" + "\r\n", + path, + host, + magic, + extensions, + origin); + } else { + i = mg_printf(conn, + "GET %s HTTP/1.1\r\n" + "Host: %s\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Key: %s\r\n" + "Sec-WebSocket-Version: 13\r\n" + "Origin: %s\r\n" + "\r\n", + path, + host, + magic, + origin); + } + } else { + + if (extensions != NULL) { + i = mg_printf(conn, + "GET %s HTTP/1.1\r\n" + "Host: %s\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Key: %s\r\n" + "Sec-WebSocket-Version: 13\r\n" + "Sec-WebSocket-Extensions: %s\r\n" + "\r\n", + path, + host, + magic, + extensions); + } else { + i = mg_printf(conn, + "GET %s HTTP/1.1\r\n" + "Host: %s\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Key: %s\r\n" + "Sec-WebSocket-Version: 13\r\n" + "\r\n", + path, + host, + magic); + } + } + if (i <= 0) { + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + error_buffer, + error_buffer_size, + "%s", + "Error sending request"); + mg_close_connection(conn); + return NULL; + } + + conn->data_len = 0; + if (!get_response(conn, error_buffer, error_buffer_size, &i)) { + mg_close_connection(conn); + return NULL; + } + conn->request_info.local_uri_raw = conn->request_info.request_uri; + conn->request_info.local_uri = conn->request_info.local_uri_raw; + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + + if (conn->response_info.status_code != 101) { + /* We sent an "upgrade" request. For a correct websocket + * protocol handshake, we expect a "101 Continue" response. + * Otherwise it is a protocol violation. Maybe the HTTP + * Server does not know websockets. */ + if (!*error_buffer) { + /* set an error, if not yet set */ + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + error_buffer, + error_buffer_size, + "Unexpected server reply"); + } + + DEBUG_TRACE("Websocket client connect error: %s\r\n", error_buffer); + mg_close_connection(conn); + return NULL; + } + + thread_data = (struct websocket_client_thread_data *)mg_calloc_ctx( + 1, sizeof(struct websocket_client_thread_data), conn->phys_ctx); + if (!thread_data) { + DEBUG_TRACE("%s\r\n", "Out of memory"); + mg_close_connection(conn); + return NULL; + } + + thread_data->conn = conn; + thread_data->data_handler = data_func; + thread_data->close_handler = close_func; + thread_data->callback_data = user_data; + + conn->phys_ctx->worker_threadids = + (pthread_t *)mg_calloc_ctx(1, sizeof(pthread_t), conn->phys_ctx); + if (!conn->phys_ctx->worker_threadids) { + DEBUG_TRACE("%s\r\n", "Out of memory"); + mg_free(thread_data); + mg_close_connection(conn); + return NULL; + } + + /* Now upgrade to ws/wss client context */ + conn->phys_ctx->user_data = user_data; + conn->phys_ctx->context_type = CONTEXT_WS_CLIENT; + conn->phys_ctx->cfg_max_worker_threads = 1; /* one worker thread */ + conn->phys_ctx->spawned_worker_threads = 1; /* one worker thread */ + + /* Start a thread to read the websocket client connection + * This thread will automatically stop when mg_disconnect is + * called on the client connection */ + if (mg_start_thread_with_id(websocket_client_thread, + thread_data, + conn->phys_ctx->worker_threadids) + != 0) { + conn->phys_ctx->spawned_worker_threads = 0; + mg_free(thread_data); + mg_close_connection(conn); + conn = NULL; + DEBUG_TRACE("%s", + "Websocket client connect thread could not be started\r\n"); + } + +#else + /* Appease "unused parameter" warnings */ + (void)client_options; + (void)use_ssl; + (void)error_buffer; + (void)error_buffer_size; + (void)path; + (void)origin; + (void)extensions; + (void)user_data; + (void)data_func; + (void)close_func; +#endif + + return conn; +} + + +CIVETWEB_API struct mg_connection * +mg_connect_websocket_client(const char *host, + int port, + int use_ssl, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data) +{ + struct mg_client_options client_options; + memset(&client_options, 0, sizeof(client_options)); + client_options.host = host; + client_options.port = port; + if (use_ssl) { + client_options.host_name = host; + } + + return mg_connect_websocket_client_impl(&client_options, + use_ssl, + error_buffer, + error_buffer_size, + path, + origin, + NULL, + data_func, + close_func, + user_data); +} + + +CIVETWEB_API struct mg_connection * +mg_connect_websocket_client_secure( + const struct mg_client_options *client_options, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data) +{ + if (!client_options) { + return NULL; + } + return mg_connect_websocket_client_impl(client_options, + 1, + error_buffer, + error_buffer_size, + path, + origin, + NULL, + data_func, + close_func, + user_data); +} + + +CIVETWEB_API struct mg_connection * +mg_connect_websocket_client_extensions(const char *host, + int port, + int use_ssl, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + const char *extensions, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data) +{ + struct mg_client_options client_options; + memset(&client_options, 0, sizeof(client_options)); + client_options.host = host; + client_options.port = port; + + return mg_connect_websocket_client_impl(&client_options, + use_ssl, + error_buffer, + error_buffer_size, + path, + origin, + extensions, + data_func, + close_func, + user_data); +} + + +CIVETWEB_API struct mg_connection * +mg_connect_websocket_client_secure_extensions( + const struct mg_client_options *client_options, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + const char *extensions, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data) +{ + if (!client_options) { + return NULL; + } + return mg_connect_websocket_client_impl(client_options, + 1, + error_buffer, + error_buffer_size, + path, + origin, + extensions, + data_func, + close_func, + user_data); +} + + +/* Prepare connection data structure */ +static void +init_connection(struct mg_connection *conn) +{ + /* Is keep alive allowed by the server */ + int keep_alive_enabled = + !mg_strcasecmp(conn->dom_ctx->config[ENABLE_KEEP_ALIVE], "yes"); + + if (!keep_alive_enabled) { + conn->must_close = 1; + } + + /* Important: on new connection, reset the receiving buffer. Credit + * goes to crule42. */ + conn->data_len = 0; + conn->handled_requests = 0; + conn->connection_type = CONNECTION_TYPE_INVALID; + conn->request_info.acceptedWebSocketSubprotocol = NULL; + mg_set_user_connection_data(conn, NULL); + +#if defined(USE_SERVER_STATS) + conn->conn_state = 2; /* init */ +#endif + + /* call the init_connection callback if assigned */ + if (conn->phys_ctx->callbacks.init_connection != NULL) { + if (conn->phys_ctx->context_type == CONTEXT_SERVER) { + void *conn_data = NULL; + conn->phys_ctx->callbacks.init_connection(conn, &conn_data); + mg_set_user_connection_data(conn, conn_data); + } + } +} + + +/* Process a connection - may handle multiple requests + * using the same connection. + * Must be called with a valid connection (conn and + * conn->phys_ctx must be valid). + */ +static void +process_new_connection(struct mg_connection *conn) +{ + struct mg_request_info *ri = &conn->request_info; + int keep_alive, discard_len; + char ebuf[100]; + const char *hostend; + int reqerr, uri_type; + +#if defined(USE_SERVER_STATS) + ptrdiff_t mcon = mg_atomic_inc(&(conn->phys_ctx->active_connections)); + mg_atomic_add(&(conn->phys_ctx->total_connections), 1); + mg_atomic_max(&(conn->phys_ctx->max_active_connections), mcon); +#endif + + DEBUG_TRACE("Start processing connection from %s", + conn->request_info.remote_addr); + + /* Loop over multiple requests sent using the same connection + * (while "keep alive"). */ + do { + DEBUG_TRACE("calling get_request (%i times for this connection)", + conn->handled_requests + 1); + +#if defined(USE_SERVER_STATS) + conn->conn_state = 3; /* ready */ +#endif + + if (!get_request(conn, ebuf, sizeof(ebuf), &reqerr)) { + /* The request sent by the client could not be understood by + * the server, or it was incomplete or a timeout. Send an + * error message and close the connection. */ + if (reqerr > 0) { + DEBUG_ASSERT(ebuf[0] != '\0'); + mg_send_http_error(conn, reqerr, "%s", ebuf); + } + + } else if (strcmp(ri->http_version, "1.0") + && strcmp(ri->http_version, "1.1")) { + /* HTTP/2 is not allowed here */ + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + sizeof(ebuf), + "Bad HTTP version: [%s]", + ri->http_version); + mg_send_http_error(conn, 505, "%s", ebuf); + } + + if (ebuf[0] == '\0') { + uri_type = get_uri_type(conn->request_info.request_uri); + switch (uri_type) { + case 1: + /* Asterisk */ + conn->request_info.local_uri_raw = 0; + /* TODO: Deal with '*'. */ + break; + case 2: + /* relative uri */ + conn->request_info.local_uri_raw = + conn->request_info.request_uri; + break; + case 3: + case 4: + /* absolute uri (with/without port) */ + hostend = get_rel_url_at_current_server( + conn->request_info.request_uri, conn); + if (hostend) { + conn->request_info.local_uri_raw = hostend; + } else { + conn->request_info.local_uri_raw = NULL; + } + break; + default: + mg_snprintf(conn, + NULL, /* No truncation check for ebuf */ + ebuf, + sizeof(ebuf), + "Invalid URI"); + mg_send_http_error(conn, 400, "%s", ebuf); + conn->request_info.local_uri_raw = NULL; + break; + } + conn->request_info.local_uri = + (char *)conn->request_info.local_uri_raw; + } + + if (ebuf[0] != '\0') { + conn->protocol_type = -1; + + } else { + /* HTTP/1 allows protocol upgrade */ + conn->protocol_type = should_switch_to_protocol(conn); + + if (conn->protocol_type == PROTOCOL_TYPE_HTTP2) { + /* This will occur, if a HTTP/1.1 request should be upgraded + * to HTTP/2 - but not if HTTP/2 is negotiated using ALPN. + * Since most (all?) major browsers only support HTTP/2 using + * ALPN, this is hard to test and very low priority. + * Deactivate it (at least for now). + */ + conn->protocol_type = PROTOCOL_TYPE_HTTP1; + } + } + + DEBUG_TRACE("http: %s, error: %s", + (ri->http_version ? ri->http_version : "none"), + (ebuf[0] ? ebuf : "none")); + + if (ebuf[0] == '\0') { + if (conn->request_info.local_uri) { + + /* handle request to local server */ + handle_request_stat_log(conn); + + } else { + /* TODO: handle non-local request (PROXY) */ + conn->must_close = 1; + } + } else { + conn->must_close = 1; + } + + /* Response complete. Free header buffer */ + free_buffered_response_header_list(conn); + + if (ri->remote_user != NULL) { + mg_free((void *)ri->remote_user); + /* Important! When having connections with and without auth + * would cause double free and then crash */ + ri->remote_user = NULL; + } + + /* NOTE(lsm): order is important here. should_keep_alive() call + * is using parsed request, which will be invalid after + * memmove's below. + * Therefore, memorize should_keep_alive() result now for later + * use in loop exit condition. */ + /* Enable it only if this request is completely discardable. */ + keep_alive = STOP_FLAG_IS_ZERO(&conn->phys_ctx->stop_flag) + && should_keep_alive(conn) && (conn->content_len >= 0) + && (conn->request_len > 0) + && ((conn->is_chunked == 4) + || (!conn->is_chunked + && ((conn->consumed_content == conn->content_len) + || ((conn->request_len + conn->content_len) + <= conn->data_len)))) + && (conn->protocol_type == PROTOCOL_TYPE_HTTP1); + + if (keep_alive) { + /* Discard all buffered data for this request */ + discard_len = + ((conn->request_len + conn->content_len) < conn->data_len) + ? (int)(conn->request_len + conn->content_len) + : conn->data_len; + conn->data_len -= discard_len; + + if (conn->data_len > 0) { + DEBUG_TRACE("discard_len = %d", discard_len); + memmove(conn->buf, + conn->buf + discard_len, + (size_t)conn->data_len); + } + } + + DEBUG_ASSERT(conn->data_len >= 0); + DEBUG_ASSERT(conn->data_len <= conn->buf_size); + + if ((conn->data_len < 0) || (conn->data_len > conn->buf_size)) { + DEBUG_TRACE("internal error: data_len = %li, buf_size = %li", + (long int)conn->data_len, + (long int)conn->buf_size); + break; + } + conn->handled_requests++; + } while (keep_alive); + + DEBUG_TRACE("Done processing connection from %s (%f sec)", + conn->request_info.remote_addr, + difftime(time(NULL), conn->conn_birth_time)); + + close_connection(conn); + +#if defined(USE_SERVER_STATS) + mg_atomic_add(&(conn->phys_ctx->total_requests), conn->handled_requests); + mg_atomic_dec(&(conn->phys_ctx->active_connections)); +#endif +} + +static int +mg_start_worker_thread(struct mg_context *ctx, + int only_if_no_idle_threads); /* forward declaration */ + +#if defined(ALTERNATIVE_QUEUE) + +static void +produce_socket(struct mg_context *ctx, const struct socket *sp) +{ + unsigned int i; + + (void)mg_start_worker_thread( + ctx, 1); /* will start a worker-thread only if there aren't currently + any idle worker-threads */ + + while (!ctx->stop_flag) { + for (i = 0; i < ctx->spawned_worker_threads; i++) { + /* find a free worker slot and signal it */ + if (ctx->client_socks[i].in_use == 2) { + (void)pthread_mutex_lock(&ctx->thread_mutex); + if ((ctx->client_socks[i].in_use == 2) && !ctx->stop_flag) { + ctx->client_socks[i] = *sp; + ctx->client_socks[i].in_use = 1; + /* socket has been moved to the consumer */ + (void)pthread_mutex_unlock(&ctx->thread_mutex); + (void)event_signal(ctx->client_wait_events[i]); + return; + } + (void)pthread_mutex_unlock(&ctx->thread_mutex); + } + } + /* queue is full */ + mg_sleep(1); + } + /* must consume */ + set_blocking_mode(sp->sock); + closesocket(sp->sock); +} + + +static int +consume_socket(struct mg_context *ctx, + struct socket *sp, + int thread_index, + int counter_was_preincremented) +{ + DEBUG_TRACE("%s", "going idle"); + (void)pthread_mutex_lock(&ctx->thread_mutex); + if (counter_was_preincremented + == 0) { /* first call only: the master-thread pre-incremented this + before he spawned us */ + ctx->idle_worker_thread_count++; + } + ctx->client_socks[thread_index].in_use = 2; + (void)pthread_mutex_unlock(&ctx->thread_mutex); + + event_wait(ctx->client_wait_events[thread_index]); + + (void)pthread_mutex_lock(&ctx->thread_mutex); + *sp = ctx->client_socks[thread_index]; + if (ctx->stop_flag) { + (void)pthread_mutex_unlock(&ctx->thread_mutex); + if (sp->in_use == 1) { + /* must consume */ + set_blocking_mode(sp->sock); + closesocket(sp->sock); + } + return 0; + } + ctx->idle_worker_thread_count--; + (void)pthread_mutex_unlock(&ctx->thread_mutex); + if (sp->in_use == 1) { + DEBUG_TRACE("grabbed socket %d, going busy", sp->sock); + return 1; + } + /* must not reach here */ + DEBUG_ASSERT(0); + return 0; +} + +#else /* ALTERNATIVE_QUEUE */ + +/* Worker threads take accepted socket from the queue */ +static int +consume_socket(struct mg_context *ctx, + struct socket *sp, + int thread_index, + int counter_was_preincremented) +{ + (void)thread_index; + + DEBUG_TRACE("%s", "going idle"); + (void)pthread_mutex_lock(&ctx->thread_mutex); + if (counter_was_preincremented + == 0) { /* first call only: the master-thread pre-incremented this + before he spawned us */ + ctx->idle_worker_thread_count++; + } + + /* If the queue is empty, wait. We're idle at this point. */ + while ((ctx->sq_head == ctx->sq_tail) + && (STOP_FLAG_IS_ZERO(&ctx->stop_flag))) { + pthread_cond_wait(&ctx->sq_full, &ctx->thread_mutex); + } + + /* If we're stopping, sq_head may be equal to sq_tail. */ + if (ctx->sq_head > ctx->sq_tail) { + /* Copy socket from the queue and increment tail */ + *sp = ctx->squeue[ctx->sq_tail % ctx->sq_size]; + ctx->sq_tail++; + + DEBUG_TRACE("grabbed socket %d, going busy", sp ? sp->sock : -1); + + /* Wrap pointers if needed */ + while (ctx->sq_tail > ctx->sq_size) { + ctx->sq_tail -= ctx->sq_size; + ctx->sq_head -= ctx->sq_size; + } + } + + (void)pthread_cond_signal(&ctx->sq_empty); + + ctx->idle_worker_thread_count--; + (void)pthread_mutex_unlock(&ctx->thread_mutex); + + return STOP_FLAG_IS_ZERO(&ctx->stop_flag); +} + + +/* Master thread adds accepted socket to a queue */ +static void +produce_socket(struct mg_context *ctx, const struct socket *sp) +{ + int queue_filled; + + (void)pthread_mutex_lock(&ctx->thread_mutex); + + queue_filled = ctx->sq_head - ctx->sq_tail; + + /* If the queue is full, wait */ + while (STOP_FLAG_IS_ZERO(&ctx->stop_flag) + && (queue_filled >= ctx->sq_size)) { + ctx->sq_blocked = 1; /* Status information: All threads busy */ +#if defined(USE_SERVER_STATS) + if (queue_filled > ctx->sq_max_fill) { + ctx->sq_max_fill = queue_filled; + } +#endif + (void)pthread_cond_wait(&ctx->sq_empty, &ctx->thread_mutex); + ctx->sq_blocked = 0; /* Not blocked now */ + queue_filled = ctx->sq_head - ctx->sq_tail; + } + + if (queue_filled < ctx->sq_size) { + /* Copy socket to the queue and increment head */ + ctx->squeue[ctx->sq_head % ctx->sq_size] = *sp; + ctx->sq_head++; + DEBUG_TRACE("queued socket %d", sp ? sp->sock : -1); + } + + queue_filled = ctx->sq_head - ctx->sq_tail; +#if defined(USE_SERVER_STATS) + if (queue_filled > ctx->sq_max_fill) { + ctx->sq_max_fill = queue_filled; + } +#endif + + (void)pthread_cond_signal(&ctx->sq_full); + (void)pthread_mutex_unlock(&ctx->thread_mutex); + + (void)mg_start_worker_thread( + ctx, 1); /* will start a worker-thread only if there aren't currently + any idle worker-threads */ +} +#endif /* ALTERNATIVE_QUEUE */ + + +static void +worker_thread_run(struct mg_connection *conn) +{ + struct mg_context *ctx = conn->phys_ctx; + int thread_index; + struct mg_workerTLS tls; + int first_call_to_consume_socket = 1; + + mg_set_thread_name("worker"); + + tls.is_master = 0; + tls.thread_idx = (unsigned)mg_atomic_inc(&thread_idx_max); +#if defined(_WIN32) + tls.pthread_cond_helper_mutex = CreateEvent(NULL, FALSE, FALSE, NULL); +#endif + + /* Initialize thread local storage before calling any callback */ + pthread_setspecific(sTlsKey, &tls); + + /* Check if there is a user callback */ + if (ctx->callbacks.init_thread) { + /* call init_thread for a worker thread (type 1), and store the + * return value */ + tls.user_ptr = ctx->callbacks.init_thread(ctx, 1); + } else { + /* No callback: set user pointer to NULL */ + tls.user_ptr = NULL; + } + + /* Connection structure has been pre-allocated */ + thread_index = (int)(conn - ctx->worker_connections); + if ((thread_index < 0) + || ((unsigned)thread_index >= (unsigned)ctx->cfg_max_worker_threads)) { + mg_cry_ctx_internal(ctx, + "Internal error: Invalid worker index %i", + thread_index); + return; + } + + /* Request buffers are not pre-allocated. They are private to the + * request and do not contain any state information that might be + * of interest to anyone observing a server status. */ + conn->buf = (char *)mg_malloc_ctx(ctx->max_request_size, conn->phys_ctx); + if (conn->buf == NULL) { + mg_cry_ctx_internal( + ctx, + "Out of memory: Cannot allocate buffer for worker %i", + thread_index); + return; + } + conn->buf_size = (int)ctx->max_request_size; + + conn->dom_ctx = &(ctx->dd); /* Use default domain and default host */ + + conn->tls_user_ptr = tls.user_ptr; /* store ptr for quick access */ + + conn->request_info.user_data = ctx->user_data; + /* Allocate a mutex for this connection to allow communication both + * within the request handler and from elsewhere in the application + */ + if (0 != pthread_mutex_init(&conn->mutex, &pthread_mutex_attr)) { + mg_free(conn->buf); + mg_cry_ctx_internal(ctx, "%s", "Cannot create mutex"); + return; + } + +#if defined(USE_SERVER_STATS) + conn->conn_state = 1; /* not consumed */ +#endif + + /* Call consume_socket() even when ctx->stop_flag > 0, to let it + * signal sq_empty condvar to wake up the master waiting in + * produce_socket() */ + while (consume_socket( + ctx, &conn->client, thread_index, first_call_to_consume_socket)) { + first_call_to_consume_socket = 0; + + /* New connections must start with new protocol negotiation */ + tls.alpn_proto = NULL; + +#if defined(USE_SERVER_STATS) + conn->conn_close_time = 0; +#endif + conn->conn_birth_time = time(NULL); + + /* Fill in IP, port info early so even if SSL setup below fails, + * error handler would have the corresponding info. + * Thanks to Johannes Winkelmann for the patch. + */ + conn->request_info.remote_port = + ntohs(USA_IN_PORT_UNSAFE(&conn->client.rsa)); + + conn->request_info.server_port = + ntohs(USA_IN_PORT_UNSAFE(&conn->client.lsa)); + + sockaddr_to_string(conn->request_info.remote_addr, + sizeof(conn->request_info.remote_addr), + &conn->client.rsa); + + sockaddr_to_string(conn->request_info.server_addr, + sizeof(conn->request_info.server_addr), + &conn->client.lsa); + + DEBUG_TRACE("Incoming %sconnection from %s", + (conn->client.is_ssl ? "SSL " : ""), + conn->request_info.remote_addr); + + conn->request_info.is_ssl = conn->client.is_ssl; + + if (conn->client.is_ssl) { + +#if defined(USE_MBEDTLS) + /* HTTPS connection */ + if (mbed_ssl_accept(&(conn->ssl), + conn->dom_ctx->ssl_ctx, + (int *)&(conn->client.sock), + conn->phys_ctx) + == 0) { + /* conn->dom_ctx is set in get_request */ + /* process HTTPS connection */ + init_connection(conn); + conn->connection_type = CONNECTION_TYPE_REQUEST; + conn->protocol_type = PROTOCOL_TYPE_HTTP1; + process_new_connection(conn); + } else { + /* make sure the connection is cleaned up on SSL failure */ + close_connection(conn); + } + +#elif defined(USE_GNUTLS) + /* HTTPS connection */ + if (gtls_ssl_accept(&(conn->ssl), + conn->dom_ctx->ssl_ctx, + conn->client.sock, + conn->phys_ctx) + == 0) { + /* conn->dom_ctx is set in get_request */ + /* process HTTPS connection */ + init_connection(conn); + conn->connection_type = CONNECTION_TYPE_REQUEST; + conn->protocol_type = PROTOCOL_TYPE_HTTP1; + process_new_connection(conn); + } else { + /* make sure the connection is cleaned up on SSL failure */ + close_connection(conn); + } + +#elif !defined(NO_SSL) + /* HTTPS connection */ + if (sslize(conn, SSL_accept, NULL)) { + /* conn->dom_ctx is set in get_request */ + + /* Get SSL client certificate information (if set) */ + struct mg_client_cert client_cert; + if (ssl_get_client_cert_info(conn, &client_cert)) { + conn->request_info.client_cert = &client_cert; + } + + /* process HTTPS connection */ +#if defined(USE_HTTP2) + if ((tls.alpn_proto != NULL) + && (!memcmp(tls.alpn_proto, "\x02h2", 3))) { + /* process HTTPS/2 connection */ + init_connection(conn); + conn->connection_type = CONNECTION_TYPE_REQUEST; + conn->protocol_type = PROTOCOL_TYPE_HTTP2; + conn->content_len = + -1; /* content length is not predefined */ + conn->is_chunked = 0; /* HTTP2 is never chunked */ + process_new_http2_connection(conn); + } else +#endif + { + /* process HTTPS/1.x or WEBSOCKET-SECURE connection */ + init_connection(conn); + conn->connection_type = CONNECTION_TYPE_REQUEST; + /* Start with HTTP, WS will be an "upgrade" request later */ + conn->protocol_type = PROTOCOL_TYPE_HTTP1; + process_new_connection(conn); + } + + /* Free client certificate info */ + if (conn->request_info.client_cert) { + mg_free((void *)(conn->request_info.client_cert->subject)); + mg_free((void *)(conn->request_info.client_cert->issuer)); + mg_free((void *)(conn->request_info.client_cert->serial)); + mg_free((void *)(conn->request_info.client_cert->finger)); + /* Free certificate memory */ + X509_free( + (X509 *)conn->request_info.client_cert->peer_cert); + conn->request_info.client_cert->peer_cert = 0; + conn->request_info.client_cert->subject = 0; + conn->request_info.client_cert->issuer = 0; + conn->request_info.client_cert->serial = 0; + conn->request_info.client_cert->finger = 0; + conn->request_info.client_cert = 0; + } + } else { + /* make sure the connection is cleaned up on SSL failure */ + close_connection(conn); + } +#endif + + } else { + /* process HTTP connection */ + init_connection(conn); + conn->connection_type = CONNECTION_TYPE_REQUEST; + /* Start with HTTP, WS will be an "upgrade" request later */ + conn->protocol_type = PROTOCOL_TYPE_HTTP1; + process_new_connection(conn); + } + + DEBUG_TRACE("%s", "Connection closed"); + +#if defined(USE_SERVER_STATS) + conn->conn_close_time = time(NULL); +#endif + } + + /* Call exit thread user callback */ + if (ctx->callbacks.exit_thread) { + ctx->callbacks.exit_thread(ctx, 1, tls.user_ptr); + } + + /* delete thread local storage objects */ + pthread_setspecific(sTlsKey, NULL); +#if defined(_WIN32) + CloseHandle(tls.pthread_cond_helper_mutex); +#endif + pthread_mutex_destroy(&conn->mutex); + + /* Free the request buffer. */ + conn->buf_size = 0; + mg_free(conn->buf); + conn->buf = NULL; + + /* Free cleaned URI (if any) */ + if (conn->request_info.local_uri != conn->request_info.local_uri_raw) { + mg_free((void *)conn->request_info.local_uri); + conn->request_info.local_uri = NULL; + } + +#if defined(USE_SERVER_STATS) + conn->conn_state = 9; /* done */ +#endif + + DEBUG_TRACE("%s", "exiting"); +} + + +/* Threads have different return types on Windows and Unix. */ +#if defined(_WIN32) +static unsigned __stdcall worker_thread(void *thread_func_param) +{ + worker_thread_run((struct mg_connection *)thread_func_param); + return 0; +} +#else +static void * +worker_thread(void *thread_func_param) +{ +#if !defined(__ZEPHYR__) + struct sigaction sa; + + /* Ignore SIGPIPE */ + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = SIG_IGN; + sigaction(SIGPIPE, &sa, NULL); +#endif + + worker_thread_run((struct mg_connection *)thread_func_param); + return NULL; +} +#endif /* _WIN32 */ + + +/* This is an internal function, thus all arguments are expected to be + * valid - a NULL check is not required. */ +static void +accept_new_connection(const struct socket *listener, struct mg_context *ctx) +{ + struct socket so; + char src_addr[IP_ADDR_STR_LEN]; + socklen_t len = sizeof(so.rsa); +#if !defined(__ZEPHYR__) + int on = 1; +#endif + memset(&so, 0, sizeof(so)); + + if ((so.sock = accept(listener->sock, &so.rsa.sa, &len)) + == INVALID_SOCKET) { + } else if (check_acl(ctx, &so.rsa) != 1) { + sockaddr_to_string(src_addr, sizeof(src_addr), &so.rsa); + mg_cry_ctx_internal(ctx, + "%s: %s is not allowed to connect", + __func__, + src_addr); + closesocket(so.sock); + } else { + /* Put so socket structure into the queue */ + DEBUG_TRACE("Accepted socket %d", (int)so.sock); + set_close_on_exec(so.sock, NULL, ctx); + so.is_ssl = listener->is_ssl; + so.ssl_redir = listener->ssl_redir; + so.is_optional = listener->is_optional; + if (getsockname(so.sock, &so.lsa.sa, &len) != 0) { + mg_cry_ctx_internal(ctx, + "%s: getsockname() failed: %s", + __func__, + strerror(ERRNO)); + } + +#if !defined(__ZEPHYR__) + if ((so.lsa.sa.sa_family == AF_INET) + || (so.lsa.sa.sa_family == AF_INET6)) { + /* Set TCP keep-alive for TCP sockets (IPv4 and IPv6). + * This is needed because if HTTP-level keep-alive + * is enabled, and client resets the connection, server won't get + * TCP FIN or RST and will keep the connection open forever. With + * TCP keep-alive, next keep-alive handshake will figure out that + * the client is down and will close the server end. + * Thanks to Igor Klopov who suggested the patch. */ + if (setsockopt(so.sock, + SOL_SOCKET, + SO_KEEPALIVE, + (SOCK_OPT_TYPE)&on, + sizeof(on)) + != 0) { + mg_cry_ctx_internal( + ctx, + "%s: setsockopt(SOL_SOCKET SO_KEEPALIVE) failed: %s", + __func__, + strerror(ERRNO)); + } + } +#endif + + /* Disable TCP Nagle's algorithm. Normally TCP packets are coalesced + * to effectively fill up the underlying IP packet payload and + * reduce the overhead of sending lots of small buffers. However + * this hurts the server's throughput (ie. operations per second) + * when HTTP 1.1 persistent connections are used and the responses + * are relatively small (eg. less than 1400 bytes). + */ + if ((ctx->dd.config[CONFIG_TCP_NODELAY] != NULL) + && (!strcmp(ctx->dd.config[CONFIG_TCP_NODELAY], "1"))) { + if (set_tcp_nodelay(&so, 1) != 0) { + mg_cry_ctx_internal( + ctx, + "%s: setsockopt(IPPROTO_TCP TCP_NODELAY) failed: %s", + __func__, + strerror(ERRNO)); + } + } + + /* The "non blocking" property should already be + * inherited from the parent socket. Set it for + * non-compliant socket implementations. */ + set_non_blocking_mode(so.sock); + + so.in_use = 0; + produce_socket(ctx, &so); + } +} + + +static void +master_thread_run(struct mg_context *ctx) +{ + struct mg_workerTLS tls; + struct mg_pollfd *pfd; + unsigned int i; + unsigned int workerthreadcount; + + if (!ctx || !ctx->listening_socket_fds) { + return; + } + + mg_set_thread_name("master"); + + /* Increase priority of the master thread */ +#if defined(_WIN32) + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); +#elif defined(USE_MASTER_THREAD_PRIORITY) + int min_prio = sched_get_priority_min(SCHED_RR); + int max_prio = sched_get_priority_max(SCHED_RR); + if ((min_prio >= 0) && (max_prio >= 0) + && ((USE_MASTER_THREAD_PRIORITY) <= max_prio) + && ((USE_MASTER_THREAD_PRIORITY) >= min_prio)) { + struct sched_param sched_param = {0}; + sched_param.sched_priority = (USE_MASTER_THREAD_PRIORITY); + pthread_setschedparam(pthread_self(), SCHED_RR, &sched_param); + } +#endif + + /* Initialize thread local storage */ +#if defined(_WIN32) + tls.pthread_cond_helper_mutex = CreateEvent(NULL, FALSE, FALSE, NULL); +#endif + tls.is_master = 1; + pthread_setspecific(sTlsKey, &tls); + + if (ctx->callbacks.init_thread) { + /* Callback for the master thread (type 0) */ + tls.user_ptr = ctx->callbacks.init_thread(ctx, 0); + } else { + tls.user_ptr = NULL; + } + + /* Lua background script "start" event */ +#if defined(USE_LUA) + if (ctx->lua_background_state) { + lua_State *lstate = (lua_State *)ctx->lua_background_state; + pthread_mutex_lock(&ctx->lua_bg_mutex); + + /* call "start()" in Lua */ + lua_getglobal(lstate, "start"); + if (lua_type(lstate, -1) == LUA_TFUNCTION) { + int ret = lua_pcall(lstate, /* args */ 0, /* results */ 0, 0); + if (ret != 0) { + struct mg_connection fc; + lua_cry(fake_connection(&fc, ctx), + ret, + lstate, + "lua_background_script", + "start"); + } + } else { + lua_pop(lstate, 1); + } + + /* determine if there is a "log()" function in Lua background script */ + lua_getglobal(lstate, "log"); + if (lua_type(lstate, -1) == LUA_TFUNCTION) { + ctx->lua_bg_log_available = 1; + } + lua_pop(lstate, 1); + + pthread_mutex_unlock(&ctx->lua_bg_mutex); + } +#endif + + /* Server starts *now* */ + ctx->start_time = time(NULL); + + /* Server accept loop */ + pfd = ctx->listening_socket_fds; + while (STOP_FLAG_IS_ZERO(&ctx->stop_flag)) { + for (i = 0; i < ctx->num_listening_sockets; i++) { + pfd[i].fd = ctx->listening_sockets[i].sock; + pfd[i].events = POLLIN; + } + + /* We listen on this socket just so that mg_stop() can cause mg_poll() + * to return ASAP. Don't worry, we did allocate an extra slot at the end + * of listening_socket_fds[] just to hold this + */ + pfd[ctx->num_listening_sockets].fd = + ctx->thread_shutdown_notification_socket; + pfd[ctx->num_listening_sockets].events = POLLIN; + + if (mg_poll(pfd, + ctx->num_listening_sockets + + 1, // +1 for the thread_shutdown_notification_socket + SOCKET_TIMEOUT_QUANTUM, + &(ctx->stop_flag)) + > 0) { + for (i = 0; i < ctx->num_listening_sockets; i++) { + /* NOTE(lsm): on QNX, poll() returns POLLRDNORM after the + * successful poll, and POLLIN is defined as + * (POLLRDNORM | POLLRDBAND) + * Therefore, we're checking pfd[i].revents & POLLIN, not + * pfd[i].revents == POLLIN. */ + if (STOP_FLAG_IS_ZERO(&ctx->stop_flag) + && (pfd[i].revents & POLLIN)) { + accept_new_connection(&ctx->listening_sockets[i], ctx); + } + } + } + } + + /* Here stop_flag is 1 - Initiate shutdown. */ + DEBUG_TRACE("%s", "stopping workers"); + + /* Stop signal received: somebody called mg_stop. Quit. */ + close_all_listening_sockets(ctx); + + /* Wakeup workers that are waiting for connections to handle. */ +#if defined(ALTERNATIVE_QUEUE) + for (i = 0; i < ctx->spawned_worker_threads; i++) { + event_signal(ctx->client_wait_events[i]); + } +#else + (void)pthread_mutex_lock(&ctx->thread_mutex); + pthread_cond_broadcast(&ctx->sq_full); + (void)pthread_mutex_unlock(&ctx->thread_mutex); +#endif + + /* Join all worker threads to avoid leaking threads. */ + workerthreadcount = ctx->spawned_worker_threads; + for (i = 0; i < workerthreadcount; i++) { + if (ctx->worker_threadids[i] != 0) { + mg_join_thread(ctx->worker_threadids[i]); + } + } + +#if defined(USE_LUA) + /* Free Lua state of lua background task */ + if (ctx->lua_background_state) { + lua_State *lstate = (lua_State *)ctx->lua_background_state; + ctx->lua_bg_log_available = 0; + + /* call "stop()" in Lua */ + pthread_mutex_lock(&ctx->lua_bg_mutex); + lua_getglobal(lstate, "stop"); + if (lua_type(lstate, -1) == LUA_TFUNCTION) { + int ret = lua_pcall(lstate, /* args */ 0, /* results */ 0, 0); + if (ret != 0) { + struct mg_connection fc; + lua_cry(fake_connection(&fc, ctx), + ret, + lstate, + "lua_background_script", + "stop"); + } + } + DEBUG_TRACE("Close Lua background state %p", lstate); + lua_close(lstate); + + ctx->lua_background_state = 0; + pthread_mutex_unlock(&ctx->lua_bg_mutex); + } +#endif + + DEBUG_TRACE("%s", "exiting"); + + /* call exit thread callback */ + if (ctx->callbacks.exit_thread) { + /* Callback for the master thread (type 0) */ + ctx->callbacks.exit_thread(ctx, 0, tls.user_ptr); + } + +#if defined(_WIN32) + CloseHandle(tls.pthread_cond_helper_mutex); +#endif + pthread_setspecific(sTlsKey, NULL); + + /* Signal mg_stop() that we're done. + * WARNING: This must be the very last thing this + * thread does, as ctx becomes invalid after this line. */ + STOP_FLAG_ASSIGN(&ctx->stop_flag, 2); +} + + +/* Threads have different return types on Windows and Unix. */ +#if defined(_WIN32) +static unsigned __stdcall master_thread(void *thread_func_param) +{ + master_thread_run((struct mg_context *)thread_func_param); + return 0; +} +#else +static void * +master_thread(void *thread_func_param) +{ +#if !defined(__ZEPHYR__) + struct sigaction sa; + + /* Ignore SIGPIPE */ + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = SIG_IGN; + sigaction(SIGPIPE, &sa, NULL); +#endif + + master_thread_run((struct mg_context *)thread_func_param); + return NULL; +} +#endif /* _WIN32 */ + + +static void +free_context(struct mg_context *ctx) +{ + int i; + struct mg_handler_info *tmp_rh; + + if (ctx == NULL) { + return; + } + + /* Call user callback */ + if (ctx->callbacks.exit_context) { + ctx->callbacks.exit_context(ctx); + } + + /* All threads exited, no sync is needed. Destroy thread mutex and + * condvars + */ + (void)pthread_mutex_destroy(&ctx->thread_mutex); + +#if defined(ALTERNATIVE_QUEUE) + mg_free(ctx->client_socks); + if (ctx->client_wait_events != NULL) { + for (i = 0; (unsigned)i < ctx->spawned_worker_threads; i++) { + event_destroy(ctx->client_wait_events[i]); + } + mg_free(ctx->client_wait_events); + } +#else + (void)pthread_cond_destroy(&ctx->sq_empty); + (void)pthread_cond_destroy(&ctx->sq_full); + mg_free(ctx->squeue); +#endif + + /* Destroy other context global data structures mutex */ + (void)pthread_mutex_destroy(&ctx->nonce_mutex); + +#if defined(USE_LUA) + (void)pthread_mutex_destroy(&ctx->lua_bg_mutex); +#endif + + /* Deallocate shutdown-triggering socket-pair */ + if (ctx->user_shutdown_notification_socket >= 0) { + closesocket(ctx->user_shutdown_notification_socket); + } + if (ctx->thread_shutdown_notification_socket >= 0) { + closesocket(ctx->thread_shutdown_notification_socket); + } + + /* Deallocate config parameters */ + for (i = 0; i < NUM_OPTIONS; i++) { + if (ctx->dd.config[i] != NULL) { +#if defined(_MSC_VER) +#pragma warning(suppress : 6001) +#endif + mg_free(ctx->dd.config[i]); + } + } + + /* Deallocate request handlers */ + while (ctx->dd.handlers) { + tmp_rh = ctx->dd.handlers; + ctx->dd.handlers = tmp_rh->next; + mg_free(tmp_rh->uri); + mg_free(tmp_rh); + } + +#if defined(USE_MBEDTLS) + if (ctx->dd.ssl_ctx != NULL) { + mbed_sslctx_uninit(ctx->dd.ssl_ctx); + mg_free(ctx->dd.ssl_ctx); + ctx->dd.ssl_ctx = NULL; + } + +#elif defined(USE_GNUTLS) + if (ctx->dd.ssl_ctx != NULL) { + gtls_sslctx_uninit(ctx->dd.ssl_ctx); + mg_free(ctx->dd.ssl_ctx); + ctx->dd.ssl_ctx = NULL; + } + +#elif !defined(NO_SSL) + /* Deallocate SSL context */ + if (ctx->dd.ssl_ctx != NULL) { + void *ssl_ctx = (void *)ctx->dd.ssl_ctx; + int callback_ret = + (ctx->callbacks.external_ssl_ctx == NULL) + ? 0 + : (ctx->callbacks.external_ssl_ctx(&ssl_ctx, ctx->user_data)); + + if (callback_ret == 0) { + SSL_CTX_free(ctx->dd.ssl_ctx); + } + /* else: ignore error and omit SSL_CTX_free in case + * callback_ret is 1 */ + } +#endif /* !NO_SSL */ + + /* Deallocate worker thread ID array */ + mg_free(ctx->worker_threadids); + + /* Deallocate worker thread ID array */ + mg_free(ctx->worker_connections); + + /* deallocate system name string */ + mg_free(ctx->systemName); + + /* Deallocate context itself */ + mg_free(ctx); +} + + +CIVETWEB_API void +mg_stop(struct mg_context *ctx) +{ + pthread_t mt; + if (!ctx) { + return; + } + + /* We don't use a lock here. Calling mg_stop with the same ctx from + * two threads is not allowed. */ + mt = ctx->masterthreadid; + if (mt == 0) { + return; + } + + ctx->masterthreadid = 0; + + /* Set stop flag, so all threads know they have to exit. */ + STOP_FLAG_ASSIGN(&ctx->stop_flag, 1); + + /* Closing this socket will cause mg_poll() in all the I/O threads to return + * immediately */ + closesocket(ctx->user_shutdown_notification_socket); + ctx->user_shutdown_notification_socket = + -1; /* to avoid calling closesocket() again in free_context() */ + + /* Join timer thread */ +#if defined(USE_TIMERS) + timers_exit(ctx); +#endif + + /* Wait until everything has stopped. */ + while (!STOP_FLAG_IS_TWO(&ctx->stop_flag)) { + (void)mg_sleep(10); + } + + /* Wait to stop master thread */ + mg_join_thread(mt); + + /* Close remaining Lua states */ +#if defined(USE_LUA) + lua_ctx_exit(ctx); +#endif + + /* Free memory */ + free_context(ctx); +} + + +static void +get_system_name(char **sysName) +{ +#if defined(_WIN32) + char name[128]; + DWORD dwVersion = 0; + DWORD dwMajorVersion = 0; + DWORD dwMinorVersion = 0; + DWORD dwBuild = 0; + BOOL wowRet, isWoW = FALSE; + +#if defined(_MSC_VER) +#pragma warning(push) + /* GetVersion was declared deprecated */ +#pragma warning(disable : 4996) +#endif + dwVersion = GetVersion(); +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + + dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); + dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); + dwBuild = ((dwVersion < 0x80000000) ? (DWORD)(HIWORD(dwVersion)) : 0); + (void)dwBuild; + + wowRet = IsWow64Process(GetCurrentProcess(), &isWoW); + + sprintf(name, + "Windows %u.%u%s", + (unsigned)dwMajorVersion, + (unsigned)dwMinorVersion, + (wowRet ? (isWoW ? " (WoW64)" : "") : " (?)")); + + *sysName = mg_strdup(name); + +#elif defined(__rtems__) + *sysName = mg_strdup("RTEMS"); +#elif defined(__ZEPHYR__) + *sysName = mg_strdup("Zephyr OS"); +#else + struct utsname name; + memset(&name, 0, sizeof(name)); + uname(&name); + *sysName = mg_strdup(name.sysname); +#endif +} + + +static void +legacy_init(const char **options) +{ + const char *ports_option = config_options[LISTENING_PORTS].default_value; + + if (options) { + const char **run_options = options; + const char *optname = config_options[LISTENING_PORTS].name; + + /* Try to find the "listening_ports" option */ + while (*run_options) { + if (!strcmp(*run_options, optname)) { + ports_option = run_options[1]; + } + run_options += 2; + } + } + + if (is_ssl_port_used(ports_option)) { + /* Initialize with SSL support */ + mg_init_library(MG_FEATURES_TLS); + } else { + /* Initialize without SSL support */ + mg_init_library(MG_FEATURES_DEFAULT); + } +} + +/* we'll assume it's only Windows that doesn't have socketpair() available */ +#if !defined(HAVE_SOCKETPAIR) && !defined(_WIN32) +#define HAVE_SOCKETPAIR 1 +#endif + +static int +mg_socketpair(int *sockA, int *sockB) +{ + int temp[2] = {-1, -1}; + int asock = -1; + + /** Default to unallocated */ + *sockA = -1; + *sockB = -1; + +#if defined(HAVE_SOCKETPAIR) + int ret = socketpair(AF_UNIX, SOCK_STREAM, 0, temp); + if (ret == 0) { + *sockA = temp[0]; + *sockB = temp[1]; + set_close_on_exec(*sockA, NULL, NULL); + set_close_on_exec(*sockB, NULL, NULL); + } + (void)asock; /* not used */ + return ret; +#else + /** No socketpair() call is available, so we'll have to roll our own + * implementation */ + asock = socket(PF_INET, SOCK_STREAM, 0); + if (asock >= 0) { + struct sockaddr_in addr; + struct sockaddr *pa = (struct sockaddr *)&addr; + socklen_t addrLen = sizeof(addr); + + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + addr.sin_port = 0; + + if ((bind(asock, pa, sizeof(addr)) == 0) + && (getsockname(asock, pa, &addrLen) == 0) + && (listen(asock, 1) == 0)) { + temp[0] = socket(PF_INET, SOCK_STREAM, 0); + if ((temp[0] >= 0) && (connect(temp[0], pa, sizeof(addr)) == 0)) { + temp[1] = accept(asock, pa, &addrLen); + if (temp[1] >= 0) { + closesocket(asock); + *sockA = temp[0]; + *sockB = temp[1]; + set_close_on_exec(*sockA, NULL, NULL); + set_close_on_exec(*sockB, NULL, NULL); + return 0; /* success! */ + } + } + } + } + + /* Cleanup */ + if (asock >= 0) + closesocket(asock); + if (temp[0] >= 0) + closesocket(temp[0]); + if (temp[1] >= 0) + closesocket(temp[1]); + return -1; /* fail! */ +#endif +} + +static int +mg_start_worker_thread(struct mg_context *ctx, int only_if_no_idle_threads) +{ + const unsigned int i = ctx->spawned_worker_threads; + if (i >= ctx->cfg_max_worker_threads) { + return -1; /* Oops, we hit our worker-thread limit! No more worker + threads, ever! */ + } + + (void)pthread_mutex_lock(&ctx->thread_mutex); +#if defined(ALTERNATIVE_QUEUE) + if ((only_if_no_idle_threads) && (ctx->idle_worker_thread_count > 0)) { +#else + if ((only_if_no_idle_threads) + && (ctx->idle_worker_thread_count + > (unsigned)(ctx->sq_head - ctx->sq_tail))) { +#endif + (void)pthread_mutex_unlock(&ctx->thread_mutex); + return -2; /* There are idle threads available, so no need to spawn a + new worker thread now */ + } + ctx->idle_worker_thread_count++; /* we do this here to avoid a race + condition while the thread is starting + up */ + (void)pthread_mutex_unlock(&ctx->thread_mutex); + + ctx->worker_connections[i].phys_ctx = ctx; + int ret = mg_start_thread_with_id(worker_thread, + &ctx->worker_connections[i], + &ctx->worker_threadids[i]); + if (ret == 0) { + ctx->spawned_worker_threads++; /* note that we've filled another slot in + the table */ + DEBUG_TRACE("Started worker_thread #%i", ctx->spawned_worker_threads); + } else { + (void)pthread_mutex_lock(&ctx->thread_mutex); + ctx->idle_worker_thread_count--; /* whoops, roll-back on error */ + (void)pthread_mutex_unlock(&ctx->thread_mutex); + } + return ret; +} + +CIVETWEB_API struct mg_context * +mg_start2(struct mg_init_data *init, struct mg_error_data *error) +{ + struct mg_context *ctx; + const char *name, *value, *default_value; + int idx, ok, prespawnthreadcount, workerthreadcount; + unsigned int i; + int itmp; + void (*exit_callback)(const struct mg_context *ctx) = 0; + const char **options = + ((init != NULL) ? (init->configuration_options) : (NULL)); + + struct mg_workerTLS tls; + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OK; + error->code_sub = 0; + if (error->text_buffer_size > 0) { + *error->text = 0; + } + } + + if (mg_init_library_called == 0) { + /* Legacy INIT, if mg_start is called without mg_init_library. + * Note: This will cause a memory leak when unloading the library. + */ + legacy_init(options); + } + if (mg_init_library_called == 0) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_LIBRARY_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + "Library uninitialized"); + } + return NULL; + } + + /* Allocate context and initialize reasonable general case defaults. */ + ctx = (struct mg_context *)mg_calloc(1, sizeof(*ctx)); + if (ctx == NULL) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)sizeof(*ctx); + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + "Out of memory"); + } + return NULL; + } + + /* Random number generator will initialize at the first call */ + ctx->dd.auth_nonce_mask = + (uint64_t)get_random() ^ (uint64_t)(ptrdiff_t)(options); + + /* Save started thread index to reuse in other external API calls + * For the sake of thread synchronization all non-civetweb threads + * can be considered as single external thread */ + ctx->starter_thread_idx = (unsigned)mg_atomic_inc(&thread_idx_max); + tls.is_master = -1; /* Thread calling mg_start */ + tls.thread_idx = ctx->starter_thread_idx; +#if defined(_WIN32) + tls.pthread_cond_helper_mutex = NULL; +#endif + pthread_setspecific(sTlsKey, &tls); + + ok = (0 == pthread_mutex_init(&ctx->thread_mutex, &pthread_mutex_attr)); +#if !defined(ALTERNATIVE_QUEUE) + ok &= (0 == pthread_cond_init(&ctx->sq_empty, NULL)); + ok &= (0 == pthread_cond_init(&ctx->sq_full, NULL)); + ctx->sq_blocked = 0; +#endif + ok &= (0 == pthread_mutex_init(&ctx->nonce_mutex, &pthread_mutex_attr)); +#if defined(USE_LUA) + ok &= (0 == pthread_mutex_init(&ctx->lua_bg_mutex, &pthread_mutex_attr)); +#endif + + /** mg_stop() will close the user_shutdown_notification_socket, and that + * will cause poll() to return immediately in the master-thread, so that + * mg_stop() can also return immediately. + */ + ok &= (0 + == mg_socketpair(&ctx->user_shutdown_notification_socket, + &ctx->thread_shutdown_notification_socket)); + + if (!ok) { + unsigned error_id = (unsigned)ERRNO; + const char *err_msg = + "Cannot initialize thread synchronization objects"; + /* Fatal error - abort start. However, this situation should never + * occur in practice. */ + + mg_cry_ctx_internal(ctx, "%s", err_msg); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OS_ERROR; + error->code_sub = error_id; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + mg_free(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + + if ((init != NULL) && (init->callbacks != NULL)) { + /* Set all callbacks except exit_context. */ + ctx->callbacks = *init->callbacks; + exit_callback = init->callbacks->exit_context; + /* The exit callback is activated once the context is successfully + * created. It should not be called, if an incomplete context object + * is deleted during a failed initialization. */ + ctx->callbacks.exit_context = 0; + } + ctx->user_data = ((init != NULL) ? (init->user_data) : (NULL)); + ctx->dd.handlers = NULL; + ctx->dd.next = NULL; + +#if defined(USE_LUA) + lua_ctx_init(ctx); +#endif + + /* Store options */ + while (options && (name = *options++) != NULL) { + idx = get_option_index(name); + if (idx == -1) { + mg_cry_ctx_internal(ctx, "Invalid option: %s", name); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = (unsigned)-1; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid configuration option: %s", + name); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + + } else if ((value = *options++) == NULL) { + mg_cry_ctx_internal(ctx, "%s: option value cannot be NULL", name); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = (unsigned)idx; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid configuration option value: %s", + name); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + if (ctx->dd.config[idx] != NULL) { + /* A duplicate configuration option is not an error - the last + * option value will be used. */ + mg_cry_ctx_internal(ctx, "warning: %s: duplicate option", name); + mg_free(ctx->dd.config[idx]); + } + ctx->dd.config[idx] = mg_strdup_ctx(value, ctx); + DEBUG_TRACE("[%s] -> [%s]", name, value); + } + + /* Set default value if needed */ + for (i = 0; config_options[i].name != NULL; i++) { + default_value = config_options[i].default_value; + if ((ctx->dd.config[i] == NULL) && (default_value != NULL)) { + ctx->dd.config[i] = mg_strdup_ctx(default_value, ctx); + } + } + + /* Request size option */ + itmp = atoi(ctx->dd.config[MAX_REQUEST_SIZE]); + if (itmp < 1024) { + mg_cry_ctx_internal(ctx, + "%s too small", + config_options[MAX_REQUEST_SIZE].name); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = (unsigned)MAX_REQUEST_SIZE; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid configuration option value: %s", + config_options[MAX_REQUEST_SIZE].name); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + ctx->max_request_size = (unsigned)itmp; + + /* Queue length */ +#if !defined(ALTERNATIVE_QUEUE) + itmp = atoi(ctx->dd.config[CONNECTION_QUEUE_SIZE]); + if (itmp < 1) { + mg_cry_ctx_internal(ctx, + "%s too small", + config_options[CONNECTION_QUEUE_SIZE].name); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = CONNECTION_QUEUE_SIZE; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid configuration option value: %s", + config_options[CONNECTION_QUEUE_SIZE].name); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + ctx->squeue = + (struct socket *)mg_calloc((unsigned int)itmp, sizeof(struct socket)); + if (ctx->squeue == NULL) { + mg_cry_ctx_internal(ctx, + "Out of memory: Cannot allocate %s", + config_options[CONNECTION_QUEUE_SIZE].name); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)itmp * (unsigned)sizeof(struct socket); + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Out of memory: Cannot allocate %s", + config_options[CONNECTION_QUEUE_SIZE].name); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + ctx->sq_size = itmp; +#endif + + /* Worker thread count option */ + workerthreadcount = atoi(ctx->dd.config[NUM_THREADS]); + prespawnthreadcount = atoi(ctx->dd.config[PRESPAWN_THREADS]); + + if ((prespawnthreadcount < 0) + || (prespawnthreadcount > workerthreadcount)) { + prespawnthreadcount = + workerthreadcount; /* can't prespawn more than all of them! */ + } + + if ((workerthreadcount > MAX_WORKER_THREADS) || (workerthreadcount <= 0)) { + if (workerthreadcount <= 0) { + mg_cry_ctx_internal(ctx, "%s", "Invalid number of worker threads"); + } else { + mg_cry_ctx_internal(ctx, "%s", "Too many worker threads"); + } + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = NUM_THREADS; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid configuration option value: %s", + config_options[NUM_THREADS].name); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + + /* Document root */ +#if defined(NO_FILES) + if (ctx->dd.config[DOCUMENT_ROOT] != NULL) { + mg_cry_ctx_internal(ctx, "%s", "Document root must not be set"); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = (unsigned)DOCUMENT_ROOT; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid configuration option value: %s", + config_options[DOCUMENT_ROOT].name); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } +#endif + + get_system_name(&ctx->systemName); + +#if defined(USE_LUA) + /* If a Lua background script has been configured, start it. */ + ctx->lua_bg_log_available = 0; + if (ctx->dd.config[LUA_BACKGROUND_SCRIPT] != NULL) { + char ebuf[256]; + struct vec opt_vec; + struct vec eq_vec; + const char *sparams; + + memset(ebuf, 0, sizeof(ebuf)); + pthread_mutex_lock(&ctx->lua_bg_mutex); + + /* Create a Lua state, load all standard libraries and the mg table */ + lua_State *state = mg_lua_context_script_prepare( + ctx->dd.config[LUA_BACKGROUND_SCRIPT], ctx, ebuf, sizeof(ebuf)); + if (!state) { + mg_cry_ctx_internal(ctx, + "lua_background_script load error: %s", + ebuf); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_SCRIPT_ERROR; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Error in script %s: %s", + config_options[LUA_BACKGROUND_SCRIPT].name, + ebuf); + } + + pthread_mutex_unlock(&ctx->lua_bg_mutex); + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + + /* Add a table with parameters into mg.params */ + sparams = ctx->dd.config[LUA_BACKGROUND_SCRIPT_PARAMS]; + if (sparams && sparams[0]) { + lua_getglobal(state, "mg"); + lua_pushstring(state, "params"); + lua_newtable(state); + + while ((sparams = next_option(sparams, &opt_vec, &eq_vec)) + != NULL) { + reg_llstring( + state, opt_vec.ptr, opt_vec.len, eq_vec.ptr, eq_vec.len); + if (mg_strncasecmp(sparams, opt_vec.ptr, opt_vec.len) == 0) + break; + } + lua_rawset(state, -3); + lua_pop(state, 1); + } + + /* Call script */ + state = mg_lua_context_script_run(state, + ctx->dd.config[LUA_BACKGROUND_SCRIPT], + ctx, + ebuf, + sizeof(ebuf)); + if (!state) { + mg_cry_ctx_internal(ctx, + "lua_background_script start error: %s", + ebuf); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_SCRIPT_ERROR; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Error in script %s: %s", + config_options[DOCUMENT_ROOT].name, + ebuf); + } + pthread_mutex_unlock(&ctx->lua_bg_mutex); + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + + /* state remains valid */ + ctx->lua_background_state = (void *)state; + pthread_mutex_unlock(&ctx->lua_bg_mutex); + + } else { + ctx->lua_background_state = 0; + } +#endif + + /* Step by step initialization of ctx - depending on build options */ +#if !defined(NO_FILESYSTEMS) + if (!set_gpass_option(ctx, NULL)) { + const char *err_msg = "Invalid global password file"; + /* Fatal error - abort start. */ + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_PASS_FILE; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } +#endif + +#if defined(USE_MBEDTLS) || defined(USE_GNUTLS) + if (!mg_sslctx_init(ctx, NULL)) { + const char *err_msg = "Error initializing SSL context"; + /* Fatal error - abort start. */ + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_TLS_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + +#elif !defined(NO_SSL) + if (!init_ssl_ctx(ctx, NULL)) { + const char *err_msg = "Error initializing SSL context"; + /* Fatal error - abort start. */ + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_TLS_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } +#endif + + if (!set_ports_option(ctx)) { + const char *err_msg = "Failed to setup server ports"; + /* Fatal error - abort start. */ + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_PORTS_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + +#if !defined(_WIN32) && !defined(__ZEPHYR__) + if (!set_uid_option(ctx)) { + const char *err_msg = "Failed to run as configured user"; + /* Fatal error - abort start. */ + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_USER_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } +#endif + + if (!set_acl_option(ctx)) { + const char *err_msg = "Failed to setup access control list"; + /* Fatal error - abort start. */ + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_ACL_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + + ctx->cfg_max_worker_threads = ((unsigned int)(workerthreadcount)); + ctx->worker_threadids = + (pthread_t *)mg_calloc_ctx(ctx->cfg_max_worker_threads, + sizeof(pthread_t), + ctx); + + if (ctx->worker_threadids == NULL) { + const char *err_msg = "Not enough memory for worker thread ID array"; + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)ctx->cfg_max_worker_threads + * (unsigned)sizeof(pthread_t); + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + ctx->worker_connections = + (struct mg_connection *)mg_calloc_ctx(ctx->cfg_max_worker_threads, + sizeof(struct mg_connection), + ctx); + if (ctx->worker_connections == NULL) { + const char *err_msg = + "Not enough memory for worker thread connection array"; + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)ctx->cfg_max_worker_threads + * (unsigned)sizeof(struct mg_connection); + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + +#if defined(ALTERNATIVE_QUEUE) + ctx->client_wait_events = + (void **)mg_calloc_ctx(ctx->cfg_max_worker_threads, + sizeof(ctx->client_wait_events[0]), + ctx); + if (ctx->client_wait_events == NULL) { + const char *err_msg = "Not enough memory for worker event array"; + mg_cry_ctx_internal(ctx, "%s", err_msg); + mg_free(ctx->worker_threadids); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)ctx->cfg_max_worker_threads + * (unsigned)sizeof(ctx->client_wait_events[0]); + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + + ctx->client_socks = + (struct socket *)mg_calloc_ctx(ctx->cfg_max_worker_threads, + sizeof(ctx->client_socks[0]), + ctx); + if (ctx->client_socks == NULL) { + const char *err_msg = "Not enough memory for worker socket array"; + mg_cry_ctx_internal(ctx, "%s", err_msg); + mg_free(ctx->client_wait_events); + mg_free(ctx->worker_threadids); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)ctx->cfg_max_worker_threads + * (unsigned)sizeof(ctx->client_socks[0]); + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + + for (i = 0; (unsigned)i < ctx->cfg_max_worker_threads; i++) { + ctx->client_wait_events[i] = event_create(); + if (ctx->client_wait_events[i] == 0) { + const char *err_msg = "Error creating worker event %i"; + mg_cry_ctx_internal(ctx, err_msg, i); + while (i > 0) { + i--; + event_destroy(ctx->client_wait_events[i]); + } + mg_free(ctx->client_socks); + mg_free(ctx->client_wait_events); + mg_free(ctx->worker_threadids); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OS_ERROR; + error->code_sub = (unsigned)ERRNO; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + err_msg, + i); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + } +#endif + +#if defined(USE_TIMERS) + if (timers_init(ctx) != 0) { + const char *err_msg = "Error creating timers"; + mg_cry_ctx_internal(ctx, "%s", err_msg); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OS_ERROR; + error->code_sub = (unsigned)ERRNO; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + err_msg); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } +#endif + + /* Context has been created - init user libraries */ + if (ctx->callbacks.init_context) { + ctx->callbacks.init_context(ctx); + } + + /* From now, the context is successfully created. + * When it is destroyed, the exit callback should be called. */ + ctx->callbacks.exit_context = exit_callback; + ctx->context_type = CONTEXT_SERVER; /* server context */ + + /* Start worker threads */ + for (i = 0; (int)i < prespawnthreadcount; i++) { + /* worker_thread sets up the other fields */ + if (mg_start_worker_thread(ctx, 0) != 0) { + long error_no = (long)ERRNO; + + /* thread was not created */ + if (ctx->spawned_worker_threads > 0) { + /* If the second, third, ... thread cannot be created, set a + * warning, but keep running. */ + mg_cry_ctx_internal(ctx, + "Cannot start worker thread %i: error %ld", + ctx->spawned_worker_threads + 1, + error_no); + + /* If the server initialization should stop here, all + * threads that have already been created must be stopped + * first, before any free_context(ctx) call. + */ + + } else { + /* If the first worker thread cannot be created, stop + * initialization and free the entire server context. */ + mg_cry_ctx_internal(ctx, + "Cannot create threads: error %ld", + error_no); + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OS_ERROR; + error->code_sub = (unsigned)error_no; + mg_snprintf( + NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Cannot create first worker thread: error %ld", + error_no); + } + + free_context(ctx); + pthread_setspecific(sTlsKey, NULL); + return NULL; + } + break; + } + } + + /* Start master (listening) thread */ + mg_start_thread_with_id(master_thread, ctx, &ctx->masterthreadid); + + pthread_setspecific(sTlsKey, NULL); + return ctx; +} + + +CIVETWEB_API struct mg_context * +mg_start(const struct mg_callbacks *callbacks, + void *user_data, + const char **options) +{ + struct mg_init_data init = {0}; + init.callbacks = callbacks; + init.user_data = user_data; + init.configuration_options = options; + + return mg_start2(&init, NULL); +} + + +/* Add an additional domain to an already running web server. */ +CIVETWEB_API int +mg_start_domain2(struct mg_context *ctx, + const char **options, + struct mg_error_data *error) +{ + const char *name; + const char *value; + const char *default_value; + struct mg_domain_context *new_dom; + struct mg_domain_context *dom; + int idx, i; + + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OK; + error->code_sub = 0; + if (error->text_buffer_size > 0) { + *error->text = 0; + } + } + + if ((ctx == NULL) || (options == NULL)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_PARAM; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + "Invalid parameters"); + } + return -1; + } + + if (!STOP_FLAG_IS_ZERO(&ctx->stop_flag)) { + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_SERVER_STOPPED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + "Server already stopped"); + } + return -7; + } + + new_dom = (struct mg_domain_context *) + mg_calloc_ctx(1, sizeof(struct mg_domain_context), ctx); + + if (!new_dom) { + /* Out of memory */ + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_OUT_OF_MEMORY; + error->code_sub = (unsigned)sizeof(struct mg_domain_context); + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + "Out or memory"); + } + return -6; + } + + /* Store options - TODO: unite duplicate code */ + while (options && (name = *options++) != NULL) { + idx = get_option_index(name); + if (idx == -1) { + mg_cry_ctx_internal(ctx, "Invalid option: %s", name); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = (unsigned)-1; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid option: %s", + name); + } + mg_free(new_dom); + return -2; + } else if ((value = *options++) == NULL) { + mg_cry_ctx_internal(ctx, "%s: option value cannot be NULL", name); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INVALID_OPTION; + error->code_sub = (unsigned)idx; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Invalid option value: %s", + name); + } + mg_free(new_dom); + return -2; + } + if (new_dom->config[idx] != NULL) { + /* Duplicate option: Later values overwrite earlier ones. */ + mg_cry_ctx_internal(ctx, "warning: %s: duplicate option", name); + mg_free(new_dom->config[idx]); + } + new_dom->config[idx] = mg_strdup_ctx(value, ctx); + DEBUG_TRACE("[%s] -> [%s]", name, value); + } + + /* Authentication domain is mandatory */ + /* TODO: Maybe use a new option hostname? */ + if (!new_dom->config[AUTHENTICATION_DOMAIN]) { + mg_cry_ctx_internal(ctx, "%s", "authentication domain required"); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_MISSING_OPTION; + error->code_sub = AUTHENTICATION_DOMAIN; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Mandatory option %s missing", + config_options[AUTHENTICATION_DOMAIN].name); + } + mg_free(new_dom); + return -4; + } + + /* Set default value if needed. Take the config value from + * ctx as a default value. */ + for (i = 0; config_options[i].name != NULL; i++) { + default_value = ctx->dd.config[i]; + if ((new_dom->config[i] == NULL) && (default_value != NULL)) { + new_dom->config[i] = mg_strdup_ctx(default_value, ctx); + } + } + + new_dom->handlers = ctx->dd.handlers; + new_dom->next = NULL; + new_dom->nonce_count = 0; + new_dom->auth_nonce_mask = get_random() ^ (get_random() << 31); + +#if defined(USE_LUA) && defined(USE_WEBSOCKET) + new_dom->shared_lua_websockets = NULL; +#endif + +#if !defined(NO_SSL) && !defined(USE_MBEDTLS) && !defined(USE_GNUTLS) + if (!init_ssl_ctx(ctx, new_dom)) { + /* Init SSL failed */ + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_INIT_TLS_FAILED; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "%s", + "Initializing SSL context failed"); + } + mg_free(new_dom); + return -3; + } +#endif + + /* Add element to linked list. */ + mg_lock_context(ctx); + + idx = 0; + dom = &(ctx->dd); + for (;;) { + if (!mg_strcasecmp(new_dom->config[AUTHENTICATION_DOMAIN], + dom->config[AUTHENTICATION_DOMAIN])) { + /* Domain collision */ + mg_cry_ctx_internal(ctx, + "domain %s already in use", + new_dom->config[AUTHENTICATION_DOMAIN]); + if (error != NULL) { + error->code = MG_ERROR_DATA_CODE_DUPLICATE_DOMAIN; + mg_snprintf(NULL, + NULL, /* No truncation check for error buffers */ + error->text, + error->text_buffer_size, + "Domain %s specified by %s is already in use", + new_dom->config[AUTHENTICATION_DOMAIN], + config_options[AUTHENTICATION_DOMAIN].name); + } + mg_free(new_dom); + mg_unlock_context(ctx); + return -5; + } + + /* Count number of domains */ + idx++; + + if (dom->next == NULL) { + dom->next = new_dom; + break; + } + dom = dom->next; + } + + mg_unlock_context(ctx); + + /* Return domain number */ + return idx; +} + + +CIVETWEB_API int +mg_start_domain(struct mg_context *ctx, const char **options) +{ + return mg_start_domain2(ctx, options, NULL); +} + + +/* Feature check API function */ +CIVETWEB_API unsigned +mg_check_feature(unsigned feature) +{ + static const unsigned feature_set = 0 + /* Set bits for available features according to API documentation. + * This bit mask is created at compile time, according to the active + * preprocessor defines. It is a single const value at runtime. */ +#if !defined(NO_FILES) + | MG_FEATURES_FILES +#endif +#if !defined(NO_SSL) || defined(USE_MBEDTLS) || defined(USE_GNUTLS) + | MG_FEATURES_SSL +#endif +#if !defined(NO_CGI) + | MG_FEATURES_CGI +#endif +#if defined(USE_IPV6) + | MG_FEATURES_IPV6 +#endif +#if defined(USE_WEBSOCKET) + | MG_FEATURES_WEBSOCKET +#endif +#if defined(USE_LUA) + | MG_FEATURES_LUA +#endif +#if defined(USE_DUKTAPE) + | MG_FEATURES_SSJS +#endif +#if !defined(NO_CACHING) + | MG_FEATURES_CACHE +#endif +#if defined(USE_SERVER_STATS) + | MG_FEATURES_STATS +#endif +#if defined(USE_ZLIB) + | MG_FEATURES_COMPRESSION +#endif +#if defined(USE_HTTP2) + | MG_FEATURES_HTTP2 +#endif +#if defined(USE_X_DOM_SOCKET) + | MG_FEATURES_X_DOMAIN_SOCKET +#endif + + /* Set some extra bits not defined in the API documentation. + * These bits may change without further notice. */ +#if defined(MG_LEGACY_INTERFACE) + | 0x80000000u +#endif +#if defined(MG_EXPERIMENTAL_INTERFACES) + | 0x40000000u +#endif +#if !defined(NO_RESPONSE_BUFFERING) + | 0x20000000u +#endif +#if defined(MEMORY_DEBUGGING) + | 0x10000000u +#endif + ; + return (feature & feature_set); +} + + +static size_t +mg_str_append(char **dst, char *end, const char *src) +{ + size_t len = strlen(src); + if (*dst != end) { + /* Append src if enough space, or close dst. */ + if ((size_t)(end - *dst) > len) { + strcpy(*dst, src); + *dst += len; + } else { + *dst = end; + } + } + return len; +} + + +/* Get system information. It can be printed or stored by the caller. + * Return the size of available information. */ +CIVETWEB_API int +mg_get_system_info(char *buffer, int buflen) +{ + char *end, *append_eoobj = NULL, block[256]; + size_t system_info_length = 0; + +#if defined(_WIN32) + static const char eol[] = "\r\n", eoobj[] = "\r\n}\r\n"; +#else + static const char eol[] = "\n", eoobj[] = "\n}\n"; +#endif + + if ((buffer == NULL) || (buflen < 1)) { + buflen = 0; + end = buffer; + } else { + *buffer = 0; + end = buffer + buflen; + } + if (buflen > (int)(sizeof(eoobj) - 1)) { + /* has enough space to append eoobj */ + append_eoobj = buffer; + if (end) { + end -= sizeof(eoobj) - 1; + } + } + + system_info_length += mg_str_append(&buffer, end, "{"); + + /* Server version */ + { + const char *version = mg_version(); + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s\"version\" : \"%s\"", + eol, + version); + system_info_length += mg_str_append(&buffer, end, block); + } + + /* System info */ + { +#if defined(_WIN32) + DWORD dwVersion = 0; + DWORD dwMajorVersion = 0; + DWORD dwMinorVersion = 0; + SYSTEM_INFO si; + + GetSystemInfo(&si); + +#if defined(_MSC_VER) +#pragma warning(push) + /* GetVersion was declared deprecated */ +#pragma warning(disable : 4996) +#endif + dwVersion = GetVersion(); +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + + dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); + dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); + + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"os\" : \"Windows %u.%u\"", + eol, + (unsigned)dwMajorVersion, + (unsigned)dwMinorVersion); + system_info_length += mg_str_append(&buffer, end, block); + + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"cpu\" : \"type %u, cores %u, mask %x\"", + eol, + (unsigned)si.wProcessorArchitecture, + (unsigned)si.dwNumberOfProcessors, + (unsigned)si.dwActiveProcessorMask); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__rtems__) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"os\" : \"%s %s\"", + eol, + "RTEMS", + rtems_version()); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__ZEPHYR__) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"os\" : \"%s\"", + eol, + "Zephyr OS", + ZEPHYR_VERSION); + system_info_length += mg_str_append(&buffer, end, block); +#else + struct utsname name; + memset(&name, 0, sizeof(name)); + uname(&name); + + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"os\" : \"%s %s (%s) - %s\"", + eol, + name.sysname, + name.version, + name.release, + name.machine); + system_info_length += mg_str_append(&buffer, end, block); +#endif + } + + /* Features */ + { + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"features\" : %lu" + ",%s\"feature_list\" : \"Server:%s%s%s%s%s%s%s%s%s\"", + eol, + (unsigned long)mg_check_feature(0xFFFFFFFFu), + eol, + mg_check_feature(MG_FEATURES_FILES) ? " Files" : "", + mg_check_feature(MG_FEATURES_SSL) ? " HTTPS" : "", + mg_check_feature(MG_FEATURES_CGI) ? " CGI" : "", + mg_check_feature(MG_FEATURES_IPV6) ? " IPv6" : "", + mg_check_feature(MG_FEATURES_WEBSOCKET) ? " WebSockets" + : "", + mg_check_feature(MG_FEATURES_LUA) ? " Lua" : "", + mg_check_feature(MG_FEATURES_SSJS) ? " JavaScript" : "", + mg_check_feature(MG_FEATURES_CACHE) ? " Cache" : "", + mg_check_feature(MG_FEATURES_STATS) ? " Stats" : ""); + system_info_length += mg_str_append(&buffer, end, block); + +#if defined(USE_LUA) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"lua_version\" : \"%u (%s)\"", + eol, + (unsigned)LUA_VERSION_NUM, + LUA_RELEASE); + system_info_length += mg_str_append(&buffer, end, block); +#endif +#if defined(USE_DUKTAPE) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"javascript\" : \"Duktape %u.%u.%u\"", + eol, + (unsigned)DUK_VERSION / 10000, + ((unsigned)DUK_VERSION / 100) % 100, + (unsigned)DUK_VERSION % 100); + system_info_length += mg_str_append(&buffer, end, block); +#endif + } + + /* Build identifier. If BUILD_DATE is not set, __DATE__ will be used. */ + { +#if defined(BUILD_DATE) + const char *bd = BUILD_DATE; +#else +#if defined(GCC_DIAGNOSTIC) +#if GCC_VERSION >= 40900 +#pragma GCC diagnostic push + /* Disable idiotic compiler warning -Wdate-time, appeared in gcc5. This + * does not work in some versions. If "BUILD_DATE" is defined to some + * string, it is used instead of __DATE__. */ +#pragma GCC diagnostic ignored "-Wdate-time" +#endif +#endif + const char *bd = __DATE__; +#if defined(GCC_DIAGNOSTIC) +#if GCC_VERSION >= 40900 +#pragma GCC diagnostic pop +#endif +#endif +#endif + + mg_snprintf( + NULL, NULL, block, sizeof(block), ",%s\"build\" : \"%s\"", eol, bd); + + system_info_length += mg_str_append(&buffer, end, block); + } + + /* Compiler information */ + /* http://sourceforge.net/p/predef/wiki/Compilers/ */ + { +#if defined(_MSC_VER) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"MSC: %u (%u)\"", + eol, + (unsigned)_MSC_VER, + (unsigned)_MSC_FULL_VER); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__MINGW64__) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"MinGW64: %u.%u\"", + eol, + (unsigned)__MINGW64_VERSION_MAJOR, + (unsigned)__MINGW64_VERSION_MINOR); + system_info_length += mg_str_append(&buffer, end, block); + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"MinGW32: %u.%u\"", + eol, + (unsigned)__MINGW32_MAJOR_VERSION, + (unsigned)__MINGW32_MINOR_VERSION); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__MINGW32__) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"MinGW32: %u.%u\"", + eol, + (unsigned)__MINGW32_MAJOR_VERSION, + (unsigned)__MINGW32_MINOR_VERSION); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__clang__) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"clang: %u.%u.%u (%s)\"", + eol, + __clang_major__, + __clang_minor__, + __clang_patchlevel__, + __clang_version__); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__GNUC__) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"gcc: %u.%u.%u\"", + eol, + (unsigned)__GNUC__, + (unsigned)__GNUC_MINOR__, + (unsigned)__GNUC_PATCHLEVEL__); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__INTEL_COMPILER) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"Intel C/C++: %u\"", + eol, + (unsigned)__INTEL_COMPILER); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__BORLANDC__) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"Borland C: 0x%x\"", + eol, + (unsigned)__BORLANDC__); + system_info_length += mg_str_append(&buffer, end, block); +#elif defined(__SUNPRO_C) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"Solaris: 0x%x\"", + eol, + (unsigned)__SUNPRO_C); + system_info_length += mg_str_append(&buffer, end, block); +#else + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"compiler\" : \"other\"", + eol); + system_info_length += mg_str_append(&buffer, end, block); +#endif + } + + /* Determine 32/64 bit data mode. + * see https://en.wikipedia.org/wiki/64-bit_computing */ + { + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"data_model\" : \"int:%u/%u/%u/%u, float:%u/%u/%u, " + "char:%u/%u, " + "ptr:%u, size:%u, time:%u\"", + eol, + (unsigned)sizeof(short), + (unsigned)sizeof(int), + (unsigned)sizeof(long), + (unsigned)sizeof(long long), + (unsigned)sizeof(float), + (unsigned)sizeof(double), + (unsigned)sizeof(long double), + (unsigned)sizeof(char), + (unsigned)sizeof(wchar_t), + (unsigned)sizeof(void *), + (unsigned)sizeof(size_t), + (unsigned)sizeof(time_t)); + system_info_length += mg_str_append(&buffer, end, block); + } + + /* Terminate string */ + if (append_eoobj) { + strcat(append_eoobj, eoobj); + } + system_info_length += sizeof(eoobj) - 1; + + return (int)system_info_length; +} + + +/* Get context information. It can be printed or stored by the caller. + * Return the size of available information. */ +CIVETWEB_API int +mg_get_context_info(const struct mg_context *ctx, char *buffer, int buflen) +{ +#if defined(USE_SERVER_STATS) + char *end, *append_eoobj = NULL, block[256]; + size_t context_info_length = 0; + +#if defined(_WIN32) + static const char eol[] = "\r\n", eoobj[] = "\r\n}\r\n"; +#else + static const char eol[] = "\n", eoobj[] = "\n}\n"; +#endif + struct mg_memory_stat *ms = get_memory_stat((struct mg_context *)ctx); + + if ((buffer == NULL) || (buflen < 1)) { + buflen = 0; + end = buffer; + } else { + *buffer = 0; + end = buffer + buflen; + } + if (buflen > (int)(sizeof(eoobj) - 1)) { + /* has enough space to append eoobj */ + append_eoobj = buffer; + end -= sizeof(eoobj) - 1; + } + + context_info_length += mg_str_append(&buffer, end, "{"); + + if (ms) { /* <-- should be always true */ + /* Memory information */ + int blockCount = (int)ms->blockCount; + int64_t totalMemUsed = ms->totalMemUsed; + int64_t maxMemUsed = ms->maxMemUsed; + if (totalMemUsed > maxMemUsed) { + maxMemUsed = totalMemUsed; + } + + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s\"memory\" : {%s" + "\"blocks\" : %i,%s" + "\"used\" : %" INT64_FMT ",%s" + "\"maxUsed\" : %" INT64_FMT "%s" + "}", + eol, + eol, + blockCount, + eol, + totalMemUsed, + eol, + maxMemUsed, + eol); + context_info_length += mg_str_append(&buffer, end, block); + } + + if (ctx) { + /* Declare all variables at begin of the block, to comply + * with old C standards. */ + char start_time_str[64] = {0}; + char now_str[64] = {0}; + time_t start_time = ctx->start_time; + time_t now = time(NULL); + int64_t total_data_read, total_data_written; + int active_connections = (int)ctx->active_connections; + int max_active_connections = (int)ctx->max_active_connections; + int total_connections = (int)ctx->total_connections; + if (active_connections > max_active_connections) { + max_active_connections = active_connections; + } + if (active_connections > total_connections) { + total_connections = active_connections; + } + + /* Connections information */ + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"connections\" : {%s" + "\"active\" : %i,%s" + "\"maxActive\" : %i,%s" + "\"total\" : %i%s" + "}", + eol, + eol, + active_connections, + eol, + max_active_connections, + eol, + total_connections, + eol); + context_info_length += mg_str_append(&buffer, end, block); + + /* Queue information */ +#if !defined(ALTERNATIVE_QUEUE) + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"queue\" : {%s" + "\"length\" : %i,%s" + "\"filled\" : %i,%s" + "\"maxFilled\" : %i,%s" + "\"full\" : %s%s" + "}", + eol, + eol, + ctx->sq_size, + eol, + ctx->sq_head - ctx->sq_tail, + eol, + ctx->sq_max_fill, + eol, + (ctx->sq_blocked ? "true" : "false"), + eol); + context_info_length += mg_str_append(&buffer, end, block); +#endif + + /* Requests information */ + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"requests\" : {%s" + "\"total\" : %lu%s" + "}", + eol, + eol, + (unsigned long)ctx->total_requests, + eol); + context_info_length += mg_str_append(&buffer, end, block); + + /* Data information */ + total_data_read = + mg_atomic_add64((volatile int64_t *)&ctx->total_data_read, 0); + total_data_written = + mg_atomic_add64((volatile int64_t *)&ctx->total_data_written, 0); + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"data\" : {%s" + "\"read\" : %" INT64_FMT ",%s" + "\"written\" : %" INT64_FMT "%s" + "}", + eol, + eol, + total_data_read, + eol, + total_data_written, + eol); + context_info_length += mg_str_append(&buffer, end, block); + + /* Execution time information */ + gmt_time_string(start_time_str, + sizeof(start_time_str) - 1, + &start_time); + gmt_time_string(now_str, sizeof(now_str) - 1, &now); + + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + ",%s\"time\" : {%s" + "\"uptime\" : %.0f,%s" + "\"start\" : \"%s\",%s" + "\"now\" : \"%s\"%s" + "}", + eol, + eol, + difftime(now, start_time), + eol, + start_time_str, + eol, + now_str, + eol); + context_info_length += mg_str_append(&buffer, end, block); + } + + /* Terminate string */ + if (append_eoobj) { + strcat(append_eoobj, eoobj); + } + context_info_length += sizeof(eoobj) - 1; + + return (int)context_info_length; +#else + (void)ctx; + if ((buffer != NULL) && (buflen > 0)) { + *buffer = 0; + } + return 0; +#endif +} + + +CIVETWEB_API void +mg_disable_connection_keep_alive(struct mg_connection *conn) +{ + /* https://github.com/civetweb/civetweb/issues/727 */ + if (conn != NULL) { + conn->must_close = 1; + } +} + + +#if defined(MG_EXPERIMENTAL_INTERFACES) +/* Get connection information. It can be printed or stored by the caller. + * Return the size of available information. */ +CIVETWEB_API int +mg_get_connection_info(const struct mg_context *ctx, + int idx, + char *buffer, + int buflen) +{ + const struct mg_connection *conn; + const struct mg_request_info *ri; + char *end, *append_eoobj = NULL, block[256]; + size_t connection_info_length = 0; + int state = 0; + const char *state_str = "unknown"; + +#if defined(_WIN32) + static const char eol[] = "\r\n", eoobj[] = "\r\n}\r\n"; +#else + static const char eol[] = "\n", eoobj[] = "\n}\n"; +#endif + + if ((buffer == NULL) || (buflen < 1)) { + buflen = 0; + end = buffer; + } else { + *buffer = 0; + end = buffer + buflen; + } + if (buflen > (int)(sizeof(eoobj) - 1)) { + /* has enough space to append eoobj */ + append_eoobj = buffer; + end -= sizeof(eoobj) - 1; + } + + if ((ctx == NULL) || (idx < 0)) { + /* Parameter error */ + return 0; + } + + if ((unsigned)idx >= ctx->cfg_max_worker_threads) { + /* Out of range */ + return 0; + } + + /* Take connection [idx]. This connection is not locked in + * any way, so some other thread might use it. */ + conn = (ctx->worker_connections) + idx; + + /* Initialize output string */ + connection_info_length += mg_str_append(&buffer, end, "{"); + + /* Init variables */ + ri = &(conn->request_info); + +#if defined(USE_SERVER_STATS) + state = conn->conn_state; + + /* State as string */ + switch (state) { + case 0: + state_str = "undefined"; + break; + case 1: + state_str = "not used"; + break; + case 2: + state_str = "init"; + break; + case 3: + state_str = "ready"; + break; + case 4: + state_str = "processing"; + break; + case 5: + state_str = "processed"; + break; + case 6: + state_str = "to close"; + break; + case 7: + state_str = "closing"; + break; + case 8: + state_str = "closed"; + break; + case 9: + state_str = "done"; + break; + } +#endif + + /* Connection info */ + if ((state >= 3) && (state < 9)) { + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s\"connection\" : {%s" + "\"remote\" : {%s" + "\"protocol\" : \"%s\",%s" + "\"addr\" : \"%s\",%s" + "\"port\" : %u%s" + "},%s" + "\"handled_requests\" : %u%s" + "}", + eol, + eol, + eol, + get_proto_name(conn), + eol, + ri->remote_addr, + eol, + ri->remote_port, + eol, + eol, + conn->handled_requests, + eol); + connection_info_length += mg_str_append(&buffer, end, block); + } + + /* Request info */ + if ((state >= 4) && (state < 6)) { + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s%s\"request_info\" : {%s" + "\"method\" : \"%s\",%s" + "\"uri\" : \"%s\",%s" + "\"query\" : %s%s%s%s" + "}", + (connection_info_length > 1 ? "," : ""), + eol, + eol, + ri->request_method, + eol, + ri->request_uri, + eol, + ri->query_string ? "\"" : "", + ri->query_string ? ri->query_string : "null", + ri->query_string ? "\"" : "", + eol); + connection_info_length += mg_str_append(&buffer, end, block); + } + + /* Execution time information */ + if ((state >= 2) && (state < 9)) { + char start_time_str[64] = {0}; + char close_time_str[64] = {0}; + time_t start_time = conn->conn_birth_time; + time_t close_time = 0; + double time_diff; + + gmt_time_string(start_time_str, + sizeof(start_time_str) - 1, + &start_time); +#if defined(USE_SERVER_STATS) + close_time = conn->conn_close_time; +#endif + if (close_time != 0) { + time_diff = difftime(close_time, start_time); + gmt_time_string(close_time_str, + sizeof(close_time_str) - 1, + &close_time); + } else { + time_t now = time(NULL); + time_diff = difftime(now, start_time); + close_time_str[0] = 0; /* or use "now" ? */ + } + + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s%s\"time\" : {%s" + "\"uptime\" : %.0f,%s" + "\"start\" : \"%s\",%s" + "\"closed\" : \"%s\"%s" + "}", + (connection_info_length > 1 ? "," : ""), + eol, + eol, + time_diff, + eol, + start_time_str, + eol, + close_time_str, + eol); + connection_info_length += mg_str_append(&buffer, end, block); + } + + /* Remote user name */ + if ((ri->remote_user) && (state < 9)) { + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s%s\"user\" : {%s" + "\"name\" : \"%s\",%s" + "}", + (connection_info_length > 1 ? "," : ""), + eol, + eol, + ri->remote_user, + eol); + connection_info_length += mg_str_append(&buffer, end, block); + } + + /* Data block */ + if (state >= 3) { + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s%s\"data\" : {%s" + "\"read\" : %" INT64_FMT ",%s" + "\"written\" : %" INT64_FMT "%s" + "}", + (connection_info_length > 1 ? "," : ""), + eol, + eol, + conn->consumed_content, + eol, + conn->num_bytes_sent, + eol); + connection_info_length += mg_str_append(&buffer, end, block); + } + + /* State */ + mg_snprintf(NULL, + NULL, + block, + sizeof(block), + "%s%s\"state\" : \"%s\"", + (connection_info_length > 1 ? "," : ""), + eol, + state_str); + connection_info_length += mg_str_append(&buffer, end, block); + + /* Terminate string */ + if (append_eoobj) { + strcat(append_eoobj, eoobj); + } + connection_info_length += sizeof(eoobj) - 1; + + return (int)connection_info_length; +} + + +#if 0 +/* Get handler information. Not fully implemented. Is it required? */ +CIVETWEB_API int +mg_get_handler_info(struct mg_context *ctx, + char *buffer, + int buflen) +{ + int handler_info_len = 0; + struct mg_handler_info *tmp_rh; + mg_lock_context(ctx); + + for (tmp_rh = ctx->dd.handlers; tmp_rh != NULL; tmp_rh = tmp_rh->next) { + + if (buflen > handler_info_len + tmp_rh->uri_len) { + memcpy(buffer + handler_info_len, tmp_rh->uri, tmp_rh->uri_len); + } + handler_info_len += tmp_rh->uri_len; + + switch (tmp_rh->handler_type) { + case REQUEST_HANDLER: + (void)tmp_rh->handler; + break; + case WEBSOCKET_HANDLER: + (void)tmp_rh->connect_handler; + (void)tmp_rh->ready_handler; + (void)tmp_rh->data_handler; + (void)tmp_rh->close_handler; + break; + case AUTH_HANDLER: + (void)tmp_rh->auth_handler; + break; + } + (void)cbdata; + } + + mg_unlock_context(ctx); + return handler_info_len; +} +#endif +#endif + + +/* Initialize this library. This function does not need to be thread safe. + */ +CIVETWEB_API unsigned +mg_init_library(unsigned features) +{ + unsigned features_to_init = mg_check_feature(features & 0xFFu); + unsigned features_inited = features_to_init; + + if (mg_init_library_called <= 0) { + /* Not initialized yet */ + if (0 != pthread_mutex_init(&global_lock_mutex, NULL)) { + return 0; + } + } + + mg_global_lock(); + + if (mg_init_library_called <= 0) { + int i; + size_t len; + +#if defined(_WIN32) + int file_mutex_init = 1; + int wsa = 1; +#else + int mutexattr_init = 1; +#endif + int failed = 1; + int key_create = pthread_key_create(&sTlsKey, tls_dtor); + + if (key_create == 0) { +#if defined(_WIN32) + file_mutex_init = + pthread_mutex_init(&global_log_file_lock, &pthread_mutex_attr); + if (file_mutex_init == 0) { + /* Start WinSock */ + WSADATA data; + failed = wsa = WSAStartup(MAKEWORD(2, 2), &data); + } +#else + mutexattr_init = pthread_mutexattr_init(&pthread_mutex_attr); + if (mutexattr_init == 0) { + failed = pthread_mutexattr_settype(&pthread_mutex_attr, + PTHREAD_MUTEX_RECURSIVE); + } +#endif + } + + if (failed) { +#if defined(_WIN32) + if (wsa == 0) { + (void)WSACleanup(); + } + if (file_mutex_init == 0) { + (void)pthread_mutex_destroy(&global_log_file_lock); + } +#else + if (mutexattr_init == 0) { + (void)pthread_mutexattr_destroy(&pthread_mutex_attr); + } +#endif + if (key_create == 0) { + (void)pthread_key_delete(sTlsKey); + } + mg_global_unlock(); + (void)pthread_mutex_destroy(&global_lock_mutex); + return 0; + } + + len = 1; + for (i = 0; http_methods[i].name != NULL; i++) { + size_t sl = strlen(http_methods[i].name); + len += sl; + if (i > 0) { + len += 2; + } + } + all_methods = (char *)mg_malloc(len); + if (!all_methods) { + /* Must never happen */ + mg_global_unlock(); + (void)pthread_mutex_destroy(&global_lock_mutex); + return 0; + } + all_methods[0] = 0; + for (i = 0; http_methods[i].name != NULL; i++) { + if (i > 0) { + strcat(all_methods, ", "); + strcat(all_methods, http_methods[i].name); + } else { + strcpy(all_methods, http_methods[i].name); + } + } + } + +#if defined(USE_LUA) + lua_init_optional_libraries(); +#endif + +#if (defined(OPENSSL_API_1_0) || defined(OPENSSL_API_1_1) \ + || defined(OPENSSL_API_3_0)) \ + && !defined(NO_SSL) + + if (features_to_init & MG_FEATURES_SSL) { + if (!mg_openssl_initialized) { + char ebuf[128]; + if (initialize_openssl(ebuf, sizeof(ebuf))) { + mg_openssl_initialized = 1; + } else { + (void)ebuf; + DEBUG_TRACE("Initializing SSL failed: %s", ebuf); + features_inited &= ~((unsigned)(MG_FEATURES_SSL)); + } + } else { + /* ssl already initialized */ + } + } + +#endif + + if (mg_init_library_called <= 0) { + mg_init_library_called = 1; + } else { + mg_init_library_called++; + } + mg_global_unlock(); + + return features_inited; +} + + +/* Un-initialize this library. */ +CIVETWEB_API unsigned +mg_exit_library(void) +{ + if (mg_init_library_called <= 0) { + return 0; + } + + mg_global_lock(); + + mg_init_library_called--; + if (mg_init_library_called == 0) { +#if (defined(OPENSSL_API_1_0) || defined(OPENSSL_API_1_1)) && !defined(NO_SSL) + if (mg_openssl_initialized) { + uninitialize_openssl(); + mg_openssl_initialized = 0; + } +#endif + +#if defined(_WIN32) + (void)WSACleanup(); + (void)pthread_mutex_destroy(&global_log_file_lock); +#else + (void)pthread_mutexattr_destroy(&pthread_mutex_attr); +#endif + + (void)pthread_key_delete(sTlsKey); + +#if defined(USE_LUA) + lua_exit_optional_libraries(); +#endif + mg_free(all_methods); + all_methods = NULL; + + mg_global_unlock(); + (void)pthread_mutex_destroy(&global_lock_mutex); + return 1; + } + + mg_global_unlock(); + return 1; +} + + +/* End of civetweb.c */ diff --git a/v2/webui/src/civetweb/civetweb.h b/v2/webui/src/civetweb/civetweb.h new file mode 100644 index 0000000..55bef0a --- /dev/null +++ b/v2/webui/src/civetweb/civetweb.h @@ -0,0 +1,1844 @@ +// Disable All Warnings +#ifdef _MSC_VER +#pragma warning(push, 0) +#pragma warning(disable: 4996) +#elif defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) +#pragma GCC system_header +#endif + +/* Copyright (c) 2013-2024 the Civetweb developers + * Copyright (c) 2004-2013 Sergey Lyubka + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef CIVETWEB_HEADER_INCLUDED +#define CIVETWEB_HEADER_INCLUDED + +#define CIVETWEB_VERSION "1.17" +#define CIVETWEB_VERSION_MAJOR (1) +#define CIVETWEB_VERSION_MINOR (17) +#define CIVETWEB_VERSION_PATCH (0) + +#ifndef CIVETWEB_API +#if defined(_WIN32) +#if defined(CIVETWEB_DLL_EXPORTS) +#define CIVETWEB_API __declspec(dllexport) +#elif defined(CIVETWEB_DLL_IMPORTS) +#define CIVETWEB_API __declspec(dllimport) +#else +#define CIVETWEB_API +#endif +#elif __GNUC__ >= 4 +#define CIVETWEB_API __attribute__((visibility("default"))) +#else +#define CIVETWEB_API +#endif +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +/* Init Features */ +enum { + MG_FEATURES_DEFAULT = 0x0u, + + /* Support files from local directories */ + /* Will only work, if NO_FILES is not set. */ + MG_FEATURES_FILES = 0x1u, + + /* Support transport layer security (TLS). */ + /* SSL is still often used synonymously for TLS. */ + /* Will only work, if NO_SSL is not set. */ + MG_FEATURES_TLS = 0x2u, + MG_FEATURES_SSL = 0x2u, + + /* Support common gateway interface (CGI). */ + /* Will only work, if NO_CGI is not set. */ + MG_FEATURES_CGI = 0x4u, + + /* Support IPv6. */ + /* Will only work, if USE_IPV6 is set. */ + MG_FEATURES_IPV6 = 0x8u, + + /* Support WebSocket protocol. */ + /* Will only work, if USE_WEBSOCKET is set. */ + MG_FEATURES_WEBSOCKET = 0x10u, + + /* Support server side Lua scripting. */ + /* Will only work, if USE_LUA is set. */ + MG_FEATURES_LUA = 0x20u, + + /* Support server side JavaScript scripting. */ + /* Will only work, if USE_DUKTAPE is set. */ + MG_FEATURES_SSJS = 0x40u, + + /* Provide data required for caching files. */ + /* Will only work, if NO_CACHING is not set. */ + MG_FEATURES_CACHE = 0x80u, + + /* Collect server status information. */ + /* Will only work, if USE_SERVER_STATS is set. */ + MG_FEATURES_STATS = 0x100u, + + /* Support on-the-fly compression. */ + /* Will only work, if USE_ZLIB is set. */ + MG_FEATURES_COMPRESSION = 0x200u, + + /* HTTP/2 support enabled. */ + MG_FEATURES_HTTP2 = 0x400u, + + /* Support unix domain sockets. */ + MG_FEATURES_X_DOMAIN_SOCKET = 0x800u, + + /* Bit mask for all feature defines. */ + MG_FEATURES_ALL = 0xFFFFu +}; + + +/* Initialize this library. This should be called once before any other + * function from this library. This function is not guaranteed to be + * thread safe. + * Parameters: + * features: bit mask for features to be initialized. + * Note: The TLS libraries (like OpenSSL) is initialized + * only if the MG_FEATURES_TLS bit is set. + * Currently the other bits do not influence + * initialization, but this may change in future + * versions. + * Return value: + * initialized features + * 0: error + */ +CIVETWEB_API unsigned mg_init_library(unsigned features); + + +/* Un-initialize this library. + * Return value: + * 0: error + */ +CIVETWEB_API unsigned mg_exit_library(void); + + +struct mg_context; /* Handle for the HTTP service itself */ +struct mg_connection; /* Handle for the individual connection */ + + +/* Maximum number of headers */ +#define MG_MAX_HEADERS (64) + +struct mg_header { + const char *name; /* HTTP header name */ + const char *value; /* HTTP header value */ +}; + + +/* This structure contains information about the HTTP request. */ +struct mg_request_info { + const char *request_method; /* "GET", "POST", etc */ + const char *request_uri; /* URL-decoded URI (absolute or relative, + * as in the request) */ + const char *local_uri_raw; /* URL-decoded URI (relative). Can be NULL + * if the request_uri does not address a + * resource at the server host. */ + const char *local_uri; /* Same as local_uri_raw, however, cleaned + * so a path like + * allowed_dir/../forbidden_file + * is not possible. */ + const char *http_version; /* E.g. "1.0", "1.1" */ + const char *query_string; /* URL part after '?', not including '?', or + NULL */ + const char *remote_user; /* Authenticated user, or NULL if no auth + used */ + char remote_addr[48]; /* Client's IP address as a string. */ + char server_addr[48]; /* Server's IP address as a string. */ + + long long content_length; /* Length (in bytes) of the request body, + can be -1 if no length was given. */ + int remote_port; /* Port at client side */ + int server_port; /* Port at server side (one of the listening + ports) */ + int is_ssl; /* 1 if HTTPS or WS is used (SSL/TLS used), + 0 if not */ + void *user_data; /* User data pointer passed to mg_start() */ + void *conn_data; /* Connection-specific user data */ + + int num_headers; /* Number of HTTP headers */ + struct mg_header + http_headers[MG_MAX_HEADERS]; /* Allocate maximum headers */ + + struct mg_client_cert *client_cert; /* Client certificate information */ + + const char *acceptedWebSocketSubprotocol; /* websocket subprotocol, + * accepted during handshake */ +}; + + +/* This structure contains information about the HTTP request. */ +/* This structure may be extended in future versions. */ +struct mg_response_info { + int status_code; /* E.g. 200 */ + const char *status_text; /* E.g. "OK" */ + const char *http_version; /* E.g. "1.0", "1.1" */ + + long long content_length; /* Length (in bytes) of the request body, + can be -1 if no length was given. */ + + int num_headers; /* Number of HTTP headers */ + struct mg_header + http_headers[MG_MAX_HEADERS]; /* Allocate maximum headers */ +}; + + +/* Client certificate information (part of mg_request_info) */ +struct mg_client_cert { + void *peer_cert; + const char *subject; + const char *issuer; + const char *serial; + const char *finger; +}; + + +/* This structure needs to be passed to mg_start(), to let civetweb know + which callbacks to invoke. For a detailed description, see + https://github.com/civetweb/civetweb/blob/master/docs/UserManual.md */ +struct mg_callbacks { + /* Called when civetweb has received new HTTP request. + If the callback returns one, it must process the request + by sending valid HTTP headers and a body. Civetweb will not do + any further processing. Otherwise it must return zero. + Note that since V1.7 the "begin_request" function is called + before an authorization check. If an authorization check is + required, use a request_handler instead. + Return value: + 0: civetweb will process the request itself. In this case, + the callback must not send any data to the client. + 1-999: callback already processed the request. Civetweb will + not send any data after the callback returned. The + return code is stored as a HTTP status code for the + access log. */ + int (*begin_request)(struct mg_connection *); + + /* Called when civetweb has finished processing request. */ + void (*end_request)(const struct mg_connection *, int reply_status_code); + + /* Called when civetweb is about to log a message. If callback returns + non-zero, civetweb does not log anything. */ + int (*log_message)(const struct mg_connection *, const char *message); + + /* Called when civetweb is about to log access. If callback returns + non-zero, civetweb does not log anything. */ + int (*log_access)(const struct mg_connection *, const char *message); + + /* Called when civetweb initializes SSL library. + Parameters: + ssl_ctx: SSL_CTX pointer. + user_data: parameter user_data passed when starting the server. + Return value: + 0: civetweb will set up the SSL certificate. + 1: civetweb assumes the callback already set up the certificate. + -1: initializing ssl fails. */ + int (*init_ssl)(void *ssl_ctx, void *user_data); + + /* Called when civetweb initializes SSL library for a domain. + Parameters: + server_domain: authentication_domain from the domain config. + ssl_ctx: SSL_CTX pointer. + user_data: parameter user_data passed when starting the server. + Return value: + 0: civetweb will set up the SSL certificate. + 1: civetweb assumes the callback already set up the certificate. + -1: initializing ssl fails. */ + int (*init_ssl_domain)(const char *server_domain, + void *ssl_ctx, + void *user_data); + + /* Called when civetweb is about to create or free a SSL_CTX. + Parameters: + ssl_ctx: SSL_CTX pointer. NULL at creation time, Not NULL when + mg_context will be freed user_data: parameter user_data passed when starting + the server. Return value: 0: civetweb will continue to create the context, + just as if the callback would not be present. The value in *ssl_ctx when the + function returns is ignored. 1: civetweb will copy the value from *ssl_ctx + to the civetweb context and doesn't create its own. -1: initializing ssl + fails.*/ + int (*external_ssl_ctx)(void **ssl_ctx, void *user_data); + + /* Called when civetweb is about to create or free a SSL_CTX for a domain. + Parameters: + server_domain: authentication_domain from the domain config. + ssl_ctx: SSL_CTX pointer. NULL at creation time, Not NULL when + mg_context will be freed user_data: parameter user_data passed when starting + the server. Return value: 0: civetweb will continue to create the context, + just as if the callback would not be present. The value in *ssl_ctx when the + function returns is ignored. 1: civetweb will copy the value from *ssl_ctx + to the civetweb context and doesn't create its own. -1: initializing ssl + fails.*/ + int (*external_ssl_ctx_domain)(const char *server_domain, + void **ssl_ctx, + void *user_data); + +#if defined(MG_EXPERIMENTAL_INTERFACES) /* 2019-11-03 */ + /* Called when data frame has been received from the peer. + Parameters: + bits: first byte of the websocket frame, see websocket RFC at + http://tools.ietf.org/html/rfc6455, section 5.2 + data, data_len: payload, with mask (if any) already applied. + Return value: + 1: keep this websocket connection open. + 0: close this websocket connection. + This callback is deprecated: Use mg_set_websocket_handler instead. */ + int (*websocket_data)(struct mg_connection *, + int bits, + char *data, + size_t data_len); +#endif /* MG_LEGACY_INTERFACE */ + + /* Called when civetweb is closing a connection. The per-context mutex is + locked when this is invoked. + + Websockets: + Before mg_set_websocket_handler has been added, it was primarily useful + for noting when a websocket is closing, and used to remove it from any + application-maintained list of clients. + Using this callback for websocket connections is deprecated: Use + mg_set_websocket_handler instead. + */ + void (*connection_close)(const struct mg_connection *); + + /* Called after civetweb has closed a connection. The per-context mutex is + locked when this is invoked. + + Connection specific data: + If memory has been allocated for the connection specific user data + (mg_request_info->conn_data, mg_get_user_connection_data), + this is the last chance to free it. + */ + void (*connection_closed)(const struct mg_connection *); + + + /* init_lua is called when civetweb is about to serve Lua server page. + exit_lua is called when the Lua processing is complete. + Both will work only if Lua support is enabled. + Parameters: + conn: current connection. + lua_context: "lua_State *" pointer. + context_flags: context type information as bitmask: + context_flags & 0x0F: (0-15) Lua environment type + */ + void (*init_lua)(const struct mg_connection *conn, + void *lua_context, + unsigned context_flags); + void (*exit_lua)(const struct mg_connection *conn, + void *lua_context, + unsigned context_flags); + + + /* Called when civetweb is about to send HTTP error to the client. + Implementing this callback allows to create custom error pages. + Parameters: + conn: current connection. + status: HTTP error status code. + errmsg: error message text. + Return value: + 1: run civetweb error handler. + 0: callback already handled the error. */ + int (*http_error)(struct mg_connection *conn, + int status, + const char *errmsg); + + /* Called after civetweb context has been created, before requests + are processed. + Parameters: + ctx: context handle */ + void (*init_context)(const struct mg_context *ctx); + + /* Called when civetweb context is deleted. + Parameters: + ctx: context handle */ + void (*exit_context)(const struct mg_context *ctx); + + /* Called when a new worker thread is initialized. + * It is always called from the newly created thread and can be used to + * initialize thread local storage data. + * Parameters: + * ctx: context handle + * thread_type: + * 0 indicates the master thread + * 1 indicates a worker thread handling client connections + * 2 indicates an internal helper thread (timer thread) + * Return value: + * This function returns a user supplied pointer. The pointer is assigned + * to the thread and can be obtained from the mg_connection object using + * mg_get_thread_pointer in all server callbacks. Note: A connection and + * a thread are not directly related. Threads will serve several different + * connections, and data from a single connection may call different + * callbacks using different threads. The thread pointer can be obtained + * in a callback handler, but should not be stored beyond the scope of + * one call to one callback. + */ + void *(*init_thread)(const struct mg_context *ctx, int thread_type); + + /* Called when a worker exits. + * The parameters "ctx" and "thread_type" correspond to the "init_thread" + * call. The "thread_pointer" parameter is the value returned by + * "init_thread". + */ + void (*exit_thread)(const struct mg_context *ctx, + int thread_type, + void *thread_pointer); + + /* Called when initializing a new connection object. + * Can be used to initialize the connection specific user data + * (mg_request_info->conn_data, mg_get_user_connection_data). + * When the callback is called, it is not yet known if a + * valid HTTP(S) request will be made. + * Parameters: + * conn: not yet fully initialized connection object + * conn_data: output parameter, set to initialize the + * connection specific user data + * Return value: + * must be 0 + * Otherwise, the result is undefined + */ + int (*init_connection)(const struct mg_connection *conn, void **conn_data); +}; + + +/* Start web server. + + Parameters: + callbacks: mg_callbacks structure with user-defined callbacks. + options: NULL terminated list of option_name, option_value pairs that + specify Civetweb configuration parameters. + + Side-effects: on UNIX, ignores SIGCHLD and SIGPIPE signals. If custom + processing is required for these, signal handlers must be set up + after calling mg_start(). + + + Example: + const char *options[] = { + "document_root", "/var/www", + "listening_ports", "80,443s", + NULL + }; + struct mg_context *ctx = mg_start(&my_func, NULL, options); + + Refer to https://github.com/civetweb/civetweb/blob/master/docs/UserManual.md + for the list of valid option and their possible values. + + Return: + web server context, or NULL on error. */ +CIVETWEB_API struct mg_context *mg_start(const struct mg_callbacks *callbacks, + void *user_data, + const char **configuration_options); + + +/* Stop the web server. + + Must be called last, when an application wants to stop the web server and + release all associated resources. This function blocks until all Civetweb + threads are stopped. Context pointer becomes invalid. */ +CIVETWEB_API void mg_stop(struct mg_context *); + + +/* Add an additional domain to an already running web server. + * + * Parameters: + * ctx: Context handle of a server started by mg_start. + * options: NULL terminated list of option_name, option_value pairs that + * specify CivetWeb configuration parameters. + * + * Return: + * < 0 in case of an error + * -1 for a parameter error + * -2 invalid options + * -3 initializing SSL failed + * -4 mandatory domain option missing + * -5 duplicate domain + * -6 out of memory + * > 0 index / handle of a new domain + */ +CIVETWEB_API int mg_start_domain(struct mg_context *ctx, + const char **configuration_options); + + +/* mg_request_handler + + Called when a new request comes in. This callback is URI based + and configured with mg_set_request_handler(). + + Parameters: + conn: current connection information. + cbdata: the callback data configured with mg_set_request_handler(). + Returns: + 0: the handler could not handle the request, so fall through. + 1 - 999: the handler processed the request. The return code is + stored as a HTTP status code for the access log. */ +typedef int (*mg_request_handler)(struct mg_connection *conn, void *cbdata); + + +/* mg_set_request_handler + + Sets or removes a URI mapping for a request handler. + This function waits until a removing/updating handler becomes unused, so + do not call from the handler itself. + + URI's are ordered and prefixed URI's are supported. For example, + consider two URIs: /a/b and /a + /a matches /a + /a/b matches /a/b + /a/c matches /a + + Parameters: + ctx: server context + uri: the URI (exact or pattern) for the handler + handler: the callback handler to use when the URI is requested. + If NULL, an already registered handler for this URI will + be removed. + The URI used to remove a handler must match exactly the + one used to register it (not only a pattern match). + cbdata: the callback data to give to the handler when it is called. */ +CIVETWEB_API void mg_set_request_handler(struct mg_context *ctx, + const char *uri, + mg_request_handler handler, + void *cbdata); + + +/* Callback types for websocket handlers in C/C++. + + mg_websocket_connect_handler + Is called when the client intends to establish a websocket connection, + before websocket handshake. + Return value: + 0: civetweb proceeds with websocket handshake. + 1: connection is closed immediately. + + mg_websocket_ready_handler + Is called when websocket handshake is successfully completed, and + connection is ready for data exchange. + + mg_websocket_data_handler + Is called when a data frame has been received from the client. + Parameters: + bits: first byte of the websocket frame, see websocket RFC at + http://tools.ietf.org/html/rfc6455, section 5.2 + data, data_len: payload, with mask (if any) already applied. + Return value: + 1: keep this websocket connection open. + 0: close this websocket connection. + + mg_connection_close_handler + Is called, when the connection is closed.*/ +typedef int (*mg_websocket_connect_handler)(const struct mg_connection *, + void *); +typedef void (*mg_websocket_ready_handler)(struct mg_connection *, void *); +typedef int (*mg_websocket_data_handler)(struct mg_connection *, + int, + char *, + size_t, + void *); +typedef void (*mg_websocket_close_handler)(const struct mg_connection *, + void *); + +/* struct mg_websocket_subprotocols + * + * List of accepted subprotocols + */ +struct mg_websocket_subprotocols { + int nb_subprotocols; + const char **subprotocols; +}; + +/* mg_set_websocket_handler + + Set or remove handler functions for websocket connections. + This function works similar to mg_set_request_handler - see there. */ +CIVETWEB_API void +mg_set_websocket_handler(struct mg_context *ctx, + const char *uri, + mg_websocket_connect_handler connect_handler, + mg_websocket_ready_handler ready_handler, + mg_websocket_data_handler data_handler, + mg_websocket_close_handler close_handler, + void *cbdata); + +/* mg_set_websocket_handler + + Set or remove handler functions for websocket connections. + This function works similar to mg_set_request_handler - see there. */ +CIVETWEB_API void mg_set_websocket_handler_with_subprotocols( + struct mg_context *ctx, + const char *uri, + struct mg_websocket_subprotocols *subprotocols, + mg_websocket_connect_handler connect_handler, + mg_websocket_ready_handler ready_handler, + mg_websocket_data_handler data_handler, + mg_websocket_close_handler close_handler, + void *cbdata); + + +/* mg_authorization_handler + + Callback function definition for mg_set_auth_handler + + Parameters: + conn: current connection information. + cbdata: the callback data configured with mg_set_request_handler(). + Returns: + 0: access denied + 1: access granted + */ +typedef int (*mg_authorization_handler)(struct mg_connection *conn, + void *cbdata); + + +/* mg_set_auth_handler + + Sets or removes a URI mapping for an authorization handler. + This function works similar to mg_set_request_handler - see there. */ +CIVETWEB_API void mg_set_auth_handler(struct mg_context *ctx, + const char *uri, + mg_authorization_handler handler, + void *cbdata); + + +/* Get the value of particular configuration parameter. + The value returned is read-only. Civetweb does not allow changing + configuration at run time. + If given parameter name is not valid, NULL is returned. For valid + names, return value is guaranteed to be non-NULL. If parameter is not + set, zero-length string is returned. */ +CIVETWEB_API const char *mg_get_option(const struct mg_context *ctx, + const char *name); + + +/* Get context from connection. */ +CIVETWEB_API struct mg_context * +mg_get_context(const struct mg_connection *conn); + + +/* Get user data passed to mg_start from context. */ +CIVETWEB_API void *mg_get_user_data(const struct mg_context *ctx); + + +/* Get user data passed to mg_start from connection. */ +CIVETWEB_API void *mg_get_user_context_data(const struct mg_connection *conn); + + +/* Get user defined thread pointer for server threads (see init_thread). */ +CIVETWEB_API void *mg_get_thread_pointer(const struct mg_connection *conn); + + +/* Set user data for the current connection. */ +/* Note: CivetWeb callbacks use "struct mg_connection *conn" as input + when mg_read/mg_write callbacks are allowed in the callback, + while "const struct mg_connection *conn" is used as input in case + calling mg_read/mg_write is not allowed. + Setting the user connection data will modify the connection + object represented by mg_connection *, but it will not read from + or write to the connection. */ +/* Note: An alternative is to use the init_connection callback + instead to initialize the user connection data pointer. It is + recommended to supply a pointer to some user defined data structure + as conn_data initializer in init_connection. In case it is required + to change some data after the init_connection call, store another + data pointer in the user defined data structure and modify that + pointer. In either case, after the init_connection callback, only + calls to mg_get_user_connection_data should be required. */ +CIVETWEB_API void mg_set_user_connection_data(const struct mg_connection *conn, + void *data); + + +/* Get user data set for the current connection. */ +CIVETWEB_API void * +mg_get_user_connection_data(const struct mg_connection *conn); + + +/* Get a formatted link corresponding to the current request + + Parameters: + conn: current connection information. + buf: string buffer (out) + buflen: length of the string buffer + Returns: + <0: error + >=0: ok */ +CIVETWEB_API int +mg_get_request_link(const struct mg_connection *conn, char *buf, size_t buflen); + + +struct mg_option { + const char *name; + int type; + const char *default_value; +}; + + +/* Configuration types */ +enum { + MG_CONFIG_TYPE_UNKNOWN = 0x0, + MG_CONFIG_TYPE_NUMBER = 0x1, + MG_CONFIG_TYPE_STRING = 0x2, + MG_CONFIG_TYPE_FILE = 0x3, + MG_CONFIG_TYPE_DIRECTORY = 0x4, + MG_CONFIG_TYPE_BOOLEAN = 0x5, + MG_CONFIG_TYPE_EXT_PATTERN = 0x6, + MG_CONFIG_TYPE_STRING_LIST = 0x7, + MG_CONFIG_TYPE_STRING_MULTILINE = 0x8, + MG_CONFIG_TYPE_YES_NO_OPTIONAL = 0x9 +}; + +/* Return array of struct mg_option, representing all valid configuration + options of civetweb.c. + The array is terminated by a NULL name option. */ +CIVETWEB_API const struct mg_option *mg_get_valid_options(void); + + +struct mg_server_port { + int protocol; /* 1 = IPv4, 2 = IPv6, 3 = both */ + int port; /* port number */ + int is_ssl; /* https port: 0 = no, 1 = yes */ + int is_redirect; /* redirect all requests: 0 = no, 1 = yes */ + int is_optional; /* optional: 0 = no, 1 = yes */ + int is_bound; /* bound: 0 = no, 1 = yes, relevant for optional ports */ + int _reserved3; + int _reserved4; +}; + +/* Legacy name */ +#define mg_server_ports mg_server_port + + +/* Get the list of ports that civetweb is listening on. + The parameter size is the size of the ports array in elements. + The caller is responsibility to allocate the required memory. + This function returns the number of struct mg_server_port elements + filled in, or <0 in case of an error. */ +CIVETWEB_API int mg_get_server_ports(const struct mg_context *ctx, + int size, + struct mg_server_port *ports); + + +/* Add, edit or delete the entry in the passwords file. + * + * This function allows an application to manipulate .htpasswd files on the + * fly by adding, deleting and changing user records. This is one of the + * several ways of implementing authentication on the server side. For another, + * cookie-based way please refer to the examples/chat in the source tree. + * + * Parameter: + * passwords_file_name: Path and name of a file storing multiple passwords + * realm: HTTP authentication realm (authentication domain) name + * user: User name + * password: + * If password is not NULL, entry modified or added. + * If password is NULL, entry is deleted. + * + * Return: + * 1 on success, 0 on error. + */ +CIVETWEB_API int mg_modify_passwords_file(const char *passwords_file_name, + const char *realm, + const char *user, + const char *password); + + +/* Same as mg_modify_passwords_file, but instead of the plain-text + * password, the HA1 hash is specified. The plain-text password is + * not made known to civetweb. + * + * The HA1 hash is the MD5 checksum of a "user:realm:password" string + * in lower-case hex format. For example, if the user name is "myuser", + * the realm is "myrealm", and the password is "secret", then the HA1 is + * e67fd3248b58975c3e89ff18ecb75e2f. + */ +CIVETWEB_API int mg_modify_passwords_file_ha1(const char *passwords_file_name, + const char *realm, + const char *user, + const char *ha1); + + +/* Return information associated with the request. + * Use this function to implement a server and get data about a request + * from a HTTP/HTTPS client. + * Note: Before CivetWeb 1.10, this function could be used to read + * a response from a server, when implementing a client, although the + * values were never returned in appropriate mg_request_info elements. + * It is strongly advised to use mg_get_response_info for clients. + */ +CIVETWEB_API const struct mg_request_info * +mg_get_request_info(const struct mg_connection *); + + +/* Return information associated with a HTTP/HTTPS response. + * Use this function in a client, to check the response from + * the server. */ +CIVETWEB_API const struct mg_response_info * +mg_get_response_info(const struct mg_connection *); + + +/* Send data to the client. + Return: + 0 when the connection has been closed + -1 on error + >0 number of bytes written on success */ +CIVETWEB_API int mg_write(struct mg_connection *, const void *buf, size_t len); + + +/* Send data to a websocket client wrapped in a websocket frame. Uses + mg_lock_connection to ensure that the transmission is not interrupted, + i.e., when the application is proactively communicating and responding to + a request simultaneously. + + Send data to a websocket client wrapped in a websocket frame. + This function is available when civetweb is compiled with -DUSE_WEBSOCKET + + Return: + 0 when the connection has been closed + -1 on error + >0 number of bytes written on success */ +CIVETWEB_API int mg_websocket_write(struct mg_connection *conn, + int opcode, + const char *data, + size_t data_len); + + +/* Send data to a websocket server wrapped in a masked websocket frame. Uses + mg_lock_connection to ensure that the transmission is not interrupted, + i.e., when the application is proactively communicating and responding to + a request simultaneously. + + Send data to a websocket server wrapped in a masked websocket frame. + This function is available when civetweb is compiled with -DUSE_WEBSOCKET + + Return: + 0 when the connection has been closed + -1 on error + >0 number of bytes written on success */ +CIVETWEB_API int mg_websocket_client_write(struct mg_connection *conn, + int opcode, + const char *data, + size_t data_len); + + +/* Blocks until unique access is obtained to this connection. Intended for use + with websockets only. + Invoke this before mg_write or mg_printf when communicating with a + websocket if your code has server-initiated communication as well as + communication in direct response to a message. + Do not acquire this lock while holding mg_lock_context(). */ +CIVETWEB_API void mg_lock_connection(struct mg_connection *conn); +CIVETWEB_API void mg_unlock_connection(struct mg_connection *conn); + + +/* Lock server context. This lock may be used to protect resources + that are shared between different connection/worker threads. + If the given context is not server, these functions do nothing. */ +CIVETWEB_API void mg_lock_context(struct mg_context *ctx); +CIVETWEB_API void mg_unlock_context(struct mg_context *ctx); + + +/* WebSocket OpcCodes, from http://tools.ietf.org/html/rfc6455 */ +enum { + MG_WEBSOCKET_OPCODE_CONTINUATION = 0x0, + MG_WEBSOCKET_OPCODE_TEXT = 0x1, + MG_WEBSOCKET_OPCODE_BINARY = 0x2, + MG_WEBSOCKET_OPCODE_CONNECTION_CLOSE = 0x8, + MG_WEBSOCKET_OPCODE_PING = 0x9, + MG_WEBSOCKET_OPCODE_PONG = 0xa +}; + + +/* Macros for enabling compiler-specific checks for printf-like arguments. */ +#undef PRINTF_FORMAT_STRING +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#include +#if defined(_MSC_VER) && _MSC_VER > 1400 +#define PRINTF_FORMAT_STRING(s) _Printf_format_string_ s +#else +#define PRINTF_FORMAT_STRING(s) __format_string s +#endif +#else +#define PRINTF_FORMAT_STRING(s) s +#endif + +#ifdef __GNUC__ +#define PRINTF_ARGS(x, y) __attribute__((format(printf, x, y))) +#else +#define PRINTF_ARGS(x, y) +#endif + + +/* Send data to the client using printf() semantics. + Works exactly like mg_write(), but allows to do message formatting. */ +CIVETWEB_API int mg_printf(struct mg_connection *, + PRINTF_FORMAT_STRING(const char *fmt), + ...) PRINTF_ARGS(2, 3); + + +/* Send a part of the message body, if chunked transfer encoding is set. + * Only use this function after sending a complete HTTP request or response + * header with "Transfer-Encoding: chunked" set. */ +CIVETWEB_API int mg_send_chunk(struct mg_connection *conn, + const char *chunk, + unsigned int chunk_len); + + +/* Send contents of the entire file together with HTTP headers. + * Parameters: + * conn: Current connection information. + * path: Full path to the file to send. + * This function has been superseded by mg_send_mime_file + */ +CIVETWEB_API void mg_send_file(struct mg_connection *conn, const char *path); + + +/* Send contents of the file without HTTP headers. + * The code must send a valid HTTP response header before using this function. + * + * Parameters: + * conn: Current connection information. + * path: Full path to the file to send. + * + * Return: + * < 0 Error + */ +CIVETWEB_API int mg_send_file_body(struct mg_connection *conn, + const char *path); + + +/* Send HTTP error reply. */ +CIVETWEB_API int mg_send_http_error(struct mg_connection *conn, + int status_code, + PRINTF_FORMAT_STRING(const char *fmt), + ...) PRINTF_ARGS(3, 4); + + +/* Send "HTTP 200 OK" response header. + * After calling this function, use mg_write or mg_send_chunk to send the + * response body. + * Parameters: + * conn: Current connection handle. + * mime_type: Set Content-Type for the following content. + * content_length: Size of the following content, if content_length >= 0. + * Will set transfer-encoding to chunked, if set to -1. + * Return: + * < 0 Error + */ +CIVETWEB_API int mg_send_http_ok(struct mg_connection *conn, + const char *mime_type, + long long content_length); + + +/* Send "HTTP 30x" redirect response. + * The response has content-size zero: do not send any body data after calling + * this function. + * Parameters: + * conn: Current connection handle. + * target_url: New location. + * redirect_code: HTTP redirect type. Could be 301, 302, 303, 307, 308. + * Return: + * < 0 Error (-1 send error, -2 parameter error) + */ +CIVETWEB_API int mg_send_http_redirect(struct mg_connection *conn, + const char *target_url, + int redirect_code); + + +/* Send HTTP digest access authentication request. + * Browsers will send a user name and password in their next request, showing + * an authentication dialog if the password is not stored. + * Parameters: + * conn: Current connection handle. + * realm: Authentication realm. If NULL is supplied, the sever domain + * set in the authentication_domain configuration is used. + * Return: + * < 0 Error + */ +CIVETWEB_API int +mg_send_digest_access_authentication_request(struct mg_connection *conn, + const char *realm); + + +/* Check if the current request has a valid authentication token set. + * A file is used to provide a list of valid user names, realms and + * password hashes. The file can be created and modified using the + * mg_modify_passwords_file API function. + * Parameters: + * conn: Current connection handle. + * realm: Authentication realm. If NULL is supplied, the sever domain + * set in the authentication_domain configuration is used. + * filename: Path and name of a file storing multiple password hashes. + * Return: + * > 0 Valid authentication + * 0 Invalid authentication + * < 0 Error (all values < 0 should be considered as invalid + * authentication, future error codes will have negative + * numbers) + * -1 Parameter error + * -2 File not found + */ +CIVETWEB_API int +mg_check_digest_access_authentication(struct mg_connection *conn, + const char *realm, + const char *filename); + + +/* Send contents of the entire file together with HTTP headers. + * Parameters: + * conn: Current connection handle. + * path: Full path to the file to send. + * mime_type: Content-Type for file. NULL will cause the type to be + * looked up by the file extension. + */ +CIVETWEB_API void mg_send_mime_file(struct mg_connection *conn, + const char *path, + const char *mime_type); + + +/* Send contents of the entire file together with HTTP headers. + Parameters: + conn: Current connection information. + path: Full path to the file to send. + mime_type: Content-Type for file. NULL will cause the type to be + looked up by the file extension. + additional_headers: Additional custom header fields appended to the header. + Each header should start with an X-, to ensure it is + not included twice. + NULL does not append anything. +*/ +CIVETWEB_API void mg_send_mime_file2(struct mg_connection *conn, + const char *path, + const char *mime_type, + const char *additional_headers); + + +/* Store body data into a file. */ +CIVETWEB_API long long mg_store_body(struct mg_connection *conn, + const char *path); +/* Read entire request body and store it in a file "path". + Return: + < 0 Error + >= 0 Number of bytes stored in file "path". +*/ + + +/* Read data from the remote end, return number of bytes read. + Return: + 0 connection has been closed by peer. No more data could be read. + < 0 read error. No more data could be read from the connection. + > 0 number of bytes read into the buffer. */ +CIVETWEB_API int mg_read(struct mg_connection *, void *buf, size_t len); + + +/* Get the value of particular HTTP header. + + This is a helper function. It traverses request_info->http_headers array, + and if the header is present in the array, returns its value. If it is + not present, NULL is returned. */ +CIVETWEB_API const char *mg_get_header(const struct mg_connection *, + const char *name); + + +/* Get a value of particular form variable. + + Parameters: + data: pointer to form-uri-encoded buffer. This could be either POST data, + or request_info.query_string. + data_len: length of the encoded data. + var_name: variable name to decode from the buffer + dst: destination buffer for the decoded variable + dst_len: length of the destination buffer + + Return: + On success, length of the decoded variable. + On error: + -1 (variable not found). + -2 (destination buffer is NULL, zero length or too small to hold the + decoded variable). + + Destination buffer is guaranteed to be '\0' - terminated if it is not + NULL or zero length. */ +CIVETWEB_API int mg_get_var(const char *data, + size_t data_len, + const char *var_name, + char *dst, + size_t dst_len); + + +/* Get a value of particular form variable. + + Parameters: + data: pointer to form-uri-encoded buffer. This could be either POST data, + or request_info.query_string. + data_len: length of the encoded data. + var_name: variable name to decode from the buffer + dst: destination buffer for the decoded variable + dst_len: length of the destination buffer + occurrence: which occurrence of the variable, 0 is the 1st, 1 the 2nd, ... + this makes it possible to parse a query like + b=x&a=y&a=z which will have occurrence values b:0, a:0 and a:1 + + Return: + On success, length of the decoded variable. + On error: + -1 (variable not found). + -2 (destination buffer is NULL, zero length or too small to hold the + decoded variable). + + Destination buffer is guaranteed to be '\0' - terminated if it is not + NULL or zero length. */ +CIVETWEB_API int mg_get_var2(const char *data, + size_t data_len, + const char *var_name, + char *dst, + size_t dst_len, + size_t occurrence); + + +/* Split form encoded data into a list of key value pairs. + A form encoded input might be a query string, the body of a + x-www-form-urlencoded POST request or any other data with this + structure: "keyName1=value1&keyName2=value2&keyName3=value3". + Values might be percent-encoded - this function will transform + them to the unencoded characters. + The input string is modified by this function: To split the + "query_string" member of struct request_info, create a copy first + (e.g., using strdup). + The function itself does not allocate memory. Thus, it is not + required to free any pointer returned from this function. + The output list of is limited to MG_MAX_FORM_FIELDS name-value- + pairs. The default value is reasonably oversized for typical + applications, however, for special purpose systems it might be + required to increase this value at compile time. + + Parameters: + data: form encoded input string. Will be modified by this function. + form_fields: output list of name/value-pairs. A buffer with a size + specified by num_form_fields must be provided by the + caller. + num_form_fields: Size of provided form_fields buffer in number of + "struct mg_header" elements. + + Return: + On success: number of form_fields filled + On error: + -1 (parameter error). */ +CIVETWEB_API int mg_split_form_urlencoded(char *data, + struct mg_header *form_fields, + unsigned num_form_fields); + + +/* Fetch value of certain cookie variable into the destination buffer. + + Destination buffer is guaranteed to be '\0' - terminated. In case of + failure, dst[0] == '\0'. Note that RFC allows many occurrences of the same + parameter. This function returns only first occurrence. + + Return: + On success, value length. + On error: + -1 (either "Cookie:" header is not present at all or the requested + parameter is not found). + -2 (destination buffer is NULL, zero length or too small to hold the + value). */ +CIVETWEB_API int mg_get_cookie(const char *cookie, + const char *var_name, + char *buf, + size_t buf_len); + + +/* Download data from the remote web server. + host: host name to connect to, e.g. "foo.com", or "10.12.40.1". + port: port number, e.g. 80. + use_ssl: whether to use SSL connection. + error_buffer, error_buffer_size: error message placeholder. + request_fmt,...: HTTP request. + Return: + On success, valid pointer to the new connection, suitable for mg_read(). + On error, NULL. error_buffer contains error message. + Example: + char ebuf[100]; + struct mg_connection *conn; + conn = mg_download("google.com", 80, 0, ebuf, sizeof(ebuf), + "%s", "GET / HTTP/1.0\r\nHost: google.com\r\n\r\n"); + + mg_download is equivalent to calling mg_connect_client followed by + mg_printf and mg_get_response. Using these three functions directly may + allow more control as compared to using mg_download. + */ +CIVETWEB_API struct mg_connection * +mg_download(const char *host, + int port, + int use_ssl, + char *error_buffer, + size_t error_buffer_size, + PRINTF_FORMAT_STRING(const char *request_fmt), + ...) PRINTF_ARGS(6, 7); + + +/* Close the connection opened by mg_download(). */ +CIVETWEB_API void mg_close_connection(struct mg_connection *conn); + + +/* This structure contains callback functions for handling form fields. + It is used as an argument to mg_handle_form_request. */ +struct mg_form_data_handler { + /* This callback function is called, if a new field has been found. + * The return value of this callback is used to define how the field + * should be processed. + * + * Parameters: + * key: Name of the field ("name" property of the HTML input field). + * filename: Name of a file to upload, at the client computer. + * Only set for input fields of type "file", otherwise NULL. + * path: Output parameter: File name (incl. path) to store the file + * at the server computer. Only used if MG_FORM_FIELD_STORAGE_STORE + * is returned by this callback. Existing files will be + * overwritten. + * pathlen: Length of the buffer for path. + * user_data: Value of the member user_data of mg_form_data_handler + * + * Return value: + * The callback must return the intended storage for this field + * (See MG_FORM_FIELD_STORAGE_*). + */ + int (*field_found)(const char *key, + const char *filename, + char *path, + size_t pathlen, + void *user_data); + + /* If the "field_found" callback returned MG_FORM_FIELD_STORAGE_GET, + * this callback will receive the field data. + * + * Parameters: + * key: Name of the field ("name" property of the HTML input field). + * value: Value of the input field. + * user_data: Value of the member user_data of mg_form_data_handler + * + * Return value: + * The return code determines how the server should continue processing + * the current request (See MG_FORM_FIELD_HANDLE_*). + */ + int (*field_get)(const char *key, + const char *value, + size_t valuelen, + void *user_data); + + /* If the "field_found" callback returned MG_FORM_FIELD_STORAGE_STORE, + * the data will be stored into a file. If the file has been written + * successfully, this callback will be called. This callback will + * not be called for only partially uploaded files. The + * mg_handle_form_request function will either store the file completely + * and call this callback, or it will remove any partial content and + * not call this callback function. + * + * Parameters: + * path: Path of the file stored at the server. + * file_size: Size of the stored file in bytes. + * user_data: Value of the member user_data of mg_form_data_handler + * + * Return value: + * The return code determines how the server should continue processing + * the current request (See MG_FORM_FIELD_HANDLE_*). + */ + int (*field_store)(const char *path, long long file_size, void *user_data); + + /* User supplied argument, passed to all callback functions. */ + void *user_data; +}; + + +/* Return values definition for the "field_found" callback in + * mg_form_data_handler. */ +enum { + /* Skip this field (neither get nor store it). Continue with the + * next field. */ + MG_FORM_FIELD_STORAGE_SKIP = 0x0, + /* Get the field value. */ + MG_FORM_FIELD_STORAGE_GET = 0x1, + /* Store the field value into a file. */ + MG_FORM_FIELD_STORAGE_STORE = 0x2, + /* Stop parsing this request. Skip the remaining fields. */ + MG_FORM_FIELD_STORAGE_ABORT = 0x10 +}; + +/* Return values for "field_get" and "field_store" */ +enum { + /* Only "field_get": If there is more data in this field, get the next + * chunk. Otherwise: handle the next field. */ + MG_FORM_FIELD_HANDLE_GET = 0x1, + /* Handle the next field */ + MG_FORM_FIELD_HANDLE_NEXT = 0x8, + /* Stop parsing this request */ + MG_FORM_FIELD_HANDLE_ABORT = 0x10 +}; + + +/* Process form data. + * Returns the number of fields handled, or < 0 in case of an error. + * Note: It is possible that several fields are already handled successfully + * (e.g., stored into files), before the request handling is stopped with an + * error. In this case a number < 0 is returned as well. + * In any case, it is the duty of the caller to remove files once they are + * no longer required. */ +CIVETWEB_API int mg_handle_form_request(struct mg_connection *conn, + struct mg_form_data_handler *fdh); + + +/* Convenience function -- create detached thread. + Return: 0 on success, non-0 on error. */ +typedef void *(*mg_thread_func_t)(void *); +CIVETWEB_API int mg_start_thread(mg_thread_func_t f, void *p); + + +/* Return builtin mime type for the given file name. + For unrecognized extensions, "text/plain" is returned. */ +CIVETWEB_API const char *mg_get_builtin_mime_type(const char *file_name); + + +/* Get text representation of HTTP status code. */ +CIVETWEB_API const char * +mg_get_response_code_text(const struct mg_connection *conn, int response_code); + + +/* Return CivetWeb version. */ +CIVETWEB_API const char *mg_version(void); + + +/* URL-decode input buffer into destination buffer. + 0-terminate the destination buffer. + form-url-encoded data differs from URI encoding in a way that it + uses '+' as character for space, see RFC 1866 section 8.2.1 + http://ftp.ics.uci.edu/pub/ietf/html/rfc1866.txt + Return: length of the decoded data, or -1 if dst buffer is too small. */ +CIVETWEB_API int mg_url_decode(const char *src, + int src_len, + char *dst, + int dst_len, + int is_form_url_encoded); + + +/* URL-encode input buffer into destination buffer. + returns the length of the resulting buffer or -1 + is the buffer is too small. */ +CIVETWEB_API int mg_url_encode(const char *src, char *dst, size_t dst_len); + + +/* BASE64-encode input buffer into destination buffer. + returns -1 on OK. */ +CIVETWEB_API int mg_base64_encode(const unsigned char *src, + size_t src_len, + char *dst, + size_t *dst_len); + + +/* BASE64-decode input buffer into destination buffer. + returns -1 on OK. */ +CIVETWEB_API int mg_base64_decode(const char *src, + size_t src_len, + unsigned char *dst, + size_t *dst_len); + + +/* MD5 hash given strings. + Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of + ASCIIz strings. When function returns, buf will contain human-readable + MD5 hash. Example: + char buf[33]; + mg_md5(buf, "aa", "bb", NULL); */ +CIVETWEB_API char *mg_md5(char buf[33], ...); + + +#if !defined(MG_MATCH_CONTEXT_MAX_MATCHES) +#define MG_MATCH_CONTEXT_MAX_MATCHES (32) +#endif + +struct mg_match_element { + const char *str; /* First character matching wildcard */ + size_t len; /* Number of character matching wildcard */ +}; + +struct mg_match_context { + int case_sensitive; /* Input: 1 (case sensitive) or 0 (insensitive) */ + size_t num_matches; /* Output: Number of wildcard matches returned. */ + struct mg_match_element match[MG_MATCH_CONTEXT_MAX_MATCHES]; /* Output */ +}; + + +#if defined(MG_EXPERIMENTAL_INTERFACES) +/* Pattern matching and extraction function. + Parameters: + pat: Pattern string (see UserManual.md) + str: String to search for match patterns. + mcx: Match context (optional, can be NULL). + + Return: + Number of characters matched. + -1 if no valid match was found. + Note: 0 characters might be a valid match for some patterns. +*/ +CIVETWEB_API ptrdiff_t mg_match(const char *pat, + const char *str, + struct mg_match_context *mcx); +#endif + + +/* Print error message to the opened error log stream. + This utilizes the provided logging configuration. + conn: connection (not used for sending data, but to get perameters) + fmt: format string without the line return + ...: variable argument list + Example: + mg_cry(conn,"i like %s", "logging"); */ +CIVETWEB_API void mg_cry(const struct mg_connection *conn, + PRINTF_FORMAT_STRING(const char *fmt), + ...) PRINTF_ARGS(2, 3); + + +/* utility methods to compare two buffers, case insensitive. */ +CIVETWEB_API int mg_strcasecmp(const char *s1, const char *s2); +CIVETWEB_API int mg_strncasecmp(const char *s1, const char *s2, size_t len); + + +/* Connect to a websocket as a client + Parameters: + host: host to connect to, i.e. "echo.websocket.org" or "192.168.1.1" or + "localhost" + port: server port + use_ssl: make a secure connection to server + error_buffer, error_buffer_size: buffer for an error message + path: server path you are trying to connect to, i.e. if connection to + localhost/app, path should be "/app" + origin: value of the Origin HTTP header + data_func: callback that should be used when data is received from the + server + user_data: user supplied argument + + Return: + On success, valid mg_connection object. + On error, NULL. Se error_buffer for details. +*/ +CIVETWEB_API struct mg_connection * +mg_connect_websocket_client(const char *host, + int port, + int use_ssl, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data); + +CIVETWEB_API struct mg_connection * +mg_connect_websocket_client_extensions(const char *host, + int port, + int use_ssl, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + const char *extensions, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data); + + +/* Connect to a TCP server as a client (can be used to connect to a HTTP server) + Parameters: + host: host to connect to, i.e. "www.wikipedia.org" or "192.168.1.1" or + "localhost" + port: server port + use_ssl: make a secure connection to server + error_buffer, error_buffer_size: buffer for an error message + + Return: + On success, valid mg_connection object. + On error, NULL. Se error_buffer for details. +*/ +CIVETWEB_API struct mg_connection *mg_connect_client(const char *host, + int port, + int use_ssl, + char *error_buffer, + size_t error_buffer_size); + + +struct mg_client_options { + const char *host; + int port; + const char *client_cert; + const char *server_cert; + const char *host_name; + /* TODO: add more data */ +}; + + +CIVETWEB_API struct mg_connection * +mg_connect_client_secure(const struct mg_client_options *client_options, + char *error_buffer, + size_t error_buffer_size); + + +CIVETWEB_API struct mg_connection *mg_connect_websocket_client_secure( + const struct mg_client_options *client_options, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data); + +CIVETWEB_API struct mg_connection * +mg_connect_websocket_client_secure_extensions( + const struct mg_client_options *client_options, + char *error_buffer, + size_t error_buffer_size, + const char *path, + const char *origin, + const char *extensions, + mg_websocket_data_handler data_func, + mg_websocket_close_handler close_func, + void *user_data); + +#if defined(MG_LEGACY_INTERFACE) /* 2019-11-02 */ +enum { TIMEOUT_INFINITE = -1 }; +#endif +enum { MG_TIMEOUT_INFINITE = -1 }; + + +/* Wait for a response from the server + Parameters: + conn: connection + ebuf, ebuf_len: error message placeholder. + timeout: time to wait for a response in milliseconds (if < 0 then wait + forever) + + Return: + On success, >= 0 + On error/timeout, < 0 +*/ +CIVETWEB_API int mg_get_response(struct mg_connection *conn, + char *ebuf, + size_t ebuf_len, + int timeout); + + +/* mg_response_header_* functions can be used from server callbacks + * to prepare HTTP server response headers. Using this function will + * allow a callback to work with HTTP/1.x and HTTP/2. + */ + +/* Initialize a new HTTP response + * Parameters: + * conn: Current connection handle. + * status: HTTP status code (e.g., 200 for "OK"). + * Return: + * 0: ok + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: network error (only if built with NO_RESPONSE_BUFFERING) + */ +CIVETWEB_API int mg_response_header_start(struct mg_connection *conn, + int status); + + +/* Add a new HTTP response header line + * Parameters: + * conn: Current connection handle. + * header: Header name. + * value: Header value. + * value_len: Length of header value, excluding the terminating zero. + * Use -1 for "strlen(value)". + * Return: + * 0: ok + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: too many headers + * -5: out of memory + */ +CIVETWEB_API int mg_response_header_add(struct mg_connection *conn, + const char *header, + const char *value, + int value_len); + + +/* Add a complete header string (key + value). + * This function is less efficient as compared to mg_response_header_add, + * and should only be used to convert complete HTTP/1.x header lines. + * Parameters: + * conn: Current connection handle. + * http1_headers: Header line(s) in the form "name: value\r\n". + * Return: + * >=0: no error, number of header lines added + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: too many headers + * -5: out of memory + */ +CIVETWEB_API int mg_response_header_add_lines(struct mg_connection *conn, + const char *http1_headers); + + +/* Send http response + * Parameters: + * conn: Current connection handle. + * Return: + * 0: ok + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: sending failed (network error) + */ +CIVETWEB_API int mg_response_header_send(struct mg_connection *conn); + + +/* Check which features where set when the civetweb library has been compiled. + The function explicitly addresses compile time defines used when building + the library - it does not mean, the feature has been initialized using a + mg_init_library call. + mg_check_feature can be called anytime, even before mg_init_library has + been called. + + Parameters: + feature: specifies which feature should be checked + The value is a bit mask. The individual bits are defined as: + 1 serve files (NO_FILES not set) + 2 support HTTPS (NO_SSL not set) + 4 support CGI (NO_CGI not set) + 8 support IPv6 (USE_IPV6 set) + 16 support WebSocket (USE_WEBSOCKET set) + 32 support Lua scripts and Lua server pages (USE_LUA is set) + 64 support server side JavaScript (USE_DUKTAPE is set) + 128 support caching (NO_CACHING not set) + 256 support server statistics (USE_SERVER_STATS is set) + 512 support for on the fly compression (USE_ZLIB is set) + + These values are defined as MG_FEATURES_* + + The result is undefined, if bits are set that do not represent a + defined feature (currently: feature >= 1024). + The result is undefined, if no bit is set (feature == 0). + + Return: + If a feature is available, the corresponding bit is set + If a feature is not available, the bit is 0 +*/ +CIVETWEB_API unsigned mg_check_feature(unsigned feature); + + +/* Get information on the system. Useful for support requests. + Parameters: + buffer: Store system information as string here. + buflen: Length of buffer (including a byte required for a terminating 0). + Return: + Available size of system information, excluding a terminating 0. + The information is complete, if the return value is smaller than buflen. + The result is a JSON formatted string, the exact content may vary. + Note: + It is possible to determine the required buflen, by first calling this + function with buffer = NULL and buflen = NULL. The required buflen is + one byte more than the returned value. +*/ +CIVETWEB_API int mg_get_system_info(char *buffer, int buflen); + + +/* Get context information. Useful for server diagnosis. + Parameters: + ctx: Context handle + buffer: Store context information here. + buflen: Length of buffer (including a byte required for a terminating 0). + Return: + Available size of system information, excluding a terminating 0. + The information is complete, if the return value is smaller than buflen. + The result is a JSON formatted string, the exact content may vary. + Note: + It is possible to determine the required buflen, by first calling this + function with buffer = NULL and buflen = NULL. The required buflen is + one byte more than the returned value. However, since the available + context information changes, you should allocate a few bytes more. +*/ +CIVETWEB_API int +mg_get_context_info(const struct mg_context *ctx, char *buffer, int buflen); + + +/* Disable HTTP keep-alive on a per-connection basis. + Reference: https://github.com/civetweb/civetweb/issues/727 + Parameters: + conn: Current connection handle. +*/ +CIVETWEB_API void mg_disable_connection_keep_alive(struct mg_connection *conn); + + +#if defined(MG_EXPERIMENTAL_INTERFACES) +/* Get connection information. Useful for server diagnosis. + Parameters: + ctx: Context handle + idx: Connection index + buffer: Store context information here. + buflen: Length of buffer (including a byte required for a terminating 0). + Return: + Available size of system information, excluding a terminating 0. + The information is complete, if the return value is smaller than buflen. + The result is a JSON formatted string, the exact content may vary. + Note: + It is possible to determine the required buflen, by first calling this + function with buffer = NULL and buflen = NULL. The required buflen is + one byte more than the returned value. However, since the available + context information changes, you should allocate a few bytes more. +*/ +CIVETWEB_API int mg_get_connection_info(const struct mg_context *ctx, + int idx, + char *buffer, + int buflen); +#endif + + +/* New APIs for enhanced option and error handling. + These mg_*2 API functions have the same purpose as their original versions, + but provide additional options and/or provide improved error diagnostics. + + Note: Experimental interfaces may change +*/ +struct mg_error_data { + unsigned code; /* error code (number) */ + unsigned code_sub; /* error sub code (number) */ + char *text; /* buffer for error text */ + size_t text_buffer_size; /* size of buffer of "text" */ +}; + + +/* Values for error "code" in mg_error_data */ +enum { + /* No error */ + MG_ERROR_DATA_CODE_OK = 0u, + + /* Caller provided invalid parameter */ + MG_ERROR_DATA_CODE_INVALID_PARAM = 1u, + + /* "configuration_option" contains invalid element */ + MG_ERROR_DATA_CODE_INVALID_OPTION = 2u, + + /* Initializen TLS / SSL library failed */ + MG_ERROR_DATA_CODE_INIT_TLS_FAILED = 3u, + + /* Mandatory "configuration_option" missing */ + MG_ERROR_DATA_CODE_MISSING_OPTION = 4u, + + /* Duplicate "authentication_domain" option */ + MG_ERROR_DATA_CODE_DUPLICATE_DOMAIN = 5u, + + /* Not enough memory */ + MG_ERROR_DATA_CODE_OUT_OF_MEMORY = 6u, + + /* Server already stopped */ + MG_ERROR_DATA_CODE_SERVER_STOPPED = 7u, + + /* mg_init_library must be called first */ + MG_ERROR_DATA_CODE_INIT_LIBRARY_FAILED = 8u, + + /* Operating system function failed */ + MG_ERROR_DATA_CODE_OS_ERROR = 9u, + + /* Failed to bind to server ports */ + MG_ERROR_DATA_CODE_INIT_PORTS_FAILED = 10u, + + /* Failed to switch user (option "run_as_user") */ + MG_ERROR_DATA_CODE_INIT_USER_FAILED = 11u, + + /* Access Control List error */ + MG_ERROR_DATA_CODE_INIT_ACL_FAILED = 12u, + + /* Global password file error */ + MG_ERROR_DATA_CODE_INVALID_PASS_FILE = 13u, + + /* Lua background script init error */ + MG_ERROR_DATA_CODE_SCRIPT_ERROR = 14u, + + /* Client: Host not found, invalid IP to connect */ + MG_ERROR_DATA_CODE_HOST_NOT_FOUND = 15u, + + /* Client: TCP connect timeout */ + MG_ERROR_DATA_CODE_CONNECT_TIMEOUT = 16u, + + /* Client: TCP connect failed */ + MG_ERROR_DATA_CODE_CONNECT_FAILED = 17u, + + /* Error using TLS client certificate */ + MG_ERROR_DATA_CODE_TLS_CLIENT_CERT_ERROR = 18u, + + /* Error setting trusted TLS server certificate for client connection */ + MG_ERROR_DATA_CODE_TLS_SERVER_CERT_ERROR = 19u, + + /* Error establishing TLS connection to HTTPS server */ + MG_ERROR_DATA_CODE_TLS_CONNECT_ERROR = 20u +}; + + +struct mg_init_data { + const struct mg_callbacks *callbacks; /* callback function pointer */ + void *user_data; /* data */ + const char **configuration_options; +}; + + +#if defined(MG_EXPERIMENTAL_INTERFACES) + +CIVETWEB_API struct mg_connection * +mg_connect_client2(const char *host, + const char *protocol, + int port, + const char *path, + struct mg_init_data *init, + struct mg_error_data *error); + +CIVETWEB_API int mg_get_response2(struct mg_connection *conn, + struct mg_error_data *error, + int timeout); +#endif + + +CIVETWEB_API struct mg_context *mg_start2(struct mg_init_data *init, + struct mg_error_data *error); + +CIVETWEB_API int mg_start_domain2(struct mg_context *ctx, + const char **configuration_options, + struct mg_error_data *error); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* CIVETWEB_HEADER_INCLUDED */ diff --git a/v2/webui/src/civetweb/handle_form.inl b/v2/webui/src/civetweb/handle_form.inl new file mode 100644 index 0000000..bc76f7d --- /dev/null +++ b/v2/webui/src/civetweb/handle_form.inl @@ -0,0 +1,1148 @@ +/* Copyright (c) 2016-2025 the Civetweb developers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +static int +url_encoded_field_found(const struct mg_connection *conn, + const char *key, + size_t key_len, + const char *filename, + size_t filename_len, + char *path, + size_t path_len, + struct mg_form_data_handler *fdh) +{ + char key_dec[1024]; + char filename_dec[1024]; + int key_dec_len; + int filename_dec_len; + int ret; + + key_dec_len = + mg_url_decode(key, (int)key_len, key_dec, (int)sizeof(key_dec), 1); + + if (((size_t)key_dec_len >= (size_t)sizeof(key_dec)) || (key_dec_len < 0)) { + return MG_FORM_FIELD_STORAGE_ABORT; + } + + if (filename) { + filename_dec_len = mg_url_decode(filename, + (int)filename_len, + filename_dec, + (int)sizeof(filename_dec), + 1); + + if (((size_t)filename_dec_len >= (size_t)sizeof(filename_dec)) + || (filename_dec_len < 0)) { + /* Log error message and skip this field. */ + mg_cry_internal(conn, "%s: Cannot decode filename", __func__); + return MG_FORM_FIELD_STORAGE_ABORT; + } + remove_dot_segments(filename_dec); + + } else { + filename_dec[0] = 0; + } + + ret = + fdh->field_found(key_dec, filename_dec, path, path_len, fdh->user_data); + + if ((ret & 0xF) == MG_FORM_FIELD_STORAGE_GET) { + if (fdh->field_get == NULL) { + mg_cry_internal(conn, + "%s: Function \"Get\" not available", + __func__); + return MG_FORM_FIELD_STORAGE_SKIP; + } + } + if ((ret & 0xF) == MG_FORM_FIELD_STORAGE_STORE) { + if (fdh->field_store == NULL) { + mg_cry_internal(conn, + "%s: Function \"Store\" not available", + __func__); + return MG_FORM_FIELD_STORAGE_SKIP; + } + } + + return ret; +} + +static int +url_encoded_field_get( + const struct mg_connection *conn, + const char *key, + size_t key_len, + const char *value, + size_t *value_len, /* IN: number of bytes available in "value", OUT: number + of bytes processed */ + struct mg_form_data_handler *fdh) +{ + char key_dec[1024]; + int key_dec_len; + + char *value_dec = (char *)mg_malloc_ctx(*value_len + 1, conn->phys_ctx); + int value_dec_len, ret; + + if (!value_dec) { + /* Log error message and stop parsing the form data. */ + mg_cry_internal(conn, + "%s: Not enough memory (required: %lu)", + __func__, + (unsigned long)(*value_len + 1)); + return MG_FORM_FIELD_STORAGE_ABORT; + } + + key_dec_len = + mg_url_decode(key, (int)key_len, key_dec, (int)sizeof(key_dec), 1); + + if (*value_len >= 2 && value[*value_len - 2] == '%') + *value_len -= 2; + else if (*value_len >= 1 && value[*value_len - 1] == '%') + (*value_len)--; + value_dec_len = mg_url_decode( + value, (int)*value_len, value_dec, ((int)*value_len) + 1, 1); + + if ((key_dec_len < 0) || (value_dec_len < 0)) { + mg_free(value_dec); + return MG_FORM_FIELD_STORAGE_ABORT; + } + + ret = fdh->field_get(key_dec, + value_dec, + (size_t)value_dec_len, + fdh->user_data); + + mg_free(value_dec); + + return ret; +} + +static int +unencoded_field_get(const struct mg_connection *conn, + const char *key, + size_t key_len, + const char *value, + size_t value_len, + struct mg_form_data_handler *fdh) +{ + char key_dec[1024]; + int key_dec_len; + (void)conn; + + key_dec_len = + mg_url_decode(key, (int)key_len, key_dec, (int)sizeof(key_dec), 1); + if (key_dec_len < 0) { + return MG_FORM_FIELD_STORAGE_ABORT; + } + + return fdh->field_get(key_dec, value, value_len, fdh->user_data); +} + +static int +field_stored(const struct mg_connection *conn, + const char *path, + long long file_size, + struct mg_form_data_handler *fdh) +{ + /* Equivalent to "upload" callback of "mg_upload". */ + + (void)conn; /* we do not need mg_cry here, so conn is currently unused */ + + return fdh->field_store(path, file_size, fdh->user_data); +} + +static const char * +search_boundary(const char *buf, + size_t buf_len, + const char *boundary, + size_t boundary_len) +{ + char *boundary_start = "\r\n--"; + size_t boundary_start_len = strlen(boundary_start); + + /* We must do a binary search here, not a string search, since the + * buffer may contain '\x00' bytes, if binary data is transferred. */ + int clen = (int)buf_len - (int)boundary_len - boundary_start_len; + int i; + + for (i = 0; i <= clen; i++) { + if (!memcmp(buf + i, boundary_start, boundary_start_len)) { + if (!memcmp(buf + i + boundary_start_len, boundary, boundary_len)) { + return buf + i; + } + } + } + return NULL; +} + +int +mg_handle_form_request(struct mg_connection *conn, + struct mg_form_data_handler *fdh) +{ + const char *content_type; + char path[512]; + char buf[MG_BUF_LEN]; /* Must not be smaller than ~900 */ + int field_storage; + size_t buf_fill = 0; + int r; + int field_count = 0; + int abort_read = 0; + struct mg_file fstore = STRUCT_FILE_INITIALIZER; + int64_t file_size = 0; /* init here, to a avoid a false positive + "uninitialized variable used" warning */ + + int has_body_data = + (conn->request_info.content_length > 0) || (conn->is_chunked); + + /* Unused without filesystems */ + (void)fstore; + (void)file_size; + + /* There are three ways to encode data from a HTML form: + * 1) method: GET (default) + * The form data is in the HTTP query string. + * 2) method: POST, enctype: "application/x-www-form-urlencoded" + * The form data is in the request body. + * The body is url encoded (the default encoding for POST). + * 3) method: POST, enctype: "multipart/form-data". + * The form data is in the request body of a multipart message. + * This is the typical way to handle file upload from a form. + */ + + if (!has_body_data) { + const char *data; + + if (0 != strcmp(conn->request_info.request_method, "GET")) { + /* No body data, but not a GET request. + * This is not a valid form request. */ + return -1; + } + + /* GET request: form data is in the query string. */ + /* The entire data has already been loaded, so there is no need to + * call mg_read. We just need to split the query string into key-value + * pairs. */ + data = conn->request_info.query_string; + if (!data) { + /* No query string. */ + return -1; + } + + /* Split data in a=1&b=xy&c=3&c=4 ... */ + while (*data) { + const char *val = strchr(data, '='); + const char *next; + ptrdiff_t keylen, vallen; + + if (!val) { + break; + } + keylen = val - data; + + /* In every "field_found" callback we ask what to do with the + * data ("field_storage"). This could be: + * MG_FORM_FIELD_STORAGE_SKIP (0): + * ignore the value of this field + * MG_FORM_FIELD_STORAGE_GET (1): + * read the data and call the get callback function + * MG_FORM_FIELD_STORAGE_STORE (2): + * store the data in a file + * MG_FORM_FIELD_STORAGE_READ (3): + * let the user read the data (for parsing long data on the fly) + * MG_FORM_FIELD_STORAGE_ABORT (flag): + * stop parsing + */ + memset(path, 0, sizeof(path)); + field_count++; + field_storage = url_encoded_field_found(conn, + data, + (size_t)keylen, + NULL, + 0, + path, + sizeof(path) - 1, + fdh); + + val++; + next = strchr(val, '&'); + if (next) { + vallen = next - val; + } else { + vallen = (ptrdiff_t)strlen(val); + } + + if (field_storage == MG_FORM_FIELD_STORAGE_GET) { + /* Call callback */ + r = url_encoded_field_get( + conn, data, (size_t)keylen, val, (size_t *)&vallen, fdh); + if (r == MG_FORM_FIELD_HANDLE_ABORT) { + /* Stop request handling */ + abort_read = 1; + break; + } + if (r == MG_FORM_FIELD_HANDLE_NEXT) { + /* Skip to next field */ + field_storage = MG_FORM_FIELD_STORAGE_SKIP; + } + } + + if (next) { + next++; + } else { + /* vallen may have been modified by url_encoded_field_get */ + next = val + vallen; + } + +#if !defined(NO_FILESYSTEMS) + if (field_storage == MG_FORM_FIELD_STORAGE_STORE) { + /* Store the content to a file */ + if (mg_fopen(conn, path, MG_FOPEN_MODE_WRITE, &fstore) == 0) { + fstore.access.fp = NULL; + } + file_size = 0; + if (fstore.access.fp != NULL) { + size_t n = (size_t) + fwrite(val, 1, (size_t)vallen, fstore.access.fp); + if ((n != (size_t)vallen) || (ferror(fstore.access.fp))) { + mg_cry_internal(conn, + "%s: Cannot write file %s", + __func__, + path); + (void)mg_fclose(&fstore.access); + remove_bad_file(conn, path); + } + file_size += (int64_t)n; + + if (fstore.access.fp) { + r = mg_fclose(&fstore.access); + if (r == 0) { + /* stored successfully */ + r = field_stored(conn, path, file_size, fdh); + if (r == MG_FORM_FIELD_HANDLE_ABORT) { + /* Stop request handling */ + abort_read = 1; + break; + } + + } else { + mg_cry_internal(conn, + "%s: Error saving file %s", + __func__, + path); + remove_bad_file(conn, path); + } + fstore.access.fp = NULL; + } + + } else { + mg_cry_internal(conn, + "%s: Cannot create file %s", + __func__, + path); + } + } +#endif /* NO_FILESYSTEMS */ + + /* if (field_storage == MG_FORM_FIELD_STORAGE_READ) { */ + /* The idea of "field_storage=read" is to let the API user read + * data chunk by chunk and to some data processing on the fly. + * This should avoid the need to store data in the server: + * It should neither be stored in memory, like + * "field_storage=get" does, nor in a file like + * "field_storage=store". + * However, for a "GET" request this does not make any much + * sense, since the data is already stored in memory, as it is + * part of the query string. + */ + /* } */ + + if ((field_storage & MG_FORM_FIELD_STORAGE_ABORT) + == MG_FORM_FIELD_STORAGE_ABORT) { + /* Stop parsing the request */ + abort_read = 1; + break; + } + + /* Proceed to next entry */ + data = next; + } + + return field_count; + } + + content_type = mg_get_header(conn, "Content-Type"); + + if (!content_type + || !mg_strncasecmp(content_type, + "APPLICATION/X-WWW-FORM-URLENCODED", + 33) + || !mg_strncasecmp(content_type, + "APPLICATION/WWW-FORM-URLENCODED", + 31)) { + /* The form data is in the request body data, encoded in key/value + * pairs. */ + int all_data_read = 0; + + /* Read body data and split it in keys and values. + * The encoding is like in the "GET" case above: a=1&b&c=3&c=4. + * Here we use "POST", and read the data from the request body. + * The data read on the fly, so it is not required to buffer the + * entire request in memory before processing it. */ + while (!abort_read) { + const char *val; + const char *next; + ptrdiff_t keylen, vallen; + ptrdiff_t used; + int end_of_key_value_pair_found = 0; + int get_block; + + if (buf_fill < (sizeof(buf) - 1)) { + + size_t to_read = sizeof(buf) - 1 - buf_fill; + r = mg_read(conn, buf + buf_fill, to_read); + if ((r < 0) || ((r == 0) && all_data_read)) { + /* read error */ + return -1; + } + if (r == 0) { + /* TODO: Create a function to get "all_data_read" from + * the conn object. All data is read if the Content-Length + * has been reached, or if chunked encoding is used and + * the end marker has been read, or if the connection has + * been closed. */ + all_data_read = (buf_fill == 0); + } + buf_fill += r; + buf[buf_fill] = 0; + if (buf_fill < 1) { + break; + } + } + + val = strchr(buf, '='); + + if (!val) { + break; + } + keylen = val - buf; + val++; + + /* Call callback */ + memset(path, 0, sizeof(path)); + field_count++; + field_storage = url_encoded_field_found(conn, + buf, + (size_t)keylen, + NULL, + 0, + path, + sizeof(path) - 1, + fdh); + + if ((field_storage & MG_FORM_FIELD_STORAGE_ABORT) + == MG_FORM_FIELD_STORAGE_ABORT) { + /* Stop parsing the request */ + abort_read = 1; + break; + } + +#if !defined(NO_FILESYSTEMS) + if (field_storage == MG_FORM_FIELD_STORAGE_STORE) { + if (mg_fopen(conn, path, MG_FOPEN_MODE_WRITE, &fstore) == 0) { + fstore.access.fp = NULL; + } + file_size = 0; + if (!fstore.access.fp) { + mg_cry_internal(conn, + "%s: Cannot create file %s", + __func__, + path); + } + } +#endif /* NO_FILESYSTEMS */ + + get_block = 0; + /* Loop to read values larger than sizeof(buf)-keylen-2 */ + do { + next = strchr(val, '&'); + if (next) { + vallen = next - val; + end_of_key_value_pair_found = 1; + } else { + vallen = (ptrdiff_t)strlen(val); + end_of_key_value_pair_found = all_data_read; + if ((buf + buf_fill) > (val + vallen)) { + /* Avoid DoS attacks by having a zero byte in the middle + * of a request that is supposed to be URL encoded. + * Since this request is certainly invalid, according to + * the protocol + * specification, stop processing it. Fixes #1348 */ + abort_read = 1; + break; + } + } + + if (field_storage == MG_FORM_FIELD_STORAGE_GET) { +#if 0 + if (!end_of_key_value_pair_found && !all_data_read) { + /* This callback will deliver partial contents */ + } +#endif + + /* Call callback */ + r = url_encoded_field_get(conn, + ((get_block > 0) ? NULL : buf), + ((get_block > 0) + ? 0 + : (size_t)keylen), + val, + (size_t *)&vallen, + fdh); + get_block++; + if (r == MG_FORM_FIELD_HANDLE_ABORT) { + /* Stop request handling */ + abort_read = 1; + break; + } + if (r == MG_FORM_FIELD_HANDLE_NEXT) { + /* Skip to next field */ + field_storage = MG_FORM_FIELD_STORAGE_SKIP; + } + } + + if (next) { + next++; + } else { + /* vallen may have been modified by url_encoded_field_get */ + next = val + vallen; + } + +#if !defined(NO_FILESYSTEMS) + if (fstore.access.fp) { + size_t n = (size_t) + fwrite(val, 1, (size_t)vallen, fstore.access.fp); + if ((n != (size_t)vallen) || (ferror(fstore.access.fp))) { + mg_cry_internal(conn, + "%s: Cannot write file %s", + __func__, + path); + mg_fclose(&fstore.access); + remove_bad_file(conn, path); + } + file_size += (int64_t)n; + } +#endif /* NO_FILESYSTEMS */ + + if (!end_of_key_value_pair_found) { + used = next - buf; + memmove(buf, + buf + (size_t)used, + sizeof(buf) - (size_t)used); + next = buf; + buf_fill -= used; + if (buf_fill < (sizeof(buf) - 1)) { + + size_t to_read = sizeof(buf) - 1 - buf_fill; + r = mg_read(conn, buf + buf_fill, to_read); + if ((r < 0) || ((r == 0) && all_data_read)) { +#if !defined(NO_FILESYSTEMS) + /* read error */ + if (fstore.access.fp) { + mg_fclose(&fstore.access); + remove_bad_file(conn, path); + } + return -1; +#endif /* NO_FILESYSTEMS */ + } + if (r == 0) { + /* TODO: Create a function to get "all_data_read" + * from the conn object. All data is read if the + * Content-Length has been reached, or if chunked + * encoding is used and the end marker has been + * read, or if the connection has been closed. */ + all_data_read = (buf_fill == 0); + } + buf_fill += r; + buf[buf_fill] = 0; + if (buf_fill < 1) { + break; + } + val = buf; + } + } + } while (!end_of_key_value_pair_found); + +#if !defined(NO_FILESYSTEMS) + if (fstore.access.fp) { + r = mg_fclose(&fstore.access); + if (r == 0) { + /* stored successfully */ + r = field_stored(conn, path, file_size, fdh); + if (r == MG_FORM_FIELD_HANDLE_ABORT) { + /* Stop request handling */ + abort_read = 1; + break; + } + } else { + mg_cry_internal(conn, + "%s: Error saving file %s", + __func__, + path); + remove_bad_file(conn, path); + } + fstore.access.fp = NULL; + } +#endif /* NO_FILESYSTEMS */ + + if ((all_data_read && (buf_fill == 0)) || abort_read) { + /* nothing more to process */ + break; + } + + /* Proceed to next entry */ + used = next - buf; + memmove(buf, buf + (size_t)used, sizeof(buf) - (size_t)used); + buf_fill -= used; + } + + return field_count; + } + + if (!mg_strncasecmp(content_type, "MULTIPART/FORM-DATA;", 20)) { + /* The form data is in the request body data, encoded as multipart + * content (see https://www.ietf.org/rfc/rfc1867.txt, + * https://www.ietf.org/rfc/rfc2388.txt). */ + char *boundary; + size_t bl; + ptrdiff_t used; + struct mg_request_info part_header; + char *hbuf; + const char *content_disp, *hend, *fbeg, *fend, *nbeg, *nend; + const char *next; + unsigned part_no; + int all_data_read = 0; + + memset(&part_header, 0, sizeof(part_header)); + + /* Skip all spaces between MULTIPART/FORM-DATA; and BOUNDARY= */ + bl = 20; + while (content_type[bl] == ' ') { + bl++; + } + + /* There has to be a BOUNDARY definition in the Content-Type header */ + if (mg_strncasecmp(content_type + bl, "BOUNDARY=", 9)) { + /* Malformed request */ + return -1; + } + + /* Copy boundary string to variable "boundary" */ + /* fbeg is pointer to start of value of boundary */ + fbeg = content_type + bl + 9; + bl = strlen(fbeg); + boundary = (char *)mg_malloc(bl + 1); + if (!boundary) { + /* Out of memory */ + mg_cry_internal(conn, + "%s: Cannot allocate memory for boundary [%lu]", + __func__, + (unsigned long)bl); + return -1; + } + memcpy(boundary, fbeg, bl); + boundary[bl] = 0; + + /* RFC 2046 permits the boundary string to be quoted. */ + /* If the boundary is quoted, trim the quotes */ + if (boundary[0] == '"') { + hbuf = strchr(boundary + 1, '"'); + if ((!hbuf) || (*hbuf != '"')) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + *hbuf = 0; + memmove(boundary, boundary + 1, bl); + bl = strlen(boundary); + } + + /* Do some sanity checks for boundary lengths */ + if (bl > 70) { + /* From RFC 2046: + * Boundary delimiters must not appear within the + * encapsulated material, and must be no longer + * than 70 characters, not counting the two + * leading hyphens. + */ + + /* The algorithm can not work if bl >= sizeof(buf), or if buf + * can not hold the multipart header plus the boundary. + * Requests with long boundaries are not RFC compliant, maybe they + * are intended attacks to interfere with this algorithm. */ + mg_free(boundary); + return -1; + } + if (bl < 4) { + /* Sanity check: A boundary string of less than 4 bytes makes + * no sense either. */ + mg_free(boundary); + return -1; + } + + for (part_no = 0;; part_no++) { + size_t towrite, fnlen, n; + int get_block; + size_t to_read = sizeof(buf) - 1 - buf_fill; + + /* Unused without filesystems */ + (void)n; + + r = mg_read(conn, buf + buf_fill, to_read); + if ((r < 0) || ((r == 0) && all_data_read)) { + /* read error */ + mg_free(boundary); + return -1; + } + if (r == 0) { + all_data_read = (buf_fill == 0); + } + + buf_fill += r; + buf[buf_fill] = 0; + if (buf_fill < 1) { + /* No data */ + mg_free(boundary); + return -1; + } + + /* @see https://www.rfc-editor.org/rfc/rfc2046.html#section-5.1.1 + * + * multipart-body := [preamble CRLF] + * dash-boundary transport-padding CRLF + * body-part *encapsulation + * close-delimiter transport-padding + * [CRLF epilogue] + */ + + if (part_no == 0) { + size_t preamble_length = 0; + /* skip over the preamble until we find a complete boundary + * limit the preamble length to prevent abuse */ + /* +2 for the -- preceding the boundary */ + while (preamble_length < 1024 + && (preamble_length < buf_fill - bl) + && strncmp(buf + preamble_length + 2, boundary, bl)) { + preamble_length++; + } + /* reset the start of buf to remove the preamble */ + if (0 == strncmp(buf + preamble_length + 2, boundary, bl)) { + memmove(buf, + buf + preamble_length, + (unsigned)buf_fill - (unsigned)preamble_length); + buf_fill -= preamble_length; + buf[buf_fill] = 0; + } + } + + /* either it starts with a boundary and it's fine, or it's malformed + * because: + * - the preamble was longer than accepted + * - couldn't find a boundary at all in the body + * - didn't have a terminating boundary */ + if (buf_fill < (bl + 2) || strncmp(buf, "--", 2) + || strncmp(buf + 2, boundary, bl)) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + + /* skip the -- */ + char *boundary_start = buf + 2; + size_t transport_padding = 0; + while (boundary_start[bl + transport_padding] == ' ' + || boundary_start[bl + transport_padding] == '\t') { + transport_padding++; + } + char *boundary_end = boundary_start + bl + transport_padding; + + /* after the transport padding, if the boundary isn't + * immediately followed by a \r\n then it is either... */ + if (strncmp(boundary_end, "\r\n", 2)) { + /* ...the final boundary, and it is followed by --, (in which + * case it's the end of the request) or it's a malformed + * request */ + if (strncmp(boundary_end, "--", 2)) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + /* Ingore any epilogue here */ + break; + } + + /* skip the \r\n */ + hbuf = boundary_end + 2; + /* Next, we need to get the part header: Read until \r\n\r\n */ + hend = strstr(hbuf, "\r\n\r\n"); + if (!hend) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + + part_header.num_headers = + parse_http_headers(&hbuf, part_header.http_headers); + if ((hend + 2) != hbuf) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + + /* Skip \r\n\r\n */ + hend += 4; + + /* According to the RFC, every part has to have a header field like: + * Content-Disposition: form-data; name="..." */ + content_disp = get_header(part_header.http_headers, + part_header.num_headers, + "Content-Disposition"); + if (!content_disp) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + + /* Get the mandatory name="..." part of the Content-Disposition + * header. */ + nbeg = strstr(content_disp, "name=\""); + while ((nbeg != NULL) && (strcspn(nbeg - 1, ":,; \t") != 0)) { + /* It could be somethingname= instead of name= */ + nbeg = strstr(nbeg + 1, "name=\""); + } + + /* This line is not required, but otherwise some compilers + * generate spurious warnings. */ + nend = nbeg; + /* And others complain, the result is unused. */ + (void)nend; + + /* If name=" is found, search for the closing " */ + if (nbeg) { + nbeg += 6; + nend = strchr(nbeg, '\"'); + if (!nend) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + } else { + /* name= without quotes is also allowed */ + nbeg = strstr(content_disp, "name="); + while ((nbeg != NULL) && (strcspn(nbeg - 1, ":,; \t") != 0)) { + /* It could be somethingname= instead of name= */ + nbeg = strstr(nbeg + 1, "name="); + } + if (!nbeg) { + /* Malformed request */ + mg_free(boundary); + return -1; + } + nbeg += 5; + + /* RFC 2616 Sec. 2.2 defines a list of allowed + * separators, but many of them make no sense + * here, e.g. various brackets or slashes. + * If they are used, probably someone is + * trying to attack with curious hand made + * requests. Only ; , space and tab seem to be + * reasonable here. Ignore everything else. */ + nend = nbeg + strcspn(nbeg, ",; \t"); + } + + /* Get the optional filename="..." part of the Content-Disposition + * header. */ + fbeg = strstr(content_disp, "filename=\""); + while ((fbeg != NULL) && (strcspn(fbeg - 1, ":,; \t") != 0)) { + /* It could be somethingfilename= instead of filename= */ + fbeg = strstr(fbeg + 1, "filename=\""); + } + + /* This line is not required, but otherwise some compilers + * generate spurious warnings. */ + fend = fbeg; + + /* If filename=" is found, search for the closing " */ + if (fbeg) { + fbeg += 10; + fend = strchr(fbeg, '\"'); + + if (!fend) { + /* Malformed request (the filename field is optional, but if + * it exists, it needs to be terminated correctly). */ + mg_free(boundary); + return -1; + } + + /* TODO: check Content-Type */ + /* Content-Type: application/octet-stream */ + } + if (!fbeg) { + /* Try the same without quotes */ + fbeg = strstr(content_disp, "filename="); + while ((fbeg != NULL) && (strcspn(fbeg - 1, ":,; \t") != 0)) { + /* It could be somethingfilename= instead of filename= */ + fbeg = strstr(fbeg + 1, "filename="); + } + if (fbeg) { + fbeg += 9; + fend = fbeg + strcspn(fbeg, ",; \t"); + } + } + + if (!fbeg || !fend) { + fbeg = NULL; + fend = NULL; + fnlen = 0; + } else { + fnlen = (size_t)(fend - fbeg); + } + + /* In theory, it could be possible that someone crafts + * a request like name=filename=xyz. Check if name and + * filename do not overlap. */ + if (!(((ptrdiff_t)fbeg > (ptrdiff_t)nend) + || ((ptrdiff_t)nbeg > (ptrdiff_t)fend))) { + mg_free(boundary); + return -1; + } + + /* Call callback for new field */ + memset(path, 0, sizeof(path)); + field_count++; + field_storage = url_encoded_field_found(conn, + nbeg, + (size_t)(nend - nbeg), + ((fnlen > 0) ? fbeg : NULL), + fnlen, + path, + sizeof(path) - 1, + fdh); + + /* If the boundary is already in the buffer, get the address, + * otherwise next will be NULL. */ + next = search_boundary(hbuf, + (size_t)((buf - hbuf) + buf_fill), + boundary, + bl); + +#if !defined(NO_FILESYSTEMS) + if (field_storage == MG_FORM_FIELD_STORAGE_STORE) { + /* Store the content to a file */ + if (mg_fopen(conn, path, MG_FOPEN_MODE_WRITE, &fstore) == 0) { + fstore.access.fp = NULL; + } + file_size = 0; + + if (!fstore.access.fp) { + mg_cry_internal(conn, + "%s: Cannot create file %s", + __func__, + path); + } + } +#endif /* NO_FILESYSTEMS */ + + get_block = 0; + while (!next) { + /* Set "towrite" to the number of bytes available + * in the buffer */ + towrite = (size_t)(buf - hend + buf_fill); + + if (towrite < bl + 4) { + /* Not enough data stored. */ + /* Incomplete request. */ + mg_free(boundary); + return -1; + } + + /* Subtract the boundary length, to deal with + * cases the boundary is only partially stored + * in the buffer. */ + towrite -= bl + 4; + + if (field_storage == MG_FORM_FIELD_STORAGE_GET) { + r = unencoded_field_get(conn, + ((get_block > 0) ? NULL : nbeg), + ((get_block > 0) + ? 0 + : (size_t)(nend - nbeg)), + hend, + towrite, + fdh); + get_block++; + if (r == MG_FORM_FIELD_HANDLE_ABORT) { + /* Stop request handling */ + abort_read = 1; + break; + } + if (r == MG_FORM_FIELD_HANDLE_NEXT) { + /* Skip to next field */ + field_storage = MG_FORM_FIELD_STORAGE_SKIP; + } + } + +#if !defined(NO_FILESYSTEMS) + if (field_storage == MG_FORM_FIELD_STORAGE_STORE) { + if (fstore.access.fp) { + + /* Store the content of the buffer. */ + n = (size_t)fwrite(hend, 1, towrite, fstore.access.fp); + if ((n != towrite) || (ferror(fstore.access.fp))) { + mg_cry_internal(conn, + "%s: Cannot write file %s", + __func__, + path); + mg_fclose(&fstore.access); + remove_bad_file(conn, path); + } + file_size += (int64_t)n; + } + } +#endif /* NO_FILESYSTEMS */ + + memmove(buf, hend + towrite, bl + 4); + buf_fill = bl + 4; + hend = buf; + + /* Read new data */ + to_read = sizeof(buf) - 1 - buf_fill; + r = mg_read(conn, buf + buf_fill, to_read); + if ((r < 0) || ((r == 0) && all_data_read)) { +#if !defined(NO_FILESYSTEMS) + /* read error */ + if (fstore.access.fp) { + mg_fclose(&fstore.access); + remove_bad_file(conn, path); + } +#endif /* NO_FILESYSTEMS */ + mg_free(boundary); + return -1; + } + /* r==0 already handled, all_data_read is false here */ + + buf_fill += r; + buf[buf_fill] = 0; + /* buf_fill is at least 8 here */ + + /* Find boundary */ + next = search_boundary(buf, buf_fill, boundary, bl); + + if (!next && (r == 0)) { + /* incomplete request */ + all_data_read = 1; + } + } + + towrite = (next ? (size_t)(next - hend) : 0); + + if (field_storage == MG_FORM_FIELD_STORAGE_GET) { + /* Call callback */ + r = unencoded_field_get(conn, + ((get_block > 0) ? NULL : nbeg), + ((get_block > 0) + ? 0 + : (size_t)(nend - nbeg)), + hend, + towrite, + fdh); + if (r == MG_FORM_FIELD_HANDLE_ABORT) { + /* Stop request handling */ + abort_read = 1; + break; + } + if (r == MG_FORM_FIELD_HANDLE_NEXT) { + /* Skip to next field */ + field_storage = MG_FORM_FIELD_STORAGE_SKIP; + } + } + +#if !defined(NO_FILESYSTEMS) + if (field_storage == MG_FORM_FIELD_STORAGE_STORE) { + + if (fstore.access.fp) { + n = (size_t)fwrite(hend, 1, towrite, fstore.access.fp); + if ((n != towrite) || (ferror(fstore.access.fp))) { + mg_cry_internal(conn, + "%s: Cannot write file %s", + __func__, + path); + mg_fclose(&fstore.access); + remove_bad_file(conn, path); + } else { + file_size += (int64_t)n; + r = mg_fclose(&fstore.access); + if (r == 0) { + /* stored successfully */ + r = field_stored(conn, path, file_size, fdh); + if (r == MG_FORM_FIELD_HANDLE_ABORT) { + /* Stop request handling */ + abort_read = 1; + break; + } + } else { + mg_cry_internal(conn, + "%s: Error saving file %s", + __func__, + path); + remove_bad_file(conn, path); + } + } + fstore.access.fp = NULL; + } + } +#endif /* NO_FILESYSTEMS */ + + if ((field_storage & MG_FORM_FIELD_STORAGE_ABORT) + == MG_FORM_FIELD_STORAGE_ABORT) { + /* Stop parsing the request */ + abort_read = 1; + break; + } + + /* Remove from the buffer */ + if (next) { + used = next - buf + 2; + memmove(buf, buf + (size_t)used, sizeof(buf) - (size_t)used); + buf_fill -= used; + } else { + buf_fill = 0; + } + } + + /* All parts handled */ + mg_free(boundary); + return field_count; + } + + /* Unknown Content-Type */ + return -1; +} + +/* End of handle_form.inl */ diff --git a/v2/webui/src/civetweb/match.inl b/v2/webui/src/civetweb/match.inl new file mode 100644 index 0000000..34ee00e --- /dev/null +++ b/v2/webui/src/civetweb/match.inl @@ -0,0 +1,262 @@ +/* Reimplementation of pattern matching */ +/* This file is part of the CivetWeb web server. + * See https://github.com/civetweb/civetweb/ + */ + + +/* Initialize structure with 0 matches */ +static void +match_context_reset(struct mg_match_context *mcx) +{ + mcx->num_matches = 0; + memset(mcx->match, 0, sizeof(mcx->match)); +} + + +/* Add a new match to the list of matches */ +static void +match_context_push(const char *str, size_t len, struct mg_match_context *mcx) +{ + if (mcx->num_matches < MG_MATCH_CONTEXT_MAX_MATCHES) { + mcx->match[mcx->num_matches].str = str; + mcx->match[mcx->num_matches].len = len; + mcx->num_matches++; + } +} + + +static ptrdiff_t +mg_match_impl(const char *pat, + size_t pat_len, + const char *str, + struct mg_match_context *mcx) +{ + /* Parse string */ + size_t i_pat = 0; /* Pattern index */ + size_t i_str = 0; /* Pattern index */ + + int case_sensitive = ((mcx != NULL) ? mcx->case_sensitive : 0); /* 0 or 1 */ + + while (i_pat < pat_len) { + + /* Pattern ? matches one character, except / and NULL character */ + if ((pat[i_pat] == '?') && (str[i_str] != '\0') + && (str[i_str] != '/')) { + size_t i_str_start = i_str; + do { + /* Advance as long as there are ? */ + i_pat++; + i_str++; + } while ((i_pat < pat_len) && (pat[i_pat] == '?') + && (str[i_str] != '\0') && (str[i_str] != '/')); + + /* If we have a match context, add the substring we just found */ + if (mcx) { + match_context_push(str + i_str_start, i_str - i_str_start, mcx); + } + + /* Reached end of pattern ? */ + if (i_pat == pat_len) { + return (ptrdiff_t)i_str; + } + } + + /* Pattern $ matches end of string */ + if (pat[i_pat] == '$') { + return (str[i_str] == '\0') ? (ptrdiff_t)i_str : -1; + } + + /* Pattern * or ** matches multiple characters */ + if (pat[i_pat] == '*') { + size_t len; /* length matched by "*" or "**" */ + ptrdiff_t ret; + + i_pat++; + if ((i_pat < pat_len) && (pat[i_pat] == '*')) { + /* Pattern ** matches all */ + i_pat++; + len = strlen(str + i_str); + } else { + /* Pattern * matches all except / character */ + len = strcspn(str + i_str, "/"); + } + + if (i_pat == pat_len) { + /* End of pattern reached. Add all to match context. */ + if (mcx) { + match_context_push(str + i_str, len, mcx); + } + return ((ptrdiff_t)(i_str + len)); + } + + /* This loop searches for the longest possible match */ + do { + ret = mg_match_impl(pat + i_pat, + (pat_len - (size_t)i_pat), + str + i_str + len, + mcx); + } while ((ret == -1) && (len-- > 0)); + + /* If we have a match context, add the substring we just found */ + if (ret >= 0) { + if (mcx) { + match_context_push(str + i_str, len, mcx); + } + return ((ptrdiff_t)i_str + ret + (ptrdiff_t)len); + } + + return -1; + } + + + /* Single character compare */ + if (case_sensitive) { + if (pat[i_pat] != str[i_str]) { + /* case sensitive compare: mismatch */ + return -1; + } + } else if (lowercase(&pat[i_pat]) != lowercase(&str[i_str])) { + /* case insensitive compare: mismatch */ + return -1; + } + + i_pat++; + i_str++; + } + return (ptrdiff_t)i_str; +} + + +static ptrdiff_t +mg_match_alternatives(const char *pat, + size_t pat_len, + const char *str, + struct mg_match_context *mcx) +{ + const char *match_alternative = (const char *)memchr(pat, '|', pat_len); + + if (mcx != NULL) { + match_context_reset(mcx); + } + + while (match_alternative != NULL) { + /* Split at | for alternative match */ + size_t left_size = (size_t)(match_alternative - pat); + + /* Try left string first */ + ptrdiff_t ret = mg_match_impl(pat, left_size, str, mcx); + if (ret >= 0) { + /* A 0-byte match is also valid */ + return ret; + } + + /* Reset possible incomplete match data */ + if (mcx != NULL) { + match_context_reset(mcx); + } + + /* If no match: try right side */ + pat += left_size + 1; + pat_len -= left_size + 1; + match_alternative = (const char *)memchr(pat, '|', pat_len); + } + + /* Handled all | operators. This is the final string. */ + return mg_match_impl(pat, pat_len, str, mcx); +} + + +static int +match_compare(const void *p1, const void *p2, void *user) +{ + const struct mg_match_element *e1 = (const struct mg_match_element *)p1; + const struct mg_match_element *e2 = (const struct mg_match_element *)p2; + + /* unused */ + (void)user; + + if (e1->str > e2->str) { + return +1; + } + if (e1->str < e2->str) { + return -1; + } + return 0; +} + + +#if defined(MG_EXPERIMENTAL_INTERFACES) +CIVETWEB_API +#else +static +#endif +ptrdiff_t +mg_match(const char *pat, const char *str, struct mg_match_context *mcx) +{ + size_t pat_len = strlen(pat); + ptrdiff_t ret = mg_match_alternatives(pat, pat_len, str, mcx); + if (mcx != NULL) { + if (ret < 0) { + /* Remove possible incomplete data */ + match_context_reset(mcx); + } else { + /* Join "?*" to one pattern. */ + size_t i, j; + + /* Use difference of two array elements instead of sizeof, since + * there may be some additional padding bytes. */ + size_t elmsize = + (size_t)(&mcx->match[1]) - (size_t)(&mcx->match[0]); + + /* First sort the matches by address ("str" begin to end) */ + mg_sort(mcx->match, mcx->num_matches, elmsize, match_compare, NULL); + + /* Join consecutive matches */ + i = 1; + while (i < mcx->num_matches) { + if ((mcx->match[i - 1].str + mcx->match[i - 1].len) + == mcx->match[i].str) { + /* Two matches are consecutive. Join length. */ + mcx->match[i - 1].len += mcx->match[i].len; + + /* Shift all list elements. */ + for (j = i + 1; j < mcx->num_matches; j++) { + mcx->match[j - 1].len = mcx->match[j].len; + mcx->match[j - 1].str = mcx->match[j].str; + } + + /* Remove/blank last list element. */ + mcx->num_matches--; + mcx->match[mcx->num_matches].str = NULL; + mcx->match[mcx->num_matches].len = 0; + + } else { + i++; + } + } + } + } + return ret; +} + + +static ptrdiff_t +match_prefix(const char *pattern, size_t pattern_len, const char *str) +{ + if (pattern == NULL) { + return -1; + } + return mg_match_alternatives(pattern, pattern_len, str, NULL); +} + + +static ptrdiff_t +match_prefix_strlen(const char *pattern, const char *str) +{ + if (pattern == NULL) { + return -1; + } + return mg_match_alternatives(pattern, strlen(pattern), str, NULL); +} + +/* End of match.inl */ diff --git a/v2/webui/src/civetweb/md5.inl b/v2/webui/src/civetweb/md5.inl new file mode 100644 index 0000000..5dd3a60 --- /dev/null +++ b/v2/webui/src/civetweb/md5.inl @@ -0,0 +1,472 @@ +/* + * This an amalgamation of md5.c and md5.h into a single file + * with all static declaration to reduce linker conflicts + * in Civetweb. + * + * The MD5_STATIC declaration was added to facilitate static + * inclusion. + * No Face Press, LLC + */ + +/* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */ +/* + Independent implementation of MD5 (RFC 1321). + + This code implements the MD5 Algorithm defined in RFC 1321, whose + text is available at + http://www.ietf.org/rfc/rfc1321.txt + The code is derived from the text of the RFC, including the test suite + (section A.5) but excluding the rest of Appendix A. It does not include + any code or documentation that is identified in the RFC as being + copyrighted. + + The original and principal author of md5.h is L. Peter Deutsch + . Other authors are noted in the change history + that follows (in reverse chronological order): + + 2002-04-13 lpd Removed support for non-ANSI compilers; removed + references to Ghostscript; clarified derivation from RFC 1321; + now handles byte order either statically or dynamically. + 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. + 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); + added conditionalization for C++ compilation from Martin + Purschke . + 1999-05-03 lpd Original version. + */ + +#if !defined(md5_INCLUDED) +#define md5_INCLUDED + +/* + * This package supports both compile-time and run-time determination of CPU + * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be + * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is + * defined as non-zero, the code will be compiled to run only on big-endian + * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to + * run on either big- or little-endian CPUs, but will run slightly less + * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. + */ + +typedef unsigned char md5_byte_t; /* 8-bit byte */ +typedef unsigned int md5_word_t; /* 32-bit word */ + +/* Define the state of the MD5 Algorithm. */ +typedef struct md5_state_s { + md5_word_t count[2]; /* message length in bits, lsw first */ + md5_word_t abcd[4]; /* digest buffer */ + md5_byte_t buf[64]; /* accumulate block */ +} md5_state_t; + +#if defined(__cplusplus) +extern "C" { +#endif + +/* Initialize the algorithm. */ +MD5_STATIC void md5_init(md5_state_t *pms); + +/* Append a string to the message. */ +MD5_STATIC void +md5_append(md5_state_t *pms, const md5_byte_t *data, size_t nbytes); + +/* Finish the message and return the digest. */ +MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); + +#if defined(__cplusplus) +} /* end extern "C" */ +#endif + +#endif /* md5_INCLUDED */ + +/* + Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + L. Peter Deutsch + ghost@aladdin.com + + */ +/* $Id: md5.c,v 1.6 2002/04/13 19:20:28 lpd Exp $ */ +/* + Independent implementation of MD5 (RFC 1321). + + This code implements the MD5 Algorithm defined in RFC 1321, whose + text is available at + http://www.ietf.org/rfc/rfc1321.txt + The code is derived from the text of the RFC, including the test suite + (section A.5) but excluding the rest of Appendix A. It does not include + any code or documentation that is identified in the RFC as being + copyrighted. + + The original and principal author of md5.c is L. Peter Deutsch + . Other authors are noted in the change history + that follows (in reverse chronological order): + + 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order + either statically or dynamically; added missing #include + in library. + 2002-03-11 lpd Corrected argument list for main(), and added int return + type, in test program and T value program. + 2002-02-21 lpd Added missing #include in test program. + 2000-07-03 lpd Patched to eliminate warnings about "constant is + unsigned in ANSI C, signed in traditional"; made test program + self-checking. + 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. + 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). + 1999-05-03 lpd Original version. + */ + +#if !defined(MD5_STATIC) +#include +#include +#endif + +#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */ +#if defined(ARCH_IS_BIG_ENDIAN) +#define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1) +#else +#define BYTE_ORDER (0) +#endif + +#define T_MASK ((md5_word_t)~0) +#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87) +#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9) +#define T3 (0x242070db) +#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111) +#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050) +#define T6 (0x4787c62a) +#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec) +#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe) +#define T9 (0x698098d8) +#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850) +#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e) +#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841) +#define T13 (0x6b901122) +#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c) +#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71) +#define T16 (0x49b40821) +#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d) +#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf) +#define T19 (0x265e5a51) +#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855) +#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2) +#define T22 (0x02441453) +#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e) +#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437) +#define T25 (0x21e1cde6) +#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829) +#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278) +#define T28 (0x455a14ed) +#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa) +#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07) +#define T31 (0x676f02d9) +#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375) +#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd) +#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e) +#define T35 (0x6d9d6122) +#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3) +#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb) +#define T38 (0x4bdecfa9) +#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f) +#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f) +#define T41 (0x289b7ec6) +#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805) +#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a) +#define T44 (0x04881d05) +#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6) +#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a) +#define T47 (0x1fa27cf8) +#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a) +#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb) +#define T50 (0x432aff97) +#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58) +#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6) +#define T53 (0x655b59c3) +#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d) +#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82) +#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e) +#define T57 (0x6fa87e4f) +#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f) +#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb) +#define T60 (0x4e0811a1) +#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d) +#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca) +#define T63 (0x2ad7d2bb) +#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e) + +static void +md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/) +{ + md5_word_t a = pms->abcd[0], b = pms->abcd[1], c = pms->abcd[2], + d = pms->abcd[3]; + md5_word_t t; +#if BYTE_ORDER > 0 + /* Define storage only for big-endian CPUs. */ + md5_word_t X[16]; +#else + /* Define storage for little-endian or both types of CPUs. */ + md5_word_t xbuf[16]; + const md5_word_t *X; +#endif + + { +#if BYTE_ORDER == 0 + /* + * Determine dynamically whether this is a big-endian or + * little-endian machine, since we can use a more efficient + * algorithm on the latter. + */ + static const int w = 1; + + if (*((const md5_byte_t *)&w)) /* dynamic little-endian */ +#endif +#if BYTE_ORDER <= 0 /* little-endian */ + { + /* + * On little-endian machines, we can process properly aligned + * data without copying it. + */ + if (!(((uintptr_t)data) & 3)) { + /* data are properly aligned, a direct assignment is possible */ + /* cast through a (void *) should avoid a compiler warning, + see + https://github.com/bel2125/civetweb/issues/94#issuecomment-98112861 + */ + X = (const md5_word_t *)(const void *)data; + } else { + /* not aligned */ + memcpy(xbuf, data, 64); + X = xbuf; + } + } +#endif +#if BYTE_ORDER == 0 + else /* dynamic big-endian */ +#endif +#if BYTE_ORDER >= 0 /* big-endian */ + { + /* + * On big-endian machines, we must arrange the bytes in the + * right order. + */ + const md5_byte_t *xp = data; + int i; + +#if BYTE_ORDER == 0 + X = xbuf; /* (dynamic only) */ +#else +#define xbuf X /* (static only) */ +#endif + for (i = 0; i < 16; ++i, xp += 4) + xbuf[i] = (md5_word_t)(xp[0]) + (md5_word_t)(xp[1] << 8) + + (md5_word_t)(xp[2] << 16) + + (md5_word_t)(xp[3] << 24); + } +#endif + } + +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) + +/* Round 1. */ +/* Let [abcd k s i] denote the operation + a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ +#define F(x, y, z) (((x) & (y)) | (~(x) & (z))) +#define SET(a, b, c, d, k, s, Ti) \ + t = (a) + F(b, c, d) + X[k] + (Ti); \ + (a) = ROTATE_LEFT(t, s) + (b) + + /* Do the following 16 operations. */ + SET(a, b, c, d, 0, 7, T1); + SET(d, a, b, c, 1, 12, T2); + SET(c, d, a, b, 2, 17, T3); + SET(b, c, d, a, 3, 22, T4); + SET(a, b, c, d, 4, 7, T5); + SET(d, a, b, c, 5, 12, T6); + SET(c, d, a, b, 6, 17, T7); + SET(b, c, d, a, 7, 22, T8); + SET(a, b, c, d, 8, 7, T9); + SET(d, a, b, c, 9, 12, T10); + SET(c, d, a, b, 10, 17, T11); + SET(b, c, d, a, 11, 22, T12); + SET(a, b, c, d, 12, 7, T13); + SET(d, a, b, c, 13, 12, T14); + SET(c, d, a, b, 14, 17, T15); + SET(b, c, d, a, 15, 22, T16); +#undef SET + +/* Round 2. */ +/* Let [abcd k s i] denote the operation + a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ +#define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) +#define SET(a, b, c, d, k, s, Ti) \ + t = (a) + G(b, c, d) + X[k] + (Ti); \ + (a) = ROTATE_LEFT(t, s) + (b) + + /* Do the following 16 operations. */ + SET(a, b, c, d, 1, 5, T17); + SET(d, a, b, c, 6, 9, T18); + SET(c, d, a, b, 11, 14, T19); + SET(b, c, d, a, 0, 20, T20); + SET(a, b, c, d, 5, 5, T21); + SET(d, a, b, c, 10, 9, T22); + SET(c, d, a, b, 15, 14, T23); + SET(b, c, d, a, 4, 20, T24); + SET(a, b, c, d, 9, 5, T25); + SET(d, a, b, c, 14, 9, T26); + SET(c, d, a, b, 3, 14, T27); + SET(b, c, d, a, 8, 20, T28); + SET(a, b, c, d, 13, 5, T29); + SET(d, a, b, c, 2, 9, T30); + SET(c, d, a, b, 7, 14, T31); + SET(b, c, d, a, 12, 20, T32); +#undef SET + +/* Round 3. */ +/* Let [abcd k s t] denote the operation + a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define SET(a, b, c, d, k, s, Ti) \ + t = (a) + H(b, c, d) + X[k] + (Ti); \ + (a) = ROTATE_LEFT(t, s) + b + + /* Do the following 16 operations. */ + SET(a, b, c, d, 5, 4, T33); + SET(d, a, b, c, 8, 11, T34); + SET(c, d, a, b, 11, 16, T35); + SET(b, c, d, a, 14, 23, T36); + SET(a, b, c, d, 1, 4, T37); + SET(d, a, b, c, 4, 11, T38); + SET(c, d, a, b, 7, 16, T39); + SET(b, c, d, a, 10, 23, T40); + SET(a, b, c, d, 13, 4, T41); + SET(d, a, b, c, 0, 11, T42); + SET(c, d, a, b, 3, 16, T43); + SET(b, c, d, a, 6, 23, T44); + SET(a, b, c, d, 9, 4, T45); + SET(d, a, b, c, 12, 11, T46); + SET(c, d, a, b, 15, 16, T47); + SET(b, c, d, a, 2, 23, T48); +#undef SET + +/* Round 4. */ +/* Let [abcd k s t] denote the operation + a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ +#define I(x, y, z) ((y) ^ ((x) | ~(z))) +#define SET(a, b, c, d, k, s, Ti) \ + t = (a) + I(b, c, d) + X[k] + (Ti); \ + (a) = ROTATE_LEFT(t, s) + (b) + + /* Do the following 16 operations. */ + SET(a, b, c, d, 0, 6, T49); + SET(d, a, b, c, 7, 10, T50); + SET(c, d, a, b, 14, 15, T51); + SET(b, c, d, a, 5, 21, T52); + SET(a, b, c, d, 12, 6, T53); + SET(d, a, b, c, 3, 10, T54); + SET(c, d, a, b, 10, 15, T55); + SET(b, c, d, a, 1, 21, T56); + SET(a, b, c, d, 8, 6, T57); + SET(d, a, b, c, 15, 10, T58); + SET(c, d, a, b, 6, 15, T59); + SET(b, c, d, a, 13, 21, T60); + SET(a, b, c, d, 4, 6, T61); + SET(d, a, b, c, 11, 10, T62); + SET(c, d, a, b, 2, 15, T63); + SET(b, c, d, a, 9, 21, T64); +#undef SET + + /* Then perform the following additions. (That is increment each + of the four registers by the value it had before this block + was started.) */ + pms->abcd[0] += a; + pms->abcd[1] += b; + pms->abcd[2] += c; + pms->abcd[3] += d; +} + +MD5_STATIC void +md5_init(md5_state_t *pms) +{ + pms->count[0] = pms->count[1] = 0; + pms->abcd[0] = 0x67452301; + pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; + pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; + pms->abcd[3] = 0x10325476; +} + +MD5_STATIC void +md5_append(md5_state_t *pms, const md5_byte_t *data, size_t nbytes) +{ + const md5_byte_t *p = data; + size_t left = nbytes; + size_t offset = (pms->count[0] >> 3) & 63; + md5_word_t nbits = (md5_word_t)(nbytes << 3); + + if (nbytes <= 0) + return; + + /* Update the message length. */ + pms->count[1] += (md5_word_t)(nbytes >> 29); + pms->count[0] += nbits; + if (pms->count[0] < nbits) + pms->count[1]++; + + /* Process an initial partial block. */ + if (offset) { + size_t copy = (offset + nbytes > 64 ? 64 - offset : nbytes); + + memcpy(pms->buf + offset, p, copy); + if (offset + copy < 64) + return; + p += copy; + left -= copy; + md5_process(pms, pms->buf); + } + + /* Process full blocks. */ + for (; left >= 64; p += 64, left -= 64) + md5_process(pms, p); + + /* Process a final partial block. */ + if (left) + memcpy(pms->buf, p, left); +} + +MD5_STATIC void +md5_finish(md5_state_t *pms, md5_byte_t digest[16]) +{ + static const md5_byte_t pad[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + md5_byte_t data[8]; + int i; + + /* Save the length before padding. */ + for (i = 0; i < 8; ++i) + data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3)); + /* Pad to 56 bytes mod 64. */ + md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1); + /* Append the length. */ + md5_append(pms, data, 8); + for (i = 0; i < 16; ++i) + digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); +} + + +/* End of md5.inl */ diff --git a/v2/webui/src/civetweb/response.inl b/v2/webui/src/civetweb/response.inl new file mode 100644 index 0000000..35e6ba8 --- /dev/null +++ b/v2/webui/src/civetweb/response.inl @@ -0,0 +1,342 @@ +/* response.inl + * + * Bufferring for HTTP headers for HTTP response. + * This function are only intended to be used at the server side. + * Optional for HTTP/1.0 and HTTP/1.1, mandatory for HTTP/2. + * + * This file is part of the CivetWeb project. + */ + +#if defined(NO_RESPONSE_BUFFERING) && defined(USE_HTTP2) +#error "HTTP2 works only if NO_RESPONSE_BUFFERING is not set" +#endif + + +/* Internal function to free header list */ +static void +free_buffered_response_header_list(struct mg_connection *conn) +{ +#if !defined(NO_RESPONSE_BUFFERING) + while (conn->response_info.num_headers > 0) { + conn->response_info.num_headers--; + mg_free((void *)conn->response_info + .http_headers[conn->response_info.num_headers] + .name); + conn->response_info.http_headers[conn->response_info.num_headers].name = + 0; + mg_free((void *)conn->response_info + .http_headers[conn->response_info.num_headers] + .value); + conn->response_info.http_headers[conn->response_info.num_headers] + .value = 0; + } +#else + (void)conn; /* Nothing to do */ +#endif +} + + +/* Send first line of HTTP/1.x response */ +static int +send_http1_response_status_line(struct mg_connection *conn) +{ + const char *status_txt; + const char *http_version = conn->request_info.http_version; + int status_code = conn->status_code; + + if ((status_code < 100) || (status_code > 999)) { + /* Set invalid status code to "500 Internal Server Error" */ + status_code = 500; + } + if (!http_version) { + http_version = "1.0"; + } + + /* mg_get_response_code_text will never return NULL */ + status_txt = mg_get_response_code_text(conn, conn->status_code); + + if (mg_printf( + conn, "HTTP/%s %i %s\r\n", http_version, status_code, status_txt) + < 10) { + /* Network sending failed */ + return 0; + } + return 1; +} + + +/* Initialize a new HTTP response + * Parameters: + * conn: Current connection handle. + * status: HTTP status code (e.g., 200 for "OK"). + * Return: + * 0: ok + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: network error (only if built with NO_RESPONSE_BUFFERING) + */ +int +mg_response_header_start(struct mg_connection *conn, int status) +{ + int ret = 0; + if ((conn == NULL) || (status < 100) || (status > 999)) { + /* Parameter error */ + return -1; + } + if ((conn->connection_type != CONNECTION_TYPE_REQUEST) + || (conn->protocol_type == PROTOCOL_TYPE_WEBSOCKET)) { + /* Only allowed in server context */ + return -2; + } + if (conn->request_state != 0) { + /* only allowed if nothing was sent up to now */ + return -3; + } + conn->status_code = status; + conn->request_state = 1; + + /* Buffered response is stored, unbuffered response will be sent directly, + * but we can only send HTTP/1.x response here */ +#if !defined(NO_RESPONSE_BUFFERING) + free_buffered_response_header_list(conn); +#else + if (!send_http1_response_status_line(conn)) { + ret = -4; + }; + conn->request_state = 1; /* Reset from 10 to 1 */ +#endif + + return ret; +} + + +/* Add a new HTTP response header line + * Parameters: + * conn: Current connection handle. + * header: Header name. + * value: Header value. + * value_len: Length of header value, excluding the terminating zero. + * Use -1 for "strlen(value)". + * Return: + * 0: ok + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: too many headers + * -5: out of memory + */ +int +mg_response_header_add(struct mg_connection *conn, + const char *header, + const char *value, + int value_len) +{ +#if !defined(NO_RESPONSE_BUFFERING) + int hidx; +#endif + + if ((conn == NULL) || (header == NULL) || (value == NULL)) { + /* Parameter error */ + return -1; + } + if ((conn->connection_type != CONNECTION_TYPE_REQUEST) + || (conn->protocol_type == PROTOCOL_TYPE_WEBSOCKET)) { + /* Only allowed in server context */ + return -2; + } + if (conn->request_state != 1) { + /* only allowed if mg_response_header_start has been called before */ + return -3; + } + +#if !defined(NO_RESPONSE_BUFFERING) + hidx = conn->response_info.num_headers; + if (hidx >= MG_MAX_HEADERS) { + /* Too many headers */ + return -4; + } + + /* Alloc new element */ + conn->response_info.http_headers[hidx].name = + mg_strdup_ctx(header, conn->phys_ctx); + if (value_len >= 0) { + char *hbuf = + (char *)mg_malloc_ctx((unsigned)value_len + 1, conn->phys_ctx); + if (hbuf) { + memcpy(hbuf, value, (unsigned)value_len); + hbuf[value_len] = 0; + } + conn->response_info.http_headers[hidx].value = hbuf; + } else { + conn->response_info.http_headers[hidx].value = + mg_strdup_ctx(value, conn->phys_ctx); + } + + if ((conn->response_info.http_headers[hidx].name == 0) + || (conn->response_info.http_headers[hidx].value == 0)) { + /* Out of memory */ + mg_free((void *)conn->response_info.http_headers[hidx].name); + conn->response_info.http_headers[hidx].name = 0; + mg_free((void *)conn->response_info.http_headers[hidx].value); + conn->response_info.http_headers[hidx].value = 0; + return -5; + } + + /* OK, header stored */ + conn->response_info.num_headers++; + +#else + if (value_len >= 0) { + mg_printf(conn, "%s: %.*s\r\n", header, (int)value_len, value); + } else { + mg_printf(conn, "%s: %s\r\n", header, value); + } + conn->request_state = 1; /* Reset from 10 to 1 */ +#endif + + return 0; +} + + +/* forward */ +static int parse_http_headers(char **buf, struct mg_header hdr[MG_MAX_HEADERS]); + + +/* Add a complete header string (key + value). + * Parameters: + * conn: Current connection handle. + * http1_headers: Header line(s) in the form "name: value". + * Return: + * >=0: no error, number of header lines added + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: too many headers + * -5: out of memory + */ +int +mg_response_header_add_lines(struct mg_connection *conn, + const char *http1_headers) +{ + struct mg_header add_hdr[MG_MAX_HEADERS]; + int num_hdr, i, ret; + char *workbuffer, *parse; + + /* We need to work on a copy of the work buffer, sice parse_http_headers + * will modify */ + workbuffer = mg_strdup_ctx(http1_headers, conn->phys_ctx); + if (!workbuffer) { + /* Out of memory */ + return -5; + } + + /* Call existing method to split header buffer */ + parse = workbuffer; + num_hdr = parse_http_headers(&parse, add_hdr); + ret = num_hdr; + + for (i = 0; i < num_hdr; i++) { + int lret = + mg_response_header_add(conn, add_hdr[i].name, add_hdr[i].value, -1); + if ((ret > 0) && (lret < 0)) { + /* Store error return value */ + ret = lret; + } + } + + /* mg_response_header_add created a copy, so we can free the original */ + mg_free(workbuffer); + return ret; +} + + +#if defined(USE_HTTP2) +static int http2_send_response_headers(struct mg_connection *conn); +#endif + + +/* Send http response + * Parameters: + * conn: Current connection handle. + * Return: + * 0: ok + * -1: parameter error + * -2: invalid connection type + * -3: invalid connection status + * -4: network send failed + */ +int +mg_response_header_send(struct mg_connection *conn) +{ +#if !defined(NO_RESPONSE_BUFFERING) + int i; + int has_date = 0; + int has_connection = 0; +#endif + + if (conn == NULL) { + /* Parameter error */ + return -1; + } + if ((conn->connection_type != CONNECTION_TYPE_REQUEST) + || (conn->protocol_type == PROTOCOL_TYPE_WEBSOCKET)) { + /* Only allowed in server context */ + return -2; + } + if (conn->request_state != 1) { + /* only allowed if mg_response_header_start has been called before */ + return -3; + } + + /* State: 2 */ + conn->request_state = 2; + +#if !defined(NO_RESPONSE_BUFFERING) +#if defined(USE_HTTP2) + if (conn->protocol_type == PROTOCOL_TYPE_HTTP2) { + int ret = http2_send_response_headers(conn); + free_buffered_response_header_list(conn); + return (ret ? 0 : -4); + } +#endif + + /* Send */ + if (!send_http1_response_status_line(conn)) { + free_buffered_response_header_list(conn); + return -4; + }; + for (i = 0; i < conn->response_info.num_headers; i++) { + mg_printf(conn, + "%s: %s\r\n", + conn->response_info.http_headers[i].name, + conn->response_info.http_headers[i].value); + + /* Check for some special headers */ + if (!mg_strcasecmp("Date", conn->response_info.http_headers[i].name)) { + has_date = 1; + } + if (!mg_strcasecmp("Connection", + conn->response_info.http_headers[i].name)) { + has_connection = 1; + } + } + + if (!has_date) { + time_t curtime = time(NULL); + char date[64]; + gmt_time_string(date, sizeof(date), &curtime); + mg_printf(conn, "Date: %s\r\n", date); + } + if (!has_connection) { + mg_printf(conn, "Connection: %s\r\n", suggest_connection_header(conn)); + } +#endif + + mg_write(conn, "\r\n", 2); + conn->request_state = 3; + + /* ok */ + free_buffered_response_header_list(conn); + return 0; +} diff --git a/v2/webui/src/civetweb/sha1.inl b/v2/webui/src/civetweb/sha1.inl new file mode 100644 index 0000000..6af0757 --- /dev/null +++ b/v2/webui/src/civetweb/sha1.inl @@ -0,0 +1,323 @@ +/* +SHA-1 in C +By Steve Reid +100% Public Domain + +----------------- +Modified 7/98 +By James H. Brown +Still 100% Public Domain + +Corrected a problem which generated improper hash values on 16 bit machines +Routine SHA1Update changed from + void SHA1Update(SHA_CTX* context, unsigned char* data, unsigned int +len) +to + void SHA1Update(SHA_CTX* context, unsigned char* data, unsigned +long len) + +The 'len' parameter was declared an int which works fine on 32 bit machines. +However, on 16 bit machines an int is too small for the shifts being done +against +it. This caused the hash function to generate incorrect values if len was +greater than 8191 (8K - 1) due to the 'len << 3' on line 3 of SHA1Update(). + +Since the file IO in main() reads 16K at a time, any file 8K or larger would +be guaranteed to generate the wrong hash (e.g. Test Vector #3, a million +"a"s). + +I also changed the declaration of variables i & j in SHA1Update to +unsigned long from unsigned int for the same reason. + +These changes should make no difference to any 32 bit implementations since +an +int and a long are the same size in those environments. + +-- +I also corrected a few compiler warnings generated by Borland C. +1. Added #include for exit() prototype +2. Removed unused variable 'j' in SHA1Final +3. Changed exit(0) to return(0) at end of main. + +ALL changes I made can be located by searching for comments containing 'JHB' +----------------- +Modified 8/98 +By Steve Reid +Still 100% public domain + +1- Removed #include and used return() instead of exit() +2- Fixed overwriting of finalcount in SHA1Final() (discovered by Chris Hall) +3- Changed email address from steve@edmweb.com to sreid@sea-to-sky.net + +----------------- +Modified 4/01 +By Saul Kravitz +Still 100% PD +Modified to run on Compaq Alpha hardware. + +----------------- +Modified 07/2002 +By Ralph Giles +Still 100% public domain +modified for use with stdint types, autoconf +code cleanup, removed attribution comments +switched SHA1Final() argument order for consistency +use SHA1_ prefix for public api +move public api to sha1.h +*/ + +/* +11/2016 adapted for CivetWeb: + include sha1.h in sha1.c, + rename to sha1.inl + remove unused #ifdef sections + make endian independent + align buffer to 4 bytes + remove unused variable assignments +*/ + +/* +Test Vectors (from FIPS PUB 180-1) +"abc" + A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D +"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 +A million repetitions of "a" + 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F +*/ + +#include +#include + +typedef struct { + uint32_t state[5]; + uint32_t count[2]; + uint8_t buffer[64]; +} SHA_CTX; + +#define SHA1_DIGEST_SIZE 20 + +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +/* blk0() and blk() perform the initial expand. */ +/* I got the idea of expanding during the round function from SSLeay */ + + +typedef union { + uint8_t c[64]; + uint32_t l[16]; +} CHAR64LONG16; + + +static uint32_t +blk0(CHAR64LONG16 *block, int i) +{ + static const uint32_t n = 1u; + if ((*((uint8_t *)(&n))) == 1) { + /* little endian / intel byte order */ + block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) + | (rol(block->l[i], 8) & 0x00FF00FF); + } + return block->l[i]; +} + +#define blk(block, i) \ + ((block)->l[(i)&15] = \ + rol((block)->l[((i) + 13) & 15] ^ (block)->l[((i) + 8) & 15] \ + ^ (block)->l[((i) + 2) & 15] ^ (block)->l[(i)&15], \ + 1)) + +/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ +#define R0(v, w, x, y, z, i) \ + z += ((w & (x ^ y)) ^ y) + blk0(block, i) + 0x5A827999 + rol(v, 5); \ + w = rol(w, 30); +#define R1(v, w, x, y, z, i) \ + z += ((w & (x ^ y)) ^ y) + blk(block, i) + 0x5A827999 + rol(v, 5); \ + w = rol(w, 30); +#define R2(v, w, x, y, z, i) \ + z += (w ^ x ^ y) + blk(block, i) + 0x6ED9EBA1 + rol(v, 5); \ + w = rol(w, 30); +#define R3(v, w, x, y, z, i) \ + z += (((w | x) & y) | (w & x)) + blk(block, i) + 0x8F1BBCDC + rol(v, 5); \ + w = rol(w, 30); +#define R4(v, w, x, y, z, i) \ + z += (w ^ x ^ y) + blk(block, i) + 0xCA62C1D6 + rol(v, 5); \ + w = rol(w, 30); + + +/* Hash a single 512-bit block. This is the core of the algorithm. */ +static void +SHA1_Transform(uint32_t state[5], const uint8_t buffer[64]) +{ + uint32_t a, b, c, d, e; + + /* Must use an aligned, read/write buffer */ + CHAR64LONG16 block[1]; + memcpy(block, buffer, sizeof(block)); + + /* Copy context->state[] to working vars */ + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(a, b, c, d, e, 0); + R0(e, a, b, c, d, 1); + R0(d, e, a, b, c, 2); + R0(c, d, e, a, b, 3); + R0(b, c, d, e, a, 4); + R0(a, b, c, d, e, 5); + R0(e, a, b, c, d, 6); + R0(d, e, a, b, c, 7); + R0(c, d, e, a, b, 8); + R0(b, c, d, e, a, 9); + R0(a, b, c, d, e, 10); + R0(e, a, b, c, d, 11); + R0(d, e, a, b, c, 12); + R0(c, d, e, a, b, 13); + R0(b, c, d, e, a, 14); + R0(a, b, c, d, e, 15); + R1(e, a, b, c, d, 16); + R1(d, e, a, b, c, 17); + R1(c, d, e, a, b, 18); + R1(b, c, d, e, a, 19); + R2(a, b, c, d, e, 20); + R2(e, a, b, c, d, 21); + R2(d, e, a, b, c, 22); + R2(c, d, e, a, b, 23); + R2(b, c, d, e, a, 24); + R2(a, b, c, d, e, 25); + R2(e, a, b, c, d, 26); + R2(d, e, a, b, c, 27); + R2(c, d, e, a, b, 28); + R2(b, c, d, e, a, 29); + R2(a, b, c, d, e, 30); + R2(e, a, b, c, d, 31); + R2(d, e, a, b, c, 32); + R2(c, d, e, a, b, 33); + R2(b, c, d, e, a, 34); + R2(a, b, c, d, e, 35); + R2(e, a, b, c, d, 36); + R2(d, e, a, b, c, 37); + R2(c, d, e, a, b, 38); + R2(b, c, d, e, a, 39); + R3(a, b, c, d, e, 40); + R3(e, a, b, c, d, 41); + R3(d, e, a, b, c, 42); + R3(c, d, e, a, b, 43); + R3(b, c, d, e, a, 44); + R3(a, b, c, d, e, 45); + R3(e, a, b, c, d, 46); + R3(d, e, a, b, c, 47); + R3(c, d, e, a, b, 48); + R3(b, c, d, e, a, 49); + R3(a, b, c, d, e, 50); + R3(e, a, b, c, d, 51); + R3(d, e, a, b, c, 52); + R3(c, d, e, a, b, 53); + R3(b, c, d, e, a, 54); + R3(a, b, c, d, e, 55); + R3(e, a, b, c, d, 56); + R3(d, e, a, b, c, 57); + R3(c, d, e, a, b, 58); + R3(b, c, d, e, a, 59); + R4(a, b, c, d, e, 60); + R4(e, a, b, c, d, 61); + R4(d, e, a, b, c, 62); + R4(c, d, e, a, b, 63); + R4(b, c, d, e, a, 64); + R4(a, b, c, d, e, 65); + R4(e, a, b, c, d, 66); + R4(d, e, a, b, c, 67); + R4(c, d, e, a, b, 68); + R4(b, c, d, e, a, 69); + R4(a, b, c, d, e, 70); + R4(e, a, b, c, d, 71); + R4(d, e, a, b, c, 72); + R4(c, d, e, a, b, 73); + R4(b, c, d, e, a, 74); + R4(a, b, c, d, e, 75); + R4(e, a, b, c, d, 76); + R4(d, e, a, b, c, 77); + R4(c, d, e, a, b, 78); + R4(b, c, d, e, a, 79); + + /* Add the working vars back into context.state[] */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; +} + + +/* SHA1Init - Initialize new context */ +SHA_API void +SHA1_Init(SHA_CTX *context) +{ + /* SHA1 initialization constants */ + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; + context->count[0] = context->count[1] = 0; +} + + +SHA_API void +SHA1_Update(SHA_CTX *context, const uint8_t *data, const uint32_t len) +{ + uint32_t i, j; + + j = context->count[0]; + if ((context->count[0] += (len << 3)) < j) { + context->count[1]++; + } + context->count[1] += (len >> 29); + j = (j >> 3) & 63; + if ((j + len) > 63) { + i = 64 - j; + memcpy(&context->buffer[j], data, i); + SHA1_Transform(context->state, context->buffer); + for (; i + 63 < len; i += 64) { + SHA1_Transform(context->state, &data[i]); + } + j = 0; + } else { + i = 0; + } + memcpy(&context->buffer[j], &data[i], len - i); +} + + +/* Add padding and return the message digest. */ +SHA_API void +SHA1_Final(unsigned char *digest, SHA_CTX *context) +{ + uint32_t i; + uint8_t finalcount[8]; + + for (i = 0; i < 8; i++) { + finalcount[i] = + (uint8_t)((context->count[(i >= 4 ? 0 : 1)] >> ((3 - (i & 3)) * 8)) + & 255); /* Endian independent */ + } + SHA1_Update(context, (uint8_t *)"\x80", 1); + while ((context->count[0] & 504) != 448) { + SHA1_Update(context, (uint8_t *)"\x00", 1); + } + SHA1_Update(context, finalcount, 8); /* Should cause a SHA1_Transform() */ + for (i = 0; i < SHA1_DIGEST_SIZE; i++) { + digest[i] = + (uint8_t)((context->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255); + } + + /* Wipe variables */ + memset(context, '\0', sizeof(*context)); +} + + +/* End of sha1.inl */ diff --git a/v2/webui/src/civetweb/sort.inl b/v2/webui/src/civetweb/sort.inl new file mode 100644 index 0000000..87a5eb7 --- /dev/null +++ b/v2/webui/src/civetweb/sort.inl @@ -0,0 +1,48 @@ +/* Sort function. */ +/* from https://github.com/bel2125/sort_r */ + +static void +mg_sort(void *data, + size_t elemcount, + size_t elemsize, + int (*compfunc)(const void *data1, const void *data2, void *userarg), + void *userarg) +{ + /* We cannot use qsort_r here. For a detailed reason, see + * https://github.com/civetweb/civetweb/issues/1048#issuecomment-1047093014 + * https://stackoverflow.com/questions/39560773/different-declarations-of-qsort-r-on-mac-and-linux + */ + + /* We use ShellSort here with this gap sequence: https://oeis.org/A102549 */ + size_t A102549[9] = {1, 4, 10, 23, 57, 132, 301, 701, 1750}; + size_t gap, i, j, k; + int Aidx; + void *tmp = alloca(elemsize); + + for (Aidx = 8; Aidx >= 0; Aidx--) { + gap = A102549[Aidx]; + if (gap > (elemcount / 2)) { + continue; + } + for (i = 0; i < gap; i++) { + for (j = i; j < elemcount; j += gap) { + memcpy(tmp, (void *)((size_t)data + elemsize * j), elemsize); + + for (k = j; k >= gap; k -= gap) { + void *cmp = (void *)((size_t)data + elemsize * (k - gap)); + int cmpres = compfunc(cmp, tmp, userarg); + if (cmpres > 0) { + memcpy((void *)((size_t)data + elemsize * k), + cmp, + elemsize); + } else { + break; + } + } + memcpy((void *)((size_t)data + elemsize * k), tmp, elemsize); + } + } + } +} + +/* end if sort.inl */ diff --git a/v2/webui/src/webui.c b/v2/webui/src/webui.c new file mode 100644 index 0000000..d238fb8 --- /dev/null +++ b/v2/webui/src/webui.c @@ -0,0 +1,14527 @@ +/* + WebUI Library + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. +*/ + +// 64Mb max dynamic memory allocation +#define WEBUI_MAX_BUF (64000000) + +// -- Includes ------------------------ +#include "../bridge/webui_bridge.h" // WebUI Bridge (JavaScript) +#include "webui.h" // WebUI Header + +// -- WebView ------------------------- +#ifdef _WIN32 + #include "webview/WebView2.h" + #include "webview/win32_wv2.hpp" +#elif __linux__ + #include +#else + // ... +#endif + +// -- Third-party --------------------- +#ifdef WEBUI_TLS + #ifdef _WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #endif + // OpenSSL + #include + #include + #include + #include + #include + #include + #ifdef WEBUI_LOG + #include + #endif +#endif +#define MG_BUF_LEN (WEBUI_MAX_BUF) +#include "civetweb/civetweb.h" + +// -- Disable Non-critical warnings --- +#ifdef _MSC_VER + #pragma warning(push, 0) + // Disable spectre warnings + #pragma warning(disable: 5045) +#elif defined(__clang__) + // ... +#elif defined(__GNUC__) + // ... +#endif + +// -- Defines ------------------------- +#define WEBUI_SIGNATURE 0xDD // All packets should start with this 8bit +#define WEBUI_CMD_JS 0xFE // Command: JavaScript result in frontend +#define WEBUI_CMD_JS_QUICK 0xFD // Command: JavaScript result in frontend +#define WEBUI_CMD_CLICK 0xFC // Command: Click event +#define WEBUI_CMD_NAVIGATION 0xFB // Command: Frontend navigation +#define WEBUI_CMD_CLOSE 0xFA // Command: Close window +#define WEBUI_CMD_CALL_FUNC 0xF9 // Command: Backend function call +#define WEBUI_CMD_SEND_RAW 0xF8 // Command: Send raw binary data to the UI +#define WEBUI_CMD_ADD_ID 0xF7 // Command: Add new bind ID +#define WEBUI_CMD_MULTI 0xF6 // Command: Multi packet data +#define WEBUI_CMD_CHECK_TK 0xF5 // Command: Check validity of a client's token +#define WEBUI_CMD_WIN_DRAG 0xF4 // Command: Drag window (WebUI `-webkit-app-region: drag;` custom implementation) +#define WEBUI_CMD_WIN_RESIZED 0xF3 // Command: Update window coordinates for WebUI `-webkit-app-region: drag;` custom implementation +#define WEBUI_PROTOCOL_SIZE (8) // Protocol header size in bytes +#define WEBUI_PROTOCOL_SIGN (0) // Protocol byte position: Signature (1 Byte) +#define WEBUI_PROTOCOL_TOKEN (1) // Protocol byte position: Token (4 Bytes) +#define WEBUI_PROTOCOL_ID (5) // Protocol byte position: ID (2 Bytes) +#define WEBUI_PROTOCOL_CMD (7) // Protocol byte position: Command (1 Byte) +#define WEBUI_PROTOCOL_DATA (8) // Protocol byte position: Data (n Byte) +#define WEBUI_MUTEX_GET_STATUS (0) // Check boolen mutex without update +#define WEBUI_MUTEX_SET_TRUE (1) // Update boolen mutex to true +#define WEBUI_MUTEX_SET_FALSE (2) // Update boolen mutex false +#define WEBUI_WS_DATA (1) // Internal WS Event (Data received) +#define WEBUI_WS_OPEN (2) // Internal WS Event (New connection) +#define WEBUI_WS_CLOSE (3) // Internal WS Event (Connection close) +#define WEBUI_SHOW_HTML (1) // Show window using HTML +#define WEBUI_SHOW_FILE (2) // Show window using a local file +#define WEBUI_SHOW_URL (3) // Show window using a URL +#define WEBUI_SHOW_FOLDER (4) // Show window using a Folder +#define WEBUI_MIN_PORT (10000) // Minimum socket port +#define WEBUI_MAX_PORT (65500) // Should be less than 65535 +#define WEBUI_STDOUT_BUF (10240) // Command STDOUT output buffer size +#define WEBUI_DEFAULT_PATH "." // Default root path +#define WEBUI_DEF_TIMEOUT (15) // Default startup timeout in seconds +#define WEBUI_RELOAD_TIMEOUT (1500) // Default reload page timeout in milliseconds +#define WEBUI_MAX_TIMEOUT (60) // Maximum startup timeout in seconds the user can set +#define WEBUI_MIN_WIDTH (100) // Minimal window width +#define WEBUI_MIN_HEIGHT (100) // Minimal window height +#define WEBUI_DEF_WIDTH (800) // Default window width +#define WEBUI_DEF_HEIGHT (600) // Default window height +#define WEBUI_MAX_WIDTH (3840) // Maximal window width (4K Monitor) +#define WEBUI_MAX_HEIGHT (2160) // Maximal window height (4K Monitor) +#define WEBUI_MIN_X (0) // Minimal window X +#define WEBUI_MIN_Y (0) // Minimal window Y +#define WEBUI_MAX_X (3000) // Maximal window X (4K Monitor) +#define WEBUI_MAX_Y (1800) // Maximal window Y (4K Monitor) +#define WEBUI_PROFILE_NAME "WebUI" // Default browser profile name (Used only for Firefox) +#define WEBUI_COOKIES_LEN (32) // Authentification cookies len +#define WEBUI_COOKIES_BUF (64) // Authentification cookies buffer size +#define WEBUI_NATIVE_BROWSER (99) // Internal ID used to avoid terminating the user's native browser on exit +#define WEBUI_SYS_CMD_TIMEOUT (1500) // Max time to wait for a system command to run + +#ifdef WEBUI_TLS +#define WEBUI_SECURE "TLS-Encryption" +#define WEBUI_SSL_SIZE (4096) // SSL Max PEM Size +#define WEBUI_SSL_EXPIRE (72 * 60 * 60) // SSL Expires (Integer) +#define WEBUI_SSL_EXPIRE_STR "259201" // SSL Expires (String) +#define WEBUI_HTTP_PROTOCOL "https://" +#define WEBUI_WS_PROTOCOL "wss://" +#else +#define WEBUI_SECURE "Non-Encrypted" +#define WEBUI_HTTP_PROTOCOL "http://" +#define WEBUI_WS_PROTOCOL "ws://" +#endif + +#ifdef WEBUI_DYNAMIC +#define WEBUI_LIB_TYPE "Dynamic" +#else +#define WEBUI_LIB_TYPE "Static" +#endif + +#ifdef _WIN32 +#define WEBUI_OS "Microsoft Windows" +#elif __APPLE__ +#define WEBUI_OS "Apple macOS" +#else +#define WEBUI_OS "GNU/Linux" +#endif + +// Mutex +#ifdef _WIN32 +typedef CRITICAL_SECTION webui_mutex_t; +typedef CONDITION_VARIABLE webui_condition_t; +#else +typedef pthread_mutex_t webui_mutex_t; +typedef pthread_cond_t webui_condition_t; +#endif + +// Compiler +#if defined(_MSC_VER) + #define WEBUI_COMPILER "MSVC" +#elif defined(__GNUC__) && !defined(__clang__) + #define WEBUI_COMPILER "GCC" +#elif defined(__clang__) + #define WEBUI_COMPILER "Clang" +#else + #define WEBUI_COMPILER "Unknown" +#endif + +// Verbose Log +#ifdef WEBUI_LOG + #define WEBUI_LOG_VERBOSE +#endif + +// Timer +typedef struct _webui_timer_t { + struct timespec start; + struct timespec now; +} _webui_timer_t; + +// Event data +typedef struct webui_event_inf_t { + // Client + struct mg_connection* client; + size_t connection_id; + // Args and Response + char* event_data[WEBUI_MAX_ARG + 1]; // Event data (string | num | bool | raw) + size_t event_size[WEBUI_MAX_ARG + 1]; // Event data size (in bytes) + char* response; // Event response (string) + size_t count; // Event arguments count + bool done; +} webui_event_inf_t; + +// WebView +#ifdef _WIN32 + typedef struct _webui_wv_win32_t { + // Win32 WebView2 C++ handle + _webui_win32_wv2_handle cpp_handle; + } _webui_wv_win32_t; +#elif __linux__ + void* libgtk; + void* libwebkit; + // GTK Symbol Definition + typedef void *(*gtk_init_func)(int *argc, char ***argv); // Ini + typedef void (*gtk_widget_show_all_func)(void *); // Show + typedef int (*gtk_main_iteration_do_func)(int); // Last UI draw when exit + typedef int (*gtk_events_pending_func)(void); // Last UI draw when exit + typedef void *(*gtk_main_func)(void); // Main loop + typedef void *(*gtk_main_quit_func)(void); // Exit main loop + typedef int (*g_timeout_add_func)(int, int (*function)(void*), void*); // WebUI exit loop + typedef void (*gtk_container_add_func)(void *, void *); // WebView Container + typedef void *(*gtk_window_new_func)(int); // New Window + typedef int (*g_idle_add_func)(int (*function)(void*), void*); // New Window creation schedule + typedef void (*gtk_window_set_default_size_func)(void *, int, int); + typedef void (*gtk_window_set_title_func)(void *, const char *); + typedef void (*gtk_window_move_func)(void *, int, int); + typedef void (*gtk_window_close_func)(void *); + typedef void *(*gdk_display_get_default_func)(void); + typedef void *(*gdk_display_get_primary_monitor_func)(void *); + typedef void (*gdk_monitor_get_geometry_func)(void *, void *); + typedef void (*gtk_window_resize_func)(void *, int, int); + typedef void (*gtk_window_set_decorated_func)(void *, int); + typedef void (*gtk_window_set_resizable_func)(void *, int); + typedef void (*gtk_window_set_position_func)(void *, int); + typedef void (*gtk_window_iconify_func)(void *); + typedef void (*gtk_window_maximize_func)(void *); + typedef void (*gtk_window_unmaximize_func)(void *); + typedef int (*gtk_window_is_maximized_func)(void *); + typedef void (*gtk_window_begin_resize_drag_func)(void *, int, int, int, int, unsigned int); + typedef int (*gtk_widget_get_allocated_width_func)(void *); + typedef int (*gtk_widget_get_allocated_height_func)(void *); + typedef void* (*gtk_widget_get_window_func)(void *); + typedef void (*gtk_widget_add_events_func)(void *, int); + typedef void* (*gdk_cursor_new_from_name_func)(void *, const char *); + typedef void (*gdk_window_set_cursor_func)(void *, void *); + typedef void (*gtk_window_begin_move_drag_func)(void *, int, int, int, unsigned int); + typedef void* (*gdk_display_get_default_seat_func)(void *); + typedef void* (*gdk_seat_get_pointer_func)(void *); + typedef void (*gdk_device_get_position_func)(void *, void *, int *, int *); + typedef unsigned long (*g_signal_connect_data_func)(void *, const char *, void (*callback)(void), void *, void *, int); + typedef void (*gtk_widget_set_visual_func)(void *, void *); + typedef void *(*gtk_widget_get_screen_func)(void *); + typedef void *(*gdk_screen_get_rgba_visual_func)(void *); + typedef void (*gtk_widget_set_app_paintable_func)(void *, int); + typedef void* (*gdk_pixbuf_loader_new_func)(void); + typedef int (*gdk_pixbuf_loader_write_func)(void *, const unsigned char *, unsigned long, void **); + typedef int (*gdk_pixbuf_loader_close_func)(void *, void **); + typedef void* (*gdk_pixbuf_loader_get_pixbuf_func)(void *); + typedef void (*gtk_window_set_icon_func)(void *, void *); + typedef void (*g_object_unref_func)(void *); + // GTK Symbol Initialization + static gtk_init_func gtk_init = NULL; + static gtk_widget_show_all_func gtk_widget_show_all = NULL; + static gtk_main_iteration_do_func gtk_main_iteration_do = NULL; + static gtk_main_func gtk_main = NULL; + static gtk_main_quit_func gtk_main_quit = NULL; + static g_timeout_add_func g_timeout_add = NULL; + static gtk_events_pending_func gtk_events_pending = NULL; + static gtk_container_add_func gtk_container_add = NULL; + static gtk_window_new_func gtk_window_new = NULL; + static gtk_window_set_default_size_func gtk_window_set_default_size = NULL; + static gtk_window_set_title_func gtk_window_set_title = NULL; + static gtk_window_move_func gtk_window_move = NULL; + static gtk_window_close_func gtk_window_close = NULL; + static gdk_display_get_default_func gdk_display_get_default = NULL; + static gdk_display_get_primary_monitor_func gdk_display_get_primary_monitor = NULL; + static gdk_monitor_get_geometry_func gdk_monitor_get_geometry = NULL; + static gtk_window_resize_func gtk_window_resize = NULL; + static gtk_window_set_decorated_func gtk_window_set_decorated = NULL; + static gtk_window_set_resizable_func gtk_window_set_resizable = NULL; + static gtk_window_set_position_func gtk_window_set_position = NULL; + static gtk_window_iconify_func gtk_window_iconify = NULL; + static gtk_window_maximize_func gtk_window_maximize = NULL; + static gtk_window_unmaximize_func gtk_window_unmaximize = NULL; + static gtk_window_is_maximized_func gtk_window_is_maximized = NULL; + static gtk_window_begin_resize_drag_func gtk_window_begin_resize_drag = NULL; + static gtk_widget_get_allocated_width_func gtk_widget_get_allocated_width = NULL; + static gtk_widget_get_allocated_height_func gtk_widget_get_allocated_height = NULL; + static gtk_widget_get_window_func gtk_widget_get_window = NULL; + static gtk_widget_add_events_func gtk_widget_add_events = NULL; + static gdk_cursor_new_from_name_func gdk_cursor_new_from_name = NULL; + static gdk_window_set_cursor_func gdk_window_set_cursor = NULL; + static gtk_window_begin_move_drag_func gtk_window_begin_move_drag = NULL; + static gdk_display_get_default_seat_func gdk_display_get_default_seat = NULL; + static gdk_seat_get_pointer_func gdk_seat_get_pointer = NULL; + static gdk_device_get_position_func gdk_device_get_position = NULL; + static g_signal_connect_data_func g_signal_connect_data = NULL; + static g_idle_add_func g_idle_add = NULL; + static gtk_widget_set_visual_func gtk_widget_set_visual = NULL; + static gtk_widget_get_screen_func gtk_widget_get_screen = NULL; + static gdk_screen_get_rgba_visual_func gdk_screen_get_rgba_visual = NULL; + static gtk_widget_set_app_paintable_func gtk_widget_set_app_paintable = NULL; + static gdk_pixbuf_loader_new_func gdk_pixbuf_loader_new = NULL; + static gdk_pixbuf_loader_write_func gdk_pixbuf_loader_write = NULL; + static gdk_pixbuf_loader_close_func gdk_pixbuf_loader_close = NULL; + static gdk_pixbuf_loader_get_pixbuf_func gdk_pixbuf_loader_get_pixbuf = NULL; + static gtk_window_set_icon_func gtk_window_set_icon = NULL; + static g_object_unref_func g_object_unref = NULL; + // GTK Structs + typedef struct { + int x; + int y; + int width; + int height; + } GdkRectangle; + // Minimal GdkEventButton layout (GTK3 ABI) for reading edge-resize presses + typedef struct { + int type; + void* window; + char send_event; + unsigned int time; + double x; + double y; + double* axes; + unsigned int state; + unsigned int button; + void* device; + double x_root; + double y_root; + } _webui_GdkEventButton; + // WebKit Symbol Addresses + typedef void *(*webkit_web_view_new_func)(void); + typedef void (*webkit_web_view_load_uri_func)(void *, const char *); + typedef const char *(*webkit_web_view_get_title_func)(void *); + typedef void (*webkit_1ptr_arg_func)(void *); + typedef int (*webkit_1ptr_arg_2int_func)(void *); + typedef void *(*webkit_1ptr_arg_2ptr_func)(void *); + typedef const char *(*webkit_1ptr_arg_2str_func)(void *); + typedef void (*webkit_web_view_set_background_color_func)(void *, void *); + static webkit_web_view_new_func webkit_web_view_new = NULL; + static webkit_web_view_load_uri_func webkit_web_view_load_uri = NULL; + static webkit_web_view_get_title_func webkit_web_view_get_title = NULL; + static webkit_1ptr_arg_func webkit_policy_decision_ignore = NULL; + static webkit_1ptr_arg_2int_func webkit_navigation_policy_decision_get_navigation_type = NULL; + static webkit_1ptr_arg_2ptr_func webkit_navigation_policy_decision_get_request = NULL; + static webkit_1ptr_arg_2str_func webkit_uri_request_get_uri = NULL; + static webkit_web_view_set_background_color_func webkit_web_view_set_background_color = NULL; + + typedef struct _webui_wv_linux_t { + // Linux WebView + void* gtk_win; + void* gtk_wv; + bool open; + // WebUI Window + char* url; + bool navigate; + bool size; + bool position; + unsigned int width; + unsigned int height; + unsigned int x; + unsigned int y; + bool stop; + } _webui_wv_linux_t; + + #define GTK_WEBVIEW_SET_IN_SHOW(win, status) if (win && win->has_all_events) { win->in_show = status; } + +#else + extern bool _webui_macos_wv_new(int index, bool frameless, bool resizable); + extern void _webui_macos_wv_new_thread_safe(int index, bool frameless, bool resizable); + extern bool _webui_macos_wv_show(int index, const char* urlString, int x, int y, int width, int height); + extern bool _webui_macos_wv_close(int index); + extern bool _webui_macos_wv_set_position(int index, int x, int y); + extern bool _webui_macos_wv_set_size(int index, int width, int height); + extern bool _webui_macos_wv_navigate(int index, const char* urlString); + extern void _webui_macos_wv_process(); + extern void _webui_macos_wv_stop(); + extern void _webui_macos_wv_set_close_cb(void (*cb)(int index)); + extern void _webui_macos_wv_start(); + extern bool _webui_macos_wv_iteration_do(); + extern bool _webui_macos_wv_maximize(int index); + extern bool _webui_macos_wv_minimize(int index); + + typedef struct _webui_wv_macos_t { + // macOS WebView + int index; + // WebUI Window + char* url; + bool navigate; + bool size; + bool position; + unsigned int width; + unsigned int height; + unsigned int x; + unsigned int y; + bool stop; + } _webui_wv_macos_t; +#endif + +// Window +typedef struct _webui_window_t { + // Client + size_t clients_count; + struct mg_connection* single_client; // Single client + bool single_client_token_check; + // Server + bool wait; // Let server thread wait more time for websocket + bool server_running; // Slow check + bool connected; // Fast check + size_t server_port; + char* url; + char* public_url; + const char* html; + const char* user_index_file; + const char* user_index_file_encoded; + bool allow_index_fallback; + char* server_root_path; + #ifdef _WIN32 + HANDLE server_thread; + #else + pthread_t server_thread; + #endif + // Window + uint32_t token; + size_t num; // Window number + bool is_showing; + const char* html_elements[WEBUI_MAX_IDS]; + bool has_all_events; + void* cb_context[WEBUI_MAX_IDS]; + void(*cb[WEBUI_MAX_IDS])(webui_event_t* e); + void(*cb_interface[WEBUI_MAX_IDS])(size_t, size_t, char* , size_t, size_t); + bool ws_block; + bool is_embedded_html; + bool is_closed; + size_t custom_server_port; + const char* icon; + const char* icon_type; + const unsigned char* icon_file_data; + size_t icon_file_size; + size_t current_browser; + char* browser_path; + bool custom_profile; + bool default_profile; + char* profile_path; + char* profile_name; + char* custom_parameters; + size_t runtime; + bool kiosk_mode; + bool disable_browser_high_contrast; + bool resizable; + bool frameless; + bool transparent; + bool hide; + int width; + int height; + bool size_set; + int minimum_width; + int minimum_height; + bool minimum_size_set; + int x; + int y; + bool position_set; + bool (*close_handler_wv)(size_t window); + const void*(*files_handler)(const char* filename, int* length); + const void*(*files_handler_window)(size_t window, const char* filename, int* length); + const void* file_handler_async_response; + int file_handler_async_len; + bool file_handler_async_done; + webui_event_inf_t* events[WEBUI_MAX_IDS]; + size_t events_count; + bool is_public; + bool proxy_set; + char *proxy_server; + webui_mutex_t mutex_win_exit_now; + webui_mutex_t mutex_win_reusable; + webui_mutex_t mutex_win_server_running; + bool win_exit_now; + // WebView + bool allow_webview; + bool allow_browser; + bool update_webview; + webui_mutex_t mutex_webview_update; + webui_condition_t condition_webview_update; + #ifdef _WIN32 + _webui_wv_win32_t* webView; + #elif __linux__ + bool in_show; + _webui_wv_linux_t* webView; + #else + _webui_wv_macos_t* webView; + #endif +} +_webui_window_t; + +// Core +typedef struct _webui_core_t { + struct { + bool show_wait_connection; + bool show_auto_js_inject; + bool ws_block; + bool folder_monitor; + bool multi_client; + bool use_cookies; + bool asynchronous_response; + } config; + struct mg_connection* clients[WEBUI_MAX_IDS]; + size_t clients_win_num[WEBUI_MAX_IDS]; + bool clients_token_check[WEBUI_MAX_IDS]; + char* cookies[WEBUI_MAX_IDS]; + bool cookies_single_set[WEBUI_MAX_IDS]; + size_t servers; + size_t used_ports[WEBUI_MAX_IDS]; + size_t startup_timeout; + size_t cb_count; + bool app_exit_now; + bool is_more_servers; + bool run_done[WEBUI_MAX_IDS]; // 2 Bytes ID + char* run_userBuffer[WEBUI_MAX_IDS]; + size_t run_userBufferLen[WEBUI_MAX_IDS]; + bool run_error[WEBUI_MAX_IDS]; + uint16_t run_last_id; + uint16_t ws_process_number; + bool initialized; + char* executable_path; + void * ptr_list[WEBUI_MAX_IDS * 2]; + size_t ptr_last_pos; + size_t ptr_size[WEBUI_MAX_IDS * 2]; + size_t current_browser; + _webui_window_t* wins[WEBUI_MAX_IDS]; + bool wins_reserved[WEBUI_MAX_IDS]; + webui_mutex_t mutex_server_start; + webui_mutex_t mutex_send; + webui_mutex_t mutex_receive; + webui_mutex_t mutex_wait; + webui_mutex_t mutex_bridge; + webui_mutex_t mutex_js_run; + webui_mutex_t mutex_win_connect; + webui_mutex_t mutex_app_exit_now; + webui_mutex_t mutex_is_more_servers; + webui_mutex_t mutex_http_handler; + webui_mutex_t mutex_client; + webui_mutex_t mutex_async_response; + webui_mutex_t mutex_mem; + webui_mutex_t mutex_token; + webui_mutex_t mutex_js_run_id; + webui_mutex_t mutex_ws_process_number; + webui_condition_t condition_wait; + char* default_server_root_path; + bool ui; + char* custom_browser_folder_path; + #ifdef WEBUI_TLS + char* root_cert; + char* root_key; + char* ssl_cert; + char* ssl_key; + #endif + bool is_main_run; + bool is_browser_mode; + // WebView + bool is_webview_mode; + #ifdef _WIN32 + char* webview_cacheFolder; + HMODULE webviewLib; + #elif __linux__ + bool is_gtk_main_run; + #else + bool is_wkwebview_main_run; + #endif +} +_webui_core_t; + +typedef struct _webui_log_t { + void (*logger_func)(size_t level, const char* log, void* user_data); + void* logger_user_data; +} _webui_log_t; + +typedef struct _webui_recv_arg_t { + _webui_window_t* win; + void * ptr; + size_t len; + size_t recvNum; + int event_type; + struct mg_connection* client; + size_t connection_id; +} +_webui_recv_arg_t; + +// -- Definitions --------------------- +#ifdef _WIN32 +static const char* os_sep = "\\"; +static DWORD WINAPI _webui_run_browser_task(LPVOID _arg); +static int _webui_system_win32(_webui_window_t* win, char* cmd, bool show); +static int _webui_system_win32_out(const char* cmd, char ** output, bool show); +static bool _webui_socket_test_listen_win32(size_t port_num); +static bool _webui_get_windows_reg_value(HKEY key, LPCWSTR reg, LPCWSTR value_name, char value[WEBUI_MAX_PATH]); +static bool _webui_str_to_wide(const char *s, wchar_t **w); +#define WEBUI_THREAD_SERVER_START DWORD WINAPI _webui_server_thread(LPVOID arg) +#define WEBUI_THREAD_RECEIVE DWORD WINAPI _webui_ws_process_thread(LPVOID _arg) +#define WEBUI_THREAD_WEBVIEW DWORD WINAPI _webui_webview_thread(LPVOID arg) +#define WEBUI_THREAD_MONITOR DWORD WINAPI _webui_folder_monitor_thread(LPVOID arg) +#define WEBUI_THREAD_RETURN return 0; +#else +static const char* os_sep = "/"; +static void * _webui_run_browser_task(void * _arg); +#define WEBUI_THREAD_SERVER_START void * _webui_server_thread(void * arg) +#define WEBUI_THREAD_RECEIVE void * _webui_ws_process_thread(void * _arg) +#define WEBUI_THREAD_WEBVIEW void * _webui_webview_thread(void * arg) +#define WEBUI_THREAD_MONITOR void * _webui_folder_monitor_thread(void * arg) +#define WEBUI_THREAD_RETURN pthread_exit(NULL); +#endif +static void _webui_init(void); +static bool _webui_show(_webui_window_t* win, struct mg_connection* client, const char* content, size_t browser); +static bool _webui_get_cb_index(_webui_window_t* win, const char* element, size_t* id); +static size_t _webui_get_free_port(void); +static void _webui_free_port(size_t port); +static char* _webui_get_current_path(void); +static void _webui_send_client_ws(_webui_window_t* win, struct mg_connection* client, + size_t connection_id, char* packet, size_t packets_size); +static void _webui_window_event( + _webui_window_t* win, size_t connection_id, int event_type, char* element, size_t event_number, + size_t client_id, const char* cookies +); +static int _webui_cmd_sync(_webui_window_t* win, char* cmd, bool show); +static int _webui_cmd_async(_webui_window_t* win, char* cmd, bool show); +static int _webui_run_browser(_webui_window_t* win, char* cmd); +static void _webui_clean(void); +static bool _webui_browser_exist(_webui_window_t* win, size_t browser); +static const char* _webui_get_temp_path(); +static bool _webui_folder_exist(const char* folder); +static bool _webui_create_folder(const char* folder); +static void _webui_delete_folder(char* folder); +static bool _webui_browser_create_new_profile(_webui_window_t* win, size_t browser); +static bool _webui_browser_start_chrome(_webui_window_t* win, const char* address); +static bool _webui_browser_start_edge(_webui_window_t* win, const char* address); +static bool _webui_browser_start_epic(_webui_window_t* win, const char* address); +static bool _webui_browser_start_vivaldi(_webui_window_t* win, const char* address); +static bool _webui_browser_start_brave(_webui_window_t* win, const char* address); +static bool _webui_browser_start_firefox(_webui_window_t* win, const char* address); +static bool _webui_browser_start_yandex(_webui_window_t* win, const char* address); +static bool _webui_browser_start_chromium(_webui_window_t* win, const char* address); +static bool _webui_browser_start(_webui_window_t* win, const char* address, size_t _browser); +static long _webui_timer_diff(struct timespec * start, struct timespec* end); +static void _webui_timer_start(_webui_timer_t* t); +static bool _webui_timer_is_end(_webui_timer_t* t, size_t ms); +static void _webui_timer_clock_gettime(struct timespec * spec); +static bool _webui_set_root_folder(_webui_window_t* win, const char* path); +static const char* _webui_generate_js_bridge(_webui_window_t* win, struct mg_connection* client); +static void _webui_free_mem(void * ptr); +static bool _webui_file_exist_mg(_webui_window_t* win, struct mg_connection* client); +static bool _webui_is_mg_client_valid(_webui_window_t* win, const struct mg_connection* client); +static bool _webui_file_exist(const char* path); +static void _webui_free_all_mem(void); +static bool _webui_show_window(_webui_window_t* win, struct mg_connection* client, + const char* content, int type, size_t browser); +static bool _webui_is_empty(const char* s); +static size_t _webui_strlen(const char* s); +static uint16_t _webui_get_run_id(void); +static uint16_t _webui_get_ws_process_number(void); +static void * _webui_malloc(size_t size); +static void* _webui_malloc_if_not_exist(const void* ptr, size_t size); +static void _webui_sleep(long unsigned int ms); +static size_t _webui_find_the_best_browser(_webui_window_t* win); +static bool _webui_is_process_running(const char* process_name); +static void _webui_panic(char* msg); +static void _webui_kill_pid(size_t pid); +static _webui_window_t* _webui_dereference_win_ptr(void * ptr); +static int _webui_get_browser_args(_webui_window_t* win, size_t browser, char* buffer, size_t len); +static void _webui_mutex_init(webui_mutex_t* mutex); +static void _webui_mutex_lock(webui_mutex_t* mutex); +static void _webui_mutex_unlock(webui_mutex_t* mutex); +static void _webui_mutex_destroy(webui_mutex_t* mutex); +static bool _webui_mutex_is_connected(_webui_window_t* win, int update); +static bool _webui_mutex_app_is_exit_now(int update); +static bool _webui_mutex_is_more_servers_running(int update); +static bool _webui_mutex_win_is_exit_now(_webui_window_t* win, int update); +static bool _webui_mutex_is_webview_update(_webui_window_t* win, int update); +static bool _webui_mutex_is_server_running(_webui_window_t* win, int update); +static void _webui_condition_init(webui_condition_t* cond); +static void _webui_condition_wait(webui_condition_t* cond, webui_mutex_t* mutex); +static void _webui_condition_signal(webui_condition_t* cond); +static void _webui_condition_destroy(webui_condition_t* cond); +static void _webui_http_send(_webui_window_t* win, struct mg_connection* client, + const char* mime_type, const char* body, size_t body_len, bool cache); +static void _webui_http_send_file(_webui_window_t* win, struct mg_connection* client, + const char* mime_type, const char* path, bool cache); +static void _webui_http_send_header(_webui_window_t* win, struct mg_connection* client, + const char* mime_type, size_t body_len, bool cache); +static void _webui_http_send_error(struct mg_connection* client, const char* body, int status); +static int _webui_http_handler(struct mg_connection* client, void * _win); +static int _webui_ws_connect_handler(const struct mg_connection* client, void * _win); +static void _webui_ws_ready_handler(struct mg_connection* client, void * _win); +static int _webui_ws_data_handler(struct mg_connection* client, int opcode, char* data, size_t datasize, void * _win); +static void _webui_ws_close_handler(const struct mg_connection* client, void * _win); +static void _webui_receive(_webui_window_t* win, struct mg_connection* client, int event_type, void * data, size_t len); +static void _webui_ws_process(_webui_window_t* win, struct mg_connection* client, size_t connection_id, + void* ptr, size_t len, size_t recvNum, int event_type); +static bool _webui_connection_save(_webui_window_t* win, struct mg_connection* client, size_t* connection_id); +static bool _webui_connection_get_id(_webui_window_t* win, struct mg_connection* client, size_t* connection_id); +static void _webui_connection_remove(_webui_window_t* win, struct mg_connection* client); +static void _webui_remove_firefox_profile_ini(const char* path, const char* profile_name); +static bool _webui_is_firefox_ini_profile_exist(const char* path, const char* profile_name); +static void _webui_send_client(_webui_window_t* win, struct mg_connection *client, + uint16_t id, unsigned char cmd, const char* data, size_t len, bool token_bypass); +static void _webui_send_all(_webui_window_t* win, uint16_t id, unsigned char cmd, const char* data, size_t len); +static uint16_t _webui_get_id(const char* data); +static uint32_t _webui_get_token(const char* data); +static uint32_t _webui_generate_random_uint32(); +static const char* _webui_url_encode(const char* str); +static bool _webui_open_url_native(const char* url); +static bool _webui_is_valid_url(const char* url); +static bool _webui_port_is_used(size_t port_num); +static char* _webui_str_dup(const char* src); +static void _webui_bridge_api_handler(webui_event_t* e); +// static size_t _webui_hash_djb2(const char* s); +static size_t _webui_new_event_inf(_webui_window_t* win, webui_event_inf_t** event_inf); +static void _webui_free_event_inf(_webui_window_t* win, size_t event_num); +static const char* _webui_get_cookies_full(const struct mg_connection* client); +static void _webui_get_cookies(const struct mg_connection* client, char* buffer); +static bool _webui_client_cookies_save(_webui_window_t* win, const char* cookies, size_t* client_id); +static bool _webui_client_cookies_get_id(_webui_window_t* win, const char* cookies, size_t* client_id); +// static void _webui_client_cookies_free_all(_webui_window_t* win); +// static void _webui_client_cookies_free(_webui_window_t* win, struct mg_connection* client); +static size_t _webui_client_get_id(_webui_window_t* win, struct mg_connection* client); +static void _webui_generate_cookies(char* cookies, size_t length); +static int _webui_serve_file(_webui_window_t* win, struct mg_connection* client, size_t client_id); +static int _webui_external_file_handler(_webui_window_t* win, struct mg_connection* client, size_t client_id); +static const void* _webui_call_external_file_handler_cb(_webui_window_t* win, const char* path, size_t* length); +static int _webui_interpret_file(_webui_window_t* win, struct mg_connection* client, char* index, size_t client_id); +static void _webui_webview_update(_webui_window_t* win); +static void _webui_make_window_reusable(_webui_window_t* win); +static const char* _webui_get_local_ip(void); +static size_t _webui_get_child_process_id(_webui_window_t* win); +static void _webui_wait_clean(bool async); +static bool _webui_wait(bool async); + +// WebView +#ifdef _WIN32 +// Microsoft Windows +static void _webui_wv_free(_webui_wv_win32_t* webView); +static void _webui_wv_close(_webui_wv_win32_t *webView); +static bool _webui_wv_navigate(_webui_wv_win32_t* webView, wchar_t* url); +static bool _webui_wv_set_position(_webui_wv_win32_t* webView, int x, int y); +static bool _webui_wv_set_size(_webui_wv_win32_t* webView, int windowWidth, int windowHeight); +static bool _webui_wv_show(_webui_window_t* win, char* url); +static void _webui_wv_event_closed(_webui_window_t* win); +static bool _webui_wv_maximize(_webui_wv_win32_t* webView); +static bool _webui_wv_minimize(_webui_wv_win32_t* webView); +#elif __linux__ +// Linux +static void _webui_wv_free(); +static void _webui_wv_close(_webui_wv_linux_t *webView); +static bool _webui_wv_navigate(_webui_wv_linux_t* webView, char* url); +static bool _webui_wv_set_position(_webui_wv_linux_t* webView, int x, int y); +static bool _webui_wv_set_size(_webui_wv_linux_t* webView, int windowWidth, int windowHeight); +static bool _webui_wv_show(_webui_window_t* win, char* url); +static void _webui_wv_event_closed(void *widget, void *arg); +static bool _webui_wv_event_on_close(void *widget, void *event, void *arg); +static int _webui_wv_exit_schedule(void* arg); +static bool _webui_wv_maximize(_webui_wv_linux_t* webView); +static bool _webui_wv_minimize(_webui_wv_linux_t* webView); +static int _webui_wv_begin_move_idle(void* arg); +static bool _webui_load_gtk_and_webkit(); +#else +// macOS +static void _webui_wv_free(_webui_wv_macos_t* webView); +static void _webui_wv_close(_webui_wv_macos_t *webView); +static bool _webui_wv_navigate(_webui_wv_macos_t* webView, char* url); +static bool _webui_wv_set_position(_webui_wv_macos_t* webView, int x, int y); +static bool _webui_wv_set_size(_webui_wv_macos_t* webView, int windowWidth, int windowHeight); +static bool _webui_wv_show(_webui_window_t* win, char* url); +static void _webui_wv_event_closed(int index); +static bool _webui_wv_maximize(_webui_wv_macos_t* webView); +static bool _webui_wv_minimize(_webui_wv_macos_t* webView); +#endif + +#ifdef WEBUI_TLS +static int _webui_tls_initialization(void * ssl_ctx, void * ptr); +static bool _webui_tls_generate_self_signed_cert(char* root_cert, char* root_key, char* ssl_cert, char* ssl_key); +static bool _webui_check_certificate(const char* certificate_pem, const char* private_key_pem); +#endif +#ifdef WEBUI_LOG +static void _webui_print_hex(const char* data, size_t len); +static void _webui_print_ascii(const char* data, size_t len); +static int _webui_http_log(const struct mg_connection* client, const char* message); +#endif +static WEBUI_THREAD_SERVER_START; +static WEBUI_THREAD_RECEIVE; +static WEBUI_THREAD_WEBVIEW; +static WEBUI_THREAD_MONITOR; + +// Safe C STD +#ifdef _WIN32 +#define WEBUI_STR_TOK(str, delim, context) strtok_s(str, delim, context) +#define WEBUI_FILE_OPEN(file, filename, mode) fopen_s(&file, filename, mode) +#define WEBUI_SN_PRINTF_DYN(buffer, buffer_size, format, ...) snprintf(buffer, (buffer_size + 1), format, ##__VA_ARGS__) +#define WEBUI_SN_PRINTF_STATIC(buffer, buffer_size, format, ...) snprintf(buffer, buffer_size, format, ##__VA_ARGS__) +#define WEBUI_STR_COPY_DYN(dest, dest_size, src) strcpy_s(dest, (dest_size + 1), src) +#define WEBUI_STR_COPY_STATIC(dest, dest_size, src) strcpy_s(dest, dest_size, src) +#define WEBUI_STR_CAT_DYN(dest, dest_size, src) strcat_s(dest, (dest_size + 1), src) +#define WEBUI_STR_CAT_STATIC(dest, dest_size, src) strcat_s(dest, (dest_size), src) +#else +#define WEBUI_STR_TOK(str, delim, context) strtok_r(str, delim, context) +#define WEBUI_FILE_OPEN(file, filename, mode) ((file) = fopen(filename, mode)) +#define WEBUI_SN_PRINTF_DYN(buffer, buffer_size, format, ...) snprintf(buffer, (buffer_size + 1), format, ##__VA_ARGS__) +#define WEBUI_SN_PRINTF_STATIC(buffer, buffer_size, format, ...) snprintf(buffer, buffer_size, format, ##__VA_ARGS__) +#define WEBUI_STR_COPY_DYN(dest, dest_size, src) strncpy(dest, src, (dest_size + 1)) +#define WEBUI_STR_COPY_STATIC(dest, dest_size, src) strncpy(dest, src, dest_size) +#define WEBUI_STR_CAT_DYN(dest, dest_size, src) strncat(dest, src, (dest_size + 1)) +#define WEBUI_STR_CAT_STATIC(dest, dest_size, src) strncat(dest, src, (dest_size - (strlen(dest) - 1))) +#endif + +// Assert +#define WEBUI_ASSERT(s) _webui_panic(s);assert(0 && s); + +// -- Heap ---------------------------- +static _webui_core_t _webui; +static _webui_log_t _webui_log_data = { NULL, NULL }; +static const char* webui_html_served = "Access Denied" +"

⚠ Access Denied

You can't access this content
because it's already in use in
another " +"window.

Note: Multi-client mode is disabled.


" +"WebUI v" WEBUI_VERSION ""; +static const char* webui_html_res_not_available = "Resource Not Available

⚠ Resource Not Available

The requested resource is not available.


WebUI v" WEBUI_VERSION ""; +static const char* webui_def_icon = ""; static const char* webui_def_icon_type = "image/svg+xml"; + +// -- Logs ---------------------------- + +static void _webui_log(size_t level, const char *format, va_list args) { + if (_webui_log_data.logger_func == NULL) { + // Print log directly + if (level == WEBUI_LOGGER_LEVEL_ERROR) { + vfprintf(stderr, format, args); + } else { + vprintf(format, args); + } + } else { + // Pass log to user logger + va_list args_copy; + va_copy(args_copy, args); + int needed_size = vsnprintf(NULL, 0, format, args_copy); + va_end(args_copy); + if (needed_size < 0) { + _webui_log_data.logger_func(WEBUI_LOGGER_LEVEL_ERROR, "Log formatting error", _webui_log_data.logger_user_data); + return; + } + + char buf[256]; + char *buffer = (needed_size > 255) ? _webui_malloc(needed_size + 1) : buf; + if (buffer == NULL) { + _webui_log_data.logger_func(WEBUI_LOGGER_LEVEL_ERROR, "Memory allocation failed for log", _webui_log_data.logger_user_data); + return; + } + vsnprintf(buffer, needed_size + 1, format, args); + _webui_log_data.logger_func(level, buffer, _webui_log_data.logger_user_data); + if (buffer != buf) _webui_free_mem((void*)buffer); + } +} + +static void _webui_log_debug(const char *format, ...) { + va_list args; + va_start(args, format); + _webui_log(WEBUI_LOGGER_LEVEL_DEBUG, format, args); + va_end(args); +} + +static void _webui_log_info(const char *format, ...) { + va_list args; + va_start(args, format); + _webui_log(WEBUI_LOGGER_LEVEL_INFO, format, args); + va_end(args); +} + +static void _webui_log_error(const char *format, ...) { + va_list args; + va_start(args, format); + _webui_log(WEBUI_LOGGER_LEVEL_ERROR, format, args); + va_end(args); +} + +void webui_set_logger(void (*func)(size_t level, const char* log, void* user_data), void *user_data) { + _webui_log_data.logger_func = func; + _webui_log_data.logger_user_data = user_data; +} + +// -- Functions ----------------------- + +void webui_run_client(webui_event_t* e, const char* script) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_run_client([%zu])\n", e->window); + _webui_log_info("[User] webui_run_client([%zu]) -> Script: [%s]\n", e->window, script); + #endif + + // Initialization + _webui_init(); + + size_t js_len = _webui_strlen(script); + if (js_len < 1) + return; + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + return; + + // Packet Protocol Format: + // [...] + // [CMD] + // [Script] + + // Send the packet to a single client + _webui_send_client(win, _webui.clients[e->connection_id], 0, WEBUI_CMD_JS_QUICK, script, js_len, false); +} + +void webui_run(size_t window, const char* script) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_run([%zu])\n", window); + _webui_log_info("[User] webui_run([%zu]) -> Script: [%s]\n", window, script); + #endif + + // Initialization + _webui_init(); + + size_t js_len = _webui_strlen(script); + if (js_len < 1) + return; + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + return; + + // Packet Protocol Format: + // [...] + // [CMD] + // [Script] + + // Send the packet to all clients because no need for client's response + _webui_send_all(win, 0, WEBUI_CMD_JS_QUICK, script, js_len); +} + +void webui_set_close_handler_wv(size_t window, bool(*close_handler)(size_t window)) { + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + + _webui_window_t* win = _webui.wins[window]; + + #ifdef WEBUI_LOG + _webui_log_info("[User]webui_set_close_handler(%zu, %p)", window, close_handler); + #endif + + // Set the close handler + win->close_handler_wv = close_handler; +} + +void webui_set_file_handler(size_t window, const void*(*handler)(const char* filename, int* length)) { + + if (handler == NULL) + return; + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Set the new `files_handler` + win->files_handler = handler; + // And reset any previous `files_handler_window` + win->files_handler_window = NULL; + + // By default, WebUI uses cookies to prevent unauthorized clients from + // accessing the UI. When the user provides a custom file handler, security + // becomes the user's responsibility, so WebUI disables cookies automatically. + webui_set_config(use_cookies, false); +} + +void webui_set_file_handler_window(size_t window, const void*(*handler)(size_t window, const char* filename, int* length)) { + + if (handler == NULL) + return; + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Reset any previous `files_handler` + win->files_handler = NULL; + // And set `files_handler_window` + win->files_handler_window = handler; + + // By default, WebUI uses cookies to prevent unauthorized clients from + // accessing the UI. When the user provides a custom file handler, security + // becomes the user's responsibility, so WebUI disables cookies automatically. + webui_set_config(use_cookies, false); +} + +bool webui_script_client(webui_event_t* e, const char* script, size_t timeout, + char* buffer, size_t buffer_length) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_script_client([%zu])\n", e->window); + _webui_log_info("[User] webui_script_client([%zu]) -> Script [%s] \n", e->window, script); + _webui_log_info("[User] webui_script_client([%zu]) -> Response Buffer @ 0x%p \n", e->window, buffer); + _webui_log_info("[User] webui_script_client([%zu]) -> Response Buffer Size %zu bytes \n", e->window, buffer_length); + #endif + + // Initializing response buffer + if (buffer_length > 0) { + memset(buffer, 0, buffer_length); + } + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return false; + _webui_window_t* win = _webui.wins[e->window]; + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + return false; + + size_t js_len = _webui_strlen(script); + + if (js_len < 1) + return false; + + // Initializing pipe + _webui_mutex_lock(&_webui.mutex_js_run); + uint16_t run_id = _webui_get_run_id(); + _webui.run_done[run_id] = false; + _webui.run_error[run_id] = false; + _webui.run_userBuffer[run_id] = buffer; + _webui.run_userBufferLen[run_id] = buffer_length; + _webui_mutex_unlock(&_webui.mutex_js_run); + + // Packet Protocol Format: + // [...] + // [CMD] + // [Script] + + // Send the packet to a single specific client and wait for response + _webui_send_client(win, _webui.clients[e->connection_id], run_id, WEBUI_CMD_JS, script, js_len, false); + + bool js_status = false; + + // Wait for UI response + if (timeout < 1 || timeout > 86400) { + + // Wait forever + for (;;) { + _webui_sleep(1); + _webui_mutex_lock(&_webui.mutex_js_run); + js_status = _webui.run_done[run_id]; + _webui_mutex_unlock(&_webui.mutex_js_run); + #if __linux__ + if (_webui.is_webview_mode) { + while (gtk_events_pending()) { + gtk_main_iteration_do(0); + } + } + #endif + if (js_status) + break; + } + } else { + + // Using timeout + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(1); + _webui_mutex_lock(&_webui.mutex_js_run); + js_status = _webui.run_done[run_id]; + _webui_mutex_unlock(&_webui.mutex_js_run); + #if __linux__ + if (_webui.is_webview_mode) { + while (gtk_events_pending()) { + gtk_main_iteration_do(0); + } + } + #endif + if (js_status) + break; + if (_webui_timer_is_end(&timer, (timeout * 1000))) + break; + } + } + + if (js_status) { + + #ifdef WEBUI_LOG + _webui_log_info( + "[User] webui_script -> Response found. User buffer len: %zu bytes \n", + _webui.run_userBufferLen[run_id] + ); + _webui_log_info( + "[User] webui_script -> Response found. User buffer data (ASCII): [%s] \n", + _webui.run_userBuffer[run_id] + ); + #endif + + return !_webui.run_error[run_id]; + } else { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_script -> No Response is found. \n"); + #endif + } + + return false; +} + +bool webui_script(size_t window, const char* script, size_t timeout, + char* buffer, size_t buffer_length) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_script([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // Stop if multi-client mode is enabled. + // we can't send and receive from all clients + if (_webui.config.multi_client) { + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_script() -> Multi-client mode is enabled, stop.\n"); + #endif + // Initializing response buffer + if (buffer_length > 0) { + memset(buffer, 0, buffer_length); + } + return false; + } + + // New Event + webui_event_t e; + e.window = window; + e.connection_id = 0; + + // Get the single client ID of this current window + // because we are in single client mode, and we need + // to wait for this client's response. + if (!_webui_connection_get_id(win, win->single_client, &e.connection_id)) + return false; + if (_webui.clients[e.connection_id] == NULL) + return false; + + return webui_script_client(&e, script, timeout, buffer, buffer_length); +} + +static uint32_t _webui_generate_random_uint32() { + uint32_t timestamp = (uint32_t) time(NULL); + // Get the higher 16 bits + uint32_t high = ((uint32_t) rand()&0xFFFF) + ((timestamp >> 16)&0xFFFF); + // Get the lower 16 bits + uint32_t low = ((uint32_t) rand()&0xFFFF) + (timestamp&0xFFFF); + // Combine + return (high << 16) | low; +} + +size_t webui_new_window(void) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_new_window()\n"); + #endif + + // Create a new window + return webui_new_window_id(webui_get_new_window_id()); +} + +size_t webui_new_window_id(size_t num) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_new_window_id([%zu])\n", num); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return 0; + + // Check window ID + if (num < 1 || num > WEBUI_MAX_IDS) + return 0; + + // Destroy the window if already exist + if (_webui.wins[num] != NULL) + webui_destroy(num); + + // Create a new window + _webui_window_t* win = (_webui_window_t* ) _webui_malloc(sizeof(_webui_window_t)); + _webui.wins[num] = win; + + // Mutex Initialisation + _webui_mutex_init(&win->mutex_win_exit_now); + _webui_mutex_init(&win->mutex_win_reusable); + _webui_mutex_init(&win->mutex_webview_update); + _webui_mutex_init(&win->mutex_win_server_running); + _webui_condition_init(&win->condition_webview_update); + + // Initialisation + win->ws_block = _webui.config.ws_block; + win->num = num; + win->browser_path = (char*)_webui_malloc(WEBUI_MAX_PATH); + win->server_root_path = (char*)_webui_malloc(WEBUI_MAX_PATH); + if (_webui_is_empty(_webui.default_server_root_path)) + WEBUI_SN_PRINTF_DYN(win->server_root_path, WEBUI_MAX_PATH, "%s", WEBUI_DEFAULT_PATH); + else + WEBUI_SN_PRINTF_DYN(win->server_root_path, WEBUI_MAX_PATH, "%s", _webui.default_server_root_path); + + // Default window dimensions + win->width = WEBUI_DEF_WIDTH; + win->height = WEBUI_DEF_HEIGHT; + + // Default window style + win->resizable = true; + + // Calculate center + webui_set_center(num); + + // Auto bind JavaScript-Bridge Core API Handler + webui_bind(num, "__webui_core_api__", _webui_bridge_api_handler); + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_new_window_id() -> New window #%zu @ 0x%p\n", num, win); + #endif + + return num; +} + +size_t webui_get_new_window_id(void) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_new_window_id()\n"); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return 0; + + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (_webui.wins[i] == NULL && !_webui.wins_reserved[i]) { + _webui.wins_reserved[i] = true; + return i; + } + } + + // We should never reach here + WEBUI_ASSERT("webui_get_new_window_id() failed"); + return 0; +} + +void webui_set_kiosk(size_t window, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_kiosk([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->kiosk_mode = status; +} + +void webui_set_custom_parameters(size_t window, char* params) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_custom_parameters([%zu], [%s])\n", window, params); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Always free old data to allow user to clear custom params + // by passing an empty `params`. + _webui_free_mem((void*)win->custom_parameters); + win->custom_parameters = NULL; + + // Check size + size_t len = _webui_strlen(params); + if (len < 1) + return; + + // Set new + win->custom_parameters = (char*)_webui_malloc(len); + WEBUI_STR_COPY_DYN(win->custom_parameters, len, params); +} + +void webui_set_resizable(size_t window, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_resizable([%zu], [%d])\n", window, status); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->resizable = status; +} + +void webui_set_high_contrast(size_t window, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_high_contrast([%zu], [%d])\n", window, status); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->disable_browser_high_contrast = !status; +} + +bool webui_browser_exist(size_t browser) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_browser_exist([%zu])\n", browser); + #endif + + return _webui_browser_exist(NULL, browser); +} + +bool webui_is_high_contrast(void) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_is_high_contrast()\n"); + #endif + + // Initialization + _webui_init(); + + bool is_enabled = false; + + #ifdef _WIN32 + char hc[WEBUI_MAX_PATH]; + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Control Panel\\Accessibility\\HighContrast", + L"Flags", + hc)) + { + long flags = strtol(hc, NULL, 10); + if (flags != LONG_MIN && flags != LONG_MAX) { + is_enabled = ((flags&0x01) == 1); + } + } + #elif __linux__ + FILE* process_output; + char buf[128]; + process_output = popen("gsettings get org.gnome.desktop.a11y.interface high-contrast", "r"); + if (process_output != NULL) { + if (fgets(buf, sizeof(buf), process_output) != NULL) { + is_enabled = (strstr(buf, "true") != NULL); + } + pclose(process_output); + } + #else + FILE* process_output; + char buf[128]; + process_output = popen("defaults read -g AppleInterfaceStyle", "r"); + if (process_output != NULL) { + if (fgets(buf, sizeof(buf), process_output) != NULL) { + is_enabled = (strstr(buf, "Dark") != NULL); + } + pclose(process_output); + } + #endif + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_is_high_contrast() -> %d\n", is_enabled); + #endif + + return is_enabled; +} + +void webui_close_client(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_close_client([%zu])\n", e->window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Remove cookies + // _webui_client_cookies_free(win, _webui.clients[e->connection_id]); + + // Packet Protocol Format: + // [...] + // [CMD] + + // Send the packet to a single client + _webui_send_client(win, _webui.clients[e->connection_id], 0, WEBUI_CMD_CLOSE, NULL, 0, false); + + // Forced close + mg_close_connection(_webui.clients[e->connection_id]); +} + +void webui_close(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_close([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Make window reusable, so user can + // call `webui_show()` again if needed. + _webui_make_window_reusable(win); + + // Close window + if (!win->webView) { + // Close web browser window + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + // Packet Protocol Format: + // [...] + // [CMD] + // Send the packet + _webui_send_all(win, 0, WEBUI_CMD_CLOSE, NULL, 0); + } + } + else { + // Stop WebView thread if any + if (win->webView) { + #ifdef _WIN32 + if (win->webView->cpp_handle) { + _webui_win32_wv2_set_stop(win->webView->cpp_handle, true); + _webui_webview_update(win); + } + #else + win->webView->stop = true; + _webui_webview_update(win); + #endif + } + } +} + +void webui_destroy(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_destroy([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if (_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) { + + // Freindly close + webui_close(window); + + // Wait for server threads to stop + _webui_timer_t timer_1; + _webui_timer_start(&timer_1); + for (;;) { + _webui_sleep(10); + if (!_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) + break; + if (_webui_timer_is_end(&timer_1, 2500)) + break; + } + + if (_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_destroy([%zu]) -> Forced close\n", window); + #endif + + // Forced close + _webui_mutex_is_connected(win, WEBUI_MUTEX_SET_FALSE); + + // Wait for server threads to stop + _webui_timer_t timer_2; + _webui_timer_start(&timer_2); + for (;;) { + _webui_sleep(100); + if (!_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) + break; + if (_webui_timer_is_end(&timer_2, 1500)) + break; + } + } + } + + // Free memory resources + _webui_free_mem((void*)win->url); + _webui_free_mem((void*)win->html); + _webui_free_mem((void*)win->icon); + _webui_free_mem((void*)win->icon_type); + _webui_free_mem((void*)win->browser_path); + _webui_free_mem((void*)win->profile_path); + _webui_free_mem((void*)win->profile_name); + _webui_free_mem((void*)win->server_root_path); + + // Free events + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (win->events[i] != NULL) + _webui_free_mem((void*)win->events[i]); + } + + // Free Mutex + _webui_condition_destroy(&win->condition_webview_update); + _webui_mutex_destroy(&win->mutex_webview_update); + _webui_mutex_destroy(&win->mutex_win_exit_now); + _webui_mutex_destroy(&win->mutex_win_reusable); + _webui_mutex_destroy(&win->mutex_win_server_running); + + // Free window struct + _webui_free_mem((void*)_webui.wins[window]); + _webui.wins[window] = NULL; + _webui.wins_reserved[window] = false; +} + +bool webui_is_shown(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_is_shown([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + return _webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS); +} + +void webui_set_icon(size_t window, const char* icon, const char* icon_type) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_icon([%zu], [%s], [%s])\n", window, icon, icon_type); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // The icon data and the icon type are both + // required, otherwise ignore the call + if (_webui_is_empty(icon) || _webui_is_empty(icon_type)) + return; + + // Some wrappers do not guarantee pointers stay valid, + // so, let's make our copy. + + // Icon + size_t len = _webui_strlen(icon); + const char* icon_cpy = (const char*)_webui_malloc(len); + memcpy((char*)icon_cpy, icon, len); + + // Icon Type + len = _webui_strlen(icon_type); + const char* icon_type_cpy = (const char*)_webui_malloc(len); + memcpy((char*)icon_type_cpy, icon_type, len); + + // Clean old sets if any + if (win->icon != NULL) + _webui_free_mem((void*)win->icon); + if (win->icon_type != NULL) + _webui_free_mem((void*)win->icon_type); + + win->icon = icon_cpy; + win->icon_type = icon_type_cpy; +} + +// Get the folder of the current executable (no trailing separator) +static bool _webui_get_exe_dir(char* buffer, size_t max) { + #if defined(_WIN32) + DWORD len = GetModuleFileNameA(NULL, buffer, (DWORD)max); + if (len == 0 || len >= (DWORD)max) + return false; + #elif defined(__linux__) + ssize_t len = readlink("/proc/self/exe", buffer, max - 1); + if (len <= 0) + return false; + buffer[len] = '\0'; + #else + // macOS: not implemented yet + (void)buffer; + (void)max; + return false; + #endif + #if defined(_WIN32) || defined(__linux__) + char* slash = strrchr(buffer, '/'); + #if defined(_WIN32) + char* backslash = strrchr(buffer, '\\'); + if (backslash > slash) + slash = backslash; + #endif + if (slash == NULL) + return false; + *slash = '\0'; + return true; + #endif +} + +void webui_set_icon_file(size_t window, const char* path) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_icon_file([%zu], [%s])\n", window, path); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // The icon file path is required, otherwise ignore the call + if (_webui_is_empty(path)) + return; + + // Resolve the icon file: first as given (absolute, or relative to the + // current working directory), then relative to the executable's folder + char resolved[WEBUI_MAX_PATH]; + WEBUI_SN_PRINTF_STATIC(resolved, sizeof(resolved), "%s", path); + if (!_webui_file_exist(resolved)) { + bool found = false; + char exe_dir[WEBUI_MAX_PATH]; + if (_webui_get_exe_dir(exe_dir, sizeof(exe_dir))) { + WEBUI_SN_PRINTF_STATIC(resolved, sizeof(resolved), "%s/%s", exe_dir, path); + found = _webui_file_exist(resolved); + } + if (!found) + return; // Icon file not found - ignore the call + } + + // Load the icon file content (binary safe) + FILE* file = NULL; + #if defined(_MSC_VER) + if (fopen_s(&file, resolved, "rb") != 0) + file = NULL; + #else + file = fopen(resolved, "rb"); + #endif + if (file == NULL) + return; + fseek(file, 0, SEEK_END); + long file_size = ftell(file); + rewind(file); + if (file_size <= 0) { + fclose(file); + return; + } + unsigned char* buffer = (unsigned char*)_webui_malloc((size_t)file_size); + if (fread(buffer, 1, (size_t)file_size, file) != (size_t)file_size) { + _webui_free_mem((void*)buffer); + fclose(file); + return; + } + fclose(file); + + // Clean old sets if any + if (win->icon_file_data != NULL) + _webui_free_mem((void*)win->icon_file_data); + + win->icon_file_data = buffer; + win->icon_file_size = (size_t)file_size; +} + +void webui_navigate_client(webui_event_t* e, const char* url) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_navigate_client([%zu], [%s])\n", e->window, url); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Web-Browser Window + if (!win->webView) { + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + return; + + // Packet Protocol Format: + // [...] + // [CMD] + // [URL] + + // Send the packet to a single client + _webui_send_client(win, _webui.clients[e->connection_id], + 0, WEBUI_CMD_NAVIGATION, url, _webui_strlen(url), false + ); + } +} + +void webui_navigate(size_t window, const char* url) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_navigate([%zu], [%s])\n", window, url); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Web-Browser Window + if (!win->webView) { + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + return; + + // Packet Protocol Format: + // [...] + // [CMD] + // [URL] + + // Send the packet + _webui_send_all(win, 0, WEBUI_CMD_NAVIGATION, url, _webui_strlen(url)); + } + else { + // WebView + #ifdef _WIN32 + if (win->webView->cpp_handle) { + wchar_t* wURL = NULL; + _webui_str_to_wide(url, &wURL); + _webui_win32_wv2_set_url(win->webView->cpp_handle, wURL); + _webui_win32_wv2_set_navigate_flag(win->webView->cpp_handle, true); + _webui_webview_update(win); + } + #else + // In WebKitGTK, navigation can be triggered from navigation-policy callback. + // Route this path through show(), which already applies in_show guard. + (void)webui_show(window, url); + #endif + } +} + +void webui_clean(void) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_clean()\n"); + #endif + + // Initialization + _webui_init(); + + // Final memory cleaning + _webui_clean(); +} + +void webui_delete_all_profiles(void) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_delete_all_profiles()\n"); + #endif + + // Initialization + _webui_init(); + + // Loop trough all windows + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (_webui.wins[i] != NULL) { + webui_delete_profile(i); + } + } +} + +static bool _webui_is_firefox_ini_profile_exist(const char* path, const char* profile_name) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_is_firefox_ini_profile_exist([%s], [%s])\n", path, profile_name); + #endif + + // Parse home environments in the path + #ifdef _WIN32 + // Windows + char full_path[WEBUI_MAX_PATH]; + ExpandEnvironmentStringsA(path, full_path, sizeof(full_path)); + #else + // Linux&macOS + char full_path[WEBUI_MAX_PATH]; + if (path[0] == '~') { + const char* home = getenv("HOME"); + if (home) { + WEBUI_SN_PRINTF_STATIC(full_path, sizeof(full_path), "%s/%s", home, &path[1]); + } else { + // If for some reason HOME isn't set + // fall back to the original path. + strncpy(full_path, path, sizeof(full_path)); + } + } else { + strncpy(full_path, path, sizeof(full_path)); + } + #endif + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_is_firefox_ini_profile_exist() -> Opening [%s]\n", full_path); + #endif + + // Open + FILE* file; + WEBUI_FILE_OPEN(file, full_path, "r"); + if (!file) + return false; + + char target[128] = { + 0x00 + }; + WEBUI_SN_PRINTF_STATIC(target, sizeof(target), "Name=%s", profile_name); + + char line[1024]; + while(fgets(line, sizeof(line), file)) { + if (strstr(line, target) != NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_is_firefox_ini_profile_exist() -> Target found\n"); + #endif + fclose(file); + return true; + } + } + + fclose(file); + return false; +} + +static void _webui_remove_firefox_profile_ini(const char* path, const char* profile_name) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_remove_firefox_profile_ini([%s], [%s])\n", path, profile_name); + #endif + + // Parse home environments in the path + #ifdef _WIN32 + // Windows + char full_path[WEBUI_MAX_PATH]; + ExpandEnvironmentStringsA(path, full_path, sizeof(full_path)); + #else + // Linux&macOS + char full_path[WEBUI_MAX_PATH]; + if (path[0] == '~') { + const char* home = getenv("HOME"); + if (home) { + WEBUI_SN_PRINTF_STATIC(full_path, sizeof(full_path), "%s/%s", home, &path[1]); + } else { + // If for some reason HOME isn't set + // fall back to the original path. + strncpy(full_path, path, sizeof(full_path)); + } + } else { + strncpy(full_path, path, sizeof(full_path)); + } + #endif + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_remove_firefox_profile_ini() -> Opening [%s]\n", full_path); + #endif + + // Open + FILE * file; + WEBUI_FILE_OPEN(file, full_path, "r"); + if (!file) + return; + + char buffer[1024 * 3] = {0}; + char output[1024 * 4] = {0}; + char target[128] = {0}; + + WEBUI_SN_PRINTF_STATIC(target, sizeof(target), "Name=%s", profile_name); + + bool skip = false; + while(fgets(buffer, sizeof(buffer), file)) { + if (strncmp(buffer, "[Profile", 8) == 0) { + if (skip) + skip = false; + } + if (!skip) { + if (strstr(buffer, target) != NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_remove_firefox_profile_ini() -> Target found\n"); + #endif + skip = true; + continue; + } else { + WEBUI_STR_CAT_STATIC(output, sizeof(output), buffer); + } + } + } + + fclose(file); + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_remove_firefox_profile_ini() -> Saving\n"); + #endif + + // Save + WEBUI_FILE_OPEN(file, full_path, "w"); + if (!file) + return; + fputs(output, file); + fclose(file); +} + +void webui_delete_profile(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_delete_profile([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if (_webui_folder_exist(win->profile_path)) { + + if (win->current_browser == Firefox) { + + // Delete Firefox profile + + #ifdef _WIN32 + // Windows + _webui_remove_firefox_profile_ini( + "%APPDATA%\\Mozilla\\Firefox\\profiles.ini", win->profile_name + ); + _webui_delete_folder(win->profile_path); + #elif __linux__ + // Linux + _webui_remove_firefox_profile_ini("~/.mozilla/firefox/profiles.ini", win->profile_name); + _webui_remove_firefox_profile_ini( + "~/snap/firefox/common/.mozilla/firefox/profiles.ini", win->profile_name + ); + _webui_delete_folder(win->profile_path); + #else + // macOS + _webui_remove_firefox_profile_ini( + "~/Library/Application Support/Firefox/profiles.ini", win->profile_name + ); + _webui_delete_folder(win->profile_path); + #endif + } else { + + // Delete Chromium-based profile + _webui_delete_folder(win->profile_path); + } + } +} + +const char* webui_start_server(size_t window, const char* content) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_start_server([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return ""; + _webui_window_t* win = _webui.wins[window]; + + // Check + if (_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) + return ""; + + // Make `wait()` waits forever + webui_set_timeout(0); + + // Start the window without any GUI. + // Empty content means: use folder mode with the current root path, + // so index fallback can be resolved by WebUI. + bool started = false; + if (_webui_is_empty(content)) { + started = _webui_show_window(win, NULL, win->server_root_path, WEBUI_SHOW_FOLDER, NoBrowser); + } else { + started = webui_show_browser(window, content, NoBrowser); + } + + if (started) { + return win->url; + } + + return ""; +} + +bool webui_show_client(webui_event_t* e, const char* content) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_show_client([%zu])\n", e->window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return false; + _webui_window_t* win = _webui.wins[e->window]; + + // Show the window using WebView or using any browser + win->allow_browser = true; + win->allow_webview = true; + + // Show for single a client + return _webui_show(win, _webui.clients[e->connection_id], content, AnyBrowser); +} + +#ifdef _WIN32 + // Callback for EnumWindows used to find the window handle of the web browser process + // and bring it to the foreground (front). + BOOL CALLBACK _webui_win32_enum_proc(HWND hwnd, LPARAM lParam) { + DWORD targetPid = (DWORD)lParam; + DWORD pid = 0; + GetWindowThreadProcessId(hwnd, &pid); + if (pid == targetPid && IsWindowVisible(hwnd)) { + // Restore if minimized + if (IsIconic(hwnd)) { + ShowWindow(hwnd, SW_RESTORE); + } + // Bring to foreground + SetForegroundWindow(hwnd); + // stop enumeration + return FALSE; + } + // continue enumeration + return TRUE; + } +#endif + +void webui_focus(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_focus([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + #ifdef _WIN32 + if (_webui.is_webview_mode) { + // WebView + void* hwnd = webui_win32_get_hwnd(window); + if (hwnd) { + ShowWindow(hwnd, SW_RESTORE); + SetForegroundWindow((HWND)hwnd); + SetFocus((HWND)hwnd); + } + } else { + // Web-Browser Window + DWORD pid = (DWORD)_webui_get_child_process_id(win); + if (pid != 0) { + // Set callback for EnumWindows + EnumWindows(_webui_win32_enum_proc, (LPARAM)pid); + } + } + + #elif __linux__ + // Linux does not have a standard way to bring a window to the foreground from another process. + // This is a known limitation and may not work on all desktop environments. + #else + // macOS does not have a standard way to bring a window to the foreground from another process. + #endif +} + +bool webui_show(size_t window, const char* content) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_show([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // Show the window using WebView or using any browser + win->allow_browser = true; + win->allow_webview = true; + + // Show for all connected clients + return _webui_show(win, NULL, content, AnyBrowser); +} + +bool webui_show_wv(size_t window, const char* content) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_show_wv([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // Show the window using WebView only + win->allow_browser = false; + win->allow_webview = true; + + // Show for all connected clients + return _webui_show(win, NULL, content, Webview); +} + +bool webui_show_browser(size_t window, const char* content, size_t browser) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_show_browser([%zu], [%zu])\n", window, browser); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // Show the window using a specific browser only + win->allow_browser = (browser == Webview ? false : true); + win->allow_webview = (browser == Webview ? true : false); + + // Show for all connected clients + return _webui_show(win, NULL, content, browser); +} + +void* webui_get_context(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_context()\n"); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[e->window]; + + // Search + size_t cb_index = 0; + if (_webui_get_cb_index(win, e->element, &cb_index)) { + // Get context + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_context() -> Found context at %p\n", win->cb_context[cb_index]); + #endif + return win->cb_context[cb_index]; + } + + return NULL; +} + +void webui_set_context(size_t window, const char* element, void* context) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_context([%zu])\n", window); + _webui_log_info("[User] webui_set_context() -> Element: [%s]\n", element); + _webui_log_info("[User] webui_set_context() -> Context: [%p]\n", context); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Get bind Index + // We should use `webui_bind()` with NULL to make `webui_set_context()` + // works fine if user call it before or after `webui_bind()`. + size_t cb_index = webui_bind(window, element, NULL); + + // Set context + win->cb_context[cb_index] = context; + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_context() -> Context saved at %zu\n", cb_index); + #endif +} + +size_t webui_bind(size_t window, const char* element, void(*func)(webui_event_t* e)) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_bind([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + // Search + size_t cb_index = 0; + bool exist = _webui_get_cb_index(win, element, &cb_index); + + // Free old ID + size_t index = (exist ? cb_index : _webui.cb_count++); + _webui_free_mem((void*)win->html_elements[index]); + + // All events binding + if (_webui_is_empty(element)) { + // Empty Element ID Binding (New / Update) + win->html_elements[index] = ""; + if (func != NULL) { + win->has_all_events = true; + win->cb[index] = func; + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_bind() -> Save bind (all events) index %zu, address 0x%p\n", index, func); + #endif + } + return index; + } else { + // Non-empty Element ID Binding (New / Update) + const char* element_cpy = (const char*)_webui_str_dup(element); + win->html_elements[index] = element_cpy; + if (func != NULL) { + win->cb[index] = func; + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_bind() -> Save bind index %zu, address 0x%p\n", index, func); + #endif + + // Send to all connected clients the new binding ID + // Packet Protocol Format: + + // [...] + // [CMD] + // [NewElement] + // Send the packet + + _webui_send_all( + win, 0, WEBUI_CMD_ADD_ID, + element, _webui_strlen(element_cpy) + ); + } + } + + return index; +} + +size_t webui_get_best_browser(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_best_browser([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 1; // 1. Default recommended web browser + _webui_window_t* win = _webui.wins[window]; + + return _webui_find_the_best_browser(win); +} + +const char* webui_get_string_at(webui_event_t* e, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_string_at([%zu])\n", index); + #endif + + // Initialization + _webui_init(); + + if (index > WEBUI_MAX_ARG) + return NULL; + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return NULL; + _webui_window_t* win = _webui.wins[e->window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf == NULL) + return NULL; + + if (event_inf->event_data[index] != NULL) { + size_t len = event_inf->event_size[index]; + if (len > 0 && len <= WEBUI_MAX_BUF) + return (const char*)event_inf->event_data[index]; + } + + return ""; +} + +size_t webui_get_count(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_count()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[e->window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf == NULL) + return 0; + + return event_inf->count; +} + +long long int webui_get_int_at(webui_event_t* e, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_int_at([%zu])\n", index); + #endif + + // Initialization&Dereference + // are done by webui_get_string() + + if (index > WEBUI_MAX_ARG) + return 0; + + const char* str = webui_get_string_at(e, index); + if (str == NULL) + return 0; + + size_t len = _webui_strlen(str); + if (len > 0 && len <= 20) { + // 64-bit max is -9,223,372,036,854,775,808 (20 character) + char* endptr; + return strtoll((const char*)str, &endptr, 10); + } + + return 0; +} + +double webui_get_float_at(webui_event_t* e, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_float_at([%zu])\n", index); + #endif + + // Initialization&Dereference + // are done by webui_get_string() + + if (index > WEBUI_MAX_ARG) + return 0.0; + + const char* str = webui_get_string_at(e, index); + if (str == NULL) + return 0.0; + + size_t len = _webui_strlen(str); + if (len > 0 && len <= 20) { + // 64-bit max is -9,223,372,036,854,775,808 (20 character) + char* endptr; + return strtod(str, &endptr); + } + + return 0.0; +} + +bool webui_get_bool_at(webui_event_t* e, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_bool_at([%zu])\n", index); + #endif + + // Initialization&Dereference + // are done by webui_get_string() + + if (index > WEBUI_MAX_ARG) + return false; + + const char* str = webui_get_string_at(e, index); + if (str == NULL) + return false; + + if (str[0] == '0' || str[0] == 'f' || str[0] == 'F') // `0` | `false` | `FALSE` + return false; + + return true; +} + +size_t webui_get_size_at(webui_event_t* e, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_size_at([%zu])\n", index); + #endif + + // Initialization + _webui_init(); + + if (index > WEBUI_MAX_ARG) + return 0; + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[e->window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf == NULL) + return 0; + + return event_inf->event_size[index]; +} + +const char* webui_get_string(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_string()\n"); + #endif + + return webui_get_string_at(e, 0); +} + +long long int webui_get_int(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_int()\n"); + #endif + + return webui_get_int_at(e, 0); +} + +double webui_get_float(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_float()\n"); + #endif + + return webui_get_float_at(e, 0); +} + +bool webui_get_bool(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_bool()\n"); + #endif + + return webui_get_bool_at(e, 0); +} + +size_t webui_get_size(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_size()\n"); + #endif + + return webui_get_size_at(e, 0); +} + +void webui_return_int(webui_event_t* e, long long int n) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_return_int([%lld])\n", n); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf == NULL) + return; + + // Free + if (event_inf->response != NULL) + _webui_free_mem((void*)event_inf->response); + + // Int to Str + // 64-bit max is -9,223,372,036,854,775,808 (20 character) + char* buf = (char*)_webui_malloc(20); + WEBUI_SN_PRINTF_DYN(buf, 20, "%lld", n); + + // Set response + event_inf->response = buf; + + // Async response + if (_webui.config.asynchronous_response) { + _webui_mutex_lock(&_webui.mutex_async_response); + event_inf->done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + } +} + +void webui_return_float(webui_event_t* e, double f) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_return_float([%f])\n", f); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf == NULL) + return; + + // Free + if (event_inf->response != NULL) + _webui_free_mem((void*)event_inf->response); + + // Float to Str + // 64-bit max is -9,223,372,036,854,775,808 (20 character) + char* buf = (char*)_webui_malloc(20); + WEBUI_SN_PRINTF_DYN(buf, 20, "%lf", f); + + // Set response + event_inf->response = buf; + + // Async response + if (_webui.config.asynchronous_response) { + _webui_mutex_lock(&_webui.mutex_async_response); + event_inf->done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + } +} + +void webui_return_string(webui_event_t* e, const char* s) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_return_string([%s])\n", s); + #endif + + if (_webui_is_empty(s)) + return; + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf == NULL) + return; + + // Free + if (event_inf->response != NULL) + _webui_free_mem((void*)event_inf->response); + + // Copy Str + size_t len = _webui_strlen(s); + char* buf = (char*)_webui_malloc(len); + memcpy(buf, s, len); + + // Set response + event_inf->response = buf; + + // Async response + if (_webui.config.asynchronous_response) { + _webui_mutex_lock(&_webui.mutex_async_response); + event_inf->done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + } +} + +size_t webui_get_last_error_number() { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_last_error_number()\n"); + #endif + + // TODO: Add error code. + return 0; +} + +const char* webui_get_last_error_message() { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_last_error_message()\n"); + #endif + + // TODO: Add error message. + return "Unknown error."; +} + +void webui_return_bool(webui_event_t* e, bool b) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_return_bool([%d])\n", b); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf == NULL) + return; + + // Free + if (event_inf->response != NULL) + _webui_free_mem((void*)event_inf->response); + + // Bool to Str + int len = 1; + char* buf = (char*)_webui_malloc(len); + WEBUI_SN_PRINTF_DYN(buf, len, "%d", b); + + // Set response + event_inf->response = buf; + + // Async response + if (_webui.config.asynchronous_response) { + _webui_mutex_lock(&_webui.mutex_async_response); + event_inf->done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + } +} + +void webui_return_http(size_t window, const void* response, int length) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_return_http([%zu], [%d])\n", window, length); + #endif + + // Notes: + // `webui_return_http` is just an alias of + // `webui_interface_set_response_file_handler` + // for better readability. + // + // When `asynchronous_response` is enabled, `webui_return_http()` + // can be used to send HTTP response asynchronously. + + webui_interface_set_response_file_handler(window, response, length); +} + +size_t webui_get_parent_process_id(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_parent_process_id([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + #if defined(_WIN32) + return (size_t)GetCurrentProcessId(); + #else + return (size_t)getpid(); + #endif +} + +const char* webui_get_mime_type(const char* file) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_mime_type([%s])\n", file); + #endif + + // Initialization + _webui_init(); + + return mg_get_builtin_mime_type(file); +} + +size_t webui_get_free_port(void) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_free_port()\n"); + #endif + + // Initialization + _webui_init(); + + return _webui_get_free_port(); +} + +size_t webui_get_port(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_port([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + return win->server_port; +} + +#ifdef WEBUI_TLS +static bool _webui_check_certificate(const char* certificate_pem, const char* private_key_pem) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_check_certificate()\n"); + #endif + + OpenSSL_add_all_algorithms(); + + // SSL Context + SSL_CTX * ctx; + SSL_library_init(); + ctx = SSL_CTX_new(TLS_client_method()); + if (!ctx) + return false; + + // Disable security levels. It is The end-user + // responsability to provide a high encryption + // level certificate. While WebUI should just + // use the end-user's certificates. + SSL_CTX_set_security_level(ctx, 0); + + // Load Certificate + BIO * bio_cert = BIO_new_mem_buf((void*)certificate_pem, -1); + X509 * cert = PEM_read_bio_X509(bio_cert, NULL, 0, NULL); + if (cert == NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_check_certificate() -> PEM_read_bio_X509 failed\n"); + #endif + BIO_free_all(bio_cert); + X509_free(cert); + SSL_CTX_free(ctx); + return false; + } + + // Use certificate + if (SSL_CTX_use_certificate(ctx, cert) <= 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_check_certificate() -> SSL_CTX_use_certificate " + "failed\n"); + #endif + BIO_free_all(bio_cert); + X509_free(cert); + SSL_CTX_free(ctx); + return false; + } + + // Load Key + BIO * bio_key = BIO_new_mem_buf((void*)private_key_pem, -1); + EVP_PKEY * private_key = PEM_read_bio_PrivateKey(bio_key, NULL, 0, NULL); + if (private_key == NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_check_certificate() -> PEM_read_bio_PrivateKey " + "failed\n"); + #endif + EVP_PKEY_free(private_key); + BIO_free_all(bio_key); + BIO_free_all(bio_cert); + X509_free(cert); + SSL_CTX_free(ctx); + EVP_cleanup(); + return false; + } + + // Use key + if (SSL_CTX_use_PrivateKey(ctx, private_key) <= 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_check_certificate() -> SSL_CTX_use_PrivateKey " + "failed\n"); + #endif + EVP_PKEY_free(private_key); + BIO_free_all(bio_key); + BIO_free_all(bio_cert); + X509_free(cert); + SSL_CTX_free(ctx); + EVP_cleanup(); + return false; + } + + // Free + EVP_PKEY_free(private_key); + BIO_free_all(bio_key); + BIO_free_all(bio_cert); + X509_free(cert); + SSL_CTX_free(ctx); + EVP_cleanup(); + + return true; +} +#endif + +bool webui_set_tls_certificate(const char* certificate_pem, const char* private_key_pem) { + (void)certificate_pem; + (void)private_key_pem; + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_tls_certificate()\n"); + #endif + + // Initialization + _webui_init(); + + #ifdef WEBUI_TLS + if (!_webui_is_empty(certificate_pem) && !_webui_is_empty(private_key_pem)) { + + // Check size + size_t certificate_len = _webui_strlen(certificate_pem); + size_t private_key_len = _webui_strlen(private_key_pem); + if (certificate_len >= WEBUI_SSL_SIZE || private_key_len >= WEBUI_SSL_SIZE) + return false; + + // Check certificate validity + if (!_webui_check_certificate(certificate_pem, private_key_pem)) { + #ifdef WEBUI_LOG + unsigned long err = ERR_get_error(); + char err_buf[1024]; + ERR_error_string_n(err, err_buf, sizeof(err_buf)); + _webui_log_info("[User] webui_set_tls_certificate() -> Invalid certificate:\n%s\n", err_buf); + #endif + return false; + } + + // Free generated self-signed + _webui_free_mem((void*)_webui.root_cert); + _webui_free_mem((void*)_webui.root_key); + _webui_free_mem((void*)_webui.ssl_cert); + _webui_free_mem((void*)_webui.ssl_key); + + // Set user TLS + char* ssl_cert = (char*)_webui_malloc(certificate_len); + char* ssl_key = (char*)_webui_malloc(private_key_len); + WEBUI_SN_PRINTF_DYN(ssl_cert, certificate_len, "%s", certificate_pem); + WEBUI_SN_PRINTF_DYN(ssl_key, private_key_len, "%s", private_key_pem); + _webui.ssl_cert = ssl_cert; + _webui.ssl_key = ssl_key; + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_tls_certificate() -> SSL/TLS Certificate:\n"); + _webui_log_info("%s\n", (const char*)_webui.ssl_cert); + _webui_log_info("%s\n", (const char*)_webui.ssl_key); + #endif + + return true; + } + #else + WEBUI_ASSERT("SSL/TLS is not available in this library. " + "Please use the secure version of WebUI library"); + #endif + + return false; +} + +void webui_set_config(webui_config option, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_config([%d], [%d])\n", option, status); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return; + + switch (option) { + case show_wait_connection: + _webui.config.show_wait_connection = status; + break; + case folder_monitor: + _webui.config.folder_monitor = status; + break; + case multi_client: + _webui.config.multi_client = status; + break; + case use_cookies: + _webui.config.use_cookies = status; + break; + case asynchronous_response: + _webui.config.asynchronous_response = status; + break; + case ui_event_blocking: + _webui.config.ws_block = status; + // Update all created windows + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (_webui.wins[i] != NULL) { + _webui.wins[i]->ws_block = status; + } + } + break; + #ifdef WEBUI_LOG + default: + _webui_log_info("[User] webui_config -> Unknown option [%d]\n", option); + break; + #endif + } +} + +void webui_set_frameless(size_t window, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_frameless([%zu], [%d])\n", window, status); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->frameless = status; +} + +void webui_set_transparent(size_t window, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_transparent([%zu], [%d])\n", window, status); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->transparent = status; +} + +void webui_set_event_blocking(size_t window, bool status) { + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_event_blocking([%zu], [%d])\n", window, status); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->ws_block = status; +} + +bool webui_set_port(size_t window, size_t port) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_port([%zu], [%zu])\n", window, port); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + if (_webui_port_is_used(port)) + return false; + + win->custom_server_port = port; + return true; +} + +size_t webui_get_child_process_id(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_child_process_id([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + return _webui_get_child_process_id(win); +} + +void* webui_win32_get_hwnd(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_win32_get_hwnd([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return NULL; + _webui_window_t* win = _webui.wins[window]; + + #ifdef _WIN32 + if (_webui.is_webview_mode) { + // WebView Window + if (win->webView && win->webView->cpp_handle) { + return _webui_win32_wv2_get_hwnd(win->webView->cpp_handle); + } + } else { + // Web Browser Window + size_t child_pid = _webui_get_child_process_id(win); + if (child_pid == 0) { + return NULL; + } + HWND hwnd = NULL; + int max_iterations = 10000; + do { + hwnd = FindWindowEx(NULL, hwnd, NULL, NULL); + if (hwnd == NULL) { + break; + } + DWORD pid; + GetWindowThreadProcessId(hwnd, &pid); + if (pid == child_pid) { + return hwnd; + } + } while (--max_iterations > 0); + } + #endif + + // This API is only available on Windows + return NULL; +} + +void* webui_get_hwnd(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_hwnd([%zu])\n", window); + #endif + + #ifdef _WIN32 + return webui_win32_get_hwnd(window); + #elif __linux__ + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return NULL; + _webui_window_t* win = _webui.wins[window]; + + if (_webui.is_webview_mode) { + if (win->webView) { + return win->webView->gtk_win; + } + } + + return NULL; + + #else + // macOS + return NULL; // TODO: Return window handler + #endif +} + +void webui_set_hide(size_t window, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_hide(%zu, %d)\n", window, status); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->hide = status; +} + +void webui_minimize(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_minimize(%zu)\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if(win->webView) { + _webui_wv_minimize(win->webView); + } +} + +void webui_maximize(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_minimize(%zu)\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if(win->webView) { + _webui_wv_maximize(win->webView); + } +} + +void webui_set_size(size_t window, unsigned int width, unsigned int height) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_size(%zu, %u, %u)\n", window, width, height); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if (width < WEBUI_MIN_WIDTH || width > WEBUI_MAX_WIDTH || height < WEBUI_MIN_HEIGHT || + height > WEBUI_MAX_HEIGHT) { + + win->size_set = false; + return; + } + + win->width = width; + win->height = height; + win->size_set = true; + + // Resize the current window + if (!win->webView) { + + // web-browser window + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + char script[128]; + WEBUI_SN_PRINTF_STATIC(script, sizeof(script), "window.resizeTo(%u, %u);", width, height); + webui_run(window, script); + } + } + else { + + // webView window + if (win->webView) { + #ifdef _WIN32 + if (win->webView->cpp_handle) { + int x, y, w, h; + _webui_win32_wv2_get_dimensions(win->webView->cpp_handle, &x, &y, &w, &h); + _webui_win32_wv2_set_dimensions(win->webView->cpp_handle, x, y, width, height); + _webui_win32_wv2_set_size_flag(win->webView->cpp_handle, true); + _webui_webview_update(win); + } + #else + win->webView->width = width; + win->webView->height = height; + win->webView->size = true; + _webui_webview_update(win); + #endif + } + } +} + +void webui_set_minimum_size(size_t window, unsigned int width, unsigned int height) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_minimum_size(%zu, %u, %u)\n", window, width, height); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if (width < WEBUI_MIN_WIDTH || width > WEBUI_MAX_WIDTH || height < WEBUI_MIN_HEIGHT || + height > WEBUI_MAX_HEIGHT) { + + win->minimum_size_set = false; + return; + } + + win->minimum_width = width; + win->minimum_height = height; + win->minimum_size_set = true; +} + +void webui_set_position(size_t window, unsigned int x, unsigned int y) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_position(%zu, %u, %u)\n", window, x, y); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + int X = x; + int Y = y; + + if (X < WEBUI_MIN_X || X > WEBUI_MAX_X || Y < WEBUI_MIN_Y || Y > WEBUI_MAX_Y) { + + win->position_set = false; + return; + } + + win->x = X; + win->y = Y; + win->position_set = true; + + // Check if there is atleast one window (UI) running. + if (_webui.ui) { + + // Positioning the current running window + if (!win->webView) { + + // web-browser window + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + char script[128]; + WEBUI_SN_PRINTF_STATIC(script, sizeof(script), "window.moveTo(%u, %u);", X, Y); + webui_run(window, script); + } + } + else { + + // WebView window + if (win->webView) { + #ifdef _WIN32 + if (win->webView->cpp_handle) { + int x, y, w, h; + _webui_win32_wv2_get_dimensions(win->webView->cpp_handle, &x, &y, &w, &h); + _webui_win32_wv2_set_dimensions(win->webView->cpp_handle, X, Y, w, h); + _webui_win32_wv2_set_position_flag(win->webView->cpp_handle, true); + _webui_webview_update(win); + } + #else + win->webView->x = X; + win->webView->y = Y; + win->webView->position = true; + _webui_webview_update(win); + #endif + } + } + } +} + +void webui_set_center(size_t window) { + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_center(%zu)\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + unsigned int screen_width = 0; + unsigned int screen_height = 0; + + // Get screen dimensions + #ifdef _WIN32 + screen_width = GetSystemMetrics(SM_CXSCREEN); + screen_height = GetSystemMetrics(SM_CYSCREEN); + #elif __APPLE__ + CGRect screenRect = CGDisplayBounds(CGMainDisplayID()); + screen_width = (unsigned int)screenRect.size.width; + screen_height = (unsigned int)screenRect.size.height; + #elif __linux__ + // GTK and Webkit Dynamic Load + if (!libgtk || !libwebkit) { + if (_webui_load_gtk_and_webkit()) { + void* display = gdk_display_get_default(); + if (display) { + void* monitor = gdk_display_get_primary_monitor(display); + if (monitor) { + GdkRectangle geometry; + gdk_monitor_get_geometry(monitor, &geometry); + screen_width = (unsigned int)geometry.width; + screen_height = (unsigned int)geometry.height; + } + } + } + } + #endif + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_center() -> Screen dimensions: width=%u, height=%u\n", screen_width, screen_height); + #endif + + // Default window dimensions + win->width = (win->width > 0 ? win->width : WEBUI_DEF_WIDTH); + win->height = (win->height > 0 ? win->height : WEBUI_DEF_HEIGHT); + + if (screen_width >= 100 && screen_height >= 100) { + if (win->width >= WEBUI_MIN_WIDTH && win->height >= WEBUI_MIN_HEIGHT) { + // Calculate center coordinates + unsigned int center_x = (screen_width - win->width) / 2; + unsigned int center_y = (screen_height - win->height) / 2; + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_center() -> Window dimensions: width=%u, height=%u\n", win->width, win->height); + _webui_log_info("[User] webui_set_center() -> Calculated center positions: x=%u, y=%u\n", center_x, center_y); + #endif + // Set window center position + webui_set_position(window, center_x, center_y); + } + } +} + +void webui_set_profile(size_t window, const char* name, const char* path) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_profile([%s], [%s])\n", name, path); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Some wrappers do not guarantee pointers stay valid, + // so, let's make our copy. + + char* name_cpy = _webui_str_dup(name); + char* path_cpy = _webui_str_dup(path); + + // Free + if (win->profile_name != NULL) + _webui_free_mem((void*)win->profile_name); + if (win->profile_path != NULL) + _webui_free_mem((void*)win->profile_path); + + // Save + win->profile_name = name_cpy; + win->profile_path = path_cpy; + win->custom_profile = true; + + // Default local machine profile + if (name_cpy == NULL && path_cpy == NULL) + win->default_profile = true; + else + win->default_profile = false; + + // Create browser profile folder if not exist + if(path_cpy) { + if (!_webui_folder_exist(path_cpy)) { + _webui_create_folder(path_cpy); + } + } +} + +void webui_set_proxy(size_t window, const char* proxy_server) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_proxy([%s])\n", proxy_server); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Some wrappers do not guarantee pointers stay valid, + // so, let's make our copy. + + char* proxy_server_cpy = NULL; + size_t len = _webui_strlen(proxy_server); + if (len > 0) { + proxy_server_cpy = (char*)_webui_malloc(len); + memcpy((char*)proxy_server_cpy, proxy_server, len); + } + + // Free + if (win->proxy_server != NULL) + _webui_free_mem((void*)win->proxy_server); + + // Save + win->proxy_server = proxy_server_cpy; + + // Set + if (_webui_is_empty(win->proxy_server)) + // Disable the proxy because the server + // address is an empty string + win->proxy_set = false; + else + // Enable proxy + win->proxy_set = true; +} + +void webui_open_url(const char* url) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_open_url([%s])\n", url); + #endif + + // Initialization + _webui_init(); + + _webui_open_url_native(url); +} + +const char* webui_get_url(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_get_url([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return NULL; + _webui_window_t* win = _webui.wins[window]; + + // Check if local server is started + if (_webui_is_empty(win->url)) { + // Start local server + bool backup = _webui.config.show_wait_connection; + _webui.config.show_wait_connection = true; + webui_show_browser(window, "", NoBrowser); + _webui.config.show_wait_connection = backup; + } + + // Get local IP of first NIC + const char *ip = _webui_get_local_ip(); + if (ip == NULL) + ip = "127.0.0.1"; + if (win->public_url != NULL) + _webui_free_mem((void*)win->public_url); + win->public_url = (char*)_webui_malloc(64); // [http][ip][port] + WEBUI_SN_PRINTF_DYN(win->public_url, 64, WEBUI_HTTP_PROTOCOL "%s:%zu", ip, win->server_port); + _webui_free_mem((void*)ip); + + return (const char*) win->public_url; +} + +void webui_set_public(size_t window, bool status) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_public([%zu])\n", window); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + win->is_public = status; +} + +void webui_send_raw_client(webui_event_t* e, const char* function, const void* raw, size_t size) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_send_raw_client(%zu bytes)\n", size); + #endif + + if ((size < 1) || (_webui_strlen(function) < 1) || (raw == NULL)) + return; + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Generate data + size_t data_len = _webui_strlen(function) + 1 + size; + char* buf = (char*)_webui_malloc(data_len); + + // Add Function + size_t p = 0; + for (size_t i = 0; i < _webui_strlen(function); i++) + buf[p++] = function [i]; + + // Add Null + buf[p] = 0x00; + p++; + + // Add Data + char* ptr = (char*)raw; + for (size_t i = 0; i < size; i++) { + buf[p++] = * ptr; + ptr++; + } + + // Packet Protocol Format: + // [...] + // [CMD] + // [Function, Null, RawData] + + // Send the packet to single a client + _webui_send_client(win, _webui.clients[e->connection_id], + 0, WEBUI_CMD_SEND_RAW, (const char*)buf, data_len, false + ); + + _webui_free_mem((void*)buf); +} + +void webui_send_raw(size_t window, const char* function, const void * raw, size_t size) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_send_raw(%zu bytes)\n", size); + #endif + + if ((size < 1) || (_webui_strlen(function) < 1) || (raw == NULL)) + return; + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Generate data + size_t data_len = _webui_strlen(function) + 1 + size; + char* buf = (char*)_webui_malloc(data_len); + + // Add Function + size_t p = 0; + for (size_t i = 0; i < _webui_strlen(function); i++) + buf[p++] = function [i]; + + // Add Null + buf[p] = 0x00; + p++; + + // Add Data + char* ptr = (char*)raw; + for (size_t i = 0; i < size; i++) { + buf[p++] = *ptr; + ptr++; + } + + // Packet Protocol Format: + // [...] + // [CMD] + // [Function, Null, RawData] + + // Send the packet + _webui_send_all(win, 0, WEBUI_CMD_SEND_RAW, (const char*)buf, data_len); + _webui_free_mem((void*)buf); +} + +char* webui_encode(const char* str) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_encode()\n"); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return NULL; + + size_t len = _webui_strlen(str); + if (len < 1) + return NULL; + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_encode() -> Text: [%s]\n", str); + #endif + + size_t buf_len = (((len + 2) / 3) * 4) + 8; + char* buf = (char*)_webui_malloc(buf_len); + + int ret = mg_base64_encode((const unsigned char*)str, len, buf, &buf_len); + + if (ret > (-1)) { + + // Failed + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_encode() -> Failed (%d).\n", ret); + #endif + _webui_free_mem((void*)buf); + return NULL; + } + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_encode() -> Encoded: [%s]\n", buf); + #endif + + // Success + return buf; +} + +char* webui_decode(const char* str) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_decode()\n"); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return NULL; + + size_t len = _webui_strlen(str); + if (len < 1) + return NULL; + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_decode() -> Encoded: [%s]\n", str); + #endif + + size_t buf_len = (((len + 2) / 3) * 4) + 8; + unsigned char* buf = (unsigned char*)_webui_malloc(buf_len); + + int ret = mg_base64_decode(str, len, buf, &buf_len); + + if (ret > (-1)) { + + // Failed + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_decode() -> Failed (%d).\n", ret); + #endif + _webui_free_mem((void*)buf); + return NULL; + } + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_decode() -> Decoded: [%s]\n", buf); + #endif + + // Success + return (char*)buf; +} + +void webui_free(void * ptr) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_free([0x%p])\n", ptr); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return; + + _webui_free_mem(ptr); +} + +void webui_memcpy(void* dest, void* src, size_t count) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_memcpy()\n"); + _webui_log_info("[User] webui_memcpy() -> Copying %zu bytes from [%p] to [%p]\n", count, src, dest); + #endif + + // Initialization + _webui_init(); + + if ((dest != NULL) && (src != NULL) && (count > 0)) { + memcpy(dest, src, count); + } +} + +void * webui_malloc(size_t size) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_malloc(%zu bytes)\n", size); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return NULL; + + return _webui_malloc(size); +} + +void webui_exit(void) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_exit()\n"); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return; + + // Close all windows + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (_webui.wins[i] != NULL) { + if (_webui_mutex_is_connected(_webui.wins[i], WEBUI_MUTEX_GET_STATUS)) { + + if (!_webui.wins[i]->webView) { + + // Web browser + + // Packet Protocol Format: + // [...] + // [CMD] + + // Send the packet + _webui_send_all( + _webui.wins[i], 0, WEBUI_CMD_CLOSE, NULL, 0 + ); + } + else { + + // WebView + + // Stop WebView thread if any + if (_webui.wins[i]->webView) { + #ifdef _WIN32 + if (_webui.wins[i]->webView->cpp_handle) { + _webui_win32_wv2_set_stop(_webui.wins[i]->webView->cpp_handle, true); + _webui_webview_update(_webui.wins[i]); + } + #else + _webui.wins[i]->webView->stop = true; + _webui_webview_update(_webui.wins[i]); + #endif + } + } + } + } + } + + // Stop all threads + _webui_mutex_app_is_exit_now(WEBUI_MUTEX_SET_TRUE); + + // Let's give other threads more time to + // safely exit and finish cleaning up. + for (size_t i = 0; i < 4; i++) { + _webui_sleep(500); + if (_webui.servers < 1) { // TODO: Add mutex here + // No more server threads are running + break; + } + } + + // Fire the mutex condition for wait() + _webui_mutex_is_more_servers_running(WEBUI_MUTEX_SET_FALSE); // For `webui_wait()` in Non-blocking mode + _webui_condition_signal(&_webui.condition_wait); // For `webui_wait()` in Blocking mode + #ifdef __APPLE__ + _webui_macos_wv_stop(); + #endif +} + +static void _webui_wait_clean(bool async) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Loop] _webui_wait_clean(%s) -> Cleaning...\n", async ? "Non-Blocking" : "Blocking"); + #endif + + // Let WebView2, GTK, Cocoa loops + // know that main thread is exiting. + _webui.is_main_run = false; + + // Since we are stopping the main thread rendering loop + // so let's make app can use any browser/webview again + _webui.is_browser_mode = false; + + // Let find the best web browser step + // take any browser again + _webui.current_browser = 0; + + // Clean + #ifdef _WIN32 + if (!_webui.is_webview_mode) { + // Windows Web browser Clean + + // ... + } + else { + // Windows WebView Clean + + PostQuitMessage(0); + if (_webui.webview_cacheFolder) { + _webui_delete_folder(_webui.webview_cacheFolder); + _webui_free_mem((void*) _webui.webview_cacheFolder); + _webui.webview_cacheFolder = NULL; + } + CoUninitialize(); + } + #elif __linux__ + if (!_webui.is_webview_mode) { + // Linux Web browser Clean + + // ... + } + else { + // Linux WebView Clean + + _webui.is_gtk_main_run = false; + + // Close all GTK windows if any + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (_webui.wins[i] != NULL) { + if (_webui.wins[i]->webView) { + _webui.wins[i]->webView->stop = true; + _webui_webview_update(_webui.wins[i]); + } + } + // Process drawing events if any + while (gtk_events_pending()) { + gtk_main_iteration_do(0); + } + } + // Process drawing events if any + while (gtk_events_pending()) { + gtk_main_iteration_do(0); + } + _webui_wv_free(); + } + #else + if (!_webui.is_webview_mode) { + // macOS Web browser Clean + + // ... + } + else { + // macOS WebView Clean + + _webui.is_wkwebview_main_run = false; + } + #endif + + // Let threreads finish cleaning up + _webui_sleep(850); + + #ifdef WEBUI_LOG + _webui_log_debug("[Loop] _webui_wait_clean() -> Main loop exit successfully\n"); + #endif +} + +static bool _webui_wait(bool async) { + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait(%s)\n", async ? "Non-Blocking" : "Blocking"); + #endif + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + _webui_wait_clean(async); + return false; // App is exiting + } + + if (_webui.startup_timeout > 0) { + + // Check if there is atleast one window (UI) + // is running. Otherwise the mutex condition + // signal will never be fired. + if (!_webui.ui) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Loop] _webui_wait() -> No window is found. Stop\n"); + #endif + _webui_wait_clean(async); + return false; // No window is found, Stop. + } + + // The mutex conditional signal will + // be fired when no more UI (servers) + // are running. + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> Waiting (Timeout in %zu seconds)\n", + _webui.startup_timeout); + #endif + + } else { + + // The mutex conditional signal will + // be fired when `webui_exit()` is + // called by the user. + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> Infinite waiting\n"); + #endif + } + + // Let WebView2, GTK, Cocoa loops + // know that main thread is running. + if(!_webui.is_main_run) _webui.is_main_run = true; + + // Main loop + #ifdef _WIN32 + if (!_webui.is_webview_mode) { + // Windows Web browser main loop + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> Windows web browser loop\n"); + #endif + + if (!_webui.is_browser_mode) + _webui.is_browser_mode = true; + + if (!async) { + + // Blocking mode (Windows Web browser) + _webui_condition_wait(&_webui.condition_wait, &_webui.mutex_wait); + + } else { + + // Non-Blocking mode (Windows Web browser) + if (_webui_mutex_is_more_servers_running(WEBUI_MUTEX_GET_STATUS)) { + return true; + } + } + } + else { + // Windows WebView main loop + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> Windows WebView loop\n"); + #endif + + if (!async) { + + // Blocking mode (Windows WebView) + _webui_condition_wait(&_webui.condition_wait, &_webui.mutex_wait); + + } else { + + // Non-Blocking mode (Windows WebView) + if (_webui_mutex_is_more_servers_running(WEBUI_MUTEX_GET_STATUS)) { + return true; + } + } + } + #elif __linux__ + if (!_webui.is_webview_mode) { + // Linux Web browser main loop + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> Linux web browser loop\n"); + #endif + + if (!_webui.is_browser_mode) + _webui.is_browser_mode = true; + + if (!async) { + + // Blocking mode (Linux Web browser) + _webui_condition_wait(&_webui.condition_wait, &_webui.mutex_wait); + + } else { + + // Non-Blocking mode (Linux Web browser) + if (_webui_mutex_is_more_servers_running(WEBUI_MUTEX_GET_STATUS)) { + return true; + } + } + } + else { + // Linux WebView main loop + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> Linux WebView loop\n"); + #endif + + if (!_webui.is_gtk_main_run) + _webui.is_gtk_main_run = true; + + if (!async) { + + // Blocking mode (Linux WebView) + gtk_main(); + + } else { + + // Non-Blocking mode (Linux WebView) + while (gtk_events_pending()) { + gtk_main_iteration_do(0); + } + if (_webui_mutex_is_more_servers_running(WEBUI_MUTEX_GET_STATUS)) { + return true; + } + } + } + #else + if (!_webui.is_webview_mode) { + // macOS Web browser main loop + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> macOS web browser loop\n"); + #endif + + if (!_webui.is_browser_mode) + _webui.is_browser_mode = true; + + if (!async) { + + // Blocking mode (macOS Web browser) + _webui_condition_wait(&_webui.condition_wait, &_webui.mutex_wait); + + } else { + + // Non-Blocking mode (macOS Web browser) + if (_webui_mutex_is_more_servers_running(WEBUI_MUTEX_GET_STATUS)) { + return true; + } + } + } + else { + // macOS WebView main loop + + #ifdef WEBUI_LOG + if (!async) _webui_log_debug("[Loop] _webui_wait() -> macOS WebView loop\n"); + #endif + + if (!_webui.is_wkwebview_main_run) + _webui.is_wkwebview_main_run = true; + + if (!async) { + + // Blocking mode (macOS WebView) + _webui_macos_wv_start(); + + } else { + + // Non-Blocking mode (macOS WebView) + while (_webui_macos_wv_iteration_do()) { + // Process drawing events... + } + if (_webui_mutex_is_more_servers_running(WEBUI_MUTEX_GET_STATUS)) { + return true; + } + } + } + #endif + + // Clean up + _webui_wait_clean(async); + + return false; +} + +void webui_wait(void) { + + // Initialization + _webui_init(); + + // Wait (Blocking mode) + _webui_mutex_lock(&_webui.mutex_wait); + (void) _webui_wait(false); + _webui_mutex_unlock(&_webui.mutex_wait); +} + +bool webui_wait_async(void) { + + // Initialization + if (!_webui.initialized) _webui_init(); + + // Wait (Non-Blocking mode) + _webui_mutex_lock(&_webui.mutex_wait); + bool status = _webui_wait(true); + _webui_mutex_unlock(&_webui.mutex_wait); + return status; +} + +void webui_set_timeout(size_t second) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_timeout([%zu])\n", second); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return; + + if (second > WEBUI_MAX_TIMEOUT) + second = WEBUI_MAX_TIMEOUT; + + _webui.startup_timeout = second; +} + +void webui_set_runtime(size_t window, size_t runtime) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_runtime([%zu], [%zu])\n", window, runtime); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + if (runtime != Deno && runtime != NodeJS && runtime != Bun) + win->runtime = None; + else + win->runtime = runtime; +} + +void webui_set_browser_folder(const char* path) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_browser_folder([%s])\n", path); + #endif + + // Initialization + _webui_init(); + + // Free existing custom path + if (_webui.custom_browser_folder_path) + _webui_free_mem((void*)_webui.custom_browser_folder_path); + _webui.custom_browser_folder_path = NULL; + + // Set new custom path + if (!_webui_is_empty(path)) { + _webui.custom_browser_folder_path = _webui_str_dup(path); + } +} + +bool webui_set_root_folder(size_t window, const char* path) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_root_folder([%zu], [%s])\n", window, path); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // Fix path + char full_path[WEBUI_MAX_PATH] = {0}; + #if defined(_WIN32) + // ... + #else + if ((path[0] != '.') && (path[0] != '/')) { + WEBUI_SN_PRINTF_STATIC(full_path, sizeof(full_path), "./%s", path); + path = full_path; + } + #endif + + if (_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS) || + _webui_is_empty(path) || + (_webui_strlen(path) > WEBUI_MAX_PATH) || + !_webui_folder_exist(path)) { + + WEBUI_SN_PRINTF_DYN(win->server_root_path, WEBUI_MAX_PATH, "%s", WEBUI_DEFAULT_PATH); + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_root_folder() -> failed\n"); + #endif + return false; + } + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_root_folder() -> Success\n"); + #endif + WEBUI_SN_PRINTF_DYN(win->server_root_path, WEBUI_MAX_PATH, "%s", path); + return true; +} + +bool webui_set_default_root_folder(const char* path) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_default_root_folder([%s])\n", path); + #endif + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return false; + + if (_webui_is_empty(path) || (_webui_strlen(path) > WEBUI_MAX_PATH) || !_webui_folder_exist((char*)path)) { + + _webui.default_server_root_path[0] = '\0'; + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_default_root_folder() -> failed\n"); + #endif + return false; + } + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_set_default_root_folder() -> Success\n"); + #endif + WEBUI_SN_PRINTF_DYN(_webui.default_server_root_path, WEBUI_MAX_PATH, "%s", path); + + // Update all windows. This will works only + // for non-running windows. + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (_webui.wins[i] != NULL) { + WEBUI_SN_PRINTF_DYN(_webui.wins[i]->server_root_path, WEBUI_MAX_PATH, + "%s", _webui.default_server_root_path); + } + } + + return true; +} + +// -- Interface's Functions ---------------- +static void _webui_interface_bind_handler_all(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler_all()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Check for all events-bind functions + if (win->has_all_events) { + size_t events_cb_index = 0; + bool exist = _webui_get_cb_index(win, "", &events_cb_index); + if (exist && win->cb_interface[events_cb_index] != NULL) { + // Call user all-events cb + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_interface_bind_handler_all() -> User all-events callback @ 0x%p\n", + win->cb_interface[events_cb_index] + ); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler_all() -> User all-events e->event_type [%zu]\n", e->event_type); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler_all() -> User all-events e->element [%s]\n", e->element); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler_all() -> User all-events e->event_number %zu\n", e->event_number); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler_all() -> User all-events e->bind_id %zu\n", e->bind_id); + #endif + // Call all-events cb + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler_all() -> Calling user all-events callback at address 0x%p\n[Call]\n", win->cb_interface[events_cb_index]); + #endif + win->cb_interface[events_cb_index](e->window, e->event_type, e->element, e->event_number, e->bind_id); + } + } +} + +static void _webui_interface_bind_handler(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[e->window] == NULL) + return; + _webui_window_t* win = _webui.wins[e->window]; + + // Check for the regular bind functions + if (!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) && !_webui_is_empty(e->element)) { + size_t cb_index = 0; + bool exist = _webui_get_cb_index(win, e->element, &cb_index); + if (exist && win->cb_interface[cb_index] != NULL) { + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_interface_bind_handler() -> User callback @ 0x%p\n", + win->cb_interface[cb_index] + ); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler() -> e->event_type [%zu]\n", e->event_type); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler() -> e->element [%s]\n", e->element); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler() -> e->event_number %zu\n", e->event_number); + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler() -> e->bind_id %zu\n", e->bind_id); + #endif + // Call cb + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler() -> Calling user callback at address 0x%p\n[Call]\n", win->cb_interface[cb_index]); + #endif + win->cb_interface[cb_index](e->window, e->event_type, e->element, e->event_number, e->bind_id); + } + } + + // Get event inf + webui_event_inf_t* event_inf = win->events[e->event_number]; + if (event_inf != NULL) { + + // Async response wait + if (_webui.config.asynchronous_response) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_interface_bind_handler() -> Waiting for asynchronous response...\n"); + #endif + bool done = false; + while (!done) { + _webui_sleep(10); + _webui_mutex_lock(&_webui.mutex_async_response); + if (event_inf->done) done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + break; // App is exiting, Stop waiting. + } + } + } + + #ifdef WEBUI_LOG + // Print cb response + _webui_log_debug( + "[Core]\t\t_webui_interface_bind_handler() -> user-callback response [%s]\n", + event_inf->response + ); + #endif + } +} + +const char* webui_interface_get_string_at(size_t window, size_t event_number, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_get_string_at([%zu], [%zu], [%zu])\n", window, event_number, index); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return NULL; + _webui_window_t* win = _webui.wins[window]; + + // New Event (Wrapper) + webui_event_t e; + e.window = window; + e.event_number = event_number; + + return webui_get_string_at(&e, index); +} + +long long int webui_interface_get_int_at(size_t window, size_t event_number, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_get_int_at([%zu], [%zu], [%zu])\n", window, event_number, index); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + // New Event (Wrapper) + webui_event_t e; + e.window = window; + e.event_number = event_number; + + return webui_get_int_at(&e, index); +} + +double webui_interface_get_float_at(size_t window, size_t event_number, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_get_float_at([%zu], [%zu], [%zu])\n", window, event_number, index); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return ((double)(0.0)); + _webui_window_t* win = _webui.wins[window]; + + // New Event (Wrapper) + webui_event_t e; + e.window = window; + e.event_number = event_number; + + return webui_get_float_at(&e, index); +} + +bool webui_interface_get_bool_at(size_t window, size_t event_number, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_get_bool_at([%zu], [%zu], [%zu])\n", window, event_number, index); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // New Event (Wrapper) + webui_event_t e; + e.window = window; + e.event_number = event_number; + + return webui_get_bool_at(&e, index); +} + +size_t webui_interface_get_size_at(size_t window, size_t event_number, size_t index) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_get_size_at([%zu], [%zu], [%zu])\n", window, event_number, index); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + // New Event (Wrapper) + webui_event_t e; + e.window = window; + e.event_number = event_number; + + return webui_get_size_at(&e, index); +} + +size_t webui_interface_bind(size_t window, const char* element, void(*func)(size_t, size_t, char* , size_t, size_t)) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_bind([%zu], [%s], [0x%p])\n", window, element, func); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + // Bind + size_t cb_index = 0; + if (_webui_is_empty(element)) { + cb_index = webui_bind(window, "", _webui_interface_bind_handler_all); + } else { + cb_index = webui_bind(window, element, _webui_interface_bind_handler); + } + win->cb_interface[cb_index] = func; + return cb_index; +} + +void webui_interface_set_response(size_t window, size_t event_number, const char* response) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_set_response()\n"); + _webui_log_info("[User] webui_interface_set_response() -> event_number %zu \n", event_number); + _webui_log_info("[User] webui_interface_set_response() -> Response [%s] \n", response); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[event_number]; + if (event_inf == NULL) + return; + + // Free + if (event_inf->response != NULL) + _webui_free_mem((void*)event_inf->response); + + // Set the response + size_t len = _webui_strlen(response); + event_inf->response = (char*)_webui_malloc(len); + WEBUI_STR_COPY_DYN(event_inf->response, len, response); + + // Async response + if (_webui.config.asynchronous_response) { + _webui_mutex_lock(&_webui.mutex_async_response); + event_inf->done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + } + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_set_response() -> Internal buffer [%s] \n", event_inf->response); + #endif +} + +void webui_interface_set_response_file_handler(size_t window, const void* response, int length) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_set_response_file_handler()\n"); + _webui_log_info("[User] webui_interface_set_response_file_handler() -> window #%zu\n", window); + _webui_log_info("[User] webui_interface_set_response_file_handler() -> Response %d bytes\n", length); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Check if the response is empty + if (length == 0) { + length = _webui_strlen(response); + if (length == 0) { + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_set_response_file_handler() -> Response is empty\n"); + #endif + } + } + + // If `response` is allocated using `webui_malloc()`, it will be + // available during execution and automatically freed by WebUI + // after sending the response. However, if `response` is allocated + // using other methods, or is simply a pointer to a static buffer, + // we may lose the data before sending the response. Therefore, we need + // to copy the data to a new buffer if it was not allocated by `webui_malloc()`. + void* response_copy = NULL; + if (length > 0) { + response_copy = _webui_malloc_if_not_exist(response, length); + if (response_copy != response) { + #ifdef WEBUI_LOG + _webui_log_debug("[User] webui_interface_set_response_file_handler() -> " + "Response copied to a new buffer at %p\n", response_copy); + #endif + memcpy(response_copy, response, length); + } + } + + // Set the response + win->file_handler_async_response = response_copy; + win->file_handler_async_len = length; + + // Async response + if (_webui.config.asynchronous_response) { + _webui_mutex_lock(&_webui.mutex_async_response); + win->file_handler_async_done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + } +} + +bool webui_interface_is_app_running(void) { + + #ifdef WEBUI_LOG + // _webui_log_info("[User] webui_interface_is_app_running()\n"); + #endif + + // Stop if already flagged + static bool app_is_running = true; + if (!app_is_running) + return false; + + // Initialization + _webui_init(); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return false; + + // Get app status + if (_webui.startup_timeout > 0) { + if (_webui.servers < 1) + app_is_running = false; + } + + #ifdef WEBUI_LOG + if (!app_is_running) + _webui_log_info("[User] webui_interface_is_app_running() -> App Stopped\n"); + #endif + + return app_is_running; +} + +size_t webui_interface_get_window_id(size_t window) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_get_window_id()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return 0; + _webui_window_t* win = _webui.wins[window]; + + return win->num; +} + +bool webui_interface_show_client(size_t window, size_t event_number, const char* content) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_show_client()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[event_number]; + if (event_inf == NULL) + return false; + + webui_event_t e; + e.window = window; + e.event_number = event_number; + e.connection_id = event_inf->connection_id; + + return webui_show_client(&e, content); +} + +void webui_interface_close_client(size_t window, size_t event_number) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_close_client()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[event_number]; + if (event_inf == NULL) + return; + + webui_event_t e; + e.window = window; + e.event_number = event_number; + e.connection_id = event_inf->connection_id; + + webui_close_client(&e); +} + +void webui_interface_send_raw_client(size_t window, size_t event_number, const char* function, const void* raw, size_t size) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_send_raw_client()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[event_number]; + if (event_inf == NULL) + return; + + webui_event_t e; + e.window = window; + e.event_number = event_number; + e.connection_id = event_inf->connection_id; + + webui_send_raw_client(&e, function, raw, size); +} + +void webui_interface_navigate_client(size_t window, size_t event_number, const char* url) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_navigate_client()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[event_number]; + if (event_inf == NULL) + return; + + webui_event_t e; + e.window = window; + e.event_number = event_number; + e.connection_id = event_inf->connection_id; + + webui_navigate_client(&e, url); +} + +void webui_interface_run_client(size_t window, size_t event_number, const char* script) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_run_client()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return; + _webui_window_t* win = _webui.wins[window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[event_number]; + if (event_inf == NULL) + return; + + webui_event_t e; + e.window = window; + e.event_number = event_number; + e.connection_id = event_inf->connection_id; + + webui_run_client(&e, script); +} + +bool webui_interface_script_client(size_t window, size_t event_number, const char* script, size_t timeout, char* buffer, size_t buffer_length) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_script_client()\n"); + #endif + + // Initialization + _webui_init(); + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return false; + _webui_window_t* win = _webui.wins[window]; + + // Get event inf + webui_event_inf_t* event_inf = win->events[event_number]; + if (event_inf == NULL) + return false; + + webui_event_t e; + e.window = window; + e.event_number = event_number; + e.connection_id = event_inf->connection_id; + + return webui_script_client(&e, script, timeout, buffer, buffer_length); +} + +void* webui_interface_get_context(size_t window, size_t event_number) { + + #ifdef WEBUI_LOG + _webui_log_info("[User] webui_interface_get_context([%zu], [%zu])\n", window, event_number); + #endif + + // Dereference + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui.wins[window] == NULL) + return NULL; + _webui_window_t* win = _webui.wins[window]; + + // New Event (Wrapper) + webui_event_t e; + e.window = window; + e.event_number = event_number; + + return webui_get_context(&e); +} + +// -- Core's Functions ---------------- +static bool _webui_ptr_exist(const void * ptr) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_ptr_exist()\n"); + #endif + + if (ptr == NULL) + return false; + + for (size_t i = 0; i < _webui.ptr_last_pos; i++) { + if (_webui.ptr_list[i] == ptr) + return true; + } + + return false; +} + +static void _webui_ptr_add(void * ptr, size_t size) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_ptr_add(0x%p)\n", ptr); + #endif + + if (ptr == NULL) + return; + + // Search for first empty slot & save pointer + if (!_webui_ptr_exist(ptr)) { + size_t i = 0; + for (; i < _webui.ptr_last_pos; i++) { + if (_webui.ptr_list[i] == NULL) { + // Pointer found + break; + } + } + if (i == _webui.ptr_last_pos) { + // Pointer not found + i = _webui.ptr_last_pos++; + if (_webui.ptr_last_pos >= (WEBUI_MAX_IDS * 2)) { + _webui.ptr_last_pos = ((WEBUI_MAX_IDS * 2) - 1); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ptr_add(0x%p) -> ERROR: Maximum pointer capacity reached.\n", + ptr); + #endif + } + } + // Add pointer + _webui.ptr_list[i] = ptr; + _webui.ptr_size[i] = size; + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_ptr_add(0x%p) -> Pointer #%zu saved (%zu + 1 bytes)\n", ptr, i, size); + #endif + } +} + +static void _webui_free_mem(void * ptr) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_free_mem(0x%p)\n", ptr); + #endif + + if (ptr == NULL) + return; + + _webui_mutex_lock(&_webui.mutex_mem); + + // Search for pointer & free + for (size_t i = 0; i < _webui.ptr_last_pos; i++) { + if (_webui.ptr_list[i] == ptr) { + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_free_mem(0x%p) -> Pointer #%zu freed (%zu + 1 bytes)\n", + ptr, i, _webui.ptr_size[i]); + #endif + free(ptr); + _webui.ptr_size[i] = 0; + _webui.ptr_list[i] = NULL; + } + } + + // Search (backward) for first empty slot + for (int i = _webui.ptr_last_pos; i >= 0;i--) { + if (_webui.ptr_list[i] == NULL) { + _webui.ptr_last_pos = i; + break; + } + } + + _webui_mutex_unlock(&_webui.mutex_mem); +} + +static void _webui_free_all_mem(void) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_free_all_mem()\n"); + #endif + + _webui_mutex_lock(&_webui.mutex_mem); + + // Makes sure we run this once + static bool freed = false; + if (freed) + return; + freed = true; + + // Free all pointers in the list + void * ptr = NULL; + for (size_t i = 0; i < _webui.ptr_last_pos; i++) { + ptr = _webui.ptr_list[i]; + if (ptr != NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_free_all_mem() -> Pointer #%zu freed (%zu + 1 bytes) 0x%p\n", + i, _webui.ptr_size[i], ptr); + #endif + free(ptr); + _webui.ptr_size[i] = 0; + _webui.ptr_list[i] = NULL; + } + } + + _webui_mutex_unlock(&_webui.mutex_mem); +} + +static void _webui_panic(char* msg) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_panic() -> %s.\n", msg); + #endif + + _webui_log_error("WebUI Error: %s.\n", msg); + webui_exit(); +} + +static void* _webui_malloc_if_not_exist(const void* ptr, size_t size) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_malloc_if_not_exist(0x%p, [%zu])\n", ptr, size); + #endif + + _webui_mutex_lock(&_webui.mutex_mem); + bool exist = _webui_ptr_exist(ptr); + _webui_mutex_unlock(&_webui.mutex_mem); + + if(exist) + return (void*)ptr; // Pointer already exist, No need to malloc again. + + // Pointer not exist, malloc new memory + return _webui_malloc(size); +} + +static void * _webui_malloc(size_t size) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_malloc([%zu])\n", size); + #endif + + _webui_mutex_lock(&_webui.mutex_mem); + + // Dynamic allocation + null terminator + void* mem = NULL; + mem = malloc(size + 1); + + // Check + if (mem == NULL) { + WEBUI_ASSERT("malloc() failed"); + return NULL; + } + + // Ini memory block + memset(mem, 0, (size + 1)); + + // Add pointer to the list + _webui_ptr_add((void*)mem, size); + + _webui_mutex_unlock(&_webui.mutex_mem); + + return mem; +} + +static _webui_window_t* _webui_dereference_win_ptr(void * ptr) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_dereference_win_ptr()\n"); + #endif + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return NULL; + + _webui_window_t* win = (_webui_window_t* ) ptr; + + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if (_webui.wins[i] == win) + return win; + } + + // This pointer is not a valid + // webui window struct + return NULL; +} + +static void _webui_sleep(long unsigned int ms) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_sleep([%zu])\n", ms); + #endif + + #ifdef _WIN32 + Sleep(ms); + #else + struct timespec req; + req.tv_sec = ms / 1000; // Convert ms to seconds + req.tv_nsec = (ms % 1000) * 1000000L; // Convert remainder to nanoseconds + nanosleep(&req, NULL); + #endif +} + +static long _webui_timer_diff(struct timespec * start, struct timespec* end) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_timer_diff()\n"); + #endif + + return ((long)(end->tv_sec * 1000) + (long)(end->tv_nsec / 1000000)) - + ((long)(start->tv_sec * 1000) + (long)(start->tv_nsec / 1000000)); +} + +static void _webui_timer_clock_gettime(struct timespec * spec) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_timer_clock_gettime()\n"); + #endif + + #ifdef _WIN32 + __int64 wintime; + GetSystemTimeAsFileTime((FILETIME * )&wintime); + wintime -= ((__int64) 116444736000000000); + spec->tv_sec = wintime / ((__int64) 10000000); + spec->tv_nsec = wintime % ((__int64) 10000000) * 100; + #else + clock_gettime(CLOCK_MONOTONIC, spec); + #endif +} + +static void _webui_timer_start(_webui_timer_t* t) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_timer_start()\n"); + #endif + + _webui_timer_clock_gettime(&t->start); +} + +static bool _webui_timer_is_end(_webui_timer_t* t, size_t ms) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_timer_is_end()\n"); + #endif + + _webui_timer_clock_gettime(&t->now); + + size_t def = (size_t) _webui_timer_diff(&t->start, &t->now); + if (def > ms) + return true; + return false; +} + +static bool _webui_is_empty(const char* s) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_is_empty()\n"); + #endif + + if ((s != NULL) && (s[0] != '\0')) + return false; + return true; +} + +static size_t _webui_strlen(const char* s) { + + #ifdef WEBUI_LOG_VERBOSE + // _webui_log_debug("[Core]\t\t_webui_strlen()\n"); + #endif + + if (_webui_is_empty(s)) + return 0; + + size_t length = 0; + + while((s[length] != '\0') && (length < WEBUI_MAX_BUF)) { + length++; + } + + return length; +} + +static bool _webui_is_mg_client_valid(_webui_window_t* win, const struct mg_connection* client) { + // The `mg_get_xxx()` functions may crash if the client is not valid. + // So we need to check if the server is still running. Otherwise, + // we consider the client is freed and invalid. + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return false; // App is exiting, Client is not valid + if (!client) { + return false; // Client is not valid + } + if (win) { + if (!_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) + return false; // Client is not valid + } + return true; +} + +static bool _webui_file_exist_mg(_webui_window_t* win, struct mg_connection* client) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_file_exist_mg()\n"); + #endif + + if(!_webui_is_mg_client_valid(win, client)) + return false; // Client is not valid + + char* file; + char* full_path; + + const struct mg_request_info * ri = mg_get_request_info(client); + const char* url = ri->local_uri; + const char* handler_url = url; + char user_index_url[WEBUI_MAX_PATH]; + // Respect user-defined index file when using an external file handler. + if (strcmp(url, "/") == 0 && !_webui_is_empty(win->user_index_file)) { + if (win->user_index_file[0] == '/') { + handler_url = win->user_index_file; + } else { + WEBUI_SN_PRINTF_STATIC(user_index_url, WEBUI_MAX_PATH, "/%s", win->user_index_file); + handler_url = user_index_url; + } + } + size_t url_len = _webui_strlen(url); + + // Get file name + file = (char*)_webui_malloc(url_len); + const char* p = url; + p++; // Skip "/" + WEBUI_SN_PRINTF_DYN(file, url_len, "%.*s", (int)(url_len - 1), p); + + // Get full path + // [current folder][/][file] + size_t bf_len = (_webui_strlen(win->server_root_path) + 1 + _webui_strlen(file)); + full_path = (char*)_webui_malloc(bf_len); + WEBUI_SN_PRINTF_DYN(full_path, bf_len, "%s%s%s", win->server_root_path, os_sep, file); + + bool exist = _webui_file_exist(full_path); + + _webui_free_mem((void*)file); + _webui_free_mem((void*)full_path); + + return exist; +} + +static bool _webui_is_valid_url(const char* url) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_is_valid_url([%.8s...])\n", url); + #endif + + if ((_webui_is_empty(url)) || (url[0] != 'h')) + return false; + if (strncmp(url, "http://", 7) == 0 || strncmp(url, "https://", 8) == 0) + return true; + return false; +} + +static bool _webui_open_url_native(const char* url) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_open_url_native([%s])\n", url); + #endif + + #if defined(_WIN32) + HINSTANCE result = ShellExecuteA(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL); + return ((INT_PTR) result > 32); + #elif defined(__APPLE__) + char command[1024]; + WEBUI_SN_PRINTF_STATIC(command, sizeof(command), "open \"%s\"", url); + return (system(command) == 0); + #else + // Assuming Linux + char command[1024]; + WEBUI_SN_PRINTF_STATIC(command, sizeof(command), "xdg-open \"%s\"", url); + return (system(command) == 0); + #endif +} + +static bool _webui_file_exist(const char* path) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_file_exist([%s])\n", path); + #endif + + if (_webui_is_empty(path)) + return false; + + // Parse home environments in the path + #ifdef _WIN32 + // Windows + char full_path[WEBUI_MAX_PATH]; + ExpandEnvironmentStringsA(path, full_path, sizeof(full_path)); + #else + // Linux / macOS + char full_path[WEBUI_MAX_PATH]; + if (path[0] == '~') { + const char* home = getenv("HOME"); + if (home) { + WEBUI_SN_PRINTF_STATIC(full_path, sizeof(full_path), "%s/%s", home, &path[1]); + } else { + // If for some reason HOME isn't set + // fall back to the original path. + strncpy(full_path, path, sizeof(full_path)); + } + } else { + strncpy(full_path, path, sizeof(full_path)); + } + #endif + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_file_exist() -> Parsed to [%s]\n", full_path); + #endif + + #if defined(_WIN32) + // Convert UTF-8 to wide string on Windows + wchar_t* wfilePath; + if (!_webui_str_to_wide(full_path, &wfilePath)) + return false; + DWORD dwAttrib = GetFileAttributesW(wfilePath); + _webui_free_mem((void*)wfilePath); + return (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib&FILE_ATTRIBUTE_DIRECTORY)); + #else + // Linux / macOS + return (WEBUI_FILE_EXIST(full_path, 0) == 0); + #endif +} + +static const char* _webui_get_extension(const char* f) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_extension()\n"); + #endif + + if (f == NULL) + return ""; + + const char* ext = strrchr(f, '.'); + + if (ext == NULL || !ext || ext == f) + return ""; + return ext + 1; +} + +static uint16_t _webui_get_run_id(void) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_run_id()\n"); + #endif + + _webui_mutex_lock(&_webui.mutex_js_run_id); + if (_webui.run_last_id >= WEBUI_MAX_IDS) + _webui.run_last_id = 0; + uint16_t id = _webui.run_last_id++; + _webui_mutex_unlock(&_webui.mutex_js_run_id); + return id; +} + +static uint16_t _webui_get_ws_process_number(void) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_ws_process_number()\n"); + #endif + + _webui_mutex_lock(&_webui.mutex_ws_process_number); + if (_webui.ws_process_number >= WEBUI_MAX_IDS) + _webui.ws_process_number = 0; + uint16_t id = _webui.ws_process_number++; + _webui_mutex_unlock(&_webui.mutex_ws_process_number); + return id; +} + +static bool _webui_socket_test_listen_mg(size_t port_num) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_socket_test_listen_mg([%zu])\n", port_num); + #endif + + // HTTP Port Test + char* test_port = (char*)_webui_malloc(64); + WEBUI_SN_PRINTF_DYN(test_port, 64, "127.0.0.1:%zu", port_num); + + // Start HTTP Server + const char* http_options[] = { + "listening_ports", + test_port, + NULL, + NULL + }; + struct mg_callbacks http_callbacks; + struct mg_context * http_ctx; + memset(&http_callbacks, 0, sizeof(http_callbacks)); + http_ctx = mg_start(&http_callbacks, 0, http_options); + + if (http_ctx == NULL) { + + // Cannot listen + mg_stop(http_ctx); + return false; + } + + // Listening success + mg_stop(http_ctx); + + return true; +} + +static bool _webui_port_is_used(size_t port_num) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_port_is_used([%zu])\n", port_num); + #endif + + #ifdef _WIN32 + // Listener test + if (!_webui_socket_test_listen_win32(port_num)) + return true; // Port is already used + return false; // Port is not in use + #else + // Listener test MG + if (!_webui_socket_test_listen_mg(port_num)) + return true; // Port is already used + return false; // Port is not in use + #endif +} + +static char* _webui_get_file_name_from_url(const char* url) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_file_name_from_url([%s])\n", url); + #endif + + if (_webui_is_empty(url)) + return NULL; + + // Find the position of "://" + const char* pos = strstr(url, "://"); + if (pos == NULL) { + pos = url; + } else { + // Move the position after "://" + pos += 3; + } + + // Find the position of the first '/' + pos = strchr(pos, '/'); + if (pos == NULL) { + // Invalid URL + return NULL; + } else { + // Move the position after "/" + pos++; + } + + // Copy the path to a new string + char* file = _webui_str_dup(pos); + + // Find the position of the first '?' + char* question_mark = strchr(file, '?'); + if (question_mark != NULL) { + // Replace '?' with NULL + * question_mark = '\0'; + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_file_name_from_url() -> File name: [%s]\n", file); + #endif + + return file; +} + +static char* _webui_get_full_path(_webui_window_t* win, const char* file) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_full_path([%s])\n", file); + #endif + + if (!file) + return NULL; + + if (file[0] == '/') + file++; + + // Get full path + // [current folder][/][file] + size_t bf_len = (_webui_strlen(win->server_root_path) + 1 + _webui_strlen(file)); + char* full_path = (char*)_webui_malloc(bf_len); + WEBUI_SN_PRINTF_DYN(full_path, bf_len, "%s%s%s", win->server_root_path, os_sep, file); + + #ifdef _WIN32 + // Replace `/` by `\` + for (int i = 0; full_path[i] != '\0'; i++) { + if (full_path[i] == '/') { + full_path[i] = *os_sep; + } + } + #endif + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_get_full_path() -> Full path: [%s]\n", full_path); + #endif + + return full_path; +} + +static size_t _webui_new_event_inf(_webui_window_t* win, webui_event_inf_t** event_inf) { + (*event_inf) = (webui_event_inf_t*)_webui_malloc(sizeof(webui_event_inf_t)); + + size_t event_num = win->events_count; + + // Lock memory and search for next empty event entry + _webui_mutex_lock(&_webui.mutex_mem); + + do { + event_num++; + if (win->events_count >= WEBUI_MAX_IDS) + event_num = 0; + } while (win->events[event_num] != NULL); + + _webui_mutex_unlock(&_webui.mutex_mem); + + win->events_count = event_num; + win->events[event_num] = (*event_inf); + + return event_num; +} + +static void _webui_free_event_inf(_webui_window_t* win, size_t event_num) { + webui_event_inf_t* event_inf = win->events[event_num]; + for (size_t i = 0; i < (WEBUI_MAX_ARG + 1); i++) { + if (event_inf->event_data[i] != NULL) + webui_free((void*)event_inf->event_data[i]); + } + if (event_inf->response != NULL) + webui_free((void*)event_inf->response); + webui_free((void*)event_inf); + win->events[event_num] = NULL; +} + +static const void* _webui_call_external_file_handler_cb(_webui_window_t* win, const char* path, size_t* length) { + + // Note: + // It's safe to check `win->file_handler_async_xxx` without locking mutex here + // because `_webui_http_handler()` already locks the mutex. + + // Async response init + if (_webui.config.asynchronous_response) { + win->file_handler_async_response = NULL; + win->file_handler_async_len = 0; + win->file_handler_async_done = false; + } + + // Call user callback + const void* callback_resp = NULL; + if (win->files_handler_window != NULL) { + callback_resp = win->files_handler_window(win->num, path, (int*)length); + } else if (win->files_handler != NULL) { + callback_resp = win->files_handler(path, (int*)length); + } else { + // No callback + return NULL; + } + + // Async response wait + if (_webui.config.asynchronous_response) { + + // Since `asynchronous_response` is enabled, we ignore the direct callback response + // and wait for the async response instead. To avoid any ambiguous situation, we + // reset the `callback` response to rely solely on the coming async response. + callback_resp = NULL; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_call_external_file_handler_cb() -> " + "Ignoring the callback response, waiting for async response...\n"); + #endif + + _webui_timer_t timer; + _webui_timer_start(&timer); + + bool done = false; + while (!done) { + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + break; // App is exiting, Stop waiting. + } + + _webui_sleep(10); + _webui_mutex_lock(&_webui.mutex_async_response); + if (win->file_handler_async_done) { + done = true; // Async response received, Stop waiting. + callback_resp = win->file_handler_async_response; + *length = win->file_handler_async_len; + } + _webui_mutex_unlock(&_webui.mutex_async_response); + + if (_webui_timer_is_end(&timer, (_webui.startup_timeout * 1000))) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_call_external_file_handler_cb() -> " + "Asynchronous response timeout.\n"); + #endif + break; + } + } + } + + return callback_resp; +} + +static int _webui_external_file_handler(_webui_window_t* win, struct mg_connection* client, size_t client_id) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_external_file_handler()\n"); + #endif + + if(!_webui_is_mg_client_valid(win, client)) + return 500; // Client is not valid + + int http_status_code = 0; + const struct mg_request_info * ri = mg_get_request_info(client); + const char* url = ri->local_uri; + const char* handler_url = url; + char user_index_url[WEBUI_MAX_PATH]; + // Respect user-defined index file when using an external file handler. + if (strcmp(url, "/") == 0 && !_webui_is_empty(win->user_index_file)) { + if (win->user_index_file[0] == '/') { + handler_url = win->user_index_file; + } else { + WEBUI_SN_PRINTF_STATIC(user_index_url, WEBUI_MAX_PATH, "/%s", win->user_index_file); + handler_url = user_index_url; + } + } + + if (win->files_handler != NULL || win->files_handler_window != NULL) { + // Get file content from the external files handler + size_t length = 0; + + // This is a breaking changes, should be + // added in the next major WebUI version. + // + // New Event (HTTP) + // webui_event_t e; + // e.window = win->num; + // e.event_type = WEBUI_EVENT_HTTP_GET; + // e.element = ""; + // e.event_number = 0; + // e.bind_id = 0; + // e.connection_id = 0; + // e.client_id = client_id; + // e.cookies = ""; + + // Files handler callback + #ifdef WEBUI_LOG + void* pt = win->files_handler; + if(win->files_handler_window) { + pt = win->files_handler_window; + } + _webui_log_debug("[Core]\t\t_webui_external_file_handler() -> Path [%s]\n", handler_url); + _webui_log_debug("[Core]\t\t_webui_external_file_handler() -> Calling custom files handler callback at address 0x%p\n", pt); + _webui_log_debug("[Call]\n"); + #endif + + // Call user callback for the requested path + const void* callback_resp = _webui_call_external_file_handler_cb(win, handler_url, &length); + + // Content length + if (length == 0) { + length = _webui_strlen(callback_resp); + if (length == 0) { + callback_resp = NULL; // No content length, Treat as not found + } + } + + if (callback_resp != NULL) { + // Keep canonical behavior consistent with local-folder mode: + // if we resolved a different target path (e.g. "/" -> "/custom.html"), + // redirect to that path instead of serving it directly. + if (strcmp(url, handler_url) != 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_external_file_handler() -> 302 Redirecting to [%s]\n", handler_url); + #endif + mg_send_http_redirect(client, handler_url, 302); + _webui_free_mem((void*)callback_resp); + http_status_code = 302; + return http_status_code; + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_external_file_handler() -> Custom files handler found (%zu bytes)\n", + length + ); + #endif + + #ifdef WEBUI_LOG + _webui_log_debug("---[ External File Handler ]--------\n"); + _webui_print_ascii((const char*)callback_resp, length); + _webui_log_debug("\n------------------------------------\n"); + #endif + + // Send user data (Header + Body) + mg_write(client, callback_resp, length); + + // Safely free resources if end-user allocated + // using `webui_malloc()`. Otherwise just do nothing. + _webui_free_mem((void*)callback_resp); + + http_status_code = 200; + } + else { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_external_file_handler() -> Custom files handler failed\n"); + #endif + + // Virtual filesystems can represent directories without physical folders. + // If direct lookup fails, probe for index files and redirect. + size_t url_len = _webui_strlen(url); + bool maybe_folder = (url_len > 0 && url[0] == '/'); + + if (maybe_folder) { + const char* index_files[5]; + size_t index_files_len = 0; + + char user_index_name[WEBUI_MAX_PATH] = {0}; + if (!_webui_is_empty(win->user_index_file)) { + const char* user_index = win->user_index_file; + const char* p = strrchr(user_index, '/'); + const char* filename = (p == NULL ? user_index : (p + 1)); + if (!_webui_is_empty(filename)) { + WEBUI_SN_PRINTF_STATIC(user_index_name, WEBUI_MAX_PATH, "%s", filename); + index_files[index_files_len++] = user_index_name; + } + } + + if (win->allow_index_fallback) { + index_files[index_files_len++] = "index.html"; + index_files[index_files_len++] = "index.htm"; + index_files[index_files_len++] = "index.ts"; + index_files[index_files_len++] = "index.js"; + } + + char base_url[WEBUI_MAX_PATH]; + if (strcmp(url, "/") == 0) { + WEBUI_SN_PRINTF_STATIC(base_url, WEBUI_MAX_PATH, "/"); + } else if (url[url_len - 1] == '/') { + WEBUI_SN_PRINTF_STATIC(base_url, WEBUI_MAX_PATH, "%s", url); + } else { + WEBUI_SN_PRINTF_STATIC(base_url, WEBUI_MAX_PATH, "%s/", url); + } + + for (size_t i = 0; i < index_files_len; i++) { + char index_url[WEBUI_MAX_PATH]; + WEBUI_SN_PRINTF_STATIC(index_url, WEBUI_MAX_PATH, "%s%s", base_url, index_files[i]); + + size_t index_len = 0; + const void* index_resp = _webui_call_external_file_handler_cb(win, index_url, &index_len); + if (index_resp != NULL) { + _webui_free_mem((void*)index_resp); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_external_file_handler() -> 302 Redirecting to [%s]\n", index_url); + #endif + mg_send_http_redirect(client, index_url, 302); + http_status_code = 302; + break; + } + } + } + } + + // If `data == NULL` thats mean the external handler + // did not find the requested file. So WebUI will try + // looking for the file locally. + } + + return http_status_code; +} + +static int _webui_serve_file(_webui_window_t* win, struct mg_connection* client, size_t client_id) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_serve_file()\n"); + #endif + + // Serve a normal text based file + + if(!_webui_is_mg_client_valid(win, client)) + return 500; // Client is not valid + + int http_status_code = 0; + const struct mg_request_info * ri = mg_get_request_info(client); + const char* url = ri->local_uri; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_serve_file() -> Looking for file locally\n"); + #endif + + // Get full path + char* file = _webui_get_file_name_from_url(url); + char* full_path = _webui_get_full_path(win, file); + + if (_webui_file_exist(full_path)) { + + // 200 - File exist + _webui_http_send_file(win, client, mg_get_builtin_mime_type(url), full_path, false); + http_status_code = 200; + } + else { + + // 404 - File not exist + _webui_http_send_error(client, webui_html_res_not_available, 404); + http_status_code = 404; + } + + _webui_free_mem((void*)full_path); + _webui_free_mem((void*)file); + + return http_status_code; +} + +static bool _webui_bun_exist(_webui_window_t* win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_bun_exist()\n"); + #endif + + static bool found = false; + + if (found) + return true; + + if (_webui_cmd_sync(win, "bun -v", false) == 0) { + + found = true; + return true; + } else + return false; +} + +static bool _webui_deno_exist(_webui_window_t* win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_deno_exist()\n"); + #endif + + static bool found = false; + + if (found) + return true; + + if (_webui_cmd_sync(win, "deno --version", false) == 0) { + + found = true; + return true; + } else + return false; +} + +static bool _webui_nodejs_exist(_webui_window_t* win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_nodejs_exist()\n"); + #endif + + static bool found = false; + + if (found) + return true; + + if (_webui_cmd_sync(win, "node -v", false) == 0) { + + found = true; + return true; + } else + return false; +} + +static const char* _webui_interpret_command(const char* cmd) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_interpret_command([%s])\n", cmd); + #endif + + // Run the command with redirection of errors to stdout + // and return the output. + + // Output buffer + char* out = NULL; + + #ifdef _WIN32 + // Redirect stderr to stdout + char cmd_with_redirection[512] = {0}; + WEBUI_SN_PRINTF_STATIC(cmd_with_redirection, sizeof(cmd_with_redirection), "cmd.exe /c %s 2>&1", cmd); + _webui_system_win32_out(cmd_with_redirection, &out, false); + #else + // Redirect stderr to stdout + char cmd_with_redirection[512] = {0}; + WEBUI_SN_PRINTF_STATIC(cmd_with_redirection, sizeof(cmd_with_redirection), "%s 2>&1", cmd); + + FILE * pipe = WEBUI_POPEN(cmd_with_redirection, "r"); + + if (pipe == NULL) + return NULL; + + // Read STDOUT + out = (char*)_webui_malloc(WEBUI_STDOUT_BUF); + char* line = (char*)_webui_malloc(1024); + while(fgets(line, 1024, pipe) != NULL) + WEBUI_STR_CAT_DYN(out, WEBUI_STDOUT_BUF, line); + WEBUI_PCLOSE(pipe); + + // Clean + _webui_free_mem((void*)line); + #endif + + return (const char*)out; +} + +static void _webui_condition_init(webui_condition_t* cond) { + + #ifdef _WIN32 + InitializeConditionVariable(cond); + #else + pthread_cond_init(cond, NULL); + #endif +} + +static void _webui_condition_wait(webui_condition_t* cond, webui_mutex_t* mutex) { + + #ifdef _WIN32 + SleepConditionVariableCS(cond, mutex, INFINITE); + #else + pthread_cond_wait(cond, mutex); + #endif +} + +static void _webui_condition_signal(webui_condition_t* cond) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_condition_signal()\n"); + #endif + + #ifdef _WIN32 + WakeConditionVariable(cond); + #else + pthread_cond_signal(cond); + #endif +} + +static void _webui_condition_destroy(webui_condition_t* cond) { + + #ifdef _WIN32 + // No need + (void)cond; + #else + pthread_cond_destroy(cond); + #endif +} + +static void _webui_mutex_init(webui_mutex_t* mutex) { + + #ifdef _WIN32 + InitializeCriticalSection(mutex); + #else + pthread_mutex_init(mutex, NULL); + #endif +} + +static void _webui_mutex_lock(webui_mutex_t* mutex) { + + #ifdef _WIN32 + EnterCriticalSection(mutex); + #else + pthread_mutex_lock(mutex); + #endif +} + +static void _webui_mutex_unlock(webui_mutex_t* mutex) { + + #ifdef _WIN32 + LeaveCriticalSection(mutex); + #else + pthread_mutex_unlock(mutex); + #endif +} + +static void _webui_mutex_destroy(webui_mutex_t* mutex) { + + #ifdef _WIN32 + DeleteCriticalSection(mutex); + #else + pthread_mutex_destroy(mutex); + #endif +} + +static int _webui_interpret_file(_webui_window_t* win, struct mg_connection* client, char* index, size_t client_id) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_interpret_file()\n"); + #endif + + if(!_webui_is_mg_client_valid(win, client)) + return 500; // Client is not valid + + // Interpret the file using JavaScript/TypeScript runtimes + // and send back the output. otherwise, send the file as a normal text based + + int interpret_http_stat = 200; + char* file = NULL; + char* full_path = NULL; + const char* query = NULL; + + const struct mg_request_info * ri = mg_get_request_info(client); + const char* url = ri->local_uri; + + // Get file full path + if (index != NULL && !_webui_is_empty(index)) { + + // Parse as index file + + file = index; + full_path = index; + } else { + + // Parse as other non-index files + + // Get file name + file = _webui_get_file_name_from_url(url); + + // Get full path + full_path = _webui_get_full_path(win, file); + } + + // Get file extension + const char* extension = _webui_get_extension(file); + + if (strcmp(extension, "ts") == 0 || strcmp(extension, "js") == 0) { + + // TypeScript / JavaScript + + if (!_webui_file_exist(full_path)) { + + // File not exist - 404 + _webui_http_send_error(client, webui_html_res_not_available, 404); + + _webui_free_mem((void*)file); + _webui_free_mem((void*)full_path); + return 404; + } + + // Get query + query = ri->query_string; + + if (win->runtime == Deno) { + + // Use Deno + if (_webui_deno_exist(win)) { + + // Set command + // [disable coloring][deno][file][query] + size_t bf_len = (128 + _webui_strlen(full_path) + _webui_strlen(query)); + char* cmd = (char*)_webui_malloc(bf_len); + #ifdef _WIN32 + WEBUI_SN_PRINTF_DYN( + cmd, bf_len, + "Set NO_COLOR=1&Set DENO_NO_UPDATE_CHECK=1&deno run --quiet --allow-read --allow-write --allow-net --allow-env --allow-ffi \"%s\" \"%s\"", + full_path, query + ); + #else + WEBUI_SN_PRINTF_DYN( + cmd, bf_len, + "NO_COLOR=1;DENO_NO_UPDATE_CHECK=1;deno run --quiet --allow-read --allow-write --allow-net --allow-env --allow-ffi \"%s\" \"%s\"", + full_path, query + ); + #endif + + // Run command + const char* out = _webui_interpret_command(cmd); + + if (out != NULL) { + + // Send Deno output 200 + _webui_http_send(win, client, "text/plain", out, _webui_strlen(out), false); + } + else { + + // Deno interpretation failed. + // Send back an empty `200 OK` + _webui_http_send(win, client, "text/plain", "", 0, false); + } + + _webui_free_mem((void*)cmd); + _webui_free_mem((void*)out); + } + else { + + // Deno not installed + // Send back an empty `200 OK` + _webui_http_send(win, client, "text/plain", "", 0, false); + } + } else if (win->runtime == Bun) { + + // Use Bun + if (_webui_bun_exist(win)) { + + // Set command + // [bun][file][query] + size_t bf_len = (32 + _webui_strlen(full_path) + _webui_strlen(query)); + char* cmd = (char*)_webui_malloc(bf_len); + WEBUI_SN_PRINTF_DYN(cmd, bf_len, "bun \"%s\" \"%s\"", full_path, query); + + // Run command + const char* out = _webui_interpret_command(cmd); + + if (out != NULL) { + + // Send Bun output 200 + _webui_http_send(win, client, "text/plain", out, _webui_strlen(out), false); + } + else { + + // Bun interpretation failed. + // Send back an empty `200 OK` + _webui_http_send(win, client, "text/plain", "", 0, false); + } + + _webui_free_mem((void*)cmd); + _webui_free_mem((void*)out); + } + else { + + // Bun not installed + // Send back an empty `200 OK` + _webui_http_send(win, client, "text/plain", "", 0, false); + } + } else if (win->runtime == NodeJS) { + + // Use Nodejs + + if (_webui_nodejs_exist(win)) { + + // Set command + // [node][file] + size_t bf_len = (32 + _webui_strlen(full_path) + _webui_strlen(query)); + char* cmd = (char*)_webui_malloc(bf_len); + WEBUI_SN_PRINTF_DYN(cmd, bf_len, "node \"%s\" \"%s\"", full_path, query); + + // Run command + const char* out = _webui_interpret_command(cmd); + + if (out != NULL) { + + // Send Node.js output 200 + _webui_http_send(win, client, "text/plain", out, _webui_strlen(out), false); + } + else { + + // Node.js interpretation failed. + // Send back an empty `200 OK` + _webui_http_send(win, client, "text/plain", "", 0, false); + } + + _webui_free_mem((void*)cmd); + _webui_free_mem((void*)out); + } else { + + // Node.js not installed + // Send back an empty `200 OK` + _webui_http_send(win, client, "text/plain", "", 0, false); + } + } else { + + // Unknown runtime + // Serve as a normal text-based file 200 + _webui_http_send_file(win, client, mg_get_builtin_mime_type(url), full_path, false); + } + } else { + + // Unknown file extension + + // Serve as a normal text-based file + interpret_http_stat = _webui_serve_file(win, client, client_id); + } + + _webui_free_mem((void*)file); + _webui_free_mem((void*)full_path); + + return interpret_http_stat; +} + +static const char* _webui_generate_js_bridge(_webui_window_t* win, struct mg_connection* client) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_generate_js_bridge()\n"); + #endif + + _webui_mutex_lock(&_webui.mutex_bridge); + + // Token + uint32_t token = 0x00000000; + if (!_webui.config.multi_client) { + // Single client mode + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + // Non-authorized request to `webui.js` because + // the single client already connected. + _webui_mutex_unlock(&_webui.mutex_bridge); + return NULL; + } + if (win->token == 0) { + win->token = _webui_generate_random_uint32(); + } + token = win->token; + } + else { + // Multi client mode + if (win->token == 0) { + win->token = _webui_generate_random_uint32(); + } + token = win->token; + } + + // Generate the full WebUI Bridge + #ifdef WEBUI_LOG + const char* log = "true"; + #else + const char* log = "false"; + #endif + size_t len = 256 + _webui_strlen((const char*)webui_javascript_bridge); + char* js = (char*)_webui_malloc(len); + #ifdef WEBUI_TLS + const char* TLS = "true"; + #else + const char* TLS = "false"; + #endif + + #ifdef _WIN32 + // WebView2 provides its own window dragging via `webkit-app-region`, + // so our custom JavaScript implementation is not needed. + #define CUSTOM_WEBUI_WINDOW_DRAG "false" + #elif __linux__ + // The Linux WebKit GTK backend does not support this feature, + // so we'll use our custom JavaScript window dragging implementation via `--webui-app-region`. + #define CUSTOM_WEBUI_WINDOW_DRAG "true" + #else + // macOS WKWebView does not support this feature, + // but `wkwebview.m` is already configured to allow full-window dragging, + // so our custom JavaScript implementation is unnecessary. + #define CUSTOM_WEBUI_WINDOW_DRAG "false" + #endif + + int c = WEBUI_SN_PRINTF_DYN( + js, len, + "%s\n document.addEventListener(\"DOMContentLoaded\",function(){ globalThis.webui = " + "new WebuiBridge({ secure: %s, token: %" PRIu32 ", port: %zu, log: %s, customWindowDrag: %s, ", + webui_javascript_bridge, TLS, token, win->server_port, log, CUSTOM_WEBUI_WINDOW_DRAG + ); + // Window Size + if (win->size_set) + c += WEBUI_SN_PRINTF_DYN(js + c, len, "winW: %u, winH: %u, ", win->width, win->height); + // Window Position + if (win->position_set) + c += WEBUI_SN_PRINTF_DYN(js + c, len, "winX: %u, winY: %u, ", win->x, win->y); + // Close + WEBUI_STR_CAT_DYN(js, len, "});});"); + + // Free + _webui_mutex_unlock(&_webui.mutex_bridge); + return js; +} + +static bool _webui_mutex_is_connected(_webui_window_t* win, int update) { + + bool status = false; + _webui_mutex_lock(&_webui.mutex_win_connect); + if (update == WEBUI_MUTEX_SET_TRUE) win->connected = true; + else if (update == WEBUI_MUTEX_SET_FALSE) win->connected = false; + status = ((win->clients_count > 0) && (win->connected)); + _webui_mutex_unlock(&_webui.mutex_win_connect); + return status; +} + +static bool _webui_mutex_is_single_client_token_valid(_webui_window_t* win, int update) { + + bool status = false; + _webui_mutex_lock(&_webui.mutex_token); + if (update == WEBUI_MUTEX_SET_TRUE) win->single_client_token_check = true; + else if (update == WEBUI_MUTEX_SET_FALSE) win->single_client_token_check = false; + status = win->single_client_token_check; + _webui_mutex_unlock(&_webui.mutex_token); + return status; +} + +static bool _webui_mutex_is_multi_client_token_valid(_webui_window_t* win, int update, int index) { + + bool status = false; + _webui_mutex_lock(&_webui.mutex_token); + if (update == WEBUI_MUTEX_SET_TRUE) _webui.clients_token_check[index] = true; + else if (update == WEBUI_MUTEX_SET_FALSE) _webui.clients_token_check[index] = false; + status = _webui.clients_token_check[index]; + _webui_mutex_unlock(&_webui.mutex_token); + return status; +} + +static bool _webui_mutex_app_is_exit_now(int update) { + + bool status = false; + _webui_mutex_lock(&_webui.mutex_app_exit_now); + if (update == WEBUI_MUTEX_SET_TRUE) _webui.app_exit_now = true; + else if (update == WEBUI_MUTEX_SET_FALSE) _webui.app_exit_now = false; + status = _webui.app_exit_now; + _webui_mutex_unlock(&_webui.mutex_app_exit_now); + return status; +} + +static bool _webui_mutex_is_more_servers_running(int update) { + + // This function will receive `false` when `_webui.servers < 1`, + // means no more servers are running. + // + // This function is primarily used to break `webui_wait()`. + + bool status = false; + _webui_mutex_lock(&_webui.mutex_is_more_servers); + if (update == WEBUI_MUTEX_SET_TRUE) _webui.is_more_servers = true; + else if (update == WEBUI_MUTEX_SET_FALSE) _webui.is_more_servers = false; + status = _webui.is_more_servers; + _webui_mutex_unlock(&_webui.mutex_is_more_servers); + return status; +} + +static bool _webui_mutex_is_server_running(_webui_window_t* win, int update) { + + bool status = false; + _webui_mutex_lock(&win->mutex_win_server_running); + if (update == WEBUI_MUTEX_SET_TRUE) win->server_running = true; + else if (update == WEBUI_MUTEX_SET_FALSE) win->server_running = false; + status = win->server_running; + _webui_mutex_unlock(&win->mutex_win_server_running); + return status; +} + +static bool _webui_mutex_win_is_exit_now(_webui_window_t* win, int update) { + + bool status = false; + _webui_mutex_lock(&win->mutex_win_exit_now); + if (update == WEBUI_MUTEX_SET_TRUE) win->win_exit_now = true; + else if (update == WEBUI_MUTEX_SET_FALSE) win->win_exit_now = false; + status = win->win_exit_now; + _webui_mutex_unlock(&win->mutex_win_exit_now); + return status; +} + +static bool _webui_mutex_is_webview_update(_webui_window_t* win, int update) { + + bool status = false; + _webui_mutex_lock(&win->mutex_webview_update); + if (update == WEBUI_MUTEX_SET_TRUE) win->update_webview = true; + else if (update == WEBUI_MUTEX_SET_FALSE) win->update_webview = false; + status = win->update_webview; + _webui_mutex_unlock(&win->mutex_webview_update); + return status; +} + +static void _webui_make_window_reusable(_webui_window_t* win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_make_window_reusable(%zu)\n", win->num); + #endif + + _webui_mutex_lock(&win->mutex_win_reusable); + if (!_webui.config.multi_client) { + // Single client mode + // Make window can set safe cookies and tokens again + _webui.cookies_single_set[win->num] = false; + } + // Make this window can use any browser/webview again + win->current_browser = 0; + _webui_mutex_unlock(&win->mutex_win_reusable); +} + +static void _webui_webview_update(_webui_window_t* win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_webview_update(%zu)\n", win->num); + #endif + + #ifdef _WIN32 + // Windows - WebView2 + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_TRUE); + #elif __linux__ + // Linux - GTK WebView + _webui_condition_signal(&win->condition_webview_update); + #else + // macOS - WKWebView + _webui_condition_signal(&win->condition_webview_update); + #endif +} + +static bool _webui_browser_create_new_profile(_webui_window_t* win, size_t browser) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_create_new_profile(%zu)\n", browser); + #endif + + // Default local machine profile + if (win->default_profile) + return true; + + if (win->custom_profile) { + + // Custom profile + if (_webui_is_empty(win->profile_path) || _webui_is_empty(win->profile_name)) + return false; + } else { + + // WebUI profile + if (win->profile_name != NULL) + _webui_free_mem((void*)win->profile_name); + if (win->profile_path != NULL) + _webui_free_mem((void*)win->profile_path); + win->profile_path = (char*)_webui_malloc(WEBUI_MAX_PATH); + win->profile_name = (char*)_webui_malloc(WEBUI_MAX_PATH); + if(!win->disable_browser_high_contrast) + WEBUI_STR_COPY_DYN(win->profile_name, WEBUI_MAX_PATH, WEBUI_PROFILE_NAME); + else + WEBUI_STR_COPY_DYN(win->profile_name, WEBUI_MAX_PATH, WEBUI_PROFILE_NAME "-NoHC"); + } + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_browser_create_new_profile(%zu) -> Generating WebUI profile\n", + browser + ); + #endif + + // Temp folder + const char* temp = _webui_get_temp_path(); + + if (browser == Chrome) { + + // Google Chrome + if (!win->custom_profile) + WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%sWebUIChromeProfile", temp, os_sep, os_sep); + return true; + } else if (browser == Edge) { + + // Edge + if (!win->custom_profile) + WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%sWebUIEdgeProfile", temp, os_sep, os_sep); + return true; + } else if (browser == Epic) { + + // Epic + if (!win->custom_profile) + WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%sWebUIEpicProfile", temp, os_sep, os_sep); + return true; + } else if (browser == Vivaldi) { + + // Vivaldi + if (!win->custom_profile) + WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%sWebUIVivaldiProfile", temp, os_sep, os_sep); + return true; + } else if (browser == Brave) { + + // Brave + if (!win->custom_profile) + WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%sWebUIBraveProfile", temp, os_sep, os_sep); + return true; + } else if (browser == Yandex) { + + // Yandex + if (!win->custom_profile) + WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%sWebUIYandexProfile", temp, os_sep, os_sep); + return true; + } else if (browser == Chromium) { + + // Chromium + if (!win->custom_profile) + WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%sWebUIChromiumProfile", temp, os_sep, os_sep); + return true; + } else if (browser == Firefox) { + + // Firefox (We need to create the profile folder) + + #ifdef _WIN32 + // Windows + const char* path_ini = "%APPDATA%\\Mozilla\\Firefox\\profiles.ini"; + #elif __linux__ + // Linux + bool snap = false; + const char* path_ini = ""; + if (_webui_file_exist("~/.mozilla/firefox/profiles.ini")) + path_ini = "~/.mozilla/firefox/profiles.ini"; + else if (_webui_file_exist("~/snap/firefox/common/.mozilla/firefox/profiles.ini")) { + path_ini = "~/snap/firefox/common/.mozilla/firefox/profiles.ini"; + snap = true; + } + else return false; + // Firefox linux snap version + // ~/snap/firefox/common/.mozilla/firefox/WebUIFirefoxProfile + char snap_path[WEBUI_MAX_PATH]; + const char* home = getenv("HOME"); + if (home) { + WEBUI_SN_PRINTF_STATIC(snap_path, sizeof(snap_path), "%s/snap/firefox/common/.mozilla/firefox", home); + temp = snap_path; + } else { + // Failed to get HOME + return false; + } + #else + // macOS + const char* path_ini = "~/Library/Application Support/Firefox/profiles.ini"; + #endif + + if (!win->custom_profile){ + // Set Firefox profile folder name + const char* ff = "FirefoxProfile"; + if(!win->disable_browser_high_contrast) { + ff = "WebUIFirefoxProfile-NoHC"; + } + // Generate Firefox profile path + if (WEBUI_SN_PRINTF_DYN(win->profile_path, WEBUI_MAX_PATH, "%s%s.WebUI%s%s", + temp, os_sep, os_sep, ff) >= WEBUI_MAX_PATH) { + // Generated path is too big + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_browser_create_new_profile(%zu) -> " + "Generated Firefox profile folder path is too big\n", + browser + ); + #endif + return false; + } + } + + if (!_webui_folder_exist(win->profile_path) || + !_webui_is_firefox_ini_profile_exist(path_ini, win->profile_name)) { + + char buf[2048] = {0}; + + // There is a possibility that the profile name + // does not exist in the INI file. or folder does not exist. + // let's delete the profile name from the ini file, and folder. + _webui_remove_firefox_profile_ini(path_ini, win->profile_name); + _webui_delete_folder(win->profile_path); + + // Creating the Firefox profile + WEBUI_SN_PRINTF_STATIC( + buf, sizeof(buf), "%s -CreateProfile \"%s %s\"", win->browser_path, win->profile_name, win->profile_path + ); + _webui_cmd_sync(win, buf, false); + + // Wait for Firefox profile to be created + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(1000); + if (_webui_folder_exist(win->profile_path)) + break; + if (_webui_timer_is_end(&timer, 10000)) + break; + } + + // Check if Firefox profile is created + if (!_webui_folder_exist(win->profile_path) || + !_webui_is_firefox_ini_profile_exist(path_ini, win->profile_name)) + return false; + + // prefs.js + FILE * file; + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "%s%sprefs.js", win->profile_path, os_sep); + WEBUI_FILE_OPEN(file, buf, "a"); + if (file == NULL) + return false; + fputs( + "user_pref(\"toolkit.legacyUserProfileCustomizations.stylesheets\"," + " true);", + file + ); + fputs("user_pref(\"browser.shell.checkDefaultBrowser\", false);", file); + fputs("user_pref(\"browser.tabs.warnOnClose\", false);", file); + fputs("user_pref(\"browser.tabs.inTitlebar\", 0);", file); + if(win->disable_browser_high_contrast){ + fputs("user_pref(\"browser.display.document_color_use\", 1);", file); + } + fclose(file); + + // userChrome.css + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "\"%s%schrome%s\"", win->profile_path, os_sep, os_sep); + if (!_webui_folder_exist(buf)) { + + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "mkdir \"%s%schrome%s\"", win->profile_path, os_sep, os_sep); + _webui_cmd_sync(win, buf, false); // Create directory + } + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "%s%schrome%suserChrome.css", win->profile_path, os_sep, os_sep); + WEBUI_FILE_OPEN(file, buf, "a"); + if (file == NULL) + return false; + fputs( + "#navigator-toolbox,#TabsToolbar,#nav-bar,#PersonalToolbar,#sidebar-box{" + "visibility:collapse!important;height:0!important;margin:0!important;padding:0!important;}" + "#titlebar{visibility:visible!important;display:flex!important;}#browser{" + "margin-top:0!important;padding-top:0!important;}" + , file); + fclose(file); + } + + return true; + } + + return false; +} + +static bool _webui_folder_exist(const char* folder) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_folder_exist([%s])\n", folder); + #endif + + #if defined(_WIN32) + DWORD attributes = GetFileAttributesA(folder); + if ((attributes != INVALID_FILE_ATTRIBUTES) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) + return true; + #else + DIR * dir = opendir(folder); + if (dir) { + closedir(dir); + return true; + } + #endif + + return false; +} + +static bool _webui_create_folder(const char* folder) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_create_folder([%s])\n", folder); + #endif + + if (_webui_folder_exist(folder)) + return true; + + #if defined(_WIN32) + // Convert UTF-8 path to wide string + wchar_t* wfolder; + if (!_webui_str_to_wide(folder, &wfolder)) + return false; + // Try creating the folder + if (CreateDirectoryW(wfolder, NULL)) { + webui_free(wfolder); + return true; + } + if (GetLastError() == ERROR_ALREADY_EXISTS) { + webui_free(wfolder); + return true; + } + // Retry loop + for (size_t i = 0; i < 6; i++) { + _webui_log_debug("[Core]\t\t_webui_create_folder() -> Retry #%zu...\n", i); + CreateDirectoryW(wfolder, NULL); + if (_webui_folder_exist(folder)) { + webui_free(wfolder); + return true; + } + _webui_sleep(500); + } + webui_free(wfolder); + #else + if (mkdir(folder, 0755) == 0) + return true; + if (errno == EEXIST) + return true; + for (size_t i = 0; i < 6; i++) { + _webui_log_debug("[Core]\t\t_webui_create_folder() -> Retry #%zu...\n", i); + mkdir(folder, 0755); + if (_webui_folder_exist(folder)) + return true; + _webui_sleep(500); + } + #endif + return false; +} + +static void _webui_delete_folder(char* folder) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_delete_folder([%s])\n", folder); + #endif + + char command[1024]; + #if defined(_WIN32) + WEBUI_SN_PRINTF_STATIC(command, sizeof(command), "cmd /c \"rmdir /s /q \"%s\"\" > nul 2>&1", folder); + #else + WEBUI_SN_PRINTF_STATIC(command, sizeof(command), "rm -rf \"%s\" >>/dev/null 2>>/dev/null", folder); + #endif + + // Try 6 times in 3 seconds + for (size_t i = 0; i < 6; i++) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_delete_folder() -> Running [%s] \n", command); + #endif + + #if defined(_WIN32) + _webui_system_win32(NULL, command, false); + #else + system(command); + #endif + + if (!_webui_folder_exist(folder)) + break; + _webui_sleep(500); + } +} + +static uint32_t _webui_get_token(const char* data) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_token()\n"); + #endif + + uint32_t token = 0; + + // Little-endian + token |= ((uint32_t) data[WEBUI_PROTOCOL_TOKEN]&0xFF); + token |= ((uint32_t) data[WEBUI_PROTOCOL_TOKEN + 1]&0xFF) << 8; + token |= ((uint32_t) data[WEBUI_PROTOCOL_TOKEN + 2]&0xFF) << 16; + token |= ((uint32_t) data[WEBUI_PROTOCOL_TOKEN + 3]&0xFF) << 24; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_token() -> 0x%08X\n", token); + #endif + + return token; +} + +static uint16_t _webui_get_id(const char* data) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_id()\n"); + #endif + + uint16_t id = 0; + + // Little-endian + id |= ((uint16_t) data[WEBUI_PROTOCOL_ID]&0xFF); + id |= ((uint16_t) data[WEBUI_PROTOCOL_ID + 1]&0xFF) << 8; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_id() -> 0x%04X\n", id); + #endif + + return id; +} + +static void _webui_send_all(_webui_window_t* win, uint16_t id, unsigned char cmd, const char* data, size_t len) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_send_all()\n"); + #endif + + // Send the WebSocket packet to a all connected clients if + // `multi_client` mode is enabled, if not then send packet + // to the only single connected client. + + // Send the packet + if (_webui.config.multi_client) { + // Loop trough all connected clients in this window + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if ((_webui.clients[i] != NULL) && (_webui.clients_win_num[i] == win->num) && + (_webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_GET_STATUS, i))) { + _webui_send_client(win, _webui.clients[i], 0, cmd, data, len, false); + } + } + } else { + // Single client + if ((win->single_client != NULL) && (_webui_mutex_is_single_client_token_valid(win, WEBUI_MUTEX_GET_STATUS))) { + _webui_send_client(win, win->single_client, 0, cmd, data, len, false); + } + } +} + +static void _webui_send_client( + _webui_window_t* win, struct mg_connection *client, + uint16_t id, unsigned char cmd, const char* data, size_t len, bool token_bypass) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_send_client()\n"); + #endif + + // Get connection id + size_t connection_id = 0; + if (!_webui_connection_get_id(win, client, &connection_id)) + return; + if (_webui.clients[connection_id] == NULL) + return; + + // Check Token + if (!token_bypass) { + if (!_webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_GET_STATUS, connection_id)) + return; + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_send_client() -> Connection ID = %zu \n", connection_id); + _webui_log_debug("[Core]\t\t_webui_send_client() -> Packet ID = 0x%04X \n", id); + _webui_log_debug("[Core]\t\t_webui_send_client() -> Packet CMD = 0x%02x \n", cmd); + _webui_log_debug("[Core]\t\t_webui_send_client() -> Packet Data = %zu bytes \n", len); + #endif + + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Data] + + // Prepare the packet + size_t packet_len = WEBUI_PROTOCOL_SIZE + len + 1; + char* packet = (char*)_webui_malloc(packet_len); + + // Signature (1 Byte) + packet[WEBUI_PROTOCOL_SIGN] = WEBUI_SIGNATURE; + + // Little-endian + // Token (4 Bytes) + packet[WEBUI_PROTOCOL_TOKEN] = 0xFF; + packet[WEBUI_PROTOCOL_TOKEN + 1] = 0xFF; + packet[WEBUI_PROTOCOL_TOKEN + 2] = 0xFF; + packet[WEBUI_PROTOCOL_TOKEN + 3] = 0xFF; + + // ID (2 Bytes) + packet[WEBUI_PROTOCOL_ID] = id&0xFF; + packet[WEBUI_PROTOCOL_ID + 1] = (id >> 8)&0xFF; + + // Command (1 Byte) + packet[WEBUI_PROTOCOL_CMD] = cmd; + + // Data (n Bytes) + if (len > 0) { + size_t j = WEBUI_PROTOCOL_DATA; + for (size_t i = 0; i < len; i++) { + packet[j++] = data[i]; + } + } + + // Send packet + _webui_send_client_ws(win, client, connection_id, packet, packet_len); + + // Free + _webui_free_mem((void*)packet); +} + +static char* _webui_str_dup(const char* src) { + size_t len = _webui_strlen(src); + char* dst = (char*)_webui_malloc(len); + WEBUI_STR_COPY_DYN(dst, len, src); + return dst; +} + +static const char* _webui_get_temp_path() { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_temp_path()\n"); + #endif + + #ifdef _WIN32 + // Resolve %USERPROFILE% + #ifdef _MSC_VER + char* WinUserProfile = NULL; + size_t sz = 0; + if (_dupenv_s(&WinUserProfile, &sz, "USERPROFILE") != 0 || WinUserProfile == NULL) + return ""; + #else + char* WinUserProfile = getenv("USERPROFILE"); + if (WinUserProfile == NULL) + return ""; + #endif + return WinUserProfile; + #elif __APPLE__ + // Resolve $HOME + char* MacUserProfile = getenv("HOME"); + if (MacUserProfile == NULL) + return ""; + return MacUserProfile; + #else + // Resolve $HOME + char* LinuxUserProfile = getenv("HOME"); + if (LinuxUserProfile == NULL) + return ""; + return LinuxUserProfile; + #endif +} + +static bool _webui_is_google_chrome_folder(const char* folder) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_is_google_chrome_folder([%s])\n", folder); + #endif + + char browser_full_path[WEBUI_MAX_PATH]; + + // Make sure this folder is Google Chrome setup and not Chromium + // by checking if `master_preferences` file exist or `initial_preferences` + // Ref: https://support.google.com/chrome/a/answer/187948?hl=en + + WEBUI_SN_PRINTF_STATIC(browser_full_path, WEBUI_MAX_PATH, "%s\\master_preferences", folder); + if (!_webui_file_exist(browser_full_path)) { + + WEBUI_SN_PRINTF_STATIC(browser_full_path, WEBUI_MAX_PATH, "%s\\initial_preferences", folder); + if (!_webui_file_exist(browser_full_path)) + return false; // This is Chromium or something else + } + + // Make sure the browser executable file exist + WEBUI_SN_PRINTF_STATIC(browser_full_path, WEBUI_MAX_PATH, "%s\\chrome.exe", folder); + if (!_webui_file_exist(browser_full_path)) + return false; + + return true; +} + +static bool _webui_custom_browser_exist(_webui_window_t* win, size_t browser) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_custom_browser_exist([%zu])\n", browser); + #endif + + if (!_webui.custom_browser_folder_path) + return false; + + #ifdef _WIN32 + char* executable = NULL; + if (browser == Chrome) executable = "chrome.exe"; + else if (browser == Edge) executable = "msedge.exe"; + else if (browser == Epic) executable = "epic.exe"; + else if (browser == Vivaldi) executable = "vivaldi.exe"; + else if (browser == Brave) executable = "brave.exe"; + else if (browser == Firefox) executable = "firefox.exe"; + else if (browser == Yandex) executable = "browser.exe"; + else if (browser == Chromium) executable = "chrome.exe"; + else return false; + if (_webui_folder_exist(_webui.custom_browser_folder_path)) { + char full_path[WEBUI_MAX_PATH] = {0}; + WEBUI_SN_PRINTF_STATIC( + full_path, WEBUI_MAX_PATH, + "%s\\%s", _webui.custom_browser_folder_path, executable + ); + if (_webui_file_exist(full_path)) { + // Browser Found + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", full_path); + return true; + } + } + #elif __APPLE__ + char* executable = NULL; + if (browser == Chrome) executable = "Google Chrome.app"; + else if (browser == Edge) executable = "Microsoft Edge.app"; + else if (browser == Epic) executable = "Epic.app"; + else if (browser == Vivaldi) executable = "Vivaldi.app"; + else if (browser == Brave) executable = "Brave Browser.app"; + else if (browser == Firefox) executable = "Firefox.app"; + else if (browser == Yandex) executable = "Yandex.app"; + else if (browser == Chromium) executable = "Chromium.app"; + else return false; + if (_webui_folder_exist(_webui.custom_browser_folder_path)) { + char full_app_path[(WEBUI_MAX_PATH - 2)] = {0}; + WEBUI_SN_PRINTF_STATIC( + full_app_path, (WEBUI_MAX_PATH - 2), + "%s/%s", _webui.custom_browser_folder_path, executable + ); + if (_webui_folder_exist(full_app_path)) { + // Create macOS command + char full_app_cmd[(WEBUI_MAX_PATH - 1)] = {0}; + WEBUI_SN_PRINTF_STATIC( + full_app_cmd, (WEBUI_MAX_PATH - 1), + "open --new -a \"%s\" --args", full_app_path + ); + // Browser Found + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", full_app_cmd); + return true; + } + } + #else + #define MAX_BROWSER_FILES (5) + char* executable = NULL; + char* executables[MAX_BROWSER_FILES] = {0}; + if (browser == Chrome) { + executables[0] = "google-chrome"; + executables[1] = "google-chrome-stable"; + } + else if (browser == Edge) { + executables[0] = "microsoft-edge-stable"; + executables[1] = "microsoft-edge-beta"; + } + else if (browser == Epic) { + executables[0] = "epic"; + } + else if (browser == Vivaldi) { + executables[0] = "vivaldi"; + executables[1] = "vivaldi-stable"; + } + else if (browser == Brave) { + executables[0] = "brave"; + executables[1] = "brave-browser-stable"; + executables[2] = "brave-browser-nightly"; + executables[3] = "brave-browser-beta"; + } + else if (browser == Firefox) { + executables[0] = "firefox"; + } + else if (browser == Yandex) { + executables[0] = "yandex-browser"; + } + else if (browser == Chromium) { + executables[0] = "chromium-browser"; + executables[1] = "chromium"; + } + else return false; + if (_webui_folder_exist(_webui.custom_browser_folder_path)) { + char full_path[(WEBUI_MAX_PATH - 1)] = {0}; + for (int i = 0; i < MAX_BROWSER_FILES && executables[i] != NULL; i++) { + WEBUI_SN_PRINTF_STATIC( + full_path, (WEBUI_MAX_PATH - 1), + "%s/%s", _webui.custom_browser_folder_path, executables[i] + ); + if (_webui_file_exist(full_path)) { + // Browser Found + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", full_path); + return true; + } + } + } + #endif + + return false; +} + +static bool _webui_webview_exist() { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_webview_exist()\n"); + #endif + + #ifdef _WIN32 + // Check WebView2Loader.dll is loadable and the WebView2 Runtime is installed + return _webui_win32_wv2_check_runtime(); + #elif __linux__ + // Try to dynamically load GTK3 and WebKit2GTK; idempotent if already loaded + return _webui_load_gtk_and_webkit(); + #else + // macOS: WKWebView ships with the OS and is always available + return true; + #endif +} + +static bool _webui_browser_exist(_webui_window_t* win, size_t browser) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_exist([%zu])\n", browser); + #endif + + // Check if a web browser is installed on this machine + + if (browser == Chrome) { + + // Google Chrome + + static bool ChromeExist = false; + if(win) { + if (ChromeExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + ChromeExist = true; + return true; + } + + #ifdef _WIN32 + + // Google Chrome on Windows + + char browser_folder[WEBUI_MAX_PATH]; + + // Search in `HKEY_LOCAL_MACHINE` (If Google Chrome installed for + // multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\chrome.exe", + L"Path", browser_folder + )) { + + // Make sure its Google Chrome and not Chromium + if (_webui_is_google_chrome_folder(browser_folder)) { + + // Google Chrome Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\\chrome.exe\"", browser_folder); + ChromeExist = true; + return true; + } + } + + // Search in `HKEY_CURRENT_USER` (If Google Chrome installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\chrome.exe", + L"Path", browser_folder + )) { + + // Make sure its Google Chrome and not Chromium + if (_webui_is_google_chrome_folder(browser_folder)) { + + // Google Chrome Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\\chrome.exe\"", browser_folder); + ChromeExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Google Chrome on macOS + if (_webui_cmd_sync(win, "open -R -a \"Google Chrome\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Google Chrome.app\" --args"); + ChromeExist = true; + return true; + } else + return false; + #else + + // Google Chrome on Linux + if (_webui_cmd_sync(win, "google-chrome --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "google-chrome"); + ChromeExist = true; + return true; + } else if (_webui_cmd_sync(win, "google-chrome-stable --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "google-chrome-stable"); + ChromeExist = true; + return true; + } else + return false; + + #endif + } else if (browser == Edge) { + + // Edge + + static bool EdgeExist = false; + if(win) { + if (EdgeExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + EdgeExist = true; + return true; + } + + #ifdef _WIN32 + + // Edge on Windows + + char browser_fullpath[WEBUI_MAX_PATH]; + + // Search in `HKEY_LOCAL_MACHINE` (If Edge installed for multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\msedge.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Edge Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + EdgeExist = true; + return true; + } + } + + // Search in `HKEY_CURRENT_USER` (If Edge installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\msedge.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Edge Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + EdgeExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Edge on macOS + if (_webui_cmd_sync(win, "open -R -a \"Microsoft Edge\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Microsoft Edge.app\" --args"); + EdgeExist = true; + return true; + } else + return false; + + #else + + // Edge on Linux + if (_webui_cmd_sync(win, "microsoft-edge-stable --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "microsoft-edge-stable"); + EdgeExist = true; + return true; + } else if (_webui_cmd_sync(win, "microsoft-edge-beta --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "microsoft-edge-beta"); + EdgeExist = true; + return true; + } else if (_webui_cmd_sync(win, "microsoft-edge-dev --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "microsoft-edge-dev"); + EdgeExist = true; + return true; + } else + return false; + + #endif + } else if (browser == Epic) { + + // Epic Privacy Browser + + static bool EpicExist = false; + if(win) { + if (EpicExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + EpicExist = true; + return true; + } + + #ifdef _WIN32 + + // Epic on Windows + + char browser_fullpath[WEBUI_MAX_PATH]; + + // Search in `HKEY_CURRENT_USER` (If Epic installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\epic.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Epic Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + EpicExist = true; + return true; + } + } + + // Search in `HKEY_LOCAL_MACHINE` (If Epic installed for multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\epic.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Epic Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + EpicExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Epic on macOS + if (_webui_cmd_sync(win, "open -R -a \"Epic\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Epic.app\" --args"); + EpicExist = true; + return true; + } else + return false; + #else + + // Epic on Linux + if (_webui_cmd_sync(win, "epic --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "epic"); + EpicExist = true; + return true; + } else + return false; + #endif + } else if (browser == Vivaldi) { + + // Vivaldi Browser + + static bool VivaldiExist = false; + if(win) { + if (VivaldiExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + VivaldiExist = true; + return true; + } + + #ifdef _WIN32 + + // Vivaldi on Windows + + char browser_fullpath[WEBUI_MAX_PATH]; + + // Search in `HKEY_LOCAL_MACHINE` (If Vivaldi installed for multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\vivaldi.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Vivaldi Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + VivaldiExist = true; + return true; + } + } + + // Search in `HKEY_CURRENT_USER` (If Vivaldi installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\vivaldi.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Vivaldi Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + VivaldiExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Vivaldi on macOS + if (_webui_cmd_sync(win, "open -R -a \"Vivaldi\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Vivaldi.app\" --args"); + VivaldiExist = true; + return true; + } else + return false; + #else + + // Vivaldi on Linux + if (_webui_cmd_sync(win, "vivaldi --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "vivaldi"); + VivaldiExist = true; + return true; + } else if (_webui_cmd_sync(win, "vivaldi-stable --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "vivaldi-stable"); + VivaldiExist = true; + return true; + } else if (_webui_cmd_sync(win, "vivaldi-snapshot --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "vivaldi-snapshot"); + VivaldiExist = true; + return true; + } else + return false; + #endif + } else if (browser == Brave) { + + // Brave Browser + + static bool BraveExist = false; + if(win) { + if (BraveExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + BraveExist = true; + return true; + } + + #ifdef _WIN32 + + // Brave on Windows + + char browser_fullpath[WEBUI_MAX_PATH]; + + // Search in `HKEY_LOCAL_MACHINE` (If Brave installed for multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\brave.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Brave Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + BraveExist = true; + return true; + } + } + + // Search in `HKEY_CURRENT_USER` (If Brave installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\brave.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Brave Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + BraveExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Brave on macOS + if (_webui_cmd_sync(win, "open -R -a \"Brave Browser\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Brave Browser.app\" --args"); + BraveExist = true; + return true; + } else + return false; + #else + + // Brave on Linux + if (_webui_cmd_sync(win, "brave --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "brave"); + BraveExist = true; + return true; + } else if (_webui_cmd_sync(win, "brave-browser-stable --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "brave-browser-stable"); + BraveExist = true; + return true; + } else if (_webui_cmd_sync(win, "brave-browser-nightly --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "brave-browser-nightly"); + BraveExist = true; + return true; + } else if (_webui_cmd_sync(win, "brave-browser-beta --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "brave-browser-beta"); + BraveExist = true; + return true; + } else + return false; + #endif + } else if (browser == Firefox) { + + // Firefox + + static bool FirefoxExist = false; + if(win) { + if (FirefoxExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + FirefoxExist = true; + return true; + } + + #ifdef _WIN32 + + // Firefox on Windows + + char browser_fullpath[WEBUI_MAX_PATH]; + + // Search in `HKEY_LOCAL_MACHINE` (If Firefox installed for multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\firefox.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Firefox Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + FirefoxExist = true; + return true; + } + } + + // Search in `HKEY_CURRENT_USER` (If Firefox installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\firefox.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Firefox Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + FirefoxExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Firefox on macOS + if (_webui_cmd_sync(win, "open -R -a \"Firefox\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Firefox.app\" --args"); + FirefoxExist = true; + return true; + } else + return false; + #else + + // Firefox on Linux + + if (_webui_cmd_sync(win, "firefox -v", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "firefox"); + FirefoxExist = true; + return true; + } else + return false; + + #endif + + } else if (browser == Yandex) { + + // Yandex Browser + + static bool YandexExist = false; + if(win) { + if (YandexExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + YandexExist = true; + return true; + } + + #ifdef _WIN32 + + // Yandex on Windows + + char browser_fullpath[WEBUI_MAX_PATH]; + + // Search in `HKEY_CURRENT_USER` (If Yandex installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\browser.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Yandex Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + YandexExist = true; + return true; + } + } + + // Search in `HKEY_LOCAL_MACHINE` (If Yandex installed for multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\browser.exe", + L"", browser_fullpath + )) { + + // Make sure the browser executable file exist + if (_webui_file_exist(browser_fullpath)) { + + // Yandex Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\"", browser_fullpath); + YandexExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Yandex on macOS + if (_webui_cmd_sync(win, "open -R -a \"Yandex\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Yandex.app\" --args"); + YandexExist = true; + return true; + } else + return false; + #else + + // Yandex on Linux + if (_webui_cmd_sync(win, "yandex-browser --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "yandex-browser"); + YandexExist = true; + return true; + } else + return false; + #endif + } else if (browser == Chromium) { + + // The Chromium Projects + + static bool ChromiumExist = false; + if(win) { + if (ChromiumExist && !_webui_is_empty(win->browser_path)) + return true; + } + + // Custom user browser path + if (_webui_custom_browser_exist(win, browser)) { + ChromiumExist = true; + return true; + } + + #ifdef _WIN32 + + // Chromium on Windows + + char browser_folder[WEBUI_MAX_PATH]; + + // Search in `HKEY_CURRENT_USER` (If Chromium installed for one user) + if (_webui_get_windows_reg_value( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\chrome.exe", + L"Path", browser_folder + )) { + + // Make sure its Chromium and not Google Chrome + if (!_webui_is_google_chrome_folder(browser_folder)) { + + // Chromium Found (one user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\\chrome.exe\"", browser_folder); + ChromiumExist = true; + return true; + } + } + + // Search in `HKEY_LOCAL_MACHINE` (If Chromium installed for multi-user) + if (_webui_get_windows_reg_value( + HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVer" + L"sion\\App Paths\\chrome.exe", + L"Path", browser_folder + )) { + + // Make sure its Chromium and not Google Chrome + if (!_webui_is_google_chrome_folder(browser_folder)) { + + // Chromium Found (multi-user) + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "\"%s\\chrome.exe\"", browser_folder); + ChromiumExist = true; + return true; + } + } + + return false; + + #elif __APPLE__ + + // Chromium on macOS + if (_webui_cmd_sync(win, "open -R -a \"Chromium\"", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "open --new -a \"Chromium.app\" --args"); + ChromiumExist = true; + return true; + } else + return false; + #else + + // Chromium on Linux + if (_webui_cmd_sync(win, "chromium-browser --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "chromium-browser"); + ChromiumExist = true; + return true; + } else if (_webui_cmd_sync(win, "chromium --version", false) == 0) { + + if(win) WEBUI_SN_PRINTF_DYN(win->browser_path, WEBUI_MAX_PATH, "chromium"); + ChromiumExist = true; + return true; + } else + return false; + #endif + } else if (browser == Webview) { + return _webui_webview_exist(); + } + + return false; +} + +static void _webui_clean(void) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_clean()\n"); + #endif + + static bool cleaned = false; + if (cleaned) + return; + cleaned = true; + + // Make sure app is stopped + webui_exit(); + + // Let's give other threads more time to + // safely exit and finish cleaning up before + // cleaning memory. + for (size_t i = 0; i < 4; i++) { + _webui_sleep(500); + if (_webui.servers < 1) { // TODO: Add mutex here + break; // No more server threads are running + } + } + + // Clean all servers services + mg_exit_library(); + + // Free all non-freed memory allocations + _webui_free_all_mem(); + + // Destroy all mutex + _webui_mutex_destroy(&_webui.mutex_server_start); + _webui_mutex_destroy(&_webui.mutex_send); + _webui_mutex_destroy(&_webui.mutex_receive); + _webui_mutex_destroy(&_webui.mutex_wait); + _webui_mutex_destroy(&_webui.mutex_js_run); + _webui_mutex_destroy(&_webui.mutex_win_connect); + _webui_mutex_destroy(&_webui.mutex_app_exit_now); + _webui_mutex_destroy(&_webui.mutex_is_more_servers); + _webui_mutex_destroy(&_webui.mutex_http_handler); + _webui_mutex_destroy(&_webui.mutex_client); + _webui_mutex_destroy(&_webui.mutex_async_response); + _webui_mutex_destroy(&_webui.mutex_mem); + _webui_mutex_destroy(&_webui.mutex_token); + _webui_mutex_destroy(&_webui.mutex_js_run_id); + _webui_mutex_destroy(&_webui.mutex_ws_process_number); + _webui_condition_destroy(&_webui.condition_wait); + + _webui.initialized = false; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\tWebUI memory cleaned successfully\n"); + #endif +} + +static int _webui_cmd_sync(_webui_window_t* win, char* cmd, bool show) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_sync()\n"); + #endif + + // Run sync command and + // return the exit code + + char buf[2048] = {0}; + + // Sync command + #ifdef _WIN32 + // Using: _CMD_ + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "cmd /c \"%s\" > nul 2>&1", cmd); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_sync() -> Running [%s] \n", buf); + #endif + int r = _webui_system_win32(win, buf, show); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_sync() -> Command Result [%d] \n", r); + #endif + return r; + #else + // Using: _CMD_ + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "%s >>/dev/null 2>>/dev/null", cmd); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_sync() -> Running [%s] \n", buf); + #endif + int r = system(buf); + r = (r != -1 && r != 127 && WIFEXITED(r)) ? WEXITSTATUS(r) : -1; + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_sync() -> Command Result [%d] \n", r); + #endif + return r; + #endif +} + +static int _webui_cmd_async(_webui_window_t* win, char* cmd, bool show) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_async()\n"); + #endif + + // Run a async command + // and return immediately + + char buf[1024] = {0}; + + // Asynchronous command + #ifdef _WIN32 + // Using: START "" _CMD_ + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "cmd /c \"START \"\" %s\" > nul 2>&1", cmd); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_async() -> Running [%s] \n", buf); + #endif + return _webui_system_win32(win, buf, show); + #else + // Using: _CMD_ & + WEBUI_SN_PRINTF_STATIC(buf, sizeof(buf), "%s >>/dev/null 2>>/dev/null &", cmd); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_cmd_async() -> Running [%s] \n", buf); + #endif + int r = system(buf); + r = (r != -1 && r != 127 && WIFEXITED(r)) ? WEXITSTATUS(r) : -1; + return r; + #endif +} + +static int _webui_run_browser(_webui_window_t* win, char* cmd) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_run_browser()\n"); + #endif + + // Run a async command + return _webui_cmd_async(win, cmd, false); +} + +static int _webui_get_browser_args(_webui_window_t* win, size_t browser, char* buffer, size_t len) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_browser_args([%zu])\n", browser); + #endif + + const char* chromium_options[] = { + "--no-first-run", + // "--no-proxy-server", + "--safe-mode", + "--disable-extensions", + "--disable-background-mode", + "--disable-plugins", + "--disable-plugins-discovery", + "--disable-translate", + "--disable-features=Translate", + "--bwsi", + "--disable-sync", + "--disable-sync-preferences", + "--disable-component-update", + "--allow-insecure-localhost", + "--auto-accept-camera-and-microphone-capture", + }; + + int c = 0; + switch(browser) { + case Chrome: + case Edge: + case Epic: + case Vivaldi: + case Brave: + case Yandex: + case Chromium: + // Profile + if (!_webui_is_empty(win->profile_path)) + c = WEBUI_SN_PRINTF_STATIC(buffer, len, " --user-data-dir=\"%s\"", win->profile_path); + // Basic + if (_webui_is_empty(win->custom_parameters)) { + for (int i = 0; i < (int)(sizeof(chromium_options) / sizeof(chromium_options[0])); i++) { + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", chromium_options[i]); + } + } + // Kiosk Mode + if (win->kiosk_mode) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", "--chrome-frame --kiosk"); + // High Contrast Support + if (win->disable_browser_high_contrast) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", "--disable-features=ForcedColors"); + // Hide Mode + if (win->hide) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", "--headless --headless=new"); + // Window Size + if (win->size_set) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " --window-size=%u,%u", win->width, win->height); + // Window Position + if (win->position_set) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " --window-position=%u,%u", win->x, win->y); + // Proxy + if (win->proxy_set) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " --proxy-server=%s", win->proxy_server); + else { + if (_webui_is_empty(win->custom_parameters)) { + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", "--no-proxy-server"); + } + } + // User-defined command line parameters. + if (!_webui_is_empty(win->custom_parameters)) { + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", win->custom_parameters); + } + + // URL (END) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", "--app="); + return c; + case Firefox: + // Profile + if (!_webui_is_empty(win->profile_name)) + c = WEBUI_SN_PRINTF_STATIC(buffer, len, " -P %s", win->profile_name); + // Basic + if (_webui_is_empty(win->custom_parameters)) { + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " -purgecaches"); + } + // Kiosk Mode + if (win->kiosk_mode) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", "-kiosk"); + // Hide Mode + if (win->hide) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", "-headless"); + // Window Size + if (win->size_set) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " -width %u -height %u", win->width, win->height); + // Window Position + // Firefox does not support window positioning. + // Proxy + if (win->proxy_set) { + // Server: `win->proxy_server` + // TODO: Add proxy feature to Firefox + // Method 1: modifying `prefs.js` / user.js + // Method 2: use Proxy Auto-Configuration (PAC) file + } + // User-defined command line parameters. + if (!_webui_is_empty(win->custom_parameters)) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " %s", win->custom_parameters); + + // URL (END) + c += WEBUI_SN_PRINTF_STATIC(buffer + c, len, " -new-window "); + return c; + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_browser_args() -> Unknown Browser (%zu)\n", browser); + #endif + WEBUI_STR_COPY_STATIC(buffer, len, ""); + return 0; +} + +static bool _webui_browser_start_chrome(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_chrome([%s])\n", address); + #endif + + // -- Google Chrome ---------------------- + + if (win->current_browser != 0 && win->current_browser != Chrome) + return false; + + if (!_webui_browser_exist(win, Chrome)) + return false; + + if (!_webui_browser_create_new_profile(win, Chrome)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Chrome, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Chrome; + _webui.current_browser = Chrome; + return true; + } else + return false; +} + +static bool _webui_browser_start_edge(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_edge([%s])\n", address); + #endif + + // -- Microsoft Edge ---------------------- + + if (win->current_browser != 0 && win->current_browser != Edge) + return false; + + if (!_webui_browser_exist(win, Edge)) + return false; + + if (!_webui_browser_create_new_profile(win, Edge)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Edge, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Edge; + _webui.current_browser = Edge; + return true; + } else + return false; +} + +static bool _webui_browser_start_epic(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_epic([%s])\n", address); + #endif + + // -- Epic Privacy Browser ---------------------- + + if (win->current_browser != 0 && win->current_browser != Epic) + return false; + + if (!_webui_browser_exist(win, Epic)) + return false; + + if (!_webui_browser_create_new_profile(win, Epic)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Epic, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Epic; + _webui.current_browser = Epic; + return true; + } else + return false; +} + +static bool _webui_browser_start_vivaldi(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_vivaldi([%s])\n", address); + #endif + + // -- Vivaldi Browser ---------------------- + + if (win->current_browser != 0 && win->current_browser != Vivaldi) + return false; + + if (!_webui_browser_exist(win, Vivaldi)) + return false; + + if (!_webui_browser_create_new_profile(win, Vivaldi)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Vivaldi, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Vivaldi; + _webui.current_browser = Vivaldi; + return true; + } else + return false; +} + +static bool _webui_browser_start_brave(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_brave([%s])\n", address); + #endif + + // -- Brave Browser ---------------------- + + if (win->current_browser != 0 && win->current_browser != Brave) + return false; + + if (!_webui_browser_exist(win, Brave)) + return false; + + if (!_webui_browser_create_new_profile(win, Brave)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Brave, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Brave; + _webui.current_browser = Brave; + return true; + } else + return false; +} + +static bool _webui_browser_start_firefox(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_firefox([%s])\n", address); + #endif + + // -- Mozilla Firefox ---------------------- + + if (win->current_browser != 0 && win->current_browser != Firefox) + return false; + + if (!_webui_browser_exist(win, Firefox)) + return false; + + if (!_webui_browser_create_new_profile(win, Firefox)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Firefox, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Firefox; + _webui.current_browser = Firefox; + return true; + } else + return false; +} + +static bool _webui_browser_start_yandex(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_yandex([%s])\n", address); + #endif + + // -- Yandex Browser ---------------------- + + if (win->current_browser != 0 && win->current_browser != Yandex) + return false; + + if (!_webui_browser_exist(win, Yandex)) + return false; + + if (!_webui_browser_create_new_profile(win, Yandex)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Yandex, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Yandex; + _webui.current_browser = Yandex; + return true; + } else + return false; +} + +static bool _webui_browser_start_chromium(_webui_window_t* win, const char* address) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start_chromium([%s])\n", address); + #endif + + // -- The Chromium Projects ------------------- + + if (win->current_browser != 0 && win->current_browser != Chromium) + return false; + + if (!_webui_browser_exist(win, Chromium)) + return false; + + if (!_webui_browser_create_new_profile(win, Chromium)) + return false; + + char arg[1024] = {0}; + _webui_get_browser_args(win, Chromium, arg, sizeof(arg)); + + char full[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(full, sizeof(full), "%s%s%s", win->browser_path, arg, address); + + if (_webui_run_browser(win, full) == 0) { + + win->current_browser = Chromium; + _webui.current_browser = Chromium; + return true; + } else + return false; +} + +static bool _webui_browser_start(_webui_window_t* win, const char* address, size_t _browser) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_browser_start([%s], [%zu])\n", address, _browser); + #endif + + // Non existing browser + if (_browser > 13) + return false; + + // No browser mode + if (_browser == NoBrowser) + return true; + + // Find the best web browser to use + size_t browser = _browser; + if (browser == AnyBrowser) { + browser = _webui.current_browser != 0 ? + _webui.current_browser : _webui_find_the_best_browser(win); + } + + // Current browser used in the last opened window + if (browser == AnyBrowser && _webui.current_browser != 0) + browser = _webui.current_browser; + + // #1 - Chrome - Works perfectly + // #2 - Edge - Works perfectly like Chrome + // #3 - Epic - Works perfectly like Chrome + // #4 - Vivaldi - Works perfectly like Chrome + // #5 - Brave - Shows a policy notification in the first run + // #6 - Firefox - Does not support App-Mode like Chrome (Looks not great) + // #7 - Yandex - Shows a big welcome window in the first run + // #8 - Chromium - Some Anti-Malware shows a false alert + + if (browser != AnyBrowser) { + + // Open the window using the user specified browser + + if (browser == Chrome) + return _webui_browser_start_chrome(win, address); + else if (browser == Edge) + return _webui_browser_start_edge(win, address); + else if (browser == Epic) + return _webui_browser_start_epic(win, address); + else if (browser == Vivaldi) + return _webui_browser_start_vivaldi(win, address); + else if (browser == Brave) + return _webui_browser_start_brave(win, address); + else if (browser == Firefox) + return _webui_browser_start_firefox(win, address); + else if (browser == Yandex) + return _webui_browser_start_yandex(win, address); + else if (browser == Chromium) + return _webui_browser_start_chromium(win, address); + else if (browser == ChromiumBased) { + + // Open the window using a Chromium-based browser + + if (!_webui_browser_start_chrome(win, address)) + if (!_webui_browser_start_edge(win, address)) + if (!_webui_browser_start_epic(win, address)) + if (!_webui_browser_start_vivaldi(win, address)) + if (!_webui_browser_start_brave(win, address)) + if (!_webui_browser_start_yandex(win, address)) + if (!_webui_browser_start_chromium(win, address)) + return false; + } else + return false; + } else if (win->current_browser != 0) { + + // Open the window using the same web browser used for this current window + + if (win->current_browser == Chrome) + return _webui_browser_start_chrome(win, address); + else if (win->current_browser == Edge) + return _webui_browser_start_edge(win, address); + else if (win->current_browser == Epic) + return _webui_browser_start_epic(win, address); + else if (win->current_browser == Vivaldi) + return _webui_browser_start_vivaldi(win, address); + else if (win->current_browser == Brave) + return _webui_browser_start_brave(win, address); + else if (win->current_browser == Firefox) + return _webui_browser_start_firefox(win, address); + else if (win->current_browser == Yandex) + return _webui_browser_start_yandex(win, address); + else if (win->current_browser == Chromium) + return _webui_browser_start_chromium(win, address); + else + return false; + } else { + + // Open the window using the default OS browser + + #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) + // Windows + if (!_webui_browser_start_chrome(win, address)) + if (!_webui_browser_start_edge(win, address)) + if (!_webui_browser_start_epic(win, address)) + if (!_webui_browser_start_vivaldi(win, address)) + if (!_webui_browser_start_brave(win, address)) + if (!_webui_browser_start_firefox(win, address)) + if (!_webui_browser_start_yandex(win, address)) + if (!_webui_browser_start_chromium(win, address)) + return false; + #elif __APPLE__ + // macOS + if (!_webui_browser_start_chrome(win, address)) + if (!_webui_browser_start_edge(win, address)) + if (!_webui_browser_start_epic(win, address)) + if (!_webui_browser_start_vivaldi(win, address)) + if (!_webui_browser_start_brave(win, address)) + if (!_webui_browser_start_firefox(win, address)) + if (!_webui_browser_start_yandex(win, address)) + if (!_webui_browser_start_chromium(win, address)) + return false; + #else + // Linux + if (!_webui_browser_start_chrome(win, address)) + if (!_webui_browser_start_edge(win, address)) + if (!_webui_browser_start_epic(win, address)) + if (!_webui_browser_start_vivaldi(win, address)) + if (!_webui_browser_start_brave(win, address)) + if (!_webui_browser_start_firefox(win, address)) + if (!_webui_browser_start_yandex(win, address)) + if (!_webui_browser_start_chromium(win, address)) + return false; + #endif + } + + return true; +} + +static size_t _webui_get_child_process_id(_webui_window_t* win) { + if (win) { + // Get PID + if (_webui.is_webview_mode) { + // WebView Mode + #if defined(_WIN32) + return (size_t)GetCurrentProcessId(); + #else + return (size_t)getpid(); + #endif + } else { + // Web Browser Mode + // Filter process by WebUI's web server URL in process CLI + #if defined(_WIN32) + char* out = NULL; + char cmd[1024] = {0}; + WEBUI_SN_PRINTF_STATIC(cmd, sizeof(cmd), + "cmd.exe /c wmic process where \"CommandLine like '%c%s%c'\" get ProcessId,CommandLine /format:csv 2>&1", + '%', win->url, '%'); + _webui_system_win32_out(cmd, &out, false); + size_t process_id = 0; + if (out) { + + // Check if we get: + // "'wmic' is not recognized as an internal or external command" + // which means WMIC is not available on this system (Windows 11 22H2 and later) + if (strstr(out, "is not recognized") != NULL) { + free(out); + // WMIC is not available, let's try PowerShell as a fallback. + WEBUI_SN_PRINTF_STATIC( + cmd, + sizeof(cmd), + "cmd.exe /c powershell -NoProfile -Command \"$url='%s';$p=Get-CimInstance Win32_Process | " + "Where-Object { $_.CommandLine -and $_.CommandLine -match [regex]::Escape($url) };" + "if($p.Count -gt 0){$p[0].ProcessId}else{0}\" 2>&1", + win->url + ); + _webui_system_win32_out(cmd, &out, false); + if (!out) return 0; + process_id = (size_t)atoi(out); + free(out); + return process_id; + } + + // Parse the CSV output + char* line_start = out; + char* found_url_ptr = NULL; + while ((line_start = strstr(line_start, "\n")) != NULL) { + line_start++; // Move past the newline + found_url_ptr = strstr(line_start, win->url); + if (found_url_ptr) { + char* comma_ptr = strchr(found_url_ptr, ','); + if (comma_ptr) { + comma_ptr++; + while (*comma_ptr == ' ' || *comma_ptr == '\t') comma_ptr++; + process_id = (size_t)atoi(comma_ptr); + } + break; + } + } + free(out); + } + return process_id; + #else + char cmd[1024] = {0}; + snprintf(cmd, sizeof(cmd), "pgrep -f \"%s\"", win->url); + FILE* fp; + fp = popen(cmd, "r"); + if (!fp) return 0; + char line[4096] = {0}; + while (fgets(line, sizeof(line), fp)) { + int pid = 0; + pid = atoi(line); + if (pid > 0) { + pclose(fp); + return (size_t)pid; + } + } + pclose(fp); + #endif + } + } + + return 0; +} + +static bool _webui_is_process_running(const char* process_name) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_is_process_running([%s])\n", process_name); + #endif + + bool isRunning = false; + + #ifdef _WIN32 + // Microsoft Windows + HANDLE hSnapshot; + PROCESSENTRY32 pe32; + hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) + return false; + pe32.dwSize = sizeof(PROCESSENTRY32); + if (!Process32First(hSnapshot, &pe32)) { + CloseHandle(hSnapshot); + return false; + } + do { + if (strcmp(pe32.szExeFile, process_name) == 0) { + isRunning = true; + break; + } + } while(Process32Next(hSnapshot, &pe32)); + CloseHandle(hSnapshot); + #elif __linux__ + // Linux + DIR * dir; + struct dirent* entry; + char status_path[WEBUI_MAX_PATH]; + char line[WEBUI_MAX_PATH]; + dir = opendir("/proc"); + if (!dir) + return false; // Unable to open /proc + while((entry = readdir(dir))) { + if (entry->d_type == DT_DIR && atoi(entry->d_name) > 0) { + WEBUI_SN_PRINTF_STATIC(status_path, sizeof(status_path), "/proc/%s/status", entry->d_name); + FILE * status_file; + WEBUI_FILE_OPEN(status_file, status_path, "r"); + if (status_file) { + while(fgets(line, sizeof(line), status_file)) { + if (strncmp(line, "Name:", 5) == 0) { + char proc_name[WEBUI_MAX_PATH]; + sscanf(line, "Name: %s", proc_name); + if (strcmp(proc_name, process_name) == 0) { + isRunning = true; + fclose(status_file); + goto _close_dir; + } + break; + } + } + fclose(status_file); + } + } + } + _close_dir: + closedir(dir); + #else + // macOS + int mib[4] = { + CTL_KERN, + KERN_PROC, + KERN_PROC_ALL, + 0 + }; + struct kinfo_proc * procs = NULL; + size_t size; + if (sysctl(mib, 4, NULL, &size, NULL, 0) < 0) + return false; // Failed to get process list size + procs = (struct kinfo_proc * ) malloc(size); + if (!procs) + return false; // Failed to allocate memory for process list + if (sysctl(mib, 4, procs, &size, NULL, 0) < 0) { + free(procs); + return false; // Failed to get process list + } + size_t count = size / sizeof(struct kinfo_proc); + for (size_t i = 0; i < count; i++) { + if (strcmp(procs[i].kp_proc.p_comm, process_name) == 0) { + isRunning = true; + break; + } + } + free(procs); + #endif + + return isRunning; +} + +static size_t _webui_find_the_best_browser(_webui_window_t* win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_find_the_best_browser()\n"); + #endif + + // #1 - Chrome - Works perfectly + // #2 - Edge - Works perfectly like Chrome + // #3 - Epic - Works perfectly like Chrome + // #4 - Vivaldi - Works perfectly like Chrome + // #5 - Brave - Shows a policy notification in the first run + // #6 - Firefox - Does not support App-Mode like Chrome (Looks not great) + // #7 - Yandex - Shows a big welcome window in the first run + // #8 - Chromium - Some Anti-Malware shows a false alert + + // To save memory, let's search if a web browser is already running + + #ifdef _WIN32 + // Microsoft Windows + if (_webui_is_process_running("chrome.exe") && _webui_browser_exist(win, Chrome)) + return Chrome; + else if (_webui_is_process_running("msedge.exe") && _webui_browser_exist(win, Edge)) + return Edge; + else if (_webui_is_process_running("epic.exe") && _webui_browser_exist(win, Epic)) + return Epic; + else if (_webui_is_process_running("vivaldi.exe") && _webui_browser_exist(win, Vivaldi)) + return Vivaldi; + else if (_webui_is_process_running("brave.exe") && _webui_browser_exist(win, Brave)) + return Brave; + else if (_webui_is_process_running("firefox.exe") && _webui_browser_exist(win, Firefox)) + return Firefox; + else if (_webui_is_process_running("browser.exe") && _webui_browser_exist(win, Yandex)) + return Yandex; + // Chromium check is never reached if Google Chrome is installed + // due to duplicate process name `chrome.exe` + else if (_webui_is_process_running("chrome.exe") && _webui_browser_exist(win, Chromium)) + return Chromium; + #elif __linux__ + // Linux + if (_webui_is_process_running("chrome") && _webui_browser_exist(win, Chrome)) + return Chrome; + else if (_webui_is_process_running("msedge") && _webui_browser_exist(win, Edge)) + return Edge; + // Epic... + else if (_webui_is_process_running("vivaldi-bin") && _webui_browser_exist(win, Vivaldi)) + return Vivaldi; + else if (_webui_is_process_running("brave") && _webui_browser_exist(win, Brave)) + return Brave; + else if (_webui_is_process_running("firefox") && _webui_browser_exist(win, Firefox)) + return Firefox; + else if (_webui_is_process_running("yandex_browser") && _webui_browser_exist(win, Yandex)) + return Yandex; + // Chromium check is never reached if Google Chrome is installed + // due to duplicate process name `chrome` + else if (_webui_is_process_running("chrome") && _webui_browser_exist(win, Chromium)) + return Chromium; + #else + // macOS + if (_webui_is_process_running("Google Chrome") && _webui_browser_exist(win, Chrome)) + return Chrome; + else if (_webui_is_process_running("Epic") && _webui_browser_exist(win, Epic)) + return Epic; + else if (_webui_is_process_running("Vivaldi") && _webui_browser_exist(win, Vivaldi)) + return Vivaldi; + else if (_webui_is_process_running("Brave") && _webui_browser_exist(win, Brave)) + return Brave; + else if (_webui_is_process_running("Firefox") && _webui_browser_exist(win, Firefox)) + return Firefox; + else if (_webui_is_process_running("Yandex") && _webui_browser_exist(win, Yandex)) + return Yandex; + else if (_webui_is_process_running("Chromium") && _webui_browser_exist(win, Chromium)) + return Chromium; + #endif + + // No browser process is already running, let's return the best available installed one based on OS. + + #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) + // Windows + if (_webui_browser_exist(win, Chrome)) return Chrome; + if (_webui_browser_exist(win, Edge)) return Edge; + if (_webui_browser_exist(win, Epic)) return Epic; + if (_webui_browser_exist(win, Vivaldi)) return Vivaldi; + if (_webui_browser_exist(win, Brave)) return Brave; + if (_webui_browser_exist(win, Firefox)) return Firefox; + if (_webui_browser_exist(win, Yandex)) return Yandex; + if (_webui_browser_exist(win, Chromium)) return Chromium; + #elif __APPLE__ + // macOS + if (_webui_browser_exist(win, Chrome)) return Chrome; + if (_webui_browser_exist(win, Edge)) return Edge; + if (_webui_browser_exist(win, Chromium)) return Chromium; + if (_webui_browser_exist(win, Epic)) return Epic; + if (_webui_browser_exist(win, Vivaldi)) return Vivaldi; + if (_webui_browser_exist(win, Brave)) return Brave; + if (_webui_browser_exist(win, Firefox)) return Firefox; + if (_webui_browser_exist(win, Yandex)) return Yandex; + #else + // Linux + if (_webui_browser_exist(win, Chrome)) return Chrome; + if (_webui_browser_exist(win, Edge)) return Edge; + if (_webui_browser_exist(win, Chromium)) return Chromium; + if (_webui_browser_exist(win, Epic)) return Epic; + if (_webui_browser_exist(win, Vivaldi)) return Vivaldi; + if (_webui_browser_exist(win, Brave)) return Brave; + if (_webui_browser_exist(win, Firefox)) return Firefox; + if (_webui_browser_exist(win, Yandex)) return Yandex; + #endif + + // No browser found!, return AnyBrowser. + return AnyBrowser; +} + +static bool _webui_show(_webui_window_t* win, struct mg_connection* client, const char* content, size_t browser) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show([%zu])\n", browser); + #endif + + // Prevent main loops from breaking. + win->is_showing = true; + + // Empty content means: use folder mode with the current root path, + // so index fallback can be resolved by WebUI. + if (_webui_is_empty(content)) { + bool empty_status = _webui_show_window( + win, client, win->server_root_path, WEBUI_SHOW_FOLDER, browser + ); + win->is_showing = false; + webui_focus(win->num); + return empty_status; + } + + // Some wrappers do not guarantee pointers stay valid, + // so, let's make our copy. + size_t content_len = _webui_strlen(content); + const char* content_cpy = (const char*)_webui_malloc(content_len); + memcpy((char*)content_cpy, content, content_len); + + bool status = false; + + // URL + if (_webui_is_valid_url(content_cpy)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show() -> URL: [%s]\n", content_cpy); + #endif + status = _webui_show_window(win, client, content_cpy, WEBUI_SHOW_URL, browser); + } + // Embedded HTML + else if (strstr(content_cpy, " Embedded HTML:\n"); + _webui_log_debug("- - -[HTML]- - - - - - - - - -\n%s\n- - - - - - - - - - - - - - - -\n", content_cpy); + #endif + status = _webui_show_window(win, client, content_cpy, WEBUI_SHOW_HTML, browser); + } + // Folder + else if (_webui_folder_exist(content_cpy)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show() -> Folder: [%s]\n", content_cpy); + #endif + // Set root folder + if (!webui_set_root_folder(win->num, content_cpy)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show() -> Failed to set folder root path\n"); + #endif + _webui_free_mem((void*)content_cpy); + status = false; + } + status = _webui_show_window(win, client, content_cpy, WEBUI_SHOW_FOLDER, browser); + } + // File + else { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show() -> File: [%s]\n", content_cpy); + #endif + if (content_len > WEBUI_MAX_PATH || strstr(content_cpy, "<")) + status = false; + status = _webui_show_window(win, client, content_cpy, WEBUI_SHOW_FILE, browser); + } + + // Reset + win->is_showing = false; + + // Bring the window to front after showing content + if ((browser != NoBrowser) && (!win->hide)) { + webui_focus(win->num); + } + + return status; +} + +// TLS +#ifdef WEBUI_TLS +static int _webui_tls_initialization(void * ssl_ctx, void * ptr) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_tls_initialization()\n"); + #endif + + SSL_CTX * ctx = (SSL_CTX * ) ssl_ctx; + + // Disable security levels. It is The end-user + // responsability to provide a high encryption + // level certificate. While WebUI should just + // use the end-user's certificates. + SSL_CTX_set_security_level(ctx, 0); + + // Load Certificate + BIO * bio_cert = BIO_new_mem_buf((void*)_webui.ssl_cert, -1); + X509 * cert = PEM_read_bio_X509(bio_cert, NULL, 0, NULL); + if (cert == NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_tls_initialization() -> PEM_read_bio_X509 failed\n"); + #endif + WEBUI_ASSERT("PEM_read_bio_X509 failed"); + return -1; + } + if (SSL_CTX_use_certificate(ctx, cert) <= 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_tls_initialization() -> SSL_CTX_use_certificate failed\n"); + #endif + WEBUI_ASSERT("SSL_CTX_use_certificate failed"); + return -1; + } + X509_free(cert); + BIO_free(bio_cert); + + // Load Key + BIO * bio_key = BIO_new_mem_buf((void*)_webui.ssl_key, -1); + EVP_PKEY * private_key = PEM_read_bio_PrivateKey(bio_key, NULL, 0, NULL); + if (private_key == NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_tls_initialization() -> PEM_read_bio_PrivateKey failed\n"); + #endif + WEBUI_ASSERT("PEM_read_bio_PrivateKey failed"); + return -1; + } + if (SSL_CTX_use_PrivateKey(ctx, private_key) <= 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_tls_initialization() -> SSL_CTX_use_PrivateKey failed\n"); + #endif + WEBUI_ASSERT("SSL_CTX_use_PrivateKey failed"); + return -1; + } + EVP_PKEY_free(private_key); + BIO_free(bio_key); + + return 0; +} + +static bool _webui_tls_generate_self_signed_cert(char* root_cert, char* root_key, char* ssl_cert, char* ssl_key) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_tls_generate_self_signed_cert()\n"); + #endif + + int ret = 0; + int bits = 2048; + + // ----- Create Root Certificate ----- + EVP_PKEY * root_pkey = NULL; + EVP_PKEY_CTX * root_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!root_ctx) + return false; + + if (EVP_PKEY_keygen_init(root_ctx) <= 0 || EVP_PKEY_CTX_set_rsa_keygen_bits(root_ctx, bits) <= 0 || + EVP_PKEY_keygen(root_ctx, &root_pkey) <= 0) { + EVP_PKEY_CTX_free(root_ctx); + return false; + } + + EVP_PKEY_CTX_free(root_ctx); + + X509 * root_x509 = X509_new(); + X509_set_version(root_x509, 2); + ASN1_INTEGER_set(X509_get_serialNumber(root_x509), (long) _webui_generate_random_uint32()); + X509_gmtime_adj(X509_get_notBefore(root_x509), 0); + X509_gmtime_adj(X509_get_notAfter(root_x509), (long)(WEBUI_SSL_EXPIRE)); + + X509_NAME * root_name = X509_get_subject_name(root_x509); + X509_NAME_add_entry_by_txt(root_name, "C", MBSTRING_ASC, (const unsigned char *)"CA", -1, -1, + 0); // Country + X509_NAME_add_entry_by_txt(root_name, "O", MBSTRING_ASC, (const unsigned char *)"WebUI Root Authority", -1, -1, 0); // Organization + X509_NAME_add_entry_by_txt(root_name, "OU", MBSTRING_ASC, (const unsigned char *)"WebUI", -1, -1, + 0); // Organizational Unit + X509_NAME_add_entry_by_txt(root_name, "CN", MBSTRING_ASC, (const unsigned char *)"localhost", -1, -1, + 0); // Common Name + X509_NAME_add_entry_by_txt( + root_name, "subjectAltName", MBSTRING_ASC, (const unsigned char *)"127.0.0.1", -1, -1, + 0 + ); // Subject Alternative Name + X509_NAME_add_entry_by_txt(root_name, "ST", MBSTRING_ASC, (const unsigned char *)"WebUI", -1, -1, + 0); // State + X509_NAME_add_entry_by_txt(root_name, "L", MBSTRING_ASC, (const unsigned char *)"WebUI", -1, -1, + 0); // Locality + + X509_set_issuer_name(root_x509, root_name); + X509_set_pubkey(root_x509, root_pkey); + ret = X509_sign(root_x509, root_pkey, EVP_sha256()); + if (ret <= 0) { + X509_free(root_x509); + EVP_PKEY_free(root_pkey); + return false; + } + + // Write Root Certificate and Key + BIO * bio_root_cert = BIO_new(BIO_s_mem()); + PEM_write_bio_X509(bio_root_cert, root_x509); + memset(root_cert, 0, WEBUI_SSL_SIZE); + BIO_read(bio_root_cert, root_cert, (WEBUI_SSL_SIZE - 1)); + + BIO * bio_root_key = BIO_new(BIO_s_mem()); + PEM_write_bio_PrivateKey(bio_root_key, root_pkey, NULL, NULL, 0, NULL, NULL); + memset(root_key, 0, WEBUI_SSL_SIZE); + BIO_read(bio_root_key, root_key, (WEBUI_SSL_SIZE - 1)); + + // ----- Create Server Certificate and sign with Root ----- + EVP_PKEY * pkey = NULL; + EVP_PKEY_CTX * ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!ctx) { + X509_free(root_x509); + EVP_PKEY_free(root_pkey); + return false; + } + + if (EVP_PKEY_keygen_init(ctx) <= 0 || EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) <= 0 || + EVP_PKEY_keygen(ctx, &pkey) <= 0) { + X509_free(root_x509); + EVP_PKEY_free(root_pkey); + EVP_PKEY_CTX_free(ctx); + return false; + } + + EVP_PKEY_CTX_free(ctx); + + X509 * x509 = X509_new(); + X509_set_version(x509, 2); + ASN1_INTEGER_set(X509_get_serialNumber(x509), (long) _webui_generate_random_uint32()); + X509_gmtime_adj(X509_get_notBefore(x509), 0); + X509_gmtime_adj(X509_get_notAfter(x509), (long)(WEBUI_SSL_EXPIRE)); + + X509_NAME * name = X509_get_subject_name(x509); + X509_NAME_add_entry_by_txt(name, "C", MBSTRING_ASC, (const unsigned char *)"CA", -1, -1, + 0); // Country + X509_NAME_add_entry_by_txt(name, "O", MBSTRING_ASC, (const unsigned char *)"WebUI", -1, -1, + 0); // Organization + X509_NAME_add_entry_by_txt(name, "OU", MBSTRING_ASC, (const unsigned char *)"WebUI", -1, -1, + 0); // Organizational Unit + X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_ASC, (const unsigned char *)"localhost", -1, -1, + 0); // Common Name + X509_NAME_add_entry_by_txt( + name, "subjectAltName", MBSTRING_ASC, (const unsigned char *)"127.0.0.1", -1, -1, 0 + ); // Subject Alternative Name + X509_NAME_add_entry_by_txt(name, "ST", MBSTRING_ASC, (const unsigned char *)"WebUI", -1, -1, + 0); // State + X509_NAME_add_entry_by_txt(name, "L", MBSTRING_ASC, (const unsigned char *)"WebUI", -1, -1, + 0); // Locality + + X509_set_issuer_name(x509, root_name); + X509_set_pubkey(x509, pkey); + ret = X509_sign(x509, root_pkey, EVP_sha256()); + if (ret <= 0) { + X509_free(root_x509); + EVP_PKEY_free(root_pkey); + X509_free(x509); + EVP_PKEY_free(pkey); + return false; + } + + // Write the Server Certificate and Key + BIO * bio_cert = BIO_new(BIO_s_mem()); + PEM_write_bio_X509(bio_cert, x509); + memset(ssl_cert, 0, WEBUI_SSL_SIZE); + BIO_read(bio_cert, ssl_cert, (WEBUI_SSL_SIZE - 1)); + + BIO * bio_key = BIO_new(BIO_s_mem()); + PEM_write_bio_PrivateKey(bio_key, pkey, NULL, NULL, 0, NULL, NULL); + memset(ssl_key, 0, WEBUI_SSL_SIZE); + BIO_read(bio_key, ssl_key, (WEBUI_SSL_SIZE - 1)); + + // Cleanup + X509_free(root_x509); + EVP_PKEY_free(root_pkey); + BIO_free_all(bio_root_cert); + BIO_free_all(bio_root_key); + X509_free(x509); + EVP_PKEY_free(pkey); + BIO_free_all(bio_cert); + BIO_free_all(bio_key); + + return true; +} +#endif + +static const char* _webui_get_local_ip(void) { + char *buf = malloc(64); + if (!buf) return NULL; + #ifdef _WIN32 + WSADATA wsa; + if (WSAStartup(MAKEWORD(2,2), &wsa) != 0) { + free(buf); + return NULL; + } + buf[0] = '\0'; + // Approach 1: gethostname + getaddrinfo + char hostname[256] = {0}; + if (gethostname(hostname, sizeof(hostname)) == 0) { + struct addrinfo hints = {0}, *res = NULL; + hints.ai_family = AF_INET; + if (getaddrinfo(hostname, NULL, &hints, &res) == 0) { + char first_ip[INET_ADDRSTRLEN] = {0}; + for (struct addrinfo *p = res; p; p = p->ai_next) { + if (p->ai_family == AF_INET) { + struct sockaddr_in *sa = (struct sockaddr_in*)p->ai_addr; + char ip[INET_ADDRSTRLEN]; + if (inet_ntop(AF_INET, &sa->sin_addr, ip, sizeof(ip))) { + if (strcmp(ip, "127.0.0.1")) { + strncpy(buf, ip, 63); + buf[63] = '\0'; + break; + } + if (!first_ip[0]) { + strncpy(first_ip, ip, sizeof(first_ip)-1); + } + } + } + } + if (!buf[0] && first_ip[0]) { + strncpy(buf, first_ip, 63); + buf[63] = '\0'; + } + freeaddrinfo(res); + } + } + if (buf[0]) { + WSACleanup(); + return buf; + } + // Approach 2: WSAIoctl SIO_GET_INTERFACE_LIST + SOCKET s = socket(AF_INET, SOCK_DGRAM, 0); + if (s != INVALID_SOCKET) { + #define MAX_IFACES 32 + INTERFACE_INFO ifaces[MAX_IFACES]; + DWORD retlen; + if (!WSAIoctl(s, SIO_GET_INTERFACE_LIST, NULL, 0, + ifaces, sizeof(ifaces), &retlen, NULL, NULL)) { + int n = retlen / sizeof(INTERFACE_INFO); + char first_ip[INET_ADDRSTRLEN] = {0}; + for (int i = 0; i < n; i++) { + struct sockaddr_in *sa = (struct sockaddr_in*)&ifaces[i].iiAddress; + char ip[INET_ADDRSTRLEN]; + if (inet_ntop(AF_INET, &sa->sin_addr, ip, sizeof(ip))) { + if (!strcmp(ip, "0.0.0.0")) continue; + if (strcmp(ip, "127.0.0.1")) { + strncpy(buf, ip, 63); + buf[63] = '\0'; + break; + } + if (!first_ip[0]) { + strncpy(first_ip, ip, sizeof(first_ip)-1); + } + } + } + if (!buf[0] && first_ip[0]) { + strncpy(buf, first_ip, 63); + buf[63] = '\0'; + } + } + closesocket(s); + } + WSACleanup(); + if (!buf[0]) { + free(buf); + return NULL; + } + return buf; + #else + struct ifaddrs *ifaddr = NULL, *ifa; + if (getifaddrs(&ifaddr) == -1) { + free(buf); + return NULL; + } + // first non-loopback IPv4 + for (ifa = ifaddr; ifa; ifa = ifa->ifa_next) { + if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET && + (ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_LOOPBACK)) { + struct sockaddr_in *sa = (struct sockaddr_in*)ifa->ifa_addr; + if (inet_ntop(AF_INET, &sa->sin_addr, buf, 64)) { + freeifaddrs(ifaddr); + return buf; + } + } + } + // fallback first IPv4 + for (ifa = ifaddr; ifa; ifa = ifa->ifa_next) { + if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET) { + struct sockaddr_in *sa = (struct sockaddr_in*)ifa->ifa_addr; + if (inet_ntop(AF_INET, &sa->sin_addr, buf, 64)) { + freeifaddrs(ifaddr); + return buf; + } + } + } + freeifaddrs(ifaddr); + free(buf); + return NULL; + #endif +} + +static bool _webui_show_window(_webui_window_t* win, struct mg_connection* client, const char* content, int type, size_t browser) { + + #ifdef WEBUI_LOG + if (type == WEBUI_SHOW_HTML) + _webui_log_debug("[Core]\t\t_webui_show_window(HTML, [%zu])\n", browser); + else if (type == WEBUI_SHOW_URL) + _webui_log_debug("[Core]\t\t_webui_show_window(URL, [%zu])\n", browser); + else if (type == WEBUI_SHOW_FOLDER) + _webui_log_debug("[Core]\t\t_webui_show_window(FOLDER, [%zu])\n", browser); + else + _webui_log_debug("[Core]\t\t_webui_show_window(FILE, [%zu])\n", browser); + #endif + + // Stop any window exit signal as we are going to show a window + _webui_mutex_win_is_exit_now(win, WEBUI_MUTEX_SET_FALSE); + + #if __linux__ + GTK_WEBVIEW_SET_IN_SHOW(win, true) + #endif + + #ifdef WEBUI_TLS + // TLS + if (_webui_is_empty(_webui.ssl_cert) || _webui_is_empty(_webui.ssl_key)) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Generating self-signed TLS " + "certificate\n"); + #endif + + // Generate SSL self-signed certificate once + char* root_cert = (char*)_webui_malloc(WEBUI_SSL_SIZE); + char* root_key = (char*)_webui_malloc(WEBUI_SSL_SIZE); + char* ssl_cert = (char*)_webui_malloc(WEBUI_SSL_SIZE); + char* ssl_key = (char*)_webui_malloc(WEBUI_SSL_SIZE); + if (!_webui_tls_generate_self_signed_cert(root_cert, root_key, ssl_cert, ssl_key)) { + #ifdef WEBUI_LOG + unsigned long err = ERR_get_error(); + char err_buf[1024]; + ERR_error_string_n(err, err_buf, sizeof(err_buf)); + _webui_log_debug( + "[Core]\t\t_webui_show_window() -> Generating self-signed TLS " + "certificate failed:\n%s\n", + err_buf + ); + #endif + _webui_free_mem((void*)root_cert); + _webui_free_mem((void*)root_key); + _webui_free_mem((void*)ssl_cert); + _webui_free_mem((void*)ssl_key); + WEBUI_ASSERT("Generating self-signed TLS certificate failed"); + return false; + } + + _webui.root_cert = root_cert; + _webui.root_key = root_key; + _webui.ssl_cert = ssl_cert; + _webui.ssl_key = ssl_key; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Self-signed SSL/TLS " + "Certificate:\nRoot:\n"); + _webui_log_debug("%s\n", (const char*)_webui.root_cert); + _webui_log_debug("%s\nServer:\n", (const char*)_webui.root_key); + _webui_log_debug("%s\n", (const char*)_webui.ssl_cert); + _webui_log_debug("%s\n", (const char*)_webui.ssl_key); + #endif + } + #endif + + // Status + bool is_window_connected = _webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS); + bool is_server_running = _webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS); + bool is_this_ui_reload = (is_window_connected && is_server_running); // User set new UI content on a running window + bool is_this_new_window = (!is_window_connected && !is_server_running); // New window + bool is_this_empty_server = (!is_window_connected && is_server_running); // Server exit, but not connected + bool is_last_was_no_browser = (win->current_browser == NoBrowser); // Server exit, but not connected, probably by `webui_get_url()` + + // Old Server Cleanup + if (is_this_empty_server) { + if (!is_last_was_no_browser) { + // Wait for old server threads to stop if it's doing cleaning up + // in some OS like Linux + GTK WebView, the old server thread may + // not stop immediately after the old window is closed. + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Waiting for old server thread to stop...\n"); + #endif + _webui_sleep(100); + if (!_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Old server thread stopped.\n"); + #endif + break; + } + if (_webui_timer_is_end(&timer, 1500)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Old server thread did not stop in time.\n"); + #endif + break; + } + } + } + } + + // Initialization + bool keep_user_index_file = false; + if (type == WEBUI_SHOW_URL && win->url != NULL && !_webui_is_empty(content)) { + // Keep previously selected entry file when we only open/reopen + // this window's own local server URL in a browser. + if (strcmp(content, win->url) == 0) { + keep_user_index_file = true; + } else { + size_t base_len = _webui_strlen(win->url); + if (_webui_strlen(content) > base_len && + strncmp(content, win->url, base_len) == 0 && + content[base_len] == '/') { + keep_user_index_file = true; + } + } + } + + // Free previous content if any + if (win->html != NULL) + _webui_free_mem((void*)win->html); + if (win->url != NULL) + _webui_free_mem((void*)win->url); + if (!keep_user_index_file) { + if (win->user_index_file != NULL) + _webui_free_mem((void*)win->user_index_file); + if (win->user_index_file_encoded != NULL) + _webui_free_mem((void*)win->user_index_file_encoded); + } + + // Reset HTML and URL + win->html = NULL; + win->url = NULL; + if (!keep_user_index_file) { + win->user_index_file = NULL; + win->user_index_file_encoded = NULL; + win->allow_index_fallback = false; + } + + // Get network ports + if (win->custom_server_port > 0) { + // Use user's custom port + win->server_port = win->custom_server_port; + } + else if (is_this_ui_reload || is_this_empty_server) { + // This is a UI reload or empty server. + // Let's reuse the same port if still valid + if (win->server_port == 0) { + // Port is not valid, get a new port + win->server_port = _webui_get_free_port(); + } + } + else { + // This is a new window. + // Get a new port + win->server_port = _webui_get_free_port(); + } + + // Generate the server URL + win->url = (char*)_webui_malloc(32); // [http][domain][port] + WEBUI_SN_PRINTF_DYN(win->url, 32, WEBUI_HTTP_PROTOCOL "localhost:%zu", win->server_port); + + // Generate the window URL + char* window_url = NULL; + if (type == WEBUI_SHOW_HTML) { + + const char* user_html = content; + + // Show a window using the embedded HTML + win->is_embedded_html = true; + win->html = (user_html == NULL ? "" : user_html); + + // Set window URL + size_t len = _webui_strlen(win->url); + window_url = (char*)_webui_malloc(len); + WEBUI_STR_COPY_DYN(window_url, len, win->url); + } + else if (type == WEBUI_SHOW_URL) { + + const char* user_url = content; + + // Show a window using a specific URL + // If this URL points to this window's own local server, + // keep server routing state instead of switching to embedded HTML mode. + if (keep_user_index_file) { + win->is_embedded_html = false; + window_url = (char*)user_url; + } else { + win->is_embedded_html = true; + size_t bf_len = (64 + _webui_strlen(user_url)); + char* refresh = (char*)_webui_malloc(bf_len); + WEBUI_SN_PRINTF_DYN(refresh, bf_len, "", user_url); + win->html = refresh; + window_url = (char*)user_url; + } + } + else if (type == WEBUI_SHOW_FOLDER) { + + const char* folder_path = content; + + // Show a window using a local folder + win->is_embedded_html = false; + win->allow_index_fallback = true; + + // Set window URL + window_url = win->url; + } + else { + + // Show a window using a local file + win->is_embedded_html = false; + win->user_index_file = content; + win->user_index_file_encoded = _webui_url_encode(content); + win->allow_index_fallback = false; + + // Generate the URL + size_t bf_len = (64 + _webui_strlen(win->user_index_file_encoded)); + char* url_encoded = (char*)_webui_malloc(bf_len); // [http][domain][port] [file_encoded] + WEBUI_SN_PRINTF_DYN(url_encoded, bf_len, WEBUI_HTTP_PROTOCOL "localhost:%zu/%s", + win->server_port, win->user_index_file_encoded); + + // Set window URL + window_url = url_encoded; + } + + // Run the window + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + + // Start a new window + + if (_webui.ui) { + // Prioritize the server thread if we + // knows that there is UIs running. + + // New server thread + #ifdef _WIN32 + HANDLE thread = CreateThread(NULL, 0, _webui_server_thread, (void*)win, 0, NULL); + win->server_thread = thread; + if (thread != NULL) + CloseHandle(thread); + #else + pthread_t thread; + pthread_create(&thread, NULL, &_webui_server_thread, (void*)win); + pthread_detach(thread); + win->server_thread = thread; + #endif + } + + // Try first to open the UI in a browser if allowed. + bool runBrowser = false; + if (win->allow_browser) { + if (browser != NoBrowser) { + if (!_webui_browser_start(win, window_url, browser)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> App-mode browser failed\n"); + #endif + // Opening App-mode browser failed + // let's try opening UI in native default browser + if (browser == AnyBrowser && _webui_open_url_native(window_url)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Native browser succeeded\n"); + #endif + runBrowser = true; + // To avoid terminating the user's native browser on exit + _webui.current_browser = WEBUI_NATIVE_BROWSER; + } + else { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Native browser failed\n"); + #endif + } + } + else { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> App-mode browser succeeded\n"); + #endif + runBrowser = true; + } + } else { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Starting server only mode (NoBrowser)\n"); + #endif + win->current_browser = NoBrowser; + runBrowser = true; + } + } + + // Try to open the UI in WebView if allowed and browser is failed. + bool runWebView = false; + if (!runBrowser) { + if (win->allow_webview) { + // Trying to use WebView + if (_webui_wv_show(win, window_url)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> WebView Found\n"); + #endif + win->current_browser = Webview; + _webui.current_browser = Webview; + runWebView = true; + } + else { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> WebView Not Found\n"); + #endif + } + } + } + + _webui_free_mem((void*)window_url); + if (browser != NoBrowser) { + if (!runWebView && !runBrowser) { + // Browser and WebView both failed + _webui_mutex_win_is_exit_now(win, WEBUI_MUTEX_SET_TRUE); + _webui_free_mem((void*)win->html); + _webui_free_mem((void*)win->url); + _webui_free_mem((void*)win->user_index_file); + _webui_free_mem((void*)win->user_index_file_encoded); + _webui_free_port(win->server_port); + return false; + } + } + + if (!_webui.ui) { + + // Let the wait() knows that this app + // has atleast one window to wait for + _webui.ui = true; + + // New server thread + #ifdef _WIN32 + HANDLE thread = CreateThread(NULL, 0, _webui_server_thread, (void*)win, 0, NULL); + win->server_thread = thread; + if (thread != NULL) + CloseHandle(thread); + #else + pthread_t thread; + pthread_create(&thread, NULL, &_webui_server_thread, (void*)win); + pthread_detach(thread); + win->server_thread = thread; + #endif + } + + } else { + + // Refresh an existing running window (All connected clients) + + // Packet Protocol Format: + // [...] + // [CMD] + // [URL] + + // Send the packet + if (client) { + // Update single client + _webui_send_client( + win, client, 0, WEBUI_CMD_NAVIGATION, + (const char*)window_url, _webui_strlen(window_url), false + ); + } + else { + // Update all clients + _webui_send_all( + win, 0, WEBUI_CMD_NAVIGATION, + (const char*)window_url, _webui_strlen(window_url) + ); + } + + // Free + _webui_free_mem((void*)window_url); + } + + // Wait for window connection & token validation + if ((browser != NoBrowser) && _webui.config.show_wait_connection) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_show_window() -> Waiting for window connection & token validation\n"); + #endif + + size_t timeout = (_webui.startup_timeout > 0 ? + _webui.startup_timeout : WEBUI_DEF_TIMEOUT + ); + + if (_webui.is_webview_mode) { + + // WebView + + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + + _webui_sleep(10); + + // Process WebView rendering if any + if (_webui.is_webview_mode) { + #ifdef _WIN32 + // ... + #elif __linux__ + if (_webui.is_webview_mode) { + while (gtk_events_pending()) { + gtk_main_iteration_do(0); + } + } + #else + if (!_webui.is_wkwebview_main_run) { + if (_webui.is_webview_mode) { + _webui_macos_wv_process(); + } + } + #endif + } + + // Stop if window is connected & token is valid + if (_webui_mutex_is_single_client_token_valid(win, WEBUI_MUTEX_GET_STATUS)) + break; + + // Stop if timer is finished + if (_webui_timer_is_end(&timer, (timeout * 1000))) + break; + } + } else { + + // Web Browser + + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + + _webui_sleep(10); + + // Stop if window is connected & token is valid + if (_webui_mutex_is_single_client_token_valid(win, WEBUI_MUTEX_GET_STATUS)) + break; + + // Stop if timer is finished + if (_webui_timer_is_end(&timer, (timeout * 1000))) + break; + } + } + + // Return status of the window connection (not token validation) + return _webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS); + } + + // The window is successfully launched. + return true; +} + +static void _webui_window_event( + _webui_window_t* win, size_t connection_id, int event_type, char* element, + size_t event_number, size_t client_id, const char* cookies) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_window_event([%zu], [%zu], [%s])\n", + win->num, connection_id, element); + #endif + + // New Event (General) + webui_event_t e; + e.window = win->num; + e.event_type = event_type; + e.element = element; + e.event_number = event_number; + e.connection_id = connection_id; + e.client_id = client_id; + e.cookies = (char*)cookies; + + // Check for all events-bind functions + if (!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) && win->has_all_events) { + size_t events_cb_index = 0; + bool exist = _webui_get_cb_index(win, "", &events_cb_index); + if (exist && win->cb[events_cb_index] != NULL) { + // Call user all-events cb + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_window_event() -> Calling all-events user callback at address 0x%p\n", win->cb[events_cb_index]); + _webui_log_debug("[Call]\n"); + #endif + e.bind_id = events_cb_index; + win->cb[events_cb_index](&e); + } + } + + if (!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + // Check for the regular bind functions + if (!_webui_is_empty(element)) { + size_t cb_index = 0; + bool exist = _webui_get_cb_index(win, element, &cb_index); + if (exist && win->cb[cb_index] != NULL) { + // Call user cb + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_window_event() -> Calling user callback at address 0x%p\n", win->cb[cb_index]); + _webui_log_debug("[Call]\n"); + #endif + e.bind_id = cb_index; + win->cb[cb_index](&e); + } + } + } + + // Get event inf + webui_event_inf_t* event_inf = win->events[e.event_number]; + if (event_inf != NULL) { + + // Async response wait + if (_webui.config.asynchronous_response) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_window_event() -> Waiting for asynchronous response...\n"); + #endif + bool done = false; + while (!done) { + _webui_sleep(10); + _webui_mutex_lock(&_webui.mutex_async_response); + if (event_inf->done) done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + break; // App is exiting, Stop waiting. + } + } + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_window_event() -> Finished\n"); + #endif +} + +static void _webui_send_client_ws(_webui_window_t* win, struct mg_connection* client, + size_t connection_id, char* packet, size_t packets_size) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_send_client_ws()\n"); + _webui_log_debug("[Core]\t\t_webui_send_client_ws() -> Client #%zu\n", connection_id); + _webui_log_debug("[Core]\t\t_webui_send_client_ws() -> Packet size: %zu bytes \n", packets_size); + _webui_log_debug("[Core]\t\t_webui_send_client_ws() -> Packet hex : [ "); + _webui_print_hex(packet, packets_size); + _webui_log_debug("]\n"); + #endif + + if (win == NULL || client == NULL) { + WEBUI_ASSERT("_webui_send_client_ws() null ptr"); + } + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS) || packet == NULL || + packets_size < WEBUI_PROTOCOL_SIZE) + return; + + int ret = 0; + if (win->num > 0 && win->num < WEBUI_MAX_IDS) { + if (client != NULL) { + // Mutex + _webui_mutex_lock(&_webui.mutex_send); + ret = mg_websocket_write(client, MG_WEBSOCKET_OPCODE_BINARY, packet, packets_size); + _webui_mutex_unlock(&_webui.mutex_send); + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_send_client_ws() -> %d bytes sent.\n", ret); + #endif +} + +static char* _webui_get_current_path(void) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_current_path()\n"); + #endif + + char* path = (char*)_webui_malloc(WEBUI_MAX_PATH); + if (WEBUI_GET_CURRENT_DIR(path, WEBUI_MAX_PATH) == NULL) + path[0] = 0x00; + + return path; +} + +static void _webui_free_port(size_t port) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_free_port([%zu])\n", port); + #endif + + if (port == 0) + return; + + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (_webui.used_ports[i] == port) { + _webui.used_ports[i] = 0; + break; + } + } +} + +static size_t _webui_get_free_port(void) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_free_port()\n"); + #endif + + size_t port = (rand() % (WEBUI_MAX_PORT + 1 - WEBUI_MIN_PORT)) + WEBUI_MIN_PORT; + + for (size_t i = WEBUI_MIN_PORT; i <= WEBUI_MAX_PORT; i++) { + + // Search [port] in [_webui.used_ports] + bool found = false; + for (size_t j = 0; j < WEBUI_MAX_IDS; j++) { + if (_webui.used_ports[j] == port) { + found = true; + break; + } + } + + if (found) + // Port used by local window + port = (rand() % (WEBUI_MAX_PORT + 1 - WEBUI_MIN_PORT)) + WEBUI_MIN_PORT; + else { + if (_webui_port_is_used(port)) + // Port used by an external app + port = (rand() % (WEBUI_MAX_PORT + 1 - WEBUI_MIN_PORT)) + WEBUI_MIN_PORT; + else + // Port is free + break; + } + } + + // Add + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (_webui.used_ports[i] == 0) { + _webui.used_ports[i] = port; + break; + } + } + + return port; +} + +static void _webui_init(void) { + + if (_webui.initialized) + return; + memset(&_webui, 0, sizeof(_webui_core_t)); + _webui.initialized = true; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\tWebUI v" + WEBUI_VERSION " (" + WEBUI_OS ", " + WEBUI_COMPILER ", " + WEBUI_LIB_TYPE ", " + WEBUI_SECURE ")\n"); + _webui_log_debug("[Core]\t\t_webui_init()\n"); + #endif + + // Initializing mutex + _webui_mutex_init(&_webui.mutex_server_start); + _webui_mutex_init(&_webui.mutex_send); + _webui_mutex_init(&_webui.mutex_receive); + _webui_mutex_init(&_webui.mutex_wait); + _webui_mutex_init(&_webui.mutex_bridge); + _webui_mutex_init(&_webui.mutex_js_run); + _webui_mutex_init(&_webui.mutex_win_connect); + _webui_mutex_init(&_webui.mutex_app_exit_now); + _webui_mutex_init(&_webui.mutex_is_more_servers); + _webui_mutex_init(&_webui.mutex_http_handler); + _webui_mutex_init(&_webui.mutex_client); + _webui_mutex_init(&_webui.mutex_async_response); + _webui_mutex_init(&_webui.mutex_mem); + _webui_mutex_init(&_webui.mutex_token); + _webui_mutex_init(&_webui.mutex_js_run_id); + _webui_mutex_init(&_webui.mutex_ws_process_number); + _webui_condition_init(&_webui.condition_wait); + + // Random + #ifdef _WIN32 + srand((unsigned int) time(NULL)); + #else + srand(time(NULL)); + #endif + + // Initializing core + _webui.startup_timeout = WEBUI_DEF_TIMEOUT; + _webui.executable_path = _webui_get_current_path(); + _webui.default_server_root_path = (char*)_webui_malloc(WEBUI_MAX_PATH); + + // Initializing configs + _webui.config.show_wait_connection = true; + _webui.config.use_cookies = true; + + // Initializing server services + #ifdef WEBUI_TLS + if ((unsigned)mg_init_library(MG_FEATURES_TLS) != (unsigned)MG_FEATURES_TLS) { + WEBUI_ASSERT("mg_init_library() failed"); + } + #else + mg_init_library(0); + #endif +} + +static const char* _webui_url_encode(const char* str) { + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_url_encode()\n"); + #endif + + const char* hex = "0123456789ABCDEF"; + size_t len = _webui_strlen(str); + char* encoded = (char*)_webui_malloc(4 * len + 1); + if (!encoded) + return NULL; + + char* pOutput = encoded; + while(*str) { + unsigned char byte = (unsigned char)(*str); + if (isalnum(byte) || byte == '-' || byte == '_' || byte == '.' || byte == '~') { + * pOutput++ = byte; + } else { + * pOutput++ = '%'; + * pOutput++ = hex[byte >> 4]; + * pOutput++ = hex[byte&15]; + } + str++; + } + + return (const char*)encoded; +} + +static bool _webui_get_cb_index(_webui_window_t* win, const char* element, size_t* id) { + + _webui_mutex_lock(&_webui.mutex_bridge); + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_get_cb_index([%zu])\n", win->num); + _webui_log_debug("[Core]\t\t_webui_get_cb_index() -> Element: [%s]\n", element); + #endif + + // Search + if (element != NULL) { + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (win->html_elements[i] != NULL) { + if (strcmp(win->html_elements[i], element) == 0) { + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_get_cb_index() -> Found at %zu\n", i); + #endif + _webui_mutex_unlock(&_webui.mutex_bridge); + *id = i; + return true; + } + } + } + } + + #ifdef WEBUI_LOG_VERBOSE + _webui_log_debug("[Core]\t\t_webui_get_cb_index() -> Not found\n"); + #endif + + _webui_mutex_unlock(&_webui.mutex_bridge); + return false; +} + +#ifdef WEBUI_LOG +static void _webui_print_hex(const char* data, size_t len) { + for (size_t i = 0; i < len; i++) { + _webui_log_debug("0x%02X ", (unsigned char)* data); + data++; + } +} +static void _webui_print_ascii(const char* data, size_t len) { + // This function is used to print the protocol binary packets. the packet + // may have ASCII and `0x00` inside text, as well as other non-ascii bytes + + if (len <= 128) { + // Print all data if size is 128 or less + for (size_t i = 0; i < len; i++) { + register unsigned char c = (unsigned char)* data; + if (c < 32 || c > 126) { + _webui_log_debug("[0x%02X]", c); + } else { + _webui_log_debug("%c", c); + } + data++; + } + } else { + // Print first 64 bytes + for (size_t i = 0; i < 64; i++) { + register unsigned char c = (unsigned char)* data; + if (c < 32 || c > 126) { + _webui_log_debug("[0x%02X]", c); + } else { + _webui_log_debug("%c", c); + } + data++; + } + + // Print ellipsis + _webui_log_debug(" ... "); + + // Print last 64 bytes + data = data + (len - 64); + for (size_t i = 0; i < 64; i++) { + register unsigned char c = (unsigned char)* data; + if (c < 32 || c > 126) { + _webui_log_debug("[0x%02X]", c); + } else { + _webui_log_debug("%c", c); + } + data++; + } + } +} +#endif + +// HTTP Server + +static void _webui_http_send_header( + _webui_window_t* win, struct mg_connection* client, + const char* mime_type, size_t body_len, bool cache) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_send_header([%zu])\n", win->num); + _webui_log_debug("[Core]\t\t_webui_http_send_header() -> mime_type: [%s]\n", mime_type); + _webui_log_debug("[Core]\t\t_webui_http_send_header() -> body_len: [%zu]\n", body_len); + _webui_log_debug("[Core]\t\t_webui_http_send_header() -> cache: [%d]\n", cache); + #endif + + const char* no_cache = "no-cache, no-store, must-revalidate, private, max-age=0"; + const char* with_cache = "public, max-age=31536000"; + const char* cache_header = (cache ? with_cache : no_cache); + + // Cookies + bool set_cookies = false; + size_t new_client_id = 0; + if (_webui.config.use_cookies) { + // Cookies config is enabled + char cookies[WEBUI_COOKIES_BUF] = {0}; + _webui_get_cookies(client, cookies); + bool client_found = false; + if (!_webui_is_empty(cookies)) { + size_t client_id = 0; + if (_webui_client_cookies_get_id(win, cookies, &client_id)) { + client_found = true; + } + } + if (!client_found) { + // Browser does not have cookies yet, let's set a new cookies + char new_auth_cookies[WEBUI_COOKIES_BUF]; + _webui_generate_cookies(new_auth_cookies, WEBUI_COOKIES_LEN); + if (_webui_client_cookies_save(win, new_auth_cookies, &new_client_id)) { + set_cookies = true; + _webui.cookies_single_set[win->num] = true; + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_send() -> New auth cookies [%s]\n", + _webui.cookies[new_client_id] + ); + #endif + } + else { + // Cookies list is full + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_send() -> Cookies list is full\n"); + #endif + } + } + } + + // [header only] + char buffer[1024] = {0}; + int to_send = 0; + if (set_cookies) { + // Header with auth cookies + to_send = WEBUI_SN_PRINTF_STATIC(buffer, sizeof(buffer), + "HTTP/1.1 200 OK\r\n" + "Set-Cookie: webui_auth=%s; Path=/; HttpOnly; SameSite=Strict\r\n" + "Access-Control-Allow-Origin: *\r\n" + "Cache-Control: %s\r\n" + "Content-Type: %s\r\n" + "Content-Length: %zu\r\n" + "Connection: close\r\n\r\n", + _webui.cookies[new_client_id], + cache_header, mime_type, body_len + ); + } + else { + // Header without auth cookies + to_send = WEBUI_SN_PRINTF_STATIC(buffer, sizeof(buffer), + "HTTP/1.1 200 OK\r\n" + "Access-Control-Allow-Origin: *\r\n" + "Cache-Control: %s\r\n" + "Content-Type: %s\r\n" + "Content-Length: %zu\r\n" + "Connection: close\r\n\r\n", + cache_header, mime_type, body_len + ); + } + + #ifdef WEBUI_LOG + _webui_log_debug("---[ HTTP Header ]-----------------\n"); + _webui_log_debug("%s", buffer); + _webui_log_debug("\n-----------------------------------\n"); + #endif + + // Send + mg_write(client, buffer, to_send); +} + +static void _webui_http_send_file( + _webui_window_t* win, struct mg_connection* client, + const char* mime_type, const char* path, bool cache) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_send_file([%zu])\n", win->num); + #endif + + // Open the file + FILE* file = NULL; + WEBUI_FILE_OPEN(file, path, "rb"); + if (!file) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_send_file() -> Can't open file [%s]\n", path); + #endif + _webui_http_send_error(client, webui_html_res_not_available, 404); + return; + } + + // Get file size + fseek(file, 0, SEEK_END); + size_t file_size = ftell(file); + fseek(file, 0, SEEK_SET); + + // Send header + _webui_http_send_header(win, client, mime_type, file_size, cache); + + // Send body + mg_send_file_body(client, path); + + fclose(file); +} + +static void _webui_http_send( + _webui_window_t* win, struct mg_connection* client, + const char* mime_type, const char* body, size_t body_len, bool cache) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_send([%zu])\n", win->num); + #endif + + // Send header + _webui_http_send_header(win, client, mime_type, body_len, cache); + + // Send body + mg_write(client, body, body_len); +} + +static void _webui_http_send_error(struct mg_connection* client, const char* body, int status) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_send_error()\n"); + #endif + + // [header][body] + int to_send = 0; + size_t body_len = _webui_strlen(body); + size_t buffer_len = (512 + body_len); + char* buffer = (char*)_webui_malloc(buffer_len); + to_send = WEBUI_SN_PRINTF_DYN(buffer, buffer_len, + "HTTP/1.1 %d OK\r\n" + "Content-Type: text/html; charset=utf-8\r\n" + "Cache-Control: no-cache, no-store, must-revalidate, private, max-age=0\r\n" + "Pragma: no-cache\r\n" + "Expires: 0\r\n" + "Content-Length: %zu\r\n" + "Connection: close\r\n\r\n%s", + status, body_len, body + ); + + // Send + mg_write(client, buffer, to_send); + _webui_free_mem((void*)buffer); +} + +#ifdef WEBUI_LOG +static int _webui_http_log(const struct mg_connection* client, const char* message) { + (void)client; + _webui_log_debug("[Core]\t\t_webui_http_log()\n"); + _webui_log_debug("[Core]\t\t_webui_http_log() -> Log: %s.\n", message); + return 1; +} +#endif + +// static size_t _webui_hash_djb2(const char* s) { +// // DJB2 Algorithm +// size_t hash = 5381; +// int c; +// while ((c = *s++)) { +// // hash * 33 + c +// hash = ((hash << 5) + hash) + c; +// } +// return hash; +// } + +static void _webui_generate_cookies(char* cookies, size_t length) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_generate_cookies()\n"); + #endif + const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + size_t charset_size = sizeof(charset) - 1; + for (size_t i = 0; i < length - 1; i++) { + uint32_t random_value = _webui_generate_random_uint32(); + int key = random_value % charset_size; + cookies[i] = charset[key]; + } + cookies[length - 1] = '\0'; +} + +static bool _webui_client_cookies_save(_webui_window_t* win, const char* cookies, size_t* client_id) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_client_cookies_save()\n"); + #endif + // [win number][_][cookies] + char win_cookies[WEBUI_COOKIES_BUF]; + WEBUI_SN_PRINTF_STATIC(win_cookies, sizeof(win_cookies), "%zu_%s", win->num, cookies); + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (_webui.cookies[i] == NULL) { + _webui.cookies[i] = _webui_str_dup(win_cookies); + *client_id = i; + return true; + } + } + // List is full + return false; +} + +static bool _webui_client_cookies_get_id(_webui_window_t* win, const char* cookies, size_t* client_id) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_client_cookies_get_id()\n"); + #endif + if (cookies) { + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (_webui.cookies[i] != NULL) { + if (strcmp(_webui.cookies[i], cookies) == 0) { + *client_id = i; + return true; + } + } + } + } + // Not found + return false; +} + +static size_t _webui_client_get_id(_webui_window_t* win, struct mg_connection* client) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_client_get_id()\n"); + #endif + + if (!_webui_is_mg_client_valid(win, client)) + return 0; // Client is not valid + + size_t client_id = 0; + if (_webui.config.use_cookies) { + char cookies[WEBUI_COOKIES_BUF] = {0}; + _webui_get_cookies(client, cookies); + _webui_client_cookies_get_id(win, cookies, &client_id); + } + return client_id; +} + +// static void _webui_client_cookies_free_all(_webui_window_t* win) { +// #ifdef WEBUI_LOG +// _webui_log_debug("[Core]\t\t_webui_client_cookies_free_all()\n"); +// #endif +// // [win number] +// char win_num[24]; +// WEBUI_SN_PRINTF_STATIC(win_num, sizeof(win_num), "%zu_", win->num); +// size_t len = strlen(win_num); +// for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { +// if (_webui.cookies[i] != NULL) { +// // [{win_number}_{cookies}] +// if (strncmp(_webui.cookies[i], win_num, len) == 0) { +// _webui_free_mem((void*)_webui.cookies[i]); +// _webui.cookies[i] = NULL; +// } +// } +// } +// // Single +// _webui.cookies_single_set[win->num] = false; +// } + +// static void _webui_client_cookies_free(_webui_window_t* win, struct mg_connection* client) { +// #ifdef WEBUI_LOG +// _webui_log_debug("[Core]\t\t_webui_client_cookies_free()\n"); +// #endif +// char cookies[WEBUI_COOKIES_BUF] = {0}; +// _webui_get_cookies(client, cookies); +// if (cookies != NULL) { +// size_t client_id = 0; +// if (_webui_client_cookies_get_id(win, cookies, &client_id)) { +// _webui_free_mem((void*)_webui.cookies[client_id]); +// _webui.cookies[client_id] = NULL; +// } +// } +// } + +static const char* _webui_get_cookies_full(const struct mg_connection* client) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_cookies_full()\n"); + #endif + + if(!_webui_is_mg_client_valid(NULL, client)) + return ""; // Client is not valid + + const char* header = mg_get_header(client, "Cookie"); + if (header != NULL) + return header; + + return ""; +} + +static void _webui_get_cookies(const struct mg_connection* client, char* buffer) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_cookies()\n"); + #endif + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) + return; // App is exiting, Stop getting cookies. + + if(!_webui_is_mg_client_valid(NULL, client)) + return; // Client is not valid + + const char* header = mg_get_header(client, "Cookie"); + if (!_webui_is_empty(header)) { + mg_get_cookie(header, "webui_auth", buffer, WEBUI_COOKIES_BUF); + } +} + +static int _webui_http_handler(struct mg_connection* client, void * _win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler()\n"); + #endif + + // Mutex + _webui_mutex_lock(&_webui.mutex_http_handler); + + // Get the window object + _webui_window_t* win = _webui_dereference_win_ptr(_win); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || win == NULL) { + _webui_mutex_unlock(&_webui.mutex_http_handler); + return 500; // Internal Server Error + } + + if(!_webui_is_mg_client_valid(win, client)) + return 500; // Client is not valid + + // Initializing + int http_status_code = 200; + const struct mg_request_info * ri = mg_get_request_info(client); + const char* url = ri->local_uri; + + if (strcmp(ri->request_method, "GET") == 0) { + + // GET + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t---[ HTTP Request ]----------------\n"); + _webui_log_debug("[Core]\t\t_webui_http_handler() -> GET [%s]\n", url); + #endif + + // Cookies + size_t client_id = 0; + bool client_found = false; + if (_webui.config.use_cookies) { + // Cookies config is enabled + char cookies[WEBUI_COOKIES_BUF] = {0}; + _webui_get_cookies(client, cookies); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Client cookies [%s]\n", cookies); + #endif + // Get client ID based on `webui_auth` cookies + if (_webui_client_cookies_get_id(win, cookies, &client_id)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Client ID found [%zu]\n", client_id); + #endif + client_found = true; + } + #ifdef WEBUI_LOG + else { + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Client ID not found\n"); + } + #endif + } + + // Single client authorisation + if (!_webui.config.multi_client) { + if (!client_found) { + if ((_webui.cookies_single_set[win->num])) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> 403 Forbidden\n"); + #endif + _webui_http_send_error(client, webui_html_served, 403); + _webui_mutex_unlock(&_webui.mutex_http_handler); + return 403; + } + } else _webui.cookies_single_set[win->num] = true; + } + + // Let the server thread waits more time for `webui.js` + win->wait = true; + + if (strcmp(url, "/webui.js") == 0) { + + // WebUI Bridge + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> WebUI-Bridge\n"); + #endif + + // Generate JavaScript bridge + const char* js = _webui_generate_js_bridge(win, client); + + if (js != NULL) { + // Send 200 + _webui_http_send(win, client, "application/javascript", js, _webui_strlen(js), false); + _webui_free_mem((void*)js); + } else { + // Non-authorized request to `webui.js`, like requesting twice + // Send 200 (Empty) + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Non-authorized request to webui.js\n"); + #endif + _webui_http_send(win, client, "application/javascript", "", 0, false); + } + } + else if ((win->files_handler != NULL || (win->files_handler_window != NULL)) && (_webui_external_file_handler(win, client, client_id) != 0)) { + + // File already handled by the custom external file handler + // nothing to do now. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Handled by custom external file handler\n"); + #endif + } + else if (strcmp(url, "/") == 0) { + + // [/] + + if (win->is_embedded_html) { + + // Main HTML + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Embedded Index HTML\n"); + #endif + + #ifdef WEBUI_LOG + _webui_log_debug("---[ HTML (%zu bytes)]--------------\n", _webui_strlen(win->html)); + _webui_log_debug("%s", win->html); + _webui_log_debug("\n------------------------------------\n"); + #endif + + // Send 200 + _webui_http_send(win, client, "text/html", win->html, _webui_strlen(win->html), false); + } + else { + + // Looking for index file and redirect + + const char* index_files[5]; + size_t index_files_len = 0; + + if (!_webui_is_empty(win->user_index_file)) { + index_files[index_files_len++] = win->user_index_file; + } + if (win->allow_index_fallback) { + index_files[index_files_len++] = "index.html"; + index_files[index_files_len++] = "index.htm"; + index_files[index_files_len++] = "index.ts"; + index_files[index_files_len++] = "index.js"; + } + + // [Path][Sep][File Name] + size_t bf_len = (_webui_strlen(win->server_root_path) + 1 + 24); + char* index_path = (char*)_webui_malloc(bf_len); + for (size_t i = 0; i < index_files_len; i++) { + WEBUI_SN_PRINTF_DYN(index_path, bf_len, "%s%s%s", + win->server_root_path, os_sep, index_files[i] + ); + if (_webui_file_exist(index_path)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> 302 Redirecting to [%s]\n", index_files[i]); + #endif + mg_send_http_redirect(client, index_files[i], 302); + _webui_free_mem((void*)index_path); + _webui_mutex_unlock(&_webui.mutex_http_handler); + return 302; + } + } + + // No index file is found in this folder + _webui_free_mem((void*)index_path); + _webui_http_send_error(client, webui_html_res_not_available, 404); + http_status_code = 404; + } + } + else if (strcmp(url, "/favicon.ico") == 0 || strcmp(url, "/favicon.svg") == 0) { + + // Favicon + + if (win->icon != NULL && win->icon_type != NULL) { + + // Custom user icon + + // User icon 200 + _webui_http_send(win, client, win->icon_type, win->icon, _webui_strlen(win->icon), false); + } + else if (_webui_file_exist_mg(win, client)) { + + // Local icon file + http_status_code = _webui_serve_file(win, client, client_id); + } + else { + + // Default embedded icon + + if (strcmp(url, "/favicon.ico") == 0) { + + mg_send_http_redirect(client, "favicon.svg", 302); + http_status_code = 302; + } + else { + + // Default icon 200 + _webui_http_send(win, client, webui_def_icon_type, webui_def_icon, _webui_strlen(webui_def_icon), false); + } + } + } else { + + // [/file] or [/folder] + + // [Path][Sep][folder] + char* folder_path = _webui_get_full_path(win, url); + + bool is_folder = _webui_folder_exist(folder_path); + bool is_file = (_webui_file_exist(folder_path) && !is_folder); + + if (is_file) { + + // [/file] + + bool script = false; + if (win->runtime != None) { + const char* extension = _webui_get_extension(url); + const char* index_extensions[] = { + "js", "ts" + }; + for (size_t i = 0; i < (sizeof(index_extensions) / sizeof(index_extensions[0])); i++) { + if (strcmp(extension, index_extensions[i]) == 0) { + script = true; + break; + } + } + } + + if (script) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Interpret local script file\n"); + #endif + + // Serve as a script file to be interpreted by + // an external interpreter (Deno, Bun, Nodejs) + http_status_code = _webui_interpret_file(win, client, NULL, client_id); + } + else { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Local file\n"); + #endif + + // Serve as a normal text-based file + http_status_code = _webui_serve_file(win, client, client_id); + } + } + else if (is_folder) { + + // [/folder] + + // Looking for index file and redirect + + const char* index_files[5]; + size_t index_files_len = 0; + + char user_index_name[WEBUI_MAX_PATH] = {0}; + if (!_webui_is_empty(win->user_index_file)) { + const char* user_index = win->user_index_file; + const char* p = strrchr(user_index, '/'); + const char* filename = (p == NULL ? user_index : (p + 1)); + if (!_webui_is_empty(filename)) { + WEBUI_SN_PRINTF_STATIC(user_index_name, WEBUI_MAX_PATH, "%s", filename); + index_files[index_files_len++] = user_index_name; + } + } + + if (win->allow_index_fallback) { + index_files[index_files_len++] = "index.html"; + index_files[index_files_len++] = "index.htm"; + index_files[index_files_len++] = "index.ts"; + index_files[index_files_len++] = "index.js"; + } + + // [Path][Sep][File Name] + size_t bf_len = (_webui_strlen(folder_path) + 1 + 24); + char* index_path = (char*)_webui_malloc(bf_len); + for (size_t i = 0; i < index_files_len; i++) { + WEBUI_SN_PRINTF_DYN(index_path, bf_len, "%s%s%s", folder_path, os_sep, index_files[i]); + if (_webui_file_exist(index_path)) { + // [URL][optional /][Index Name] (avoid generating "//") + const char* sep = ((_webui_strlen(url) > 0) && (url[_webui_strlen(url) - 1] == '/')) ? "" : "/"; + size_t redirect_len = (_webui_strlen(url) + _webui_strlen(sep) + _webui_strlen(index_files[i]) + 1); + char* redirect_url = (char*)_webui_malloc(redirect_len); + WEBUI_SN_PRINTF_DYN(redirect_url, redirect_len, "%s%s%s", url, sep, index_files[i]); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> 302 Redirecting to [%s]\n", redirect_url); + #endif + mg_send_http_redirect(client, redirect_url, 302); + _webui_free_mem((void*)redirect_url); + _webui_free_mem((void*)folder_path); + _webui_free_mem((void*)index_path); + _webui_mutex_unlock(&_webui.mutex_http_handler); + return 302; + } + } + + // No index file is found in this folder + _webui_free_mem((void*)folder_path); + _webui_free_mem((void*)index_path); + _webui_http_send_error(client, webui_html_res_not_available, 404); + http_status_code = 404; + } + else { + + // [invalid] + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Not found\n"); + #endif + + // No file or folder is found at this path + _webui_http_send_error(client, webui_html_res_not_available, 404); + _webui_free_mem((void*)folder_path); + http_status_code = 404; + } + + // Clear + _webui_free_mem((void*)folder_path); + } + } else { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> Unknown request method [%s]\n", ri->request_method); + #endif + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_http_handler() -> HTTP Status Code: %d\n", http_status_code); + #endif + + _webui_mutex_unlock(&_webui.mutex_http_handler); + return http_status_code; +} + +static int _webui_ws_connect_handler(const struct mg_connection* client, void * _win) { + (void)client; + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler()\n"); + #endif + + // Dereference + _webui_window_t* win = _webui_dereference_win_ptr(_win); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || win == NULL) + return 1; + + // Check connection status + if (!_webui.config.multi_client) { + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + // Multi-client is disabled, and the single client already connected. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler() -> Single client already connected\n"); + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler() -> Non-authorized connection\n"); + #endif + // Block handshake + return 1; + } + } + + // Cookies + size_t client_id = 0; + bool client_found = false; + if (_webui.config.use_cookies) { + // Cookies config is enabled + char cookies[WEBUI_COOKIES_BUF] = {0}; + _webui_get_cookies(client, cookies); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler() -> Client cookies [%s]\n", cookies); + #endif + // Get client ID based on `webui_auth` cookies + if (_webui_client_cookies_get_id(win, cookies, &client_id)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler() -> Client ID found [%zu]\n", client_id); + #endif + client_found = true; + } + #ifdef WEBUI_LOG + else { + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler() -> Client ID not found\n"); + } + #endif + } + + // Single client authorisation + if (!_webui.config.multi_client) { + if (!client_found) { + if ((_webui.cookies_single_set[win->num])) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler() -> 403 Forbidden\n"); + #endif + // Block handshake + return 1; + } + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_connect_handler() -> Connection authentication OK\n"); + #endif + + // OK. Process handshake + return 0; +} + +static void _webui_ws_ready_handler(struct mg_connection* client, void * _win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_ready_handler()\n"); + #endif + + // Dereference + _webui_window_t* win = _webui_dereference_win_ptr(_win); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || win == NULL) + return; + + _webui_receive(win, client, WEBUI_WS_OPEN, NULL, 0); +} + +static int _webui_ws_data_handler(struct mg_connection* client, int opcode, char* data, size_t datasize, void * _win) { + (void)client; + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_data_handler()\n"); + #endif + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || datasize < WEBUI_PROTOCOL_SIZE) + return 1; // OK + + switch(opcode&0xf) { + + case MG_WEBSOCKET_OPCODE_BINARY: { + _webui_window_t* win = _webui_dereference_win_ptr(_win); + if (win != NULL) + _webui_receive(win, client, WEBUI_WS_DATA, data, datasize); + break; + } + case MG_WEBSOCKET_OPCODE_TEXT: { + break; + } + case MG_WEBSOCKET_OPCODE_PING: { + break; + } + case MG_WEBSOCKET_OPCODE_PONG: { + break; + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_data_handler() -> Finished\n"); + #endif + + // OK + return 1; +} + +static void _webui_ws_close_handler(const struct mg_connection* client, void * _win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_ws_close_handler()\n"); + #endif + + // Dereference + _webui_window_t* win = _webui_dereference_win_ptr(_win); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || win == NULL || !_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + return; + + _webui_receive(win, (struct mg_connection*)client, WEBUI_WS_CLOSE, NULL, 0); +} + +static WEBUI_THREAD_SERVER_START { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread()\n"); + #endif + + // Mutex + _webui_mutex_lock(&_webui.mutex_server_start); + _webui_mutex_is_more_servers_running(WEBUI_MUTEX_SET_TRUE); + + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win == NULL || _webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS)) { + _webui_mutex_unlock(&_webui.mutex_server_start); + WEBUI_THREAD_RETURN + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> URL: [%s]\n", win->num, win->url); + #endif + + // Folder monitor thread + bool monitor_created = false; + #ifdef _WIN32 + HANDLE monitor_thread = NULL; + #else + pthread_t monitor_thread; + #endif + + // Initialization + _webui.servers++; + _webui_mutex_is_server_running(win, WEBUI_MUTEX_SET_TRUE); + if (_webui.startup_timeout < 1) + _webui.startup_timeout = 0; + if (_webui.startup_timeout > WEBUI_MAX_TIMEOUT) + _webui.startup_timeout = WEBUI_MAX_TIMEOUT; + + // Public host access + char host[16] = {0}; + if (!win->is_public) + // Private localhost access + WEBUI_STR_COPY_STATIC(host, sizeof(host), "127.0.0.1:"); + + #ifdef WEBUI_TLS + // HTTP Secure Port + char* server_port = (char*)_webui_malloc(64); + WEBUI_SN_PRINTF_DYN(server_port, 64, "%s%zus", host, win->server_port); + #else + // HTTP Port + char* server_port = (char*)_webui_malloc(64); + WEBUI_SN_PRINTF_DYN(server_port, 64, "%s%zu", host, win->server_port); + #endif + + // Server Options + const char* http_options[] = { + // HTTP + "listening_ports", server_port, + "document_root", win->server_root_path, + "access_control_allow_headers", "*", + "access_control_allow_methods", "*", + "access_control_allow_origin", "*", + #ifdef WEBUI_TLS + "authentication_domain", "localhost", + "enable_auth_domain_check", "no", + "ssl_protocol_version", "4", + "ssl_cipher_list", "ECDH+AESGCM+AES256:!aNULL:!MD5:!DSS", + "strict_transport_security_max_age", WEBUI_SSL_EXPIRE_STR, + #endif + // WS + "websocket_timeout_ms", "3600000", + "enable_websocket_ping_pong", "yes", + NULL, NULL + }; + + // Server Settings + struct mg_callbacks http_callbacks; + struct mg_context * http_ctx = NULL; + memset(&http_callbacks, 0, sizeof(http_callbacks)); + #ifdef WEBUI_TLS + http_callbacks.init_ssl = _webui_tls_initialization; + #endif + #ifdef WEBUI_LOG + http_callbacks.log_message = _webui_http_log; + #endif + + // Start Server + http_ctx = mg_start(&http_callbacks, 0, http_options); + mg_set_request_handler(http_ctx, "/", _webui_http_handler, (void*)win); + + if (http_ctx) { + + mg_set_websocket_handler( + http_ctx, "/_webui_ws_connect", _webui_ws_connect_handler, _webui_ws_ready_handler, + _webui_ws_data_handler, _webui_ws_close_handler, (void*)win + ); + + // Mutex + _webui_mutex_unlock(&_webui.mutex_server_start); + + if (_webui.startup_timeout > 0) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Listening Success\n", + win->num); + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> HTTP/WS Port: %s\n", + win->num, server_port); + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Root path: %s\n", + win->num, win->server_root_path); + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Timeout is %zu seconds\n", + win->num, _webui.startup_timeout); + #endif + + bool stop = false; + win->wait = false; + + while(!stop) { + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + + // UI is not connected + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_server_thread([%zu]) -> Waiting for connection\n", + win->num + ); + #endif + + // Wait for first connection + _webui_timer_t timer_1; + _webui_timer_start(&timer_1); + for (;;) { + + _webui_sleep(1); + + // Stop if we get exit signal + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui_mutex_win_is_exit_now(win, WEBUI_MUTEX_GET_STATUS)) { + stop = true; + break; + } + + // Stop if window is connected + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + break; + + // Stop if timer is finished (Default WEBUI_DEF_TIMEOUT) + if (_webui_timer_is_end(&timer_1, (_webui.startup_timeout * 1000))) + break; + } + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS) && win->wait) { + + // At this moment the browser is already started and HTML + // files are already handled, let's wait more time to give + // the WebSocket an extra seconds to connect. This is helpful + // when a web app have too many files to handel before `webui.js` + // get requested. + + do { + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_server_thread([%zu]) -> Waiting more for connection\n", + win->num + ); + #endif + + win->wait = false; + + _webui_timer_t timer_2; + _webui_timer_start(&timer_2); + for (;;) { + + // Stop if we get exit signal + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui_mutex_win_is_exit_now(win, WEBUI_MUTEX_GET_STATUS)) { + stop = true; + break; + } + + // Stop if window is connected + _webui_sleep(1); + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + break; + + // Stop if timer is finished + if (_webui_timer_is_end(&timer_2, 5000)) + break; + } + } while(win->wait && !_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)); + } + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + stop = true; // First run failed + } + else { + + // UI is connected + win->is_closed = false; + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_server_thread([%zu]) -> Window Connected.\n", + win->num + ); + #endif + + // Folder monitor thread + if (_webui.config.folder_monitor && !monitor_created) { + monitor_created = true; + #ifdef _WIN32 + monitor_thread = CreateThread(NULL, 0, _webui_folder_monitor_thread, (void*)win, 0, NULL); + if (monitor_thread != NULL) + CloseHandle(monitor_thread); + #else + pthread_create(&monitor_thread, NULL, &_webui_folder_monitor_thread, (void*)win); + pthread_detach(monitor_thread); + #endif + } + + while(!stop) { + + // Wait forever for disconnection + + _webui_sleep(1); + + // Exit signal + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui_mutex_win_is_exit_now(win, WEBUI_MUTEX_GET_STATUS)) { + stop = true; + break; + } + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + + // The UI is just get disconnected + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_server_thread([%zu]) -> Window disconnected\n", + win->num + ); + #endif + + if (!win->is_closed) { + + // probably the user did a refresh + // let's wait for re-connection... + + do { + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core]\t\t_webui_server_thread([%zu]) -> Waiting for reconnection\n", + win->num + ); + #endif + + win->wait = false; + + _webui_timer_t timer_3; + _webui_timer_start(&timer_3); + for (;;) { + + // Stop if we get exit signal + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui_mutex_win_is_exit_now(win, WEBUI_MUTEX_GET_STATUS)) { + stop = true; + break; + } + + // Stop if window is re-connected + _webui_sleep(1); + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) + break; + + // Stop if timer is finished + if (_webui_timer_is_end(&timer_3, WEBUI_RELOAD_TIMEOUT)) + break; + } + } while(win->wait && !_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)); + + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + stop = true; + break; + } + } + else { + + // Window get closed + stop = true; + break; + } + } + } + } + } + } + + // Let's check the flag again, there is a change that + // the flag has ben changed during the first loop for + // example when set_timeout() get called after show() + if (_webui.startup_timeout == 0) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Listening Success\n", + win->num); + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> HTTP/WS Port: %s\n", + win->num, server_port); + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Root path: %s\n", + win->num, win->server_root_path); + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Infinite loop\n", + win->num); + #endif + + // Folder monitor thread + if (_webui.config.folder_monitor && !monitor_created) { + monitor_created = true; + #ifdef _WIN32 + monitor_thread = CreateThread(NULL, 0, _webui_folder_monitor_thread, (void*)win, 0, NULL); + if (monitor_thread != NULL) + CloseHandle(monitor_thread); + #else + pthread_create(&monitor_thread, NULL, &_webui_folder_monitor_thread, (void*)win); + pthread_detach(monitor_thread); + #endif + } + + // Wait forever + for (;;) { + _webui_sleep(1); + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS) || _webui_mutex_win_is_exit_now(win, WEBUI_MUTEX_GET_STATUS)) + break; + } + } + } else { + + #ifdef WEBUI_LOG + if (!http_ctx) _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Listening failed.\n", win->num); + #endif + + // Mutex + _webui_mutex_unlock(&_webui.mutex_server_start); + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Server stopping...\n", win->num); + #endif + + _webui_mutex_is_connected(win, WEBUI_MUTEX_SET_FALSE); + + // Kill Process + #ifndef WEBUI_LOG + if (!_webui.is_webview_mode) { + if (_webui.current_browser != WEBUI_NATIVE_BROWSER) { + // Terminating the web browser window process + _webui_kill_pid(_webui_get_child_process_id(win)); + } + } + #endif + + // Clean WebView + if (win->webView) { + #ifdef _WIN32 + if (win->webView->cpp_handle) { + _webui_win32_wv2_set_stop(win->webView->cpp_handle, true); + _webui_webview_update(win); + } + #else + win->webView->stop = true; + _webui_webview_update(win); + #endif + } + + // Stop server services + mg_stop(http_ctx); + + // Free Port + _webui_free_port(win->server_port); + _webui_free_mem((void*)server_port); + + // Mutex + _webui_mutex_is_server_running(win, WEBUI_MUTEX_SET_FALSE); + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Server stopped.\n", + win->num); + #endif + + // Let the main wait() know that + // this server thread is finished + if (_webui.servers > 0) + _webui.servers--; + + // Make window reusable, so user can + // call `webui_show()` again if needed. + _webui_make_window_reusable(win); + + // Fire the mutex condition for wait() + if ((_webui.startup_timeout > 0) && (_webui.servers < 1)) { + if (!win->is_showing) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Breaking main loop...\n", win->num); + #endif + + // Break main loop + _webui_mutex_is_more_servers_running(WEBUI_MUTEX_SET_FALSE); // For `webui_wait()` in Non-blocking mode + _webui_condition_signal(&_webui.condition_wait); // For `webui_wait()` in Blocking mode + #ifdef __APPLE__ + _webui_macos_wv_stop(); + #endif + } + } + + // Clean monitor thread + if (_webui.config.folder_monitor && monitor_created) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_server_thread([%zu]) -> Killing folder monitor thread\n", win->num); + #endif + #ifdef _WIN32 + TerminateThread(monitor_thread, 0); + CloseHandle(monitor_thread); + #else + if (monitor_thread) { + pthread_cancel(monitor_thread); + } + #endif + } + + WEBUI_THREAD_RETURN +} + +static void _webui_receive(_webui_window_t* win, struct mg_connection* client, + int event_type, void * data, size_t len) { + + size_t recvNum = _webui_get_ws_process_number(); + + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_receive([%zu], [%d], [%zu])\n", + recvNum, win->num, event_type, len); + #endif + + static bool multi_packet = false; + static size_t multi_expect = 0; + static size_t multi_receive = 0; + static void * multi_buf = NULL; + + // Get connection id + size_t connection_id = 0; + if (event_type != WEBUI_WS_OPEN) { + if (!_webui_connection_get_id(win, client, &connection_id)) { + // Failed to find connection ID + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_receive() -> Failed to find connection ID\n", + recvNum); + #endif + _webui_connection_remove(win, client); + return; + } + } + + // Websocket Open/Close Events + if (event_type == WEBUI_WS_OPEN) { + // New connection + // Autorisation to register + bool authorization = false; + if (!_webui.config.multi_client) { + if (!_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + authorization = true; + } + } else authorization = true; + if (!authorization) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_receive() -> Connection not authorized to register\n", + recvNum); + #endif + _webui_connection_remove(win, client); + return; + } + else { + // Register + if (_webui_connection_save(win, client, &connection_id)) { + // Update window connection status + _webui_mutex_is_connected(win, WEBUI_MUTEX_SET_TRUE); + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_receive(%zu) -> Connection #%zu registered\n", + recvNum, win->num, connection_id + ); + #endif + } + else { + // Connection failed to register + _webui_connection_remove(win, client); + return; + } + } + } else if (event_type == WEBUI_WS_CLOSE) { + // Connection close + _webui_connection_remove(win, client); + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_receive(%zu) -> Connection #%zu Closed\n", + recvNum, win->num, connection_id + ); + #endif + } + + // Multi Packet (big data) + if (multi_packet) { + if ((multi_receive + len) > multi_expect) { + // Received more data than expected + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_receive() -> " + "Multi packet received more data than expected (%zu + %zu > %zu).\n", + recvNum, multi_receive, len, multi_expect + ); + #endif + multi_packet = false; + multi_expect = 0; + multi_receive = 0; + _webui_free_mem(multi_buf); + multi_buf = NULL; + return; + } + // Accumulate packet + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_receive() -> Multi packet accumulate %zu bytes\n", + recvNum, len); + #endif + memcpy(((unsigned char*)multi_buf + multi_receive), data, len); + multi_receive += len; + // Check if theire is more packets comming + if (multi_receive < multi_expect) + return; + } + else if (event_type == WEBUI_WS_DATA) { + if (((unsigned char*)data)[WEBUI_PROTOCOL_CMD] == WEBUI_CMD_MULTI) { + if (len >= WEBUI_PROTOCOL_SIZE && ((unsigned char*)data)[WEBUI_PROTOCOL_SIGN] == WEBUI_SIGNATURE) { + size_t expect_len = (size_t) strtoul(&((const char*)data)[WEBUI_PROTOCOL_DATA], NULL, 10); + if (expect_len > 0 && expect_len <= WEBUI_MAX_BUF) { + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_receive() -> Multi packet started, Expecting %zu bytes\n", + recvNum, expect_len + ); + #endif + multi_buf = _webui_malloc(expect_len); + memcpy(multi_buf, data, len); + multi_receive = 0; + multi_expect = expect_len; + multi_packet = true; + } + } + return; + } + } + + // Generate args + void * arg_ptr = NULL; + size_t arg_len = 0; + if (multi_packet) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_receive() -> Processing multi packet\n", + recvNum); + #endif + // Get data from accumulated multipackets + arg_len = multi_receive; + arg_ptr = multi_buf; + // Reset + multi_packet = false; + multi_expect = 0; + multi_receive = 0; + multi_buf = NULL; + } else { + arg_len = len; + if (len > 0) { + + // -- Old Method -- + // if (win->ws_block) { + // // This event has data. And it will be processed + // // in this current thread, no need to copy data + // arg_ptr = data; + // } + // else { + // // This event has data. And it will be processed + // // in a new thread, we should copy data once + // void * data_cpy = (void*)_webui_malloc(len); + // memcpy((char*)data_cpy, data, len); + // arg_ptr = data_cpy; + // } + + // -- New Method -- + // This event has data, and it will be processed + // always in a new thread, we should copy data now + void * data_cpy = (void*)_webui_malloc(len); + memcpy((char*)data_cpy, data, len); + arg_ptr = data_cpy; + + } else { + // This is a WS connect/disconnect event + arg_ptr = NULL; + } + } + + // Process + + // -- Old Method -- + // if (win->ws_block) { + // // Process the packet in this current thread + // _webui_ws_process(win, client, connection_id, arg_ptr, arg_len, recvNum, event_type); + // if (arg_ptr != data) + // _webui_free_mem((void*)arg_ptr); + // } + // else { + // // Process the packet in a new thread + // _webui_recv_arg_t* arg = (_webui_recv_arg_t* ) _webui_malloc(sizeof(_webui_recv_arg_t)); + // arg->win = win; + // arg->ptr = arg_ptr; + // arg->len = arg_len; + // arg->recvNum = recvNum; + // arg->event_type = event_type; + // arg->client = client; + // arg->connection_id = connection_id; + // #ifdef _WIN32 + // HANDLE thread = CreateThread(NULL, 0, _webui_ws_process_thread, (void*)arg, 0, NULL); + // if (thread != NULL) + // CloseHandle(thread); + // #else + // pthread_t thread; + // pthread_create(&thread, NULL, &_webui_ws_process_thread, (void*)arg); + // pthread_detach(thread); + // #endif + // } + + // -- New Method -- + // Process the packet always in a new thread + _webui_recv_arg_t* arg = (_webui_recv_arg_t* ) _webui_malloc(sizeof(_webui_recv_arg_t)); + arg->win = win; + arg->ptr = arg_ptr; + arg->len = arg_len; + arg->recvNum = recvNum; + arg->event_type = event_type; + arg->client = client; + arg->connection_id = connection_id; + #ifdef _WIN32 + HANDLE thread = CreateThread(NULL, 0, _webui_ws_process_thread, (void*)arg, 0, NULL); + if (thread != NULL) + CloseHandle(thread); + #else + pthread_t thread; + pthread_create(&thread, NULL, &_webui_ws_process_thread, (void*)arg); + pthread_detach(thread); + #endif +} + +static bool _webui_connection_save(_webui_window_t* win, struct mg_connection* client, size_t* connection_id) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_save([%zu])\n", win->num); + #endif + + // Save new ws client + _webui_mutex_lock(&_webui.mutex_client); + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (_webui.clients[i] == NULL) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_save() -> Registering client #%zu \n", i); + #endif + // Save + if (win->single_client == NULL) { + win->single_client = client; + _webui_mutex_is_single_client_token_valid(win, WEBUI_MUTEX_SET_FALSE); + } + _webui.clients[i] = client; + _webui.clients_win_num[i] = win->num; + _webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_SET_FALSE, i); + win->clients_count++; + _webui_mutex_unlock(&_webui.mutex_client); + *connection_id = i; + return true; + } + } + + // List is full + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_save() -> Clients list is full\n"); + #endif + _webui_mutex_unlock(&_webui.mutex_client); + return false; +} + +static void _webui_connection_remove(_webui_window_t* win, struct mg_connection* client) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_remove([%zu])\n", win->num); + #endif + + _webui_mutex_lock(&_webui.mutex_client); + + // Remove a ws client + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (_webui.clients[i] == client) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_remove() -> Removing client #%zu \n", i); + #endif + // Clear + if (win->single_client == client) { + win->single_client = NULL; + _webui_mutex_is_single_client_token_valid(win, WEBUI_MUTEX_SET_FALSE); + } + _webui.clients[i] = NULL; + _webui.clients_win_num[i] = 0; + _webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_SET_FALSE, i); + if (win->clients_count > 0) + win->clients_count--; + // Close + _webui_mutex_unlock(&_webui.mutex_client); + mg_close_connection(client); + return; + } + } + + // Client not found + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_remove() -> Client not found\n"); + #endif + _webui_mutex_unlock(&_webui.mutex_client); + mg_close_connection(client); +} + +static bool _webui_connection_get_id(_webui_window_t* win, struct mg_connection* client, size_t* connection_id) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_get_id([%zu], [%p])\n", win->num, client); + #endif + + // Find a ws client + if (client) { + _webui_mutex_lock(&_webui.mutex_client); + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (_webui.clients[i] == client) { + *connection_id = i; + _webui_mutex_unlock(&_webui.mutex_client); + return true; + } + } + _webui_mutex_unlock(&_webui.mutex_client); + } + + // Client not found + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_connection_get_id() -> Client not found\n"); + #endif + return false; +} + +static void _webui_ws_process( + _webui_window_t* win, struct mg_connection* client, size_t connection_id, + void* ptr, size_t len, size_t recvNum, int event_type) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_ws_process()\n", + recvNum); + #endif + + if (!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_ws_process() -> Start\n", + recvNum); + #endif + + if (event_type == WEBUI_WS_DATA) { + + const char* packet = (const char*)ptr; + uint32_t packet_token = _webui_get_token(packet); + uint16_t packet_id = _webui_get_id(packet); + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Data received\n", + recvNum + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Packet Size : %zu bytes\n", + recvNum, len + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Packet Header : [ ", + recvNum + ); + _webui_print_hex(packet, WEBUI_PROTOCOL_SIZE); + _webui_log_debug("]\n"); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Packet Token: 0x%08X (%" PRIu32 ")\n", + recvNum, packet_token, packet_token + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Packet ID: 0x%04X (%u)\n", + recvNum, packet_id, packet_id + ); + _webui_log_debug("[Core] [WS #%zu]\t_webui_ws_process() -> Packet Data: [", + recvNum); + // _webui_print_ascii(&packet[WEBUI_PROTOCOL_DATA], (len - + // WEBUI_PROTOCOL_SIZE)); + _webui_log_debug("]\n"); + #endif + + if ((len >= WEBUI_PROTOCOL_SIZE) && + ((unsigned char)packet[WEBUI_PROTOCOL_SIGN] == WEBUI_SIGNATURE) && + (packet_token == win->token)) { + + if (!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { // Check if previous event called exit() + + // Mutex + if (_webui.config.ws_block) { + // The config is set to blocking mode, we should + // wait for the previous event to finish. + if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] != WEBUI_CMD_JS) { + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Waiting for the previous event to finish...\n", + recvNum + ); + #endif + _webui_mutex_lock(&_webui.mutex_receive); + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WS #%zu is locked.\n", + recvNum, recvNum + ); + #endif + } + } + + // Process Commands + if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] == WEBUI_CMD_WIN_DRAG) { + + // WebUI drag app-region custom implementation for Linux (X11/Wayland) + // `--webui-app-region: drag` + + // The webui bridge sends this once when a drag starts + // we hand the move to the window manager via `gtk_window_begin_move_drag`, + // so it tracks the cursor natively (X11 and Wayland). + + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_ws_process() -> Drag Window (--webui-app-region)\n", recvNum); + #endif + #ifdef __linux__ + // `gtk_window_begin_move_drag` performs a pointer grab + // that must run on the GTK main thread, not this thread + // so marshal it there via g_idle_add. + if (win->webView && g_idle_add) + g_idle_add(_webui_wv_begin_move_idle, (void*)win); + #endif + + } else if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] == WEBUI_CMD_CLICK) { + + // Click Event + + // Protocol + // [Header] + // [Element] + + // Get html element id + char* element = (char*)&packet[WEBUI_PROTOCOL_DATA]; + size_t element_len = _webui_strlen(element); + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WEBUI_CMD_CLICK \n", + recvNum + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Element size: %zu bytes \n", + recvNum, element_len + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Element : [%s] \n", + recvNum, element + ); + #endif + + // Event Info + webui_event_inf_t* event_inf = NULL; + size_t event_num = _webui_new_event_inf(win, &event_inf); + event_inf->client = client; + event_inf->connection_id = connection_id; + + _webui_window_event( + win, // Event -> Window + connection_id, // Event -> Client Unique ID + WEBUI_EVENT_MOUSE_CLICK, // Event -> Type of this event + element, // Event -> HTML Element + event_num, // Event -> Event Number + _webui_client_get_id(win, client), // Event -> Client ID + _webui_get_cookies_full(client) // Event -> Full cookies + ); + + // Free event + _webui_free_event_inf(win, event_num); + } else if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] == WEBUI_CMD_JS) { + + // JS Result + + // Protocol + // [Header] + // [Error, ScriptResponse] + + // Get pipe id + if (packet_id < WEBUI_MAX_IDS) { + + if (_webui.run_userBuffer[packet_id] != NULL) { + + _webui_mutex_lock(&_webui.mutex_js_run); + _webui.run_done[packet_id] = false; + _webui_mutex_unlock(&_webui.mutex_js_run); + + // Get js-error + bool error = true; + if ((unsigned char)packet[WEBUI_PROTOCOL_DATA] == 0x00) + error = false; + + // Get data part as binary (last byte is an extras null byte for string terminator) + char* data = (char*)&packet[WEBUI_PROTOCOL_DATA + 1]; + size_t data_len = len - (WEBUI_PROTOCOL_SIZE + 1 + 1); // [Total packet size - (Header + error byte + null byte)] + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WEBUI_CMD_JS \n", + recvNum + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> run_id = 0x%02x (%u) \n", + recvNum, packet_id, packet_id + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> error = %s \n", + recvNum, error ? "true" : "false" + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> %zu bytes of data\n", + recvNum, data_len + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> data (Hex) = [", + recvNum + ); + _webui_print_hex(data, data_len); + _webui_log_debug("] @ 0x%p\n", data); + #endif + + // Set pipe + _webui.run_error[packet_id] = error; + if (data_len > 0) { + + // Copy response to the user's response buffer directly + size_t response_len = data_len + 1; + size_t bytes_to_cpy = ( + response_len <= _webui.run_userBufferLen[packet_id] ? + response_len : _webui.run_userBufferLen[packet_id] + ); + memcpy(_webui.run_userBuffer[packet_id], data, bytes_to_cpy); + } else { + + // Empty Result + _webui.run_userBuffer[packet_id] = 0x00; + } + + // Send ready signal to webui_script() + _webui_mutex_lock(&_webui.mutex_js_run); + _webui.run_done[packet_id] = true; + _webui_mutex_unlock(&_webui.mutex_js_run); + } + } + } else if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] == WEBUI_CMD_NAVIGATION) { + + // Navigation Event + + // Protocol + // [Header] + // [URL] + + // Events + if (win->has_all_events) { + + // Get URL + char* url = (char*)&packet[WEBUI_PROTOCOL_DATA]; + size_t url_len = _webui_strlen(url); + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WEBUI_CMD_NAVIGATION \n", + recvNum + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> URL size: %zu bytes \n", + recvNum, url_len + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> URL: [%s] \n", + recvNum, url + ); + #endif + + // Event Info + webui_event_inf_t* event_inf = NULL; + size_t event_num = _webui_new_event_inf(win, &event_inf); + event_inf->client = client; + event_inf->connection_id = connection_id; + + // Event Info Extras + event_inf->event_data[0] = url; + event_inf->event_size[0] = url_len; + + _webui_window_event( + win, // Event -> Window + connection_id, // Event -> Client Unique ID + WEBUI_EVENT_NAVIGATION, // Event -> Type of this event + "", // Event -> HTML Element + event_num, // Event -> Event Number + _webui_client_get_id(win, client), // Event -> Client ID + _webui_get_cookies_full(client) // Event -> Full cookies + ); + + // Free event + _webui_free_event_inf(win, event_num); + } + } else if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] == WEBUI_CMD_CALL_FUNC) { + + // Function Call + + // Protocol + // [Header] + // [Fn, Null, {Len;Len;...}, Null, {Data,Null,Data,Null...}] + + // Get html element id + char* element = (char*)&packet[WEBUI_PROTOCOL_DATA]; + size_t element_len = _webui_strlen(element); + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WEBUI_CMD_CALL_FUNC \n", + recvNum + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Call ID: [%u] \n", + recvNum, packet_id + ); + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Element: [%s] \n", + recvNum, element + ); + #endif + + // New event inf (Function Call) + webui_event_inf_t* event_inf = NULL; + size_t event_num = _webui_new_event_inf(win, &event_inf); + + // Loop trough args + size_t data_size_expected = 0; + char* args_lens = (char*)&packet[WEBUI_PROTOCOL_DATA + element_len + 1]; + size_t args_len = _webui_strlen(args_lens); + char* args_ptr = (char*)&packet[WEBUI_PROTOCOL_DATA + element_len + 1 + args_len + 1]; + char* context; + char* tk = WEBUI_STR_TOK(args_lens, ";", &context); + size_t tk_num = 0; + while(tk != NULL && tk_num < WEBUI_MAX_ARG + 1) { + + size_t arg_len = (size_t) strtoul(tk, NULL, 10); + data_size_expected = data_size_expected + arg_len + 1; + + if (arg_len > 0) { + + // Set argument + event_inf->event_size[tk_num] = arg_len; + event_inf->event_data[tk_num] = args_ptr; + } + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Argument %zu: %zu bytes\n", + recvNum, tk_num, arg_len + ); + #endif + + args_ptr = args_ptr + (arg_len + 1); + tk = WEBUI_STR_TOK(NULL, ";", &context); + + // Save total found arguments + event_inf->count = ++tk_num; + } + + // Check data validity + size_t data_size_recv = len - (WEBUI_PROTOCOL_SIZE + // [Header] + element_len + // [Fn] + 1 + // [Null] + args_len + // [{Len;Len;...}] + 1); // [Null] + + if (data_size_expected == data_size_recv) { + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Expected and received %zu bytes of data.\n", + recvNum, data_size_expected + ); + #endif + + // Create new event (Function Call) + webui_event_t e; + e.window = win->num; + e.event_type = WEBUI_EVENT_CALLBACK; + e.element = element; + e.event_number = event_num; + e.connection_id = connection_id; + e.client_id = _webui_client_get_id(win, client); + e.cookies = (char*)_webui_get_cookies_full(client); // Full cookies + + // Call user function + size_t cb_index = 0; + bool exist = _webui_get_cb_index(win, element, &cb_index); + if (exist && win->cb[cb_index] != NULL) { + + // Call user cb + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Calling user callback at address 0x%p\n[Call]\n", + recvNum, win->cb[cb_index] + ); + #endif + e.bind_id = cb_index; + win->cb[cb_index](&e); + + // Async response wait + if (_webui.config.asynchronous_response) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_ws_process() -> " + "Waiting for asynchronous response...\n", + recvNum); + #endif + bool done = false; + while (!done) { + _webui_sleep(10); + _webui_mutex_lock(&_webui.mutex_async_response); + if (event_inf->done) done = true; + _webui_mutex_unlock(&_webui.mutex_async_response); + + if (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + break; // App is exiting, Stop waiting. + } + } + } + } + + // Check the response + if (_webui_is_empty(event_inf->response)) + event_inf->response = NULL; + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> user-callback response [%s]\n", + recvNum, event_inf->response + ); + #endif + + // Packet Protocol Format: + // [...] + // [CMD] + // [CallResponse] + + // Send the packet + _webui_send_client( + win, client, packet_id, WEBUI_CMD_CALL_FUNC, + event_inf->response, _webui_strlen(event_inf->response), false + ); + + // Free event + _webui_free_event_inf(win, event_num); + } else { + + // WebSocket/Civetweb did not send all the data as expected. + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> No enough data received. " + "Expected %zu bytes, received %zu bytes.\n", + recvNum, data_size_expected, data_size_recv + ); + #endif + + // Send a void response to solve `.call()` promise + + // Packet Protocol Format: + // [...] + // [CMD] + // [CallResponse] + + // Send the packet + _webui_send_client( + win, client, packet_id, WEBUI_CMD_CALL_FUNC, NULL, 0, false + ); + } + + // Free event + _webui_free_mem((void*)event_inf); + } else if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] == WEBUI_CMD_CHECK_TK) { + + // Check Token Event + + // Protocol + // [Header] + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WEBUI_CMD_CHECK_TK \n", + recvNum + ); + #endif + + size_t connection_id = 0; + if (_webui_connection_get_id(win, client, &connection_id)) { + + if (win->single_client == client) { + _webui_mutex_is_single_client_token_valid(win, WEBUI_MUTEX_SET_TRUE); + } + _webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_SET_TRUE, connection_id); + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Token accepted. Sending bind list\n", + recvNum + ); + #endif + + // Calculate the bind list size + // [0x01][element1,element2,element3,] + size_t csv_size = 1; + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (!_webui_is_empty(win->html_elements[i])) { + csv_size += _webui_strlen(win->html_elements[i]) + 1; + } + } + if (win->has_all_events) { + csv_size++; + } + // Allocate + char* csv = (char*)_webui_malloc(csv_size); + csv[0] = 0x01; + csv_size--; + + // Generate the bind list array (CSV) + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if (!_webui_is_empty(win->html_elements[i])) { + // [element1,element2,element3,] + WEBUI_STR_CAT_DYN(&csv[1], csv_size, win->html_elements[i]); + WEBUI_STR_CAT_DYN(&csv[1], csv_size, ","); + } + } + + // Add all events bind element (empty) + if (win->has_all_events) { + // [element1,...,,] + WEBUI_STR_CAT_DYN(&csv[1], csv_size, ","); + } + + // Packet Protocol Format: + // [...] + // [CMD] + // [Token Status] + // [0x01 element1,element2,element3,] + + // Send the packet + _webui_send_client( + win, client, packet_id, WEBUI_CMD_CHECK_TK, + (const char*)csv, _webui_strlen(csv), true + ); + + // Free + _webui_free_mem((void*)csv); + + // New Event + if (win->has_all_events) { + + // Event Info + webui_event_inf_t* event_inf = NULL; + size_t event_num = _webui_new_event_inf(win, &event_inf); + event_inf->client = client; + event_inf->connection_id = connection_id; + + _webui_window_event( + win, // Event -> Window + connection_id, // Event -> Client Unique ID + WEBUI_EVENT_CONNECTED, // Event -> Type of this event + "", // Event -> HTML Element + event_num, // Event -> Event Number + _webui_client_get_id(win, client), // Event -> Client ID + _webui_get_cookies_full(client) // Event -> Full cookies + ); + + // Free event + _webui_free_event_inf(win, event_num); + } + } + else { + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Token not accepted.\n", + recvNum + ); + #endif + + unsigned char status = 0x00; + + // Packet Protocol Format: + // [...] + // [CMD] + // [Token Status] + // [0x00] + + // Send the packet + _webui_send_client( + win, client, packet_id, WEBUI_CMD_CHECK_TK, + (const char*)&status, 1, true + ); + } + } + #ifdef WEBUI_LOG + else { + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Unknown command " + "[0x%02x]\n", + recvNum, (unsigned char)packet[WEBUI_PROTOCOL_CMD] + ); + } + #endif + + // Unlock Mutex + if (_webui.config.ws_block) { + if ((unsigned char)packet[WEBUI_PROTOCOL_CMD] != WEBUI_CMD_JS) { + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WS #%zu is unlocked.\n", + recvNum, recvNum + ); + #endif + _webui_mutex_unlock(&_webui.mutex_receive); + } + } + } + #ifdef WEBUI_LOG + else { + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Window is not connected.\n", + recvNum + ); + } + #endif + } else { + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> Invalid Packet.\n", + recvNum + ); + #endif + + // Send a void response to solve `.call()` promise + + // Packet Protocol Format: + // [...] + // [CMD] + + // Send the packet + _webui_send_client( + win, client, packet_id, (unsigned char)packet[WEBUI_PROTOCOL_CMD], NULL, 0, true + ); + + // Forced close + _webui_connection_remove(win, client); + } + } else if (event_type == WEBUI_WS_OPEN) { + + // New connection + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WEBUI_WS_OPEN \n", + recvNum + ); + #endif + + /* + // New Event + if (win->has_all_events) { + + // Event Info + webui_event_inf_t* event_inf = NULL; + size_t event_num = _webui_new_event_inf(win, &event_inf); + event_inf->client = client; + event_inf->connection_id = connection_id; + + _webui_window_event( + win, // Event -> Window + connection_id, // Event -> Client Unique ID + WEBUI_EVENT_CONNECTED, // Event -> Type of this event + "", // Event -> HTML Element + event_num, // Event -> Event Number + _webui_client_get_id(win, client), // Event -> Client ID + _webui_get_cookies_full(client) // Event -> Full cookies + ); + + // Free event + _webui_free_event_inf(win, event_num); + } + */ + } else if (event_type == WEBUI_WS_CLOSE) { + + // Connection close + + #ifdef WEBUI_LOG + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> WEBUI_WS_CLOSE \n", + recvNum + ); + #endif + + // Make window reusable, so user can + // call `webui_show()` again if needed. + // Note: This is in case user called `webui_show()` inside all events. + _webui_make_window_reusable(win); + + // Events + if (win->has_all_events) { + + // Event Info + webui_event_inf_t* event_inf = NULL; + size_t event_num = _webui_new_event_inf(win, &event_inf); + event_inf->client = client; + event_inf->connection_id = connection_id; + + _webui_window_event( + win, // Event -> Window + connection_id, // Event -> Client Unique ID + WEBUI_EVENT_DISCONNECTED, // Event -> Type of this event + "", // Event -> HTML Element + event_num, // Event -> Event Number + _webui_client_get_id(win, client), // Event -> Client ID + NULL // No cookies in a closing connection + ); + + // Free event + _webui_free_event_inf(win, event_num); + } + } + #ifdef WEBUI_LOG + else { + _webui_log_debug( + "[Core] [WS #%zu]\t_webui_ws_process() -> UNKNOWN EVENT " + "TYPE (%d)\n", + recvNum, event_type + ); + } + #endif + + #ifdef WEBUI_LOG + _webui_log_debug("[Core] [WS #%zu]\t_webui_ws_process() -> Finished.\n", + recvNum); + #endif + } +} + +static WEBUI_THREAD_RECEIVE { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_ws_process_thread()\n"); + #endif + + // Get arguments + _webui_recv_arg_t* arg = (_webui_recv_arg_t* ) _arg; + + // Process + _webui_ws_process(arg->win, arg->client, arg->connection_id, arg->ptr, arg->len, arg->recvNum, arg->event_type); + + // Free + _webui_free_mem((void*)arg->ptr); + _webui_free_mem((void*)arg); + + WEBUI_THREAD_RETURN +} + +#ifdef _WIN32 +static void _webui_kill_pid(size_t pid) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_kill_pid(%zu)\n", pid); + #endif + + if (pid < 1) + return; + HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, (DWORD) pid); + if (hProcess != NULL) { + TerminateProcess(hProcess, 1); + CloseHandle(hProcess); + } +} +#else +static void _webui_kill_pid(size_t pid) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_kill_pid(%zu)\n", pid); + #endif + + if (pid < 1) + return; + kill((pid_t) pid, SIGTERM); +} +#endif + +#ifdef _WIN32 + +static bool _webui_str_to_wide(const char *s, wchar_t **w) { + int wlen = MultiByteToWideChar(CP_UTF8, 0, s, -1, NULL, 0); + if (wlen < 1) + return false; + wchar_t *wide = (wchar_t *)_webui_malloc(wlen * sizeof(wchar_t)); + if (!wide) + return false; + MultiByteToWideChar(CP_UTF8, 0, s, -1, wide, wlen); + *w = wide; + return true; +} + +static bool _webui_socket_test_listen_win32(size_t port_num) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_socket_test_listen_win32([%zu])\n", port_num); + #endif + + WSADATA wsaData; + size_t iResult; + SOCKET ListenSocket = INVALID_SOCKET; + struct addrinfo * result = NULL; + struct addrinfo hints; + + // Initialize Winsock + iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (iResult != 0) { + // WSAStartup failed + return false; + } + ZeroMemory(&hints, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = AI_PASSIVE; + + // Resolve the server address and port + char the_port[16] = {0}; + WEBUI_SN_PRINTF_STATIC(&the_port[0], sizeof(the_port), "%zu", port_num); + iResult = getaddrinfo("127.0.0.1", &the_port[0], &hints, &result); + if (iResult != 0) { + // WSACleanup(); + return false; + } + + // Create a SOCKET for the server to listen for client connections. + ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); + if (ListenSocket == INVALID_SOCKET) { + freeaddrinfo(result); + // WSACleanup(); + return false; + } + + // Setup the TCP listening socket + iResult = bind(ListenSocket, result->ai_addr, (int) result->ai_addrlen); + if (iResult == (size_t)SOCKET_ERROR) { + freeaddrinfo(result); + closesocket(ListenSocket); + shutdown(ListenSocket, SD_BOTH); + // WSACleanup(); + return false; + } + + // Clean + freeaddrinfo(result); + closesocket(ListenSocket); + shutdown(ListenSocket, SD_BOTH); + // WSACleanup(); + + // Listening Success + return true; +} + +static int _webui_system_win32_out(const char* cmd, char ** output, bool show) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_system_win32_out()\n"); + #endif + + // Ini + * + output = NULL; + if (cmd == NULL) + return -1; + + // Return + DWORD Return = 0; + + // Flags + DWORD CreationFlags = CREATE_NO_WINDOW; + if (show) + CreationFlags = SW_SHOW; + + SECURITY_ATTRIBUTES sa; + sa.nLength = sizeof(SECURITY_ATTRIBUTES); + sa.bInheritHandle = TRUE; + sa.lpSecurityDescriptor = NULL; + HANDLE stdout_read, stdout_write; + if (!CreatePipe(&stdout_read, &stdout_write, &sa, 0)) { + return -1; + } + if (!SetHandleInformation(stdout_read, HANDLE_FLAG_INHERIT, 0)) { + CloseHandle(stdout_read); + CloseHandle(stdout_write); + return -1; + } + + STARTUPINFOA si; + ZeroMemory(&si, sizeof(STARTUPINFOA)); + si.cb = sizeof(STARTUPINFOA); + si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; + si.wShowWindow = SW_HIDE; + si.hStdOutput = stdout_write; + si.hStdError = stdout_write; + + PROCESS_INFORMATION pi; + ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); + + if (!CreateProcessA( + NULL, // No module name (use cmd line) + (LPSTR) cmd, // Command line + NULL, // Process handle not inheritable + NULL, // Thread handle not inheritable + TRUE, // Set handle inheritance to FALSE + CreationFlags, // Creation flags + NULL, // Use parent's environment block + NULL, // Use parent's starting directory + & + si, // Pointer to STARTUP INFO structure + & + pi + )) // Pointer to PROCESS_INFORMATION structure + { + CloseHandle(stdout_read); + CloseHandle(stdout_write); + return -1; + } + CloseHandle(stdout_write); + + SetFocus(pi.hProcess); + WaitForSingleObject(pi.hProcess, WEBUI_SYS_CMD_TIMEOUT); + GetExitCodeProcess(pi.hProcess, &Return); + + DWORD bytes_read; + char buffer[WEBUI_STDOUT_BUF]; + size_t output_size = 0; + + while(ReadFile(stdout_read, buffer, WEBUI_STDOUT_BUF, &bytes_read, NULL) && bytes_read > 0) { + + char* new_output = realloc(*output, output_size + bytes_read + 1); + if (new_output == NULL) { + free(*output); + CloseHandle(stdout_read); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return -1; + } + + * output = new_output; + memcpy(*output + output_size, buffer, bytes_read); + output_size += bytes_read; + } + + if (*output != NULL) + (*output)[output_size] = '\0'; + + CloseHandle(stdout_read); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + + if (Return == 0) + return 0; + else + return -1; +} + +/* + static BOOL CALLBACK _webui_enum_windows_proc_win32(HWND hwnd, LPARAM + targetProcessId) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_enum_windows_proc_win32()\n"); + #endif + + DWORD windowProcessId; + GetWindowThreadProcessId(hwnd, &windowProcessId); + + if (windowProcessId == targetProcessId) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_enum_windows_proc_win32() -> Bring the" + "process (%lu) to the front\n", windowProcessId); + #endif + + SetFocus(hwnd); + SetForegroundWindow(hwnd); + return FALSE; + } + + return TRUE; + } +*/ + +static int _webui_system_win32(_webui_window_t* win, char* cmd, bool show) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_system_win32()\n"); + #endif + + // Convert UTF-8 to wide string + wchar_t* wcmd; + if (!_webui_str_to_wide(cmd, &wcmd)) + return -1; + + /* + We should not kill this process, because may had many child + process of other WebUI app instances. Unfortunately, this is + how modern browsers save memory by combine all windows into one + single parent process, and we can't control this behavior. + + // Automatically close the browser process when the + // parent process (this app) get closed. If this fail + // webui.js will try to close the window. + HANDLE JobObject = CreateJobObject(NULL, NULL); + JOB_OBJECT_EXTENDED_LIMIT_INFORMATION ExtendedInfo = { 0 }; + ExtendedInfo.BasicLimitInformation.LimitFlags = + JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION | + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;SetInformationJobObject(JobObject, + JobObjectExtendedLimitInformation, &ExtendedInfo, sizeof(ExtendedInfo)); + */ + + DWORD Return = 0; + DWORD CreationFlags = CREATE_NO_WINDOW; + + if (show) + CreationFlags = SW_SHOW; + + STARTUPINFOW si; + PROCESS_INFORMATION pi; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + if (!CreateProcessW( + NULL, // No module name (use command line) + wcmd, // Command line + NULL, // Process handle not inheritable + NULL, // Thread handle not inheritable + FALSE, // Set handle inheritance to FALSE + CreationFlags, // Creation flags + NULL, // Use parent's environment block + NULL, // Use parent's starting directory + & + si, // Pointer to STARTUP INFO structure + & + pi + )) // Pointer to PROCESS_INFORMATION structure + { + // CreateProcess failed + _webui_free_mem((void*)wcmd); + return -1; + } + + SetFocus(pi.hProcess); + // EnumWindows(_webui_enum_windows_proc_win32, (LPARAM)(pi.dwProcessId)); + // AssignProcessToJobObject(JobObject, pi.hProcess); + WaitForSingleObject(pi.hProcess, WEBUI_SYS_CMD_TIMEOUT); + GetExitCodeProcess(pi.hProcess, &Return); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + _webui_free_mem((void*)wcmd); + + if (Return == 0) + return 0; + else + return -1; +} + +static bool _webui_get_windows_reg_value(HKEY key, LPCWSTR reg, LPCWSTR value_name, char value[WEBUI_MAX_PATH]) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_get_windows_reg_value([%ls])\n", reg); + #endif + + HKEY hKey; + + if (RegOpenKeyExW(key, reg, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + + DWORD VALUE_TYPE; + BYTE VALUE_DATA[WEBUI_MAX_PATH]; + DWORD VALUE_SIZE = sizeof(VALUE_DATA); + + // If `value_name` is empty then it will read the "(default)" reg-key + if (RegQueryValueExW(hKey, value_name, NULL, &VALUE_TYPE, VALUE_DATA, &VALUE_SIZE) == ERROR_SUCCESS) { + + if (VALUE_TYPE == REG_SZ) + WEBUI_SN_PRINTF_STATIC(value, WEBUI_MAX_PATH, "%S", (LPCWSTR) VALUE_DATA); + else if (VALUE_TYPE == REG_DWORD) + WEBUI_SN_PRINTF_STATIC(value, WEBUI_MAX_PATH, "%lu", *((DWORD * ) VALUE_DATA)); + + RegCloseKey(hKey); + return true; + } + } + + return false; +} + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { + (void)hinstDLL; + (void)fdwReason; + (void)lpReserved; + return true; +} + +#endif + +// -- WebView ------------------------- + +#ifdef _WIN32 + // Microsoft Windows + + // Old C WebView2 handler code removed - now using C++ API + + // Available since Windows 8. May be missing in old MinGW headers. + #ifndef WS_EX_NOREDIRECTIONBITMAP + #define WS_EX_NOREDIRECTIONBITMAP 0x00200000L + #endif + + typedef HRESULT(WINAPI* _webui_dwm_set_window_attribute_fn)(HWND, DWORD, LPCVOID, DWORD); + static _webui_dwm_set_window_attribute_fn _webui_dwm_set_window_attribute(void) { + static _webui_dwm_set_window_attribute_fn fn = NULL; + if (!fn) { + HMODULE dwmapi = LoadLibraryA("dwmapi.dll"); + if (dwmapi) { + fn = (_webui_dwm_set_window_attribute_fn)GetProcAddress(dwmapi, "DwmSetWindowAttribute"); + } + } + return fn; + } + + LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + + if (uMsg == WM_NCCREATE || uMsg == WM_CREATE) { + CREATESTRUCT* pCreate = (CREATESTRUCT*)lParam; + void* userData = pCreate->lpCreateParams; + SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)userData); + } + + // Get win ptr + void* ptr = (void*)GetWindowLongPtr(hwnd, GWLP_USERDATA); + _webui_window_t* win = _webui_dereference_win_ptr(ptr); + + switch (uMsg) { + case WM_NCCALCSIZE: { + if (win && win->frameless && wParam == TRUE) { + NCCALCSIZE_PARAMS* params = (NCCALCSIZE_PARAMS*)lParam; + if (IsZoomed(hwnd)) { + // Maximized + return 0; + } + // Non-maximized + LONG originalTop = params->rgrc[0].top; + LRESULT result = DefWindowProc(hwnd, WM_NCCALCSIZE, wParam, lParam); + if (result != 0) { + return result; + } + params->rgrc[0].top = originalTop; + return 0; + } + break; + } + case WM_MOVE: { + if (win) { + if (win->webView && win->webView->cpp_handle) { + void* controller = _webui_win32_wv2_get_controller(win->webView->cpp_handle); + if (controller) { + ICoreWebView2Controller* webviewController = (ICoreWebView2Controller*)controller; + RECT bounds; + GetClientRect(hwnd, &bounds); + + // Because WebView2 does not do anything if the size has not changed...and still we want to be able to register moves + bounds.right -= 1; + webviewController->lpVtbl->put_Bounds(webviewController, bounds); + bounds.right += 1; + webviewController->lpVtbl->put_Bounds(webviewController, bounds); + } + } + } + break; + } + case WM_SIZE: { + if (win) { + if (win->webView && win->webView->cpp_handle) { + void* controller = _webui_win32_wv2_get_controller(win->webView->cpp_handle); + if (controller) { + ICoreWebView2Controller* webviewController = (ICoreWebView2Controller*)controller; + RECT bounds; + GetClientRect(hwnd, &bounds); + webviewController->lpVtbl->put_Bounds(webviewController, bounds); + } + } + } + break; + } + case WM_EXITSIZEMOVE: { + if (win) { + // Update drag positions and dimensions + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + RECT rect; + GetClientRect(hwnd, &rect); + WINDOWPLACEMENT wp; + wp.length = sizeof(WINDOWPLACEMENT); + GetWindowPlacement(hwnd, &wp); + // Send new positions and dimensions + char buffer[512] = {0x00}; + WEBUI_SN_PRINTF_STATIC(buffer, sizeof(buffer), "%ld,%ld,%ld,%ld", + wp.rcNormalPosition.left, wp.rcNormalPosition.top, rect.right, rect.bottom); + // Packet Protocol Format: + // [...] + // [CMD] + // [x,y,width,height] + // Send the packet + _webui_send_all(win, 0, WEBUI_CMD_WIN_RESIZED, buffer, _webui_strlen(buffer)); + } + } + break; + } + case WM_GETMINMAXINFO: { + if (win) { + LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam; + bool handled = false; + if (win->frameless) { + HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); + MONITORINFO mi; + mi.cbSize = sizeof(mi); + if (GetMonitorInfo(monitor, &mi)) { + lpMMI->ptMaxPosition.x = mi.rcWork.left - mi.rcMonitor.left; + lpMMI->ptMaxPosition.y = mi.rcWork.top - mi.rcMonitor.top; + lpMMI->ptMaxSize.x = mi.rcWork.right - mi.rcWork.left; + lpMMI->ptMaxSize.y = mi.rcWork.bottom - mi.rcWork.top; + handled = true; + } + } + if (win->minimum_size_set) { + lpMMI->ptMinTrackSize.x = win->minimum_width; + lpMMI->ptMinTrackSize.y = win->minimum_height; + handled = true; + } + if (handled) + return 0; + } + break; + } + case WM_CLOSE: { + if (win) { + bool can_close = true; + if (win->close_handler_wv != NULL) { + can_close = win->close_handler_wv(win->num); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\tClose handler installed for %zu, result = %d\n", win->num, can_close); + #endif + } + if (can_close) { + // Stop the WebView thread, close the window + // and free resources. + if (win->webView && win->webView->cpp_handle) { + _webui_win32_wv2_set_stop(win->webView->cpp_handle, true); + _webui_webview_update(win); + } + _webui_wv_event_closed(win); + } else { + // Do not close the window, no default processing + return 0; + } + } + break; + } + case WM_DESTROY: { + // Destroy message will be + // sent by `webui_wait()` + // Nothing to do here. + break; + } + } + + // Let Win32 window manager provide default processing + return DefWindowProc(hwnd, uMsg, wParam, lParam); + }; + + // Close Event + static void _webui_wv_event_closed(_webui_window_t* win) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_event_closed([%zu])\n", win->num); + #endif + win->is_closed = true; + } + + static bool _webui_wv_show(_webui_window_t* win, char* url) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show([%s])\n", url); + #endif + + // Microsoft Windows WebView2 + + if (_webui.is_browser_mode) + return false; + + // Free old WebView + if (win->webView) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Stopping old WebView thread...\n"); + #endif + + if (win->webView->cpp_handle) { + _webui_win32_wv2_set_stop(win->webView->cpp_handle, true); + _webui_webview_update(win); + } + + // Wait for old WebView thread to stop + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(25); + if (!win->webView) { + // WebView thread just stopped. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Old WebView thread stopped successfully.\n"); + #endif + break; + } + if (_webui_timer_is_end(&timer, 2500)) { + // Timeout. WebView thread did not stop. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Old WebView thread did not stop (Timeout).\n"); + #endif + break; + } + } + + if (win->webView) { + _webui_wv_free(win->webView); + win->webView = NULL; + } + } + + // Get wide URL + wchar_t* wURL = NULL; + _webui_str_to_wide(url, &wURL); + + // Calculate dimensions + int width = (win->width > 0 ? win->width : WEBUI_DEF_WIDTH); + int height = (win->height > 0 ? win->height : WEBUI_DEF_HEIGHT); + int x = (win->x > 0 ? win->x : (int)((GetSystemMetrics(SM_CXSCREEN) - width) / 2)); + int y = (win->y > 0 ? win->y : (int)((GetSystemMetrics(SM_CYSCREEN) - height) / 2)); + + // Initializing the Win32 WebView struct + _webui_wv_win32_t* webView = (_webui_wv_win32_t*) _webui_malloc(sizeof(_webui_wv_win32_t)); + webView->cpp_handle = _webui_win32_wv2_create(); + + if (!webView->cpp_handle) { + _webui_free_mem((void*) wURL); + _webui_free_mem((void*) webView); + return false; + } + + // Set URL and dimensions in C++ handle + _webui_win32_wv2_set_url(webView->cpp_handle, wURL); + _webui_win32_wv2_set_dimensions(webView->cpp_handle, x, y, width, height); + //_webui_win32_wv2_set_navigate_flag(webView->cpp_handle, true); // This will solve issue #664 + + win->webView = webView; + + // Note: To garantee all Microsoft WebView's operations ownership we should + // process all the WebView's operations in one single thread for each window. + + // Initializing + // Expecting `_webui_webview_thread` to change `mutex_is_webview_update` + // to `false` when initialization is done, and `_webui.is_webview_mode` + // to `true` if loading the WebView is succeeded. + _webui_webview_update(win); + + // Win32 WebView thread + #ifdef _WIN32 + HANDLE thread = CreateThread(NULL, 0, _webui_webview_thread, (void*)win, 0, NULL); + if (thread != NULL) + CloseHandle(thread); + #else + pthread_t thread; + pthread_create(&thread, NULL, &_webui_webview_thread, (void*)win); + pthread_detach(thread); + #endif + + // Wait for WebView thread to start + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(10); + if (!_webui_mutex_is_webview_update(win, WEBUI_MUTEX_GET_STATUS)) { + // WebView thread just started + // and loaded WebView successfully + break; + } + if (_webui_timer_is_end(&timer, 500)) { + // Timeout. WebView thread failed. + break; + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Return [%d]\n", (_webui.is_webview_mode == true)); + #endif + + return (_webui.is_webview_mode); + }; + + static bool _webui_wv_minimize(_webui_wv_win32_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_minimize()\n"); + #endif + if (webView && webView->cpp_handle) { + return _webui_win32_wv2_minimize(webView->cpp_handle); + } + return false; + } + + static bool _webui_wv_maximize(_webui_wv_win32_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_maximize()\n"); + #endif + if (webView && webView->cpp_handle) { + return _webui_win32_wv2_maximize(webView->cpp_handle); + } + return false; + } + + static bool _webui_wv_set_size(_webui_wv_win32_t* webView, int windowWidth, int windowHeight) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_set_size(%d. %d)\n", windowWidth, windowHeight); + #endif + if (webView && webView->cpp_handle) { + return _webui_win32_wv2_set_size(webView->cpp_handle, windowWidth, windowHeight); + } + return false; + }; + + static bool _webui_wv_set_position(_webui_wv_win32_t* webView, int x, int y) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_set_position(%d. %d)\n", x, y); + #endif + if (webView && webView->cpp_handle) { + return _webui_win32_wv2_set_position(webView->cpp_handle, x, y); + } + return false; + }; + + static bool _webui_wv_navigate(_webui_wv_win32_t* webView, wchar_t* url) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_navigate([%ls])\n", url); + #endif + if (webView && webView->cpp_handle) { + return _webui_win32_wv2_navigate(webView->cpp_handle, url); + } + return false; + }; + + static void _webui_wv_free(_webui_wv_win32_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_free()\n"); + #endif + if (webView != NULL) { + if (webView->cpp_handle) { + _webui_win32_wv2_free(webView->cpp_handle); + } + _webui_free_mem((void*) webView); + } + }; + + static void _webui_wv_close(_webui_wv_win32_t *webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_close()\n"); + #endif + (void)webView; + // ... + } + + static WEBUI_THREAD_WEBVIEW { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread()\n"); + #endif + + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win == NULL || win->webView == NULL || win->webView->cpp_handle == NULL) { + if (win && win->webView) { + _webui_wv_free(win->webView); + win->webView = NULL; + } + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + WEBUI_THREAD_RETURN + } + + // Win32 Initialization + if (FAILED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) { + _webui_wv_free(win->webView); + win->webView = NULL; + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + WEBUI_THREAD_RETURN + } + + // Load WebView2Loader.dll + if (!_webui_win32_wv2_check_loader_dll()) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> WebView2Loader.dll not found\n"); + #endif + CoUninitialize(); + _webui_wv_free(win->webView); + win->webView = NULL; + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + WEBUI_THREAD_RETURN + } + + if (win->transparent) { + SetEnvironmentVariable("WEBVIEW2_DEFAULT_BACKGROUND_COLOR", "0"); + } + + // Window class + const char wvClass[] = "WebViewWindow"; + WNDCLASSA wc; + ZeroMemory(&wc, sizeof(WNDCLASSA)); + wc.lpfnWndProc = WndProc; + wc.hInstance = GetModuleHandle(NULL); + wc.lpszClassName = wvClass; + wc.style = 0; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hIcon = LoadIcon(wc.hInstance, MAKEINTRESOURCE(101)); // default user icon resource: 101 + if (!wc.hIcon) wc.hIcon = LoadIcon(wc.hInstance, IDI_APPLICATION); // otherwise, use the executable's application icon + if (!wc.hIcon) wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // if not present, use the system default icon + + if (!RegisterClassA(&wc) && GetLastError() != ERROR_CLASS_ALREADY_EXISTS) { + _webui_wv_free(win->webView); + win->webView = NULL; + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + WEBUI_THREAD_RETURN + } + + // Get dimensions from C++ handle + int x, y, width, height; + _webui_win32_wv2_get_dimensions(win->webView->cpp_handle, &x, &y, &width, &height); + + // Set window style based on frameless flag + DWORD style = WS_OVERLAPPEDWINDOW; + if (win->frameless) { + // Frameless mode + style = WS_POPUP | WS_VISIBLE; + if (win->resizable) { + // + Resizing + style |= WS_THICKFRAME; + } + } else { + // Normal mode + style = WS_OVERLAPPEDWINDOW; + if (!win->resizable) { + // Non-Resizing + style = WS_OVERLAPPED | WS_VISIBLE; + } + } + + // Set extended window style based on transparent flag + DWORD exStyle = 0; + if (win->transparent) { + exStyle |= WS_EX_NOREDIRECTIONBITMAP; + } + + HWND hwnd = CreateWindowExA( + exStyle, wvClass, "", style, + x, y, width, height, + NULL, NULL, GetModuleHandle(NULL), (LPVOID)win + ); + + if (!hwnd) { + _webui_wv_free(win->webView); + win->webView = NULL; + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + WEBUI_THREAD_RETURN + } + + if (win->frameless) { + _webui_dwm_set_window_attribute_fn setWindowAttribute = _webui_dwm_set_window_attribute(); + if (setWindowAttribute) { + // DWMWA_BORDER_COLOR (34) = DWMWA_COLOR_NONE (0xFFFFFFFE) + COLORREF borderColor = 0xFFFFFFFE; + setWindowAttribute(hwnd, 34, &borderColor, sizeof(borderColor)); + // DWMWA_WINDOW_CORNER_PREFERENCE (33) = DWMWCP_DONOTROUND (1) + DWORD cornerPreference = 1; + setWindowAttribute(hwnd, 33, &cornerPreference, sizeof(cornerPreference)); + } + // Recalculate the non-client frame so the frameless WM_NCCALCSIZE + // adjustments apply before the first paint. + SetWindowPos( + hwnd, NULL, 0, 0, 0, 0, + SWP_FRAMECHANGED | SWP_NOMOVE | + SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE + ); + } + + // Set HWND in C++ handle + _webui_win32_wv2_set_hwnd(win->webView->cpp_handle, hwnd); + + // Show Win32 window + ShowWindow(hwnd, SW_SHOW); + + // Get temp cache folder path + if (!_webui.webview_cacheFolder) { + const char* temp = _webui_get_temp_path(); + _webui.webview_cacheFolder = (char*)_webui_malloc(WEBUI_MAX_PATH); + WEBUI_SN_PRINTF_DYN(_webui.webview_cacheFolder, WEBUI_MAX_PATH, + "%s%s.WebUI%sWebUIWebViewCache_%"PRIu32, temp, os_sep, os_sep, + _webui_generate_random_uint32()); + } + + // Convert cache folder path to wide + wchar_t* cacheFolderW = NULL; + _webui_str_to_wide(_webui.webview_cacheFolder, &cacheFolderW); + + // Create WebView2 environment using C++ API + bool env_created = _webui_win32_wv2_create_environment(win->webView->cpp_handle, cacheFolderW); + + if (env_created) { + + // Success + // Let `wait()` use safe main-thread WebView2 loop + _webui.is_webview_mode = true; + + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + MSG msg; + while (true) { + + // Check if there is any Win32 Messages + + if (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE) > 0) { + TranslateMessage(&msg); + DispatchMessageW(&msg); + // Window manually closed + if (msg.message == WM_QUIT) { + HWND current_hwnd = _webui_win32_wv2_get_hwnd(win->webView->cpp_handle); + if (current_hwnd) { + DestroyWindow(current_hwnd); + } + break; + } + } + else { + + // No Win32 Messages. + // Check if there is any WebUI Messages + + if (_webui_mutex_is_webview_update(win, WEBUI_MUTEX_GET_STATUS)) { + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + if (win->webView && win->webView->cpp_handle) { + // Stop this thread + if (_webui_win32_wv2_get_stop(win->webView->cpp_handle)) { + HWND current_hwnd = _webui_win32_wv2_get_hwnd(win->webView->cpp_handle); + if (current_hwnd) { + DestroyWindow(current_hwnd); + } + break; + } + // Window Size + if (_webui_win32_wv2_get_size_flag(win->webView->cpp_handle)) { + _webui_win32_wv2_set_size_flag(win->webView->cpp_handle, false); + int w, h; + _webui_win32_wv2_get_dimensions(win->webView->cpp_handle, NULL, NULL, &w, &h); + _webui_wv_set_size(win->webView, w, h); + } + // Window Position + if (_webui_win32_wv2_get_position_flag(win->webView->cpp_handle)) { + _webui_win32_wv2_set_position_flag(win->webView->cpp_handle, false); + int px, py; + _webui_win32_wv2_get_dimensions(win->webView->cpp_handle, &px, &py, NULL, NULL); + _webui_wv_set_position(win->webView, px, py); + } + // Navigation + if (_webui_win32_wv2_get_navigate_flag(win->webView->cpp_handle)) { + _webui_win32_wv2_set_navigate_flag(win->webView->cpp_handle, false); + wchar_t* url = _webui_win32_wv2_get_url(win->webView->cpp_handle); + if (url) { + _webui_wv_navigate(win->webView, url); + } + } + } + } + else { + + // At this moment, there is no Win32 or WebUI messages. + // Let's IDLE for 10ms in this current thread. + _webui_sleep(10); + } + } + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> Cleaning\n"); + #endif + + // Clean + _webui_wv_free(win->webView); + _webui_free_mem((void*) cacheFolderW); + win->webView = NULL; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> End\n"); + #endif + + WEBUI_THREAD_RETURN + }; + +#elif __linux__ + // Linux + + #define G_CALLBACK(f) ((void (*)(void)) (f)) + #define GTK_WINDOW(obj) ((void*)(obj)) + #define GTK_RUNTIME_ARR { "libgtk-3.so.0" } // TODO: Add GTK v4 APIs "libgtk-4.so.1" + #define WEBKIT_RUNTIME_ARR { "libwebkit2gtk-4.1.so.0", "libwebkit2gtk-4.0.so.37" } + + // Decision Event + #define WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION 0 + #define WEBKIT_NAVIGATION_TYPE_LINK_CLICKED 0 + #define WEBKIT_NAVIGATION_TYPE_FORM_SUBMITTED 1 + #define WEBKIT_NAVIGATION_TYPE_BACK_FORWARD 2 + #define WEBKIT_NAVIGATION_TYPE_RELOAD 3 + #define WEBKIT_NAVIGATION_TYPE_FORM_RESUBMITTED 4 + #define WEBKIT_NAVIGATION_TYPE_OTHER 5 + + // Title Event + static void _webui_wv_event_title(void *web_view, void *pspec, void *arg) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_event_title()\n"); + #endif + _webui_window_t* win = (_webui_window_t *)arg; + webkit_web_view_get_title_func webkit_web_view_get_title = ( + webkit_web_view_get_title_func)dlsym(libwebkit, "webkit_web_view_get_title"); + const char *title = webkit_web_view_get_title(web_view); + if (title) { + gtk_window_set_title_func gtk_window_set_title = ( + gtk_window_set_title_func)dlsym(libgtk, "gtk_window_set_title"); + gtk_window_set_title(win->webView->gtk_win, title); + } + } + + static bool _webui_wv_event_decision(void *widget, void *decision, int decision_type, void *user_data) { + switch(decision_type) { + case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: { + + _webui_window_t* win = _webui_dereference_win_ptr(user_data); + + // If all events are handled, check in_show + if (win->has_all_events) { + if (win->in_show) { // Don't catch navigation event + GTK_WEBVIEW_SET_IN_SHOW(win, false) + return false; + } + } else { // Don't catch navigation event + return false; + } + + webkit_policy_decision_ignore(decision); + + int navigation_type = webkit_navigation_policy_decision_get_navigation_type(decision); + void *uri_request = webkit_navigation_policy_decision_get_request(decision); + const char *webkit_uri = webkit_uri_request_get_uri(uri_request); + + // URI + char* uri = _webui_str_dup(webkit_uri); + + // Type + char* type = (char*)_webui_malloc(20); + WEBUI_SN_PRINTF_DYN(type, 20, "%d", navigation_type); + + // Event Info + webui_event_inf_t* event_inf = NULL; + size_t event_num = _webui_new_event_inf(win, &event_inf); + event_inf->client = NULL; // This is a WebKitGTK Event, so we don't have any WebSocket client + event_inf->connection_id = 0; // This is a WebKitGTK Event, so we don't have any WebSocket connection ID + + // Event Info Extras + event_inf->event_data[0] = uri; + event_inf->event_size[0] = strlen(uri); + event_inf->event_data[1] = type; + event_inf->event_size[1] = strlen(type); + + _webui_window_event( + win, // Event -> Window + 0, // Event -> Client Unique ID | This is a WebKitGTK Event, so we don't have any WebSocket client unique ID + WEBUI_EVENT_NAVIGATION, // Event -> Type of this event + "", // Event -> HTML Element + event_num, // Event -> Event Number + 0, // Event -> Client ID | This is a WebKitGTK Event, so we don't have any WebSocket client ID + NULL // Event -> Full cookies | TODO: Get cookies using WebKKitGTK APIs + ); + + // Free event + _webui_free_event_inf(win, event_num); + + // Return that this event is handled. + return true; + } + break; + } + return false; + } + + // Close Event + static void _webui_wv_event_closed(void *widget, void *arg) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_event_closed()\n"); + #endif + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win) { + win->is_closed = true; + if (win->webView) { + win->webView->open = false; + } + } + } + + // Delete Event (implement on close handling) + static bool _webui_wv_event_on_close(void *widget, void *evt, void *arg) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_event_on_close()\n"); + #endif + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win) { + if (win->close_handler_wv) { + bool can_close = win->close_handler_wv(win->num); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_event_on_close() -> can_close = %d\n", can_close); + #endif + return !can_close; + } + } + return false; + } + + static bool _webui_wv_set_size(_webui_wv_linux_t* webView, int windowWidth, int windowHeight) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_set_size(%d. %d)\n", windowWidth, windowHeight); + #endif + if (webView) { + if (webView->gtk_win) { + gtk_window_resize(webView->gtk_win, webView->width, webView->height); + return true; + } + } + return false; + }; + + static int _webui_wv_minimize_idle(void* arg) { + _webui_wv_linux_t* webView = (_webui_wv_linux_t*)arg; + if (webView && webView->gtk_win && gtk_window_iconify) + gtk_window_iconify(webView->gtk_win); + return 0; // G_SOURCE_REMOVE: run once + } + + static bool _webui_wv_minimize(_webui_wv_linux_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_minimize()\n"); + #endif + if (webView && webView->gtk_win && g_idle_add) { + g_idle_add(_webui_wv_minimize_idle, (void*)webView); + return true; + } + return false; + } + + static int _webui_wv_maximize_idle(void* arg) { + _webui_wv_linux_t* webView = (_webui_wv_linux_t*)arg; + if (webView && webView->gtk_win && gtk_window_maximize) { + // Toggle maximize/restore + if (gtk_window_is_maximized && gtk_window_unmaximize && + gtk_window_is_maximized(webView->gtk_win)) + gtk_window_unmaximize(webView->gtk_win); + else + gtk_window_maximize(webView->gtk_win); + } + return 0; // G_SOURCE_REMOVE: run once + } + + static bool _webui_wv_maximize(_webui_wv_linux_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_maximize()\n"); + #endif + if (webView && webView->gtk_win && g_idle_add) { + g_idle_add(_webui_wv_maximize_idle, (void*)webView); + return true; + } + return false; + } + + static bool _webui_wv_set_position(_webui_wv_linux_t* webView, int x, int y) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_set_position(%d. %d)\n", x, y); + #endif + if (webView) { + if (webView->gtk_win) { + // Note: + // This API does not work under Wayland, and it has been removed + // in GTK v4, alongside all the APIs that relies on a global + // coordinates system. So, `gtk_window_move` may have no effect. + gtk_window_move(webView->gtk_win, webView->x, webView->y); + return true; + } + } + return false; + }; + + static bool _webui_wv_navigate(_webui_wv_linux_t* webView, char* url) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_navigate([%s])\n", url); + #endif + if (webView) { + if (webView->gtk_win) { + webkit_web_view_load_uri(webView->gtk_wv, webView->url); + return true; + } + } + return false; + }; + + static void _webui_wv_close(_webui_wv_linux_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_close()\n"); + #endif + + if (webView) { + + if (webView->open) { + + webView->open = false; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_close() -> Closing WebView window\n"); + #endif + gtk_window_close(webView->gtk_win); + } + } + + _webui_free_mem((void*) webView->url); + _webui_free_mem((void*) webView); + }; + + static void _webui_wv_free() { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_free()\n"); + #endif + + if (libwebkit) { + + // #ifdef WEBUI_LOG + // _webui_log_debug("[Core]\t\t_webui_wv_free() -> Unload WebKit\n"); + // #endif + // dlclose(libwebkit); + + // Now, we relies on the OS to unload the shared libraries + // when the application ends. + } + + if (libgtk) { + + // #ifdef WEBUI_LOG + // _webui_log_debug("[Core]\t\t_webui_wv_free() -> Unload GTK\n"); + // #endif + // dlclose(libgtk); + + // Now, we relies on the OS to unload the shared libraries + // when the application ends. + } + + _webui.is_webview_mode = false; + libwebkit = NULL; + libgtk = NULL; + }; + + // Start a native window resize when the user presses near a frameless + // window's edge. Undecorated GTK windows have no WM resize borders, so we + // detect edge presses here and hand off to the window manager via + // `gtk_window_begin_resize_drag` (works on both X11 and Wayland). + static int _webui_wv_on_button_press(void* widget, void* event, void* arg) { + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (!win || !win->frameless || !win->resizable) + return 0; // Let the page handle the event + if (!gtk_window_begin_resize_drag || !gtk_widget_get_allocated_width || + !gtk_widget_get_allocated_height || !win->webView || !win->webView->gtk_win) + return 0; + _webui_GdkEventButton* e = (_webui_GdkEventButton*)event; + if (e->button != 1) + return 0; // Only the left button resizes + const int border = 6; // Edge grab thickness in pixels + int w = gtk_widget_get_allocated_width(widget); + int h = gtk_widget_get_allocated_height(widget); + int x = (int)e->x; + int y = (int)e->y; + bool left = (x <= border), right = (x >= w - border); + bool top = (y <= border), bottom = (y >= h - border); + // GdkWindowEdge: NW=0, N=1, NE=2, W=3, E=4, SW=5, S=6, SE=7 + int edge; + if (top && left) edge = 0; + else if (top && right) edge = 2; + else if (bottom && left) edge = 5; + else if (bottom && right) edge = 7; + else if (left) edge = 3; + else if (right) edge = 4; + else if (top) edge = 1; + else if (bottom) edge = 6; + else return 0; // Not near an edge; let the page handle the event + gtk_window_begin_resize_drag(win->webView->gtk_win, edge, (int)e->button, + (int)e->x_root, (int)e->y_root, e->time); + return 1; // Consumed + } + + // Cached resize cursors (created lazily, kept for the process lifetime like + // the other GTK symbols). Types: 0=ns, 1=ew, 2=nwse, 3=nesw. + static void* _webui_gtk_resize_cursor(int type) { + static void* cursors[4] = {NULL, NULL, NULL, NULL}; + static const char* const names[4] = {"ns-resize", "ew-resize", "nwse-resize", "nesw-resize"}; + if (type < 0 || type > 3) + return NULL; + if (!cursors[type] && gdk_cursor_new_from_name && gdk_display_get_default) { + void* display = gdk_display_get_default(); + if (display) + cursors[type] = gdk_cursor_new_from_name(display, names[type]); + } + return cursors[type]; + } + + // Show the matching resize cursor while hovering a frameless window's edge. + // The event is consumed on the edge so WebKit does not immediately replace + // our cursor with the content cursor; off the edge we do nothing and let + // WebKit manage the cursor as usual. + static int _webui_wv_on_motion(void* widget, void* event, void* arg) { + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (!win || !win->frameless || !win->resizable) + return 0; + if (!gtk_widget_get_window || !gdk_window_set_cursor || + !gtk_widget_get_allocated_width || !gtk_widget_get_allocated_height) + return 0; + // Button and motion events share the same layout up to x/y. + _webui_GdkEventButton* e = (_webui_GdkEventButton*)event; + const int border = 6; + int w = gtk_widget_get_allocated_width(widget); + int h = gtk_widget_get_allocated_height(widget); + int x = (int)e->x; + int y = (int)e->y; + bool left = (x <= border), right = (x >= w - border); + bool top = (y <= border), bottom = (y >= h - border); + int type = -1; + if ((top && left) || (bottom && right)) type = 2; // nwse + else if ((top && right) || (bottom && left)) type = 3; // nesw + else if (left || right) type = 1; // ew + else if (top || bottom) type = 0; // ns + if (type < 0) + return 0; // Not on an edge: let WebKit manage the cursor + void* cursor = _webui_gtk_resize_cursor(type); + if (!cursor) + return 0; // Cursor unavailable: let WebKit manage the cursor + void* gdk_win = gtk_widget_get_window(widget); + if (gdk_win) + gdk_window_set_cursor(gdk_win, cursor); + return 1; // Consumed + } + + static void _webui_wv_create(_webui_window_t* win) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_create()\n"); + #endif + + // Initialize GTK Window + win->webView->gtk_win = gtk_window_new(0); + + // GTK transparent window + if (win->transparent) { + // Enable transparency if the APIs are available + if (gtk_widget_set_visual && gtk_widget_get_screen && gdk_screen_get_rgba_visual) { + void* screen = gtk_widget_get_screen(win->webView->gtk_win); + if (screen) { + void* visual = gdk_screen_get_rgba_visual(screen); + if (visual) { + gtk_widget_set_visual(win->webView->gtk_win, visual); + } + } + } + // Enable app paintable for transparency + if (gtk_widget_set_app_paintable) { + gtk_widget_set_app_paintable(win->webView->gtk_win, 1); + } + } + + // Window icon: use the icon file set by `webui_set_icon_file()` + // for the GTK window, so the window manager/taskbar (x11). + if (win->icon_file_data != NULL && win->icon_file_size > 0 + && gdk_pixbuf_loader_new && gdk_pixbuf_loader_write + && gdk_pixbuf_loader_close && gdk_pixbuf_loader_get_pixbuf + && gtk_window_set_icon && g_object_unref) { + void* loader = gdk_pixbuf_loader_new(); + if (loader != NULL) { + void* pixbuf = NULL; + if (gdk_pixbuf_loader_write(loader, win->icon_file_data, + (unsigned long)win->icon_file_size, NULL)) { + gdk_pixbuf_loader_close(loader, NULL); + pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); + } else { + gdk_pixbuf_loader_close(loader, NULL); + } + if (pixbuf != NULL) { + // `gtk_window_set_icon` takes its own reference + gtk_window_set_icon(win->webView->gtk_win, pixbuf); + } + g_object_unref(loader); + } + } + + // Initialize WebView + win->webView->gtk_wv = webkit_web_view_new(); + + // WebView transparent + if (win->transparent && webkit_web_view_set_background_color) { + struct { + double red; + double green; + double blue; + double alpha; + } transparent_color = {0.0, 0.0, 0.0, 0.0}; + webkit_web_view_set_background_color(win->webView->gtk_wv, &transparent_color); + } + + // Window Settings + gtk_window_set_default_size(win->webView->gtk_win, win->webView->width, win->webView->height); + gtk_container_add(win->webView->gtk_win, win->webView->gtk_wv); + // Frameless mode | Resizable mode + gtk_window_set_decorated(GTK_WINDOW(win->webView->gtk_win), !win->frameless); + gtk_window_set_resizable(GTK_WINDOW(win->webView->gtk_win), win->resizable); + // Window position + // Note: The new positioning system it's not GTK's toolkit job anymore. + gtk_window_move(GTK_WINDOW(win->webView->gtk_win), win->webView->x, win->webView->y); + + // Events + g_signal_connect_data(win->webView->gtk_wv, "notify::title", G_CALLBACK( + _webui_wv_event_title), (void *)win, NULL, 0); + g_signal_connect_data(win->webView->gtk_win, "delete-event", G_CALLBACK( + _webui_wv_event_on_close), (void *)win, NULL, 0); + g_signal_connect_data(win->webView->gtk_win, "destroy", G_CALLBACK( + _webui_wv_event_closed), (void *)win, NULL, 0); + g_signal_connect_data(win->webView->gtk_wv, "decide-policy", G_CALLBACK( + _webui_wv_event_decision), (void *)win, NULL, 0); + // Frameless windows: intercept edge presses to start a native resize + // (undecorated windows have no window-manager resize borders) and edge + // hovers to show the matching resize cursor. + if (win->frameless && win->resizable) { + if (gtk_widget_add_events) + gtk_widget_add_events(win->webView->gtk_wv, 4 | 256); // motion + button-press masks + g_signal_connect_data(win->webView->gtk_wv, "button-press-event", G_CALLBACK( + _webui_wv_on_button_press), (void *)win, NULL, 0); + g_signal_connect_data(win->webView->gtk_wv, "motion-notify-event", G_CALLBACK( + _webui_wv_on_motion), (void *)win, NULL, 0); + } + + // Linux GTK WebView Auto JS Inject + if (_webui.config.show_auto_js_inject) { + // ... + } + + // Show + + webkit_web_view_load_uri(win->webView->gtk_wv, win->webView->url); + gtk_widget_show_all(win->webView->gtk_win); + win->webView->open = true; + + // Note: All the GTK WebView's operations should be + // processed in one single thread for each window. + + // Linux WebView thread + #ifdef _WIN32 + HANDLE thread = CreateThread(NULL, 0, _webui_webview_thread, (void*)win, 0, NULL); + if (thread != NULL) + CloseHandle(thread); + #else + pthread_t thread; + pthread_create(&thread, NULL, &_webui_webview_thread, (void*)win); + pthread_detach(thread); + #endif + + // WebUI Exit Event for GTK + g_timeout_add((1 * 1000), _webui_wv_exit_schedule, NULL); + } + + static int _webui_wv_begin_move_idle(void* arg) { + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win && win->webView && win->webView->gtk_win && gtk_window_begin_move_drag) { + // Query the pointer's root position so the move reference is in + // GTK's own coordinate system. + int px = 0, py = 0; + if (gdk_display_get_default && gdk_display_get_default_seat && + gdk_seat_get_pointer && gdk_device_get_position) { + void* display = gdk_display_get_default(); + void* seat = display ? gdk_display_get_default_seat(display) : NULL; + void* pointer = seat ? gdk_seat_get_pointer(seat) : NULL; + if (pointer) + gdk_device_get_position(pointer, NULL, &px, &py); + } + // Mouse Button 1 (left), timestamp 0 (GDK_CURRENT_TIME) + gtk_window_begin_move_drag(win->webView->gtk_win, 1, px, py, 0); + } + return 0; // G_SOURCE_REMOVE: run once + } + + static int _webui_wv_create_schedule(void* arg) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_create_schedule()\n"); + #endif + + // This callback is fired by GTK. so it's safe + // to create the new WebView window right now. + + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win) { + _webui_wv_create(win); + } + + return 0; + } + + static int _webui_wv_exit_schedule(void* arg) { + + #ifdef WEBUI_LOG + // _webui_log_debug("[Core]\t\t_webui_wv_exit_schedule()\n"); + #endif + + if ((!_webui_mutex_is_more_servers_running(WEBUI_MUTEX_GET_STATUS)) || + (_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS))) { + if (_webui.is_gtk_main_run) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_exit_schedule() -> Quit GTK Main Loop...\n"); + #endif + gtk_main_quit(); + } + return 0; + } + return 1; + } + + static bool _webui_load_gtk_and_webkit() { + if (!libgtk || !libwebkit) { + + _webui.is_webview_mode = false; + + // GTK Dynamic Load + const char *gtk_libs[] = GTK_RUNTIME_ARR; + for (size_t i = 0; i < (sizeof(gtk_libs) / sizeof(gtk_libs[0]));++i) { + libgtk = dlopen(gtk_libs[i], RTLD_LAZY); + if (libgtk) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_load_gtk_and_webkit() -> GTK loaded [%s]\n", + gtk_libs[i]); + #endif + break; + } + } + + if (!libgtk) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_load_gtk_and_webkit() -> GTK load failed\n"); + #endif + _webui_wv_free(); + return false; + } + + // WebView Dynamic Load + const char *webkit_libs[] = WEBKIT_RUNTIME_ARR; + for (size_t i = 0; i < (sizeof(webkit_libs) / sizeof(webkit_libs[0]));++i) { + libwebkit = dlopen(webkit_libs[i], RTLD_LAZY); + if (libwebkit) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_load_gtk_and_webkit() -> WebKit loaded [%s]\n", + webkit_libs[i]); + #endif + break; + } + } + + if (!libwebkit) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_load_gtk_and_webkit() -> WebKit load failed\n"); + #endif + _webui_wv_free(); + return false; + } + + // GTK Symbol Addresses + gtk_init = (gtk_init_func)dlsym( + libgtk, "gtk_init"); + gtk_widget_show_all = (gtk_widget_show_all_func)dlsym( + libgtk, "gtk_widget_show_all"); + gtk_main_iteration_do = (gtk_main_iteration_do_func)dlsym( + libgtk, "gtk_main_iteration_do"); + gtk_main = (gtk_main_func)dlsym( + libgtk, "gtk_main"); + gtk_main_quit = (gtk_main_quit_func)dlsym( + libgtk, "gtk_main_quit"); + g_timeout_add = (g_timeout_add_func)dlsym( + libgtk, "g_timeout_add"); + gtk_events_pending = (gtk_events_pending_func)dlsym( + libgtk, "gtk_events_pending"); + gtk_container_add = (gtk_container_add_func)dlsym( + libgtk, "gtk_container_add"); + gtk_window_new = (gtk_window_new_func)dlsym( + libgtk, "gtk_window_new"); + gtk_window_set_default_size = (gtk_window_set_default_size_func)dlsym( + libgtk, "gtk_window_set_default_size"); + gtk_window_set_title = (gtk_window_set_title_func)dlsym( + libgtk, "gtk_window_set_title"); + gtk_window_move = (gtk_window_move_func)dlsym( + libgtk, "gtk_window_move"); + gtk_window_close = (gtk_window_close_func)dlsym( + libgtk, "gtk_window_close"); + gdk_display_get_default = (gdk_display_get_default_func)dlsym( + libgtk, "gdk_display_get_default"); + gdk_display_get_primary_monitor = (gdk_display_get_primary_monitor_func)dlsym( + libgtk, "gdk_display_get_primary_monitor"); + gdk_monitor_get_geometry = (gdk_monitor_get_geometry_func)dlsym( + libgtk, "gdk_monitor_get_geometry"); + gtk_window_resize = (gtk_window_resize_func)dlsym( + libgtk, "gtk_window_resize"); + gtk_window_set_decorated = (gtk_window_set_decorated_func)dlsym( + libgtk, "gtk_window_set_decorated"); + gtk_window_set_resizable = (gtk_window_set_resizable_func)dlsym( + libgtk, "gtk_window_set_resizable"); + gtk_window_set_position = (gtk_window_set_position_func)dlsym( + libgtk, "gtk_window_set_position"); + gtk_window_iconify = (gtk_window_iconify_func)dlsym( + libgtk, "gtk_window_iconify"); + gtk_window_maximize = (gtk_window_maximize_func)dlsym( + libgtk, "gtk_window_maximize"); + gtk_window_unmaximize = (gtk_window_unmaximize_func)dlsym( + libgtk, "gtk_window_unmaximize"); + gtk_window_is_maximized = (gtk_window_is_maximized_func)dlsym( + libgtk, "gtk_window_is_maximized"); + gtk_window_begin_resize_drag = (gtk_window_begin_resize_drag_func)dlsym( + libgtk, "gtk_window_begin_resize_drag"); + gtk_widget_get_allocated_width = (gtk_widget_get_allocated_width_func)dlsym( + libgtk, "gtk_widget_get_allocated_width"); + gtk_widget_get_allocated_height = (gtk_widget_get_allocated_height_func)dlsym( + libgtk, "gtk_widget_get_allocated_height"); + gtk_widget_get_window = (gtk_widget_get_window_func)dlsym( + libgtk, "gtk_widget_get_window"); + gtk_widget_add_events = (gtk_widget_add_events_func)dlsym( + libgtk, "gtk_widget_add_events"); + gdk_cursor_new_from_name = (gdk_cursor_new_from_name_func)dlsym( + libgtk, "gdk_cursor_new_from_name"); + gdk_window_set_cursor = (gdk_window_set_cursor_func)dlsym( + libgtk, "gdk_window_set_cursor"); + gtk_window_begin_move_drag = (gtk_window_begin_move_drag_func)dlsym( + libgtk, "gtk_window_begin_move_drag"); + gdk_display_get_default_seat = (gdk_display_get_default_seat_func)dlsym( + libgtk, "gdk_display_get_default_seat"); + gdk_seat_get_pointer = (gdk_seat_get_pointer_func)dlsym( + libgtk, "gdk_seat_get_pointer"); + gdk_device_get_position = (gdk_device_get_position_func)dlsym( + libgtk, "gdk_device_get_position"); + g_signal_connect_data = (g_signal_connect_data_func)dlsym( + libgtk, "g_signal_connect_data"); + g_idle_add = (g_idle_add_func)dlsym( + libgtk, "g_idle_add"); + gtk_widget_set_visual = (gtk_widget_set_visual_func)dlsym( + libgtk, "gtk_widget_set_visual"); + gtk_widget_get_screen = (gtk_widget_get_screen_func)dlsym( + libgtk, "gtk_widget_get_screen"); + gdk_screen_get_rgba_visual = (gdk_screen_get_rgba_visual_func)dlsym( + libgtk, "gdk_screen_get_rgba_visual"); + gtk_widget_set_app_paintable = (gtk_widget_set_app_paintable_func)dlsym( + libgtk, "gtk_widget_set_app_paintable"); + gdk_pixbuf_loader_new = (gdk_pixbuf_loader_new_func)dlsym( + libgtk, "gdk_pixbuf_loader_new"); + gdk_pixbuf_loader_write = (gdk_pixbuf_loader_write_func)dlsym( + libgtk, "gdk_pixbuf_loader_write"); + gdk_pixbuf_loader_close = (gdk_pixbuf_loader_close_func)dlsym( + libgtk, "gdk_pixbuf_loader_close"); + gdk_pixbuf_loader_get_pixbuf = (gdk_pixbuf_loader_get_pixbuf_func)dlsym( + libgtk, "gdk_pixbuf_loader_get_pixbuf"); + gtk_window_set_icon = (gtk_window_set_icon_func)dlsym( + libgtk, "gtk_window_set_icon"); + g_object_unref = (g_object_unref_func)dlsym( + libgtk, "g_object_unref"); + + // WebView Symbol Addresses + webkit_web_view_new = (webkit_web_view_new_func)dlsym( + libwebkit, "webkit_web_view_new"); + webkit_web_view_load_uri = (webkit_web_view_load_uri_func)dlsym( + libwebkit, "webkit_web_view_load_uri"); + webkit_web_view_get_title = (webkit_web_view_get_title_func)dlsym( + libwebkit, "webkit_web_view_get_title"); + webkit_policy_decision_ignore = (webkit_1ptr_arg_func)dlsym( + libwebkit, "webkit_policy_decision_ignore"); + webkit_navigation_policy_decision_get_navigation_type = (webkit_1ptr_arg_2int_func)dlsym( + libwebkit, "webkit_navigation_policy_decision_get_navigation_type"); + webkit_navigation_policy_decision_get_request = (webkit_1ptr_arg_2ptr_func)dlsym( + libwebkit, "webkit_navigation_policy_decision_get_request"); + webkit_uri_request_get_uri = (webkit_1ptr_arg_2str_func)dlsym( + libwebkit, "webkit_uri_request_get_uri"); + webkit_web_view_set_background_color = (webkit_web_view_set_background_color_func)dlsym( + libwebkit, "webkit_web_view_set_background_color"); + + // Check GTK + if ( + // GTK v3 + !gtk_init || !gtk_window_new || !gtk_window_set_default_size + || !gtk_window_set_title || !g_signal_connect_data || !gtk_main + || !gtk_main_quit || !gtk_widget_show_all || !gtk_main_iteration_do + || !g_timeout_add || !gtk_events_pending || !gtk_container_add + || !gtk_window_move || !gtk_window_set_decorated || !gtk_window_set_resizable + || !gtk_window_set_position || !gtk_window_resize || !gtk_window_close + || !gdk_display_get_default || !gdk_display_get_primary_monitor || !gdk_monitor_get_geometry + || !g_idle_add + // GTK v4 + // ... + ) + { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_load_gtk_and_webkit() -> GTK symbol addresses failed\n"); + #endif + _webui_wv_free(); + return false; + } + + // Check WebView + if (!webkit_web_view_new || !webkit_web_view_load_uri || !webkit_web_view_get_title || + !webkit_policy_decision_ignore || !webkit_navigation_policy_decision_get_navigation_type || + !webkit_navigation_policy_decision_get_request || !webkit_uri_request_get_uri + ) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_load_gtk_and_webkit() -> WebKit symbol addresses failed\n"); + #endif + _webui_wv_free(); + return false; + } + + // Initialize GTK + gtk_init(NULL, NULL); + } + + // GTK and Webkit already loaded + return true; + } + + static bool _webui_wv_show(_webui_window_t* win, char* url) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show([%s])\n", url); + #endif + + // Linux GTK WebView + + // #ifdef WEBUI_DYNAMIC + // #ifdef WEBUI_LOG + // _webui_log_debug("[Core]\t\t_webui_wv_show() -> WebUI dynamic version does not support Linux WebView\n"); + // #endif + // return false; + // #endif + + if (_webui.is_browser_mode) + return false; + + // GTK and Webkit Dynamic Load + if (!libgtk || !libwebkit) { + if (!_webui_load_gtk_and_webkit()) { + return false; + } + } + + // Free old WebView + if (win->webView) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Stopping old WebView thread...\n"); + #endif + + win->webView->stop = true; + _webui_webview_update(win); + + // Wait for old WebView thread to stop + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(25); + if (!win->webView) { + // WebView thread just stopped. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Old WebView thread stopped successfully.\n"); + #endif + break; + } + if (_webui_timer_is_end(&timer, 2500)) { + // Timeout. WebView thread did not stop. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Old WebView thread did not stop (Timeout).\n"); + #endif + break; + } + } + + if (win->webView) { + //_webui_wv_free(); + _webui_wv_close(win->webView); + win->webView = NULL; + } + } + + // Copy URL + char* url_copy = _webui_str_dup(url); + + // Initializing the Linux WebView struct + _webui_wv_linux_t* webView = (_webui_wv_linux_t*) _webui_malloc(sizeof(_webui_wv_linux_t)); + webView->url = url_copy; + webView->width = (win->width > 0 ? win->width : WEBUI_DEF_WIDTH); + webView->height = (win->height > 0 ? win->height : WEBUI_DEF_HEIGHT); + webView->x = (win->x > 0 ? win->x : 0); + webView->y = (win->y > 0 ? win->y : 0); + win->webView = webView; + + // New WebView window + if (_webui.is_gtk_main_run) { + + // Schedule the creation of the new WebView + // window in the main thread `webui_wait()` + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Schedule the creation of the new WebView window\n"); + #endif + + g_idle_add(_webui_wv_create_schedule, (void*)win); + } + else { + + // The main thread `webui_wait()` is not running + // so it's safe to create the new WebView window + // from this thread, which is should be fired from + // the back-end main thread. + + _webui_wv_create(win); + } + + // Initializing + // Expecting `_webui_webview_thread` to change `mutex_is_webview_update` + // to `false` when initialization is done, and `_webui.is_webview_mode` + // to `true` if loading the WebView is succeeded. + _webui_webview_update(win); + + // Wait for WebView thread to get + // started by `_webui_wv_create()` + + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(100); + if (!_webui_mutex_is_webview_update(win, WEBUI_MUTEX_GET_STATUS)) { + // WebView thread just started + // and loaded window successfully + break; + } + if (_webui_timer_is_end(&timer, 2500)) { + // Timeout. WebView thread failed. + break; + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Return [%d]\n", (_webui.is_webview_mode == true)); + #endif + + return (_webui.is_webview_mode); + }; + + static WEBUI_THREAD_WEBVIEW { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread()\n"); + #endif + + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win == NULL) { + _webui_wv_close(win->webView); + win->webView = NULL; + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + WEBUI_THREAD_RETURN + } + + // Check GTK is loaded + if (!libgtk || !libwebkit) { + _webui_wv_close(win->webView); + win->webView = NULL; + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + WEBUI_THREAD_RETURN + } + + if (win->webView->gtk_win && win->webView->gtk_wv) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> Started\n"); + #endif + + // Success + // Let `wait()` use safe main-thread GTK WebView loop + _webui.is_webview_mode = true; + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + + while (true) { + + // Wait for WebUI Messages + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> Waiting for WebUI Messages...\n"); + #endif + + _webui_mutex_lock(&win->mutex_webview_update); + _webui_condition_wait(&win->condition_webview_update, &win->mutex_webview_update); + + if (win->webView) { + // Stop this thread + if (win->webView->stop) { + _webui_mutex_unlock(&win->mutex_webview_update); + break; + } + // Window Size + if (win->webView->size) { + win->webView->size = false; + _webui_wv_set_size(win->webView, win->webView->width, win->webView->height); + } + // Window Position + if (win->webView->position) { + win->webView->position = false; + _webui_wv_set_position(win->webView, win->webView->x, win->webView->y); + } + // Navigation + if (win->webView->navigate) { + win->webView->navigate = false; + _webui_wv_navigate(win->webView, win->webView->url); + } + } + + _webui_mutex_unlock(&win->mutex_webview_update); + } + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> Cleaning\n"); + #endif + + // Clean + _webui_wv_close(win->webView); + win->webView = NULL; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> End\n"); + #endif + + WEBUI_THREAD_RETURN + } +#else + // macOS + + static bool _webui_wv_set_size(_webui_wv_macos_t* webView, int windowWidth, int windowHeight) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_set_size(%d. %d)\n", windowWidth, windowHeight); + #endif + _webui_macos_wv_set_size(webView->index, windowWidth, windowHeight); + return false; + }; + + static bool _webui_wv_minimize(_webui_wv_macos_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_minimize()\n"); + #endif + _webui_macos_wv_minimize(webView->index); + return true; + } + + static bool _webui_wv_maximize(_webui_wv_macos_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_maximize()\n"); + #endif + _webui_macos_wv_maximize(webView->index); + return true; + } + + static bool _webui_wv_set_position(_webui_wv_macos_t* webView, int x, int y) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_set_position(%d. %d)\n", x, y); + #endif + _webui_macos_wv_set_position(webView->index, x, y); + return false; + }; + + static bool _webui_wv_navigate(_webui_wv_macos_t* webView, char* url) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_navigate([%s])\n", url); + #endif + _webui_macos_wv_navigate(webView->index, (const char*)url); + return false; + }; + + static void _webui_wv_free(_webui_wv_macos_t* webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_free()\n"); + #endif + // ... + _webui_free_mem((void*) webView->url); + _webui_free_mem((void*) webView); + }; + + static void _webui_wv_close(_webui_wv_macos_t *webView) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_close()\n"); + #endif + // ... + } + + // Close Event + static void _webui_wv_event_closed(int index) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_event_closed([%d])\n", index); + #endif + if (_webui.wins[index] != NULL) { + _webui.wins[index]->is_closed = true; + if (_webui.wins[index]->webView) { + // Close window + if (_webui_mutex_is_connected(_webui.wins[index], WEBUI_MUTEX_GET_STATUS)) { + _webui_send_all( + _webui.wins[index], 0, WEBUI_CMD_CLOSE, NULL, 0 + ); + } + // Stop WebView thread if any + if (_webui.wins[index]->webView) { + _webui.wins[index]->webView->stop = true; + _webui_webview_update(_webui.wins[index]); + } + } + } + } + + static bool _webui_wv_show(_webui_window_t* win, char* url) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show([%s])\n", url); + #endif + + // Apple macOS WKWebView + + if (_webui.is_browser_mode) + return false; + + if (!_webui.is_wkwebview_main_run) { + if (_webui_macos_wv_new(win->num, win->frameless, win->resizable)) { + if (!_webui.is_webview_mode) { + // Let `wait()` use safe main-thread WKWebView loop + _webui.is_webview_mode = true; + // Set close callback once + _webui_macos_wv_set_close_cb(_webui_wv_event_closed); + } + } else return false; + } + else { + + _webui_macos_wv_new_thread_safe(win->num, win->frameless, win->resizable); + _webui_sleep(250); + } + + // Free old WebView + if (win->webView) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Stopping old WebView thread...\n"); + #endif + + win->webView->stop = true; + _webui_webview_update(win); + + // Wait for old WebView thread to stop + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(25); + if (!win->webView) { + // WebView thread just stopped. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Old WebView thread stopped successfully.\n"); + #endif + break; + } + if (_webui_timer_is_end(&timer, 2500)) { + // Timeout. WebView thread did not stop. + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_wv_show() -> Old WebView thread did not stop (Timeout).\n"); + #endif + break; + } + } + + if (win->webView) { + _webui_wv_free(win->webView); + win->webView = NULL; + } + } + + // Copy URL + char* url_copy = _webui_str_dup(url); + + // Initializing the macOS WebView struct + _webui_wv_macos_t* webView = (_webui_wv_macos_t*) _webui_malloc(sizeof(_webui_wv_macos_t)); + webView->url = url_copy; + webView->width = (win->width > 0 ? win->width : WEBUI_DEF_WIDTH); + webView->height = (win->height > 0 ? win->height : WEBUI_DEF_HEIGHT); + webView->x = (win->x > 0 ? win->x : 0); + webView->y = (win->y > 0 ? win->y : 0); + webView->index = win->num; + win->webView = webView; + + // Show window + _webui_macos_wv_show( + webView->index, webView->url, + webView->x, webView->y, + webView->width, webView->height); + + // Initializing + // Expecting `_webui_webview_thread` to change + // `mutex_is_webview_update` to false when success + _webui_webview_update(win); + + // macOS WebView thread + #ifdef _WIN32 + HANDLE thread = CreateThread(NULL, 0, _webui_webview_thread, (void*)win, 0, NULL); + if (thread != NULL) + CloseHandle(thread); + #else + pthread_t thread; + pthread_create(&thread, NULL, &_webui_webview_thread, (void*)win); + pthread_detach(thread); + #endif + + // Wait for WebView thread to start + _webui_timer_t timer; + _webui_timer_start(&timer); + for (;;) { + _webui_sleep(10); + if (!_webui_mutex_is_webview_update(win, WEBUI_MUTEX_GET_STATUS)) { + // WebView thread just started + // and loaded WebView successfully + break; + } + if (_webui_timer_is_end(&timer, 2500)) { + // Timeout. WebView thread failed. + break; + } + } + + return (_webui_mutex_is_webview_update(win, WEBUI_MUTEX_GET_STATUS) == false); + }; + + static WEBUI_THREAD_WEBVIEW { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread()\n"); + #endif + + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win == NULL) { + _webui_wv_free(win->webView); + win->webView = NULL; + WEBUI_THREAD_RETURN + } + + // ... + + if (true) { + + // Success + _webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE); + + while (true) { + + // Check if there is any WebUI Messages + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> Waiting for WebUI Messages...\n"); + #endif + + _webui_mutex_lock(&win->mutex_webview_update); + _webui_condition_wait(&win->condition_webview_update, &win->mutex_webview_update); + + if (win->webView) { + // Stop this thread + if (win->webView->stop) { + _webui_macos_wv_close(win->webView->index); + _webui_mutex_unlock(&win->mutex_webview_update); + break; + } + // Window Size + if (win->webView->size) { + win->webView->size = false; + _webui_wv_set_size(win->webView, win->webView->width, win->webView->height); + } + // Window Position + if (win->webView->position) { + win->webView->position = false; + _webui_wv_set_position(win->webView, win->webView->x, win->webView->y); + } + // Navigation + if (win->webView->navigate) { + win->webView->navigate = false; + _webui_wv_navigate(win->webView, win->webView->url); + } + } + + _webui_mutex_unlock(&win->mutex_webview_update); + } + } + + // Close window in case WKWebView did + // not fire the close event. + if (_webui_mutex_is_connected(win, WEBUI_MUTEX_GET_STATUS)) { + _webui_send_all( + win, 0, WEBUI_CMD_CLOSE, NULL, 0 + ); + } + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> Cleaning\n"); + #endif + + // Clean + _webui_wv_free(win->webView); + win->webView = NULL; + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_webview_thread() -> End\n"); + #endif + + WEBUI_THREAD_RETURN + } +#endif + +static WEBUI_THREAD_MONITOR { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread()\n"); + #endif + + _webui_window_t* win = _webui_dereference_win_ptr(arg); + if (win == NULL) { + WEBUI_THREAD_RETURN + } + + // Stop if a lower window already monitoring the same folder + // Loop trough all windows + for (size_t i = 1; i < WEBUI_MAX_IDS; i++) { + if ((_webui.wins[i] != NULL) && (_webui.wins[i] != win) && (i < win->num)) { + WEBUI_THREAD_RETURN + } + } + + const char* js = "location.reload();"; + size_t js_len = _webui_strlen(js); + + #ifdef _WIN32 + // Windows + HANDLE hDir = CreateFile( + win->server_root_path, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL + ); + if (hDir == INVALID_HANDLE_VALUE) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Failed to open folder: %s\n", + win->server_root_path + ); + #endif + WEBUI_THREAD_RETURN + } + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Monitoring [%s]\n", win->server_root_path); + #endif + char buffer[1024]; + DWORD bytesReturned; + while ((!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) && + (_webui_mutex_is_server_running(win, WEBUI_MUTEX_GET_STATUS))) { + if (ReadDirectoryChangesW( + hDir, buffer, sizeof(buffer), TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES | + FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE, &bytesReturned, NULL, NULL + )) + { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Folder updated\n"); + #endif + // Loop trough all connected clients in this window + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if ((_webui.clients[i] != NULL) && (_webui.clients_win_num[i] == win->num) && + (_webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_GET_STATUS, i))) { + _webui_send_client(win, _webui.clients[i], 0, WEBUI_CMD_JS_QUICK, js, js_len, false); + } + } + } else { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Failed to read folder changes\n"); + #endif + break; + } + } + CloseHandle(hDir); + #elif __linux__ + // Linux + int fd = inotify_init(); + if (fd < 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> inotify_init error\n"); + #endif + WEBUI_THREAD_RETURN + } + int wd = inotify_add_watch(fd, win->server_root_path, IN_MODIFY | IN_CREATE | IN_DELETE); + if (wd < 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> inotify_add_watch error\n"); + #endif + close(fd); + WEBUI_THREAD_RETURN + } + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Monitoring [%s]\n", win->server_root_path); + #endif + char buffer[1024]; + while (!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + int length = read(fd, buffer, sizeof(buffer)); + if (length < 0) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> read error\n"); + #endif + break; + } + int i = 0; + while (i < length) { + struct inotify_event *event = (struct inotify_event *)&buffer[i]; + if (event->len) { + if (event->mask&(IN_CREATE | IN_DELETE | IN_MODIFY)) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Folder updated\n"); + #endif + // Loop trough all connected clients in this window + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if ((_webui.clients[i] != NULL) && (_webui.clients_win_num[i] == win->num) && + (_webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_GET_STATUS, i))) { + _webui_send_client(win, _webui.clients[i], 0, WEBUI_CMD_JS_QUICK, js, js_len, false); + } + } + } + } + i += sizeof(struct inotify_event) + event->len; + } + } + inotify_rm_watch(fd, wd); + close(fd); + #else + // macOS + int kq = kqueue(); + if (kq == -1) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> kqueue error\n"); + #endif + WEBUI_THREAD_RETURN + } + int fd = open(win->server_root_path, O_RDONLY); + if (fd == -1) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> open error\n"); + #endif + close(kq); + WEBUI_THREAD_RETURN + } + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Monitoring [%s]\n", win->server_root_path); + #endif + struct kevent change; + EV_SET(&change, fd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_ONESHOT, NOTE_WRITE, 0, NULL); + while (!_webui_mutex_app_is_exit_now(WEBUI_MUTEX_GET_STATUS)) { + struct kevent event; + int nev = kevent(kq, &change, 1, &event, 1, NULL); + if (nev == -1) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> kevent error\n"); + #endif + break; + } else if (nev > 0) { + if (event.fflags&NOTE_WRITE) { + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Folder updated\n"); + #endif + // Loop trough all connected clients in this window + for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { + if ((_webui.clients[i] != NULL) && (_webui.clients_win_num[i] == win->num) && + (_webui_mutex_is_multi_client_token_valid(win, WEBUI_MUTEX_GET_STATUS, i))) { + _webui_send_client(win, _webui.clients[i], 0, WEBUI_CMD_JS_QUICK, js, js_len, false); + } + } + } + } + } + close(fd); + close(kq); + #endif + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t[Thread .] _webui_folder_monitor_thread() -> Exit\n"); + #endif + WEBUI_THREAD_RETURN +} + +static void _webui_bridge_api_handler(webui_event_t* e) { + + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_bridge_api_handler()\n"); + #endif + + // This function gets called by `webui.js` to reach + // an internal core API. This is not a public user API. + + const char* api_name = webui_get_string(e); + #ifdef WEBUI_LOG + _webui_log_debug("[Core]\t\t_webui_bridge_api_handler() -> api_name: [%s]\n", api_name); + #endif + + if (strcmp(api_name, "high_contrast") == 0) { + webui_return_bool(e, webui_is_high_contrast()); + } +} diff --git a/v2/webui/src/webview/EventToken.h b/v2/webui/src/webview/EventToken.h new file mode 100644 index 0000000..507a338 --- /dev/null +++ b/v2/webui/src/webview/EventToken.h @@ -0,0 +1,77 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0628 */ +/* @@MIDL_FILE_HEADING( ) */ + + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 501 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif /* __RPCNDR_H_VERSION__ */ + + +#ifndef __eventtoken_h__ +#define __eventtoken_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#ifndef DECLSPEC_XFGVIRT +#if defined(_CONTROL_FLOW_GUARD_XFG) +#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) +#else +#define DECLSPEC_XFGVIRT(base, func) +#endif +#endif + +/* Forward Declarations */ + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_eventtoken_0000_0000 */ +/* [local] */ + +// Microsoft Windows +// Copyright (c) Microsoft Corporation. All rights reserved. +#pragma once +typedef struct EventRegistrationToken + { + __int64 value; + } EventRegistrationToken; + + + +extern RPC_IF_HANDLE __MIDL_itf_eventtoken_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_eventtoken_0000_0000_v0_0_s_ifspec; + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/v2/webui/src/webview/README.md b/v2/webui/src/webview/README.md new file mode 100644 index 0000000..4630759 --- /dev/null +++ b/v2/webui/src/webview/README.md @@ -0,0 +1,31 @@ +## 1. `WebView2.h` + +1. Go to https://www.nuget.org/packages/microsoft.web.webview2. +2. Download the `.nupkg` file. +3. Rename it to `.zip`. +4. Extract the archive. +5. Copy the file `microsoft.web.webview2.x.x.xxxx.xx\build\native\include\WebView2.h`. +6. Paste `WebView2.h` into this folder (`webui\src\webview`). + +## 2. `EventToken.h` + +1. Go to https://learn.microsoft.com/en-us/windows/apps/windows-sdk/downloads. +2. Download and install the Windows SDK. +3. Copy `C:\Program Files (x86)\Windows Kits\10\Include\10.x.xxxx.x\winrt\EventToken.h`. +4. Paste `EventToken.h` into this folder (`webui\src\webview`). + +## 3. Prevent warnings + +Add the following snippet at the top of `WebView2.h`: + +```cpp +// Disable all warnings (WebUI) +#ifdef _MSC_VER +#pragma warning(push, 0) +#pragma warning(disable: 4996) +#elif defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) +#pragma GCC system_header +#endif +``` diff --git a/v2/webui/src/webview/WebView2.h b/v2/webui/src/webview/WebView2.h new file mode 100644 index 0000000..7c9ce08 --- /dev/null +++ b/v2/webui/src/webview/WebView2.h @@ -0,0 +1,68929 @@ +// Disable all warnings (WebUI) +#ifdef _MSC_VER +#pragma warning(push, 0) +#pragma warning(disable: 4996) +#elif defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) +#pragma GCC system_header +#endif + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.xx.xxxx */ +/* at a redacted point in time + */ +/* Compiler settings for ../../edge_embedded_browser/client/win/current/WebView2.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.xx.xxxx + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif /* __RPCNDR_H_VERSION__ */ + + +#ifndef __WebView2_h__ +#define __WebView2_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#ifndef DECLSPEC_XFGVIRT +#if defined(_CONTROL_FLOW_GUARD_XFG) +#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) +#else +#define DECLSPEC_XFGVIRT(base, func) +#endif +#endif + +/* Forward Declarations */ + +#ifndef __ICoreWebView2_FWD_DEFINED__ +#define __ICoreWebView2_FWD_DEFINED__ +typedef interface ICoreWebView2 ICoreWebView2; + +#endif /* __ICoreWebView2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContainsFullScreenElementChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ContainsFullScreenElementChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ContainsFullScreenElementChangedEventHandler ICoreWebView2ContainsFullScreenElementChangedEventHandler; + +#endif /* __ICoreWebView2ContainsFullScreenElementChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ContentLoadingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ContentLoadingEventHandler ICoreWebView2ContentLoadingEventHandler; + +#endif /* __ICoreWebView2ContentLoadingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DocumentTitleChangedEventHandler ICoreWebView2DocumentTitleChangedEventHandler; + +#endif /* __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HistoryChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2HistoryChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2HistoryChangedEventHandler ICoreWebView2HistoryChangedEventHandler; + +#endif /* __ICoreWebView2HistoryChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationCompletedEventHandler ICoreWebView2NavigationCompletedEventHandler; + +#endif /* __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationStartingEventHandler ICoreWebView2NavigationStartingEventHandler; + +#endif /* __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NewWindowRequestedEventHandler ICoreWebView2NewWindowRequestedEventHandler; + +#endif /* __ICoreWebView2NewWindowRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionRequestedEventHandler ICoreWebView2PermissionRequestedEventHandler; + +#endif /* __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ProcessFailedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessFailedEventHandler ICoreWebView2ProcessFailedEventHandler; + +#endif /* __ICoreWebView2ProcessFailedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ScriptDialogOpeningEventHandler ICoreWebView2ScriptDialogOpeningEventHandler; + +#endif /* __ICoreWebView2ScriptDialogOpeningEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2SourceChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2SourceChangedEventHandler ICoreWebView2SourceChangedEventHandler; + +#endif /* __ICoreWebView2SourceChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WebMessageReceivedEventHandler ICoreWebView2WebMessageReceivedEventHandler; + +#endif /* __ICoreWebView2WebMessageReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceRequestedEventHandler ICoreWebView2WebResourceRequestedEventHandler; + +#endif /* __ICoreWebView2WebResourceRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WindowCloseRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2WindowCloseRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WindowCloseRequestedEventHandler ICoreWebView2WindowCloseRequestedEventHandler; + +#endif /* __ICoreWebView2WindowCloseRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler; + +#endif /* __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ExecuteScriptCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ExecuteScriptCompletedHandler ICoreWebView2ExecuteScriptCompletedHandler; + +#endif /* __ICoreWebView2ExecuteScriptCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CapturePreviewCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CapturePreviewCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CapturePreviewCompletedHandler ICoreWebView2CapturePreviewCompletedHandler; + +#endif /* __ICoreWebView2CapturePreviewCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler ICoreWebView2CallDevToolsProtocolMethodCompletedHandler; + +#endif /* __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_2_FWD_DEFINED__ +#define __ICoreWebView2_2_FWD_DEFINED__ +typedef interface ICoreWebView2_2 ICoreWebView2_2; + +#endif /* __ICoreWebView2_2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DOMContentLoadedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DOMContentLoadedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DOMContentLoadedEventHandler ICoreWebView2DOMContentLoadedEventHandler; + +#endif /* __ICoreWebView2DOMContentLoadedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2WebResourceResponseReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceResponseReceivedEventHandler ICoreWebView2WebResourceResponseReceivedEventHandler; + +#endif /* __ICoreWebView2WebResourceResponseReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_3_FWD_DEFINED__ +#define __ICoreWebView2_3_FWD_DEFINED__ +typedef interface ICoreWebView2_3 ICoreWebView2_3; + +#endif /* __ICoreWebView2_3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2TrySuspendCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2TrySuspendCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2TrySuspendCompletedHandler ICoreWebView2TrySuspendCompletedHandler; + +#endif /* __ICoreWebView2TrySuspendCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_4_FWD_DEFINED__ +#define __ICoreWebView2_4_FWD_DEFINED__ +typedef interface ICoreWebView2_4 ICoreWebView2_4; + +#endif /* __ICoreWebView2_4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DownloadStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DownloadStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DownloadStartingEventHandler ICoreWebView2DownloadStartingEventHandler; + +#endif /* __ICoreWebView2DownloadStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameCreatedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameCreatedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameCreatedEventHandler ICoreWebView2FrameCreatedEventHandler; + +#endif /* __ICoreWebView2FrameCreatedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_5_FWD_DEFINED__ +#define __ICoreWebView2_5_FWD_DEFINED__ +typedef interface ICoreWebView2_5 ICoreWebView2_5; + +#endif /* __ICoreWebView2_5_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificateRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ClientCertificateRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ClientCertificateRequestedEventHandler ICoreWebView2ClientCertificateRequestedEventHandler; + +#endif /* __ICoreWebView2ClientCertificateRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_6_FWD_DEFINED__ +#define __ICoreWebView2_6_FWD_DEFINED__ +typedef interface ICoreWebView2_6 ICoreWebView2_6; + +#endif /* __ICoreWebView2_6_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_7_FWD_DEFINED__ +#define __ICoreWebView2_7_FWD_DEFINED__ +typedef interface ICoreWebView2_7 ICoreWebView2_7; + +#endif /* __ICoreWebView2_7_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintToPdfCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2PrintToPdfCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2PrintToPdfCompletedHandler ICoreWebView2PrintToPdfCompletedHandler; + +#endif /* __ICoreWebView2PrintToPdfCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_8_FWD_DEFINED__ +#define __ICoreWebView2_8_FWD_DEFINED__ +typedef interface ICoreWebView2_8 ICoreWebView2_8; + +#endif /* __ICoreWebView2_8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2IsDocumentPlayingAudioChangedEventHandler ICoreWebView2IsDocumentPlayingAudioChangedEventHandler; + +#endif /* __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2IsMutedChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2IsMutedChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2IsMutedChangedEventHandler ICoreWebView2IsMutedChangedEventHandler; + +#endif /* __ICoreWebView2IsMutedChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_9_FWD_DEFINED__ +#define __ICoreWebView2_9_FWD_DEFINED__ +typedef interface ICoreWebView2_9 ICoreWebView2_9; + +#endif /* __ICoreWebView2_9_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler; + +#endif /* __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_10_FWD_DEFINED__ +#define __ICoreWebView2_10_FWD_DEFINED__ +typedef interface ICoreWebView2_10 ICoreWebView2_10; + +#endif /* __ICoreWebView2_10_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2BasicAuthenticationRequestedEventHandler ICoreWebView2BasicAuthenticationRequestedEventHandler; + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_11_FWD_DEFINED__ +#define __ICoreWebView2_11_FWD_DEFINED__ +typedef interface ICoreWebView2_11 ICoreWebView2_11; + +#endif /* __ICoreWebView2_11_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuRequestedEventHandler ICoreWebView2ContextMenuRequestedEventHandler; + +#endif /* __ICoreWebView2ContextMenuRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_12_FWD_DEFINED__ +#define __ICoreWebView2_12_FWD_DEFINED__ +typedef interface ICoreWebView2_12 ICoreWebView2_12; + +#endif /* __ICoreWebView2_12_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2StatusBarTextChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2StatusBarTextChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2StatusBarTextChangedEventHandler ICoreWebView2StatusBarTextChangedEventHandler; + +#endif /* __ICoreWebView2StatusBarTextChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_13_FWD_DEFINED__ +#define __ICoreWebView2_13_FWD_DEFINED__ +typedef interface ICoreWebView2_13 ICoreWebView2_13; + +#endif /* __ICoreWebView2_13_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_14_FWD_DEFINED__ +#define __ICoreWebView2_14_FWD_DEFINED__ +typedef interface ICoreWebView2_14 ICoreWebView2_14; + +#endif /* __ICoreWebView2_14_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ServerCertificateErrorDetectedEventHandler ICoreWebView2ServerCertificateErrorDetectedEventHandler; + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler; + +#endif /* __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_15_FWD_DEFINED__ +#define __ICoreWebView2_15_FWD_DEFINED__ +typedef interface ICoreWebView2_15 ICoreWebView2_15; + +#endif /* __ICoreWebView2_15_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FaviconChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FaviconChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FaviconChangedEventHandler ICoreWebView2FaviconChangedEventHandler; + +#endif /* __ICoreWebView2FaviconChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2GetFaviconCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2GetFaviconCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2GetFaviconCompletedHandler ICoreWebView2GetFaviconCompletedHandler; + +#endif /* __ICoreWebView2GetFaviconCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_16_FWD_DEFINED__ +#define __ICoreWebView2_16_FWD_DEFINED__ +typedef interface ICoreWebView2_16 ICoreWebView2_16; + +#endif /* __ICoreWebView2_16_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2PrintCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2PrintCompletedHandler ICoreWebView2PrintCompletedHandler; + +#endif /* __ICoreWebView2PrintCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintToPdfStreamCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2PrintToPdfStreamCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2PrintToPdfStreamCompletedHandler ICoreWebView2PrintToPdfStreamCompletedHandler; + +#endif /* __ICoreWebView2PrintToPdfStreamCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_17_FWD_DEFINED__ +#define __ICoreWebView2_17_FWD_DEFINED__ +typedef interface ICoreWebView2_17 ICoreWebView2_17; + +#endif /* __ICoreWebView2_17_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_18_FWD_DEFINED__ +#define __ICoreWebView2_18_FWD_DEFINED__ +typedef interface ICoreWebView2_18 ICoreWebView2_18; + +#endif /* __ICoreWebView2_18_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2LaunchingExternalUriSchemeEventHandler_FWD_DEFINED__ +#define __ICoreWebView2LaunchingExternalUriSchemeEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2LaunchingExternalUriSchemeEventHandler ICoreWebView2LaunchingExternalUriSchemeEventHandler; + +#endif /* __ICoreWebView2LaunchingExternalUriSchemeEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_19_FWD_DEFINED__ +#define __ICoreWebView2_19_FWD_DEFINED__ +typedef interface ICoreWebView2_19 ICoreWebView2_19; + +#endif /* __ICoreWebView2_19_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_20_FWD_DEFINED__ +#define __ICoreWebView2_20_FWD_DEFINED__ +typedef interface ICoreWebView2_20 ICoreWebView2_20; + +#endif /* __ICoreWebView2_20_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_21_FWD_DEFINED__ +#define __ICoreWebView2_21_FWD_DEFINED__ +typedef interface ICoreWebView2_21 ICoreWebView2_21; + +#endif /* __ICoreWebView2_21_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptWithResultCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ExecuteScriptWithResultCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ExecuteScriptWithResultCompletedHandler ICoreWebView2ExecuteScriptWithResultCompletedHandler; + +#endif /* __ICoreWebView2ExecuteScriptWithResultCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_22_FWD_DEFINED__ +#define __ICoreWebView2_22_FWD_DEFINED__ +typedef interface ICoreWebView2_22 ICoreWebView2_22; + +#endif /* __ICoreWebView2_22_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_23_FWD_DEFINED__ +#define __ICoreWebView2_23_FWD_DEFINED__ +typedef interface ICoreWebView2_23 ICoreWebView2_23; + +#endif /* __ICoreWebView2_23_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_24_FWD_DEFINED__ +#define __ICoreWebView2_24_FWD_DEFINED__ +typedef interface ICoreWebView2_24 ICoreWebView2_24; + +#endif /* __ICoreWebView2_24_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NotificationReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NotificationReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NotificationReceivedEventHandler ICoreWebView2NotificationReceivedEventHandler; + +#endif /* __ICoreWebView2NotificationReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_25_FWD_DEFINED__ +#define __ICoreWebView2_25_FWD_DEFINED__ +typedef interface ICoreWebView2_25 ICoreWebView2_25; + +#endif /* __ICoreWebView2_25_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveAsUIShowingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2SaveAsUIShowingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2SaveAsUIShowingEventHandler ICoreWebView2SaveAsUIShowingEventHandler; + +#endif /* __ICoreWebView2SaveAsUIShowingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ShowSaveAsUICompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ShowSaveAsUICompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ShowSaveAsUICompletedHandler ICoreWebView2ShowSaveAsUICompletedHandler; + +#endif /* __ICoreWebView2ShowSaveAsUICompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_26_FWD_DEFINED__ +#define __ICoreWebView2_26_FWD_DEFINED__ +typedef interface ICoreWebView2_26 ICoreWebView2_26; + +#endif /* __ICoreWebView2_26_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveFileSecurityCheckStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2SaveFileSecurityCheckStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2SaveFileSecurityCheckStartingEventHandler ICoreWebView2SaveFileSecurityCheckStartingEventHandler; + +#endif /* __ICoreWebView2SaveFileSecurityCheckStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_27_FWD_DEFINED__ +#define __ICoreWebView2_27_FWD_DEFINED__ +typedef interface ICoreWebView2_27 ICoreWebView2_27; + +#endif /* __ICoreWebView2_27_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ScreenCaptureStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ScreenCaptureStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ScreenCaptureStartingEventHandler ICoreWebView2ScreenCaptureStartingEventHandler; + +#endif /* __ICoreWebView2ScreenCaptureStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_28_FWD_DEFINED__ +#define __ICoreWebView2_28_FWD_DEFINED__ +typedef interface ICoreWebView2_28 ICoreWebView2_28; + +#endif /* __ICoreWebView2_28_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_29_FWD_DEFINED__ +#define __ICoreWebView2_29_FWD_DEFINED__ +typedef interface ICoreWebView2_29 ICoreWebView2_29; + +#endif /* __ICoreWebView2_29_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerCreatedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DedicatedWorkerCreatedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DedicatedWorkerCreatedEventHandler ICoreWebView2DedicatedWorkerCreatedEventHandler; + +#endif /* __ICoreWebView2DedicatedWorkerCreatedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2AcceleratorKeyPressedEventArgs ICoreWebView2AcceleratorKeyPressedEventArgs; + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2AcceleratorKeyPressedEventArgs2 ICoreWebView2AcceleratorKeyPressedEventArgs2; + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2BasicAuthenticationRequestedEventArgs ICoreWebView2BasicAuthenticationRequestedEventArgs; + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationResponse_FWD_DEFINED__ +#define __ICoreWebView2BasicAuthenticationResponse_FWD_DEFINED__ +typedef interface ICoreWebView2BasicAuthenticationResponse ICoreWebView2BasicAuthenticationResponse; + +#endif /* __ICoreWebView2BasicAuthenticationResponse_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtension_FWD_DEFINED__ +#define __ICoreWebView2BrowserExtension_FWD_DEFINED__ +typedef interface ICoreWebView2BrowserExtension ICoreWebView2BrowserExtension; + +#endif /* __ICoreWebView2BrowserExtension_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtensionRemoveCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2BrowserExtensionRemoveCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2BrowserExtensionRemoveCompletedHandler ICoreWebView2BrowserExtensionRemoveCompletedHandler; + +#endif /* __ICoreWebView2BrowserExtensionRemoveCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtensionEnableCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2BrowserExtensionEnableCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2BrowserExtensionEnableCompletedHandler ICoreWebView2BrowserExtensionEnableCompletedHandler; + +#endif /* __ICoreWebView2BrowserExtensionEnableCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserProcessExitedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2BrowserProcessExitedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2BrowserProcessExitedEventArgs ICoreWebView2BrowserProcessExitedEventArgs; + +#endif /* __ICoreWebView2BrowserProcessExitedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Certificate_FWD_DEFINED__ +#define __ICoreWebView2Certificate_FWD_DEFINED__ +typedef interface ICoreWebView2Certificate ICoreWebView2Certificate; + +#endif /* __ICoreWebView2Certificate_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificate_FWD_DEFINED__ +#define __ICoreWebView2ClientCertificate_FWD_DEFINED__ +typedef interface ICoreWebView2ClientCertificate ICoreWebView2ClientCertificate; + +#endif /* __ICoreWebView2ClientCertificate_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificateRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ClientCertificateRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ClientCertificateRequestedEventArgs ICoreWebView2ClientCertificateRequestedEventArgs; + +#endif /* __ICoreWebView2ClientCertificateRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2StringCollection_FWD_DEFINED__ +#define __ICoreWebView2StringCollection_FWD_DEFINED__ +typedef interface ICoreWebView2StringCollection ICoreWebView2StringCollection; + +#endif /* __ICoreWebView2StringCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificateCollection_FWD_DEFINED__ +#define __ICoreWebView2ClientCertificateCollection_FWD_DEFINED__ +typedef interface ICoreWebView2ClientCertificateCollection ICoreWebView2ClientCertificateCollection; + +#endif /* __ICoreWebView2ClientCertificateCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController_FWD_DEFINED__ +#define __ICoreWebView2CompositionController_FWD_DEFINED__ +typedef interface ICoreWebView2CompositionController ICoreWebView2CompositionController; + +#endif /* __ICoreWebView2CompositionController_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CursorChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2CursorChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CursorChangedEventHandler ICoreWebView2CursorChangedEventHandler; + +#endif /* __ICoreWebView2CursorChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController2_FWD_DEFINED__ +#define __ICoreWebView2CompositionController2_FWD_DEFINED__ +typedef interface ICoreWebView2CompositionController2 ICoreWebView2CompositionController2; + +#endif /* __ICoreWebView2CompositionController2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController3_FWD_DEFINED__ +#define __ICoreWebView2CompositionController3_FWD_DEFINED__ +typedef interface ICoreWebView2CompositionController3 ICoreWebView2CompositionController3; + +#endif /* __ICoreWebView2CompositionController3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController4_FWD_DEFINED__ +#define __ICoreWebView2CompositionController4_FWD_DEFINED__ +typedef interface ICoreWebView2CompositionController4 ICoreWebView2CompositionController4; + +#endif /* __ICoreWebView2CompositionController4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NonClientRegionChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NonClientRegionChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NonClientRegionChangedEventHandler ICoreWebView2NonClientRegionChangedEventHandler; + +#endif /* __ICoreWebView2NonClientRegionChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2RegionRectCollectionView_FWD_DEFINED__ +#define __ICoreWebView2RegionRectCollectionView_FWD_DEFINED__ +typedef interface ICoreWebView2RegionRectCollectionView ICoreWebView2RegionRectCollectionView; + +#endif /* __ICoreWebView2RegionRectCollectionView_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController5_FWD_DEFINED__ +#define __ICoreWebView2CompositionController5_FWD_DEFINED__ +typedef interface ICoreWebView2CompositionController5 ICoreWebView2CompositionController5; + +#endif /* __ICoreWebView2CompositionController5_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DragStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DragStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DragStartingEventHandler ICoreWebView2DragStartingEventHandler; + +#endif /* __ICoreWebView2DragStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ContentLoadingEventArgs ICoreWebView2ContentLoadingEventArgs; + +#endif /* __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuItem_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuItem_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuItem ICoreWebView2ContextMenuItem; + +#endif /* __ICoreWebView2ContextMenuItem_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CustomItemSelectedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2CustomItemSelectedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CustomItemSelectedEventHandler ICoreWebView2CustomItemSelectedEventHandler; + +#endif /* __ICoreWebView2CustomItemSelectedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuItemCollection_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuItemCollection_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuItemCollection ICoreWebView2ContextMenuItemCollection; + +#endif /* __ICoreWebView2ContextMenuItemCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuRequestedEventArgs ICoreWebView2ContextMenuRequestedEventArgs; + +#endif /* __ICoreWebView2ContextMenuRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuTarget_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuTarget_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuTarget ICoreWebView2ContextMenuTarget; + +#endif /* __ICoreWebView2ContextMenuTarget_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller_FWD_DEFINED__ +#define __ICoreWebView2Controller_FWD_DEFINED__ +typedef interface ICoreWebView2Controller ICoreWebView2Controller; + +#endif /* __ICoreWebView2Controller_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2AcceleratorKeyPressedEventHandler ICoreWebView2AcceleratorKeyPressedEventHandler; + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FocusChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FocusChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FocusChangedEventHandler ICoreWebView2FocusChangedEventHandler; + +#endif /* __ICoreWebView2FocusChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2MoveFocusRequestedEventHandler ICoreWebView2MoveFocusRequestedEventHandler; + +#endif /* __ICoreWebView2MoveFocusRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ZoomFactorChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ZoomFactorChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ZoomFactorChangedEventHandler ICoreWebView2ZoomFactorChangedEventHandler; + +#endif /* __ICoreWebView2ZoomFactorChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller2_FWD_DEFINED__ +#define __ICoreWebView2Controller2_FWD_DEFINED__ +typedef interface ICoreWebView2Controller2 ICoreWebView2Controller2; + +#endif /* __ICoreWebView2Controller2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller3_FWD_DEFINED__ +#define __ICoreWebView2Controller3_FWD_DEFINED__ +typedef interface ICoreWebView2Controller3 ICoreWebView2Controller3; + +#endif /* __ICoreWebView2Controller3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2RasterizationScaleChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2RasterizationScaleChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2RasterizationScaleChangedEventHandler ICoreWebView2RasterizationScaleChangedEventHandler; + +#endif /* __ICoreWebView2RasterizationScaleChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller4_FWD_DEFINED__ +#define __ICoreWebView2Controller4_FWD_DEFINED__ +typedef interface ICoreWebView2Controller4 ICoreWebView2Controller4; + +#endif /* __ICoreWebView2Controller4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions_FWD_DEFINED__ +#define __ICoreWebView2ControllerOptions_FWD_DEFINED__ +typedef interface ICoreWebView2ControllerOptions ICoreWebView2ControllerOptions; + +#endif /* __ICoreWebView2ControllerOptions_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions2_FWD_DEFINED__ +#define __ICoreWebView2ControllerOptions2_FWD_DEFINED__ +typedef interface ICoreWebView2ControllerOptions2 ICoreWebView2ControllerOptions2; + +#endif /* __ICoreWebView2ControllerOptions2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions3_FWD_DEFINED__ +#define __ICoreWebView2ControllerOptions3_FWD_DEFINED__ +typedef interface ICoreWebView2ControllerOptions3 ICoreWebView2ControllerOptions3; + +#endif /* __ICoreWebView2ControllerOptions3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions4_FWD_DEFINED__ +#define __ICoreWebView2ControllerOptions4_FWD_DEFINED__ +typedef interface ICoreWebView2ControllerOptions4 ICoreWebView2ControllerOptions4; + +#endif /* __ICoreWebView2ControllerOptions4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Cookie_FWD_DEFINED__ +#define __ICoreWebView2Cookie_FWD_DEFINED__ +typedef interface ICoreWebView2Cookie ICoreWebView2Cookie; + +#endif /* __ICoreWebView2Cookie_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CookieManager_FWD_DEFINED__ +#define __ICoreWebView2CookieManager_FWD_DEFINED__ +typedef interface ICoreWebView2CookieManager ICoreWebView2CookieManager; + +#endif /* __ICoreWebView2CookieManager_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2GetCookiesCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2GetCookiesCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2GetCookiesCompletedHandler ICoreWebView2GetCookiesCompletedHandler; + +#endif /* __ICoreWebView2GetCookiesCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CookieList_FWD_DEFINED__ +#define __ICoreWebView2CookieList_FWD_DEFINED__ +typedef interface ICoreWebView2CookieList ICoreWebView2CookieList; + +#endif /* __ICoreWebView2CookieList_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CustomSchemeRegistration_FWD_DEFINED__ +#define __ICoreWebView2CustomSchemeRegistration_FWD_DEFINED__ +typedef interface ICoreWebView2CustomSchemeRegistration ICoreWebView2CustomSchemeRegistration; + +#endif /* __ICoreWebView2CustomSchemeRegistration_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DOMContentLoadedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2DOMContentLoadedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2DOMContentLoadedEventArgs ICoreWebView2DOMContentLoadedEventArgs; + +#endif /* __ICoreWebView2DOMContentLoadedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorker_FWD_DEFINED__ +#define __ICoreWebView2DedicatedWorker_FWD_DEFINED__ +typedef interface ICoreWebView2DedicatedWorker ICoreWebView2DedicatedWorker; + +#endif /* __ICoreWebView2DedicatedWorker_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler; + +#endif /* __ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerDestroyingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DedicatedWorkerDestroyingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DedicatedWorkerDestroyingEventHandler ICoreWebView2DedicatedWorkerDestroyingEventHandler; + +#endif /* __ICoreWebView2DedicatedWorkerDestroyingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler; + +#endif /* __ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerCreatedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2DedicatedWorkerCreatedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2DedicatedWorkerCreatedEventArgs ICoreWebView2DedicatedWorkerCreatedEventArgs; + +#endif /* __ICoreWebView2DedicatedWorkerCreatedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Deferral_FWD_DEFINED__ +#define __ICoreWebView2Deferral_FWD_DEFINED__ +typedef interface ICoreWebView2Deferral ICoreWebView2Deferral; + +#endif /* __ICoreWebView2Deferral_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs ICoreWebView2DevToolsProtocolEventReceivedEventArgs; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 ICoreWebView2DevToolsProtocolEventReceivedEventArgs2; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceiver_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceiver_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceiver ICoreWebView2DevToolsProtocolEventReceiver; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceiver_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler ICoreWebView2DevToolsProtocolEventReceivedEventHandler; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DownloadOperation_FWD_DEFINED__ +#define __ICoreWebView2DownloadOperation_FWD_DEFINED__ +typedef interface ICoreWebView2DownloadOperation ICoreWebView2DownloadOperation; + +#endif /* __ICoreWebView2DownloadOperation_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BytesReceivedChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2BytesReceivedChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2BytesReceivedChangedEventHandler ICoreWebView2BytesReceivedChangedEventHandler; + +#endif /* __ICoreWebView2BytesReceivedChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EstimatedEndTimeChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2EstimatedEndTimeChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2EstimatedEndTimeChangedEventHandler ICoreWebView2EstimatedEndTimeChangedEventHandler; + +#endif /* __ICoreWebView2EstimatedEndTimeChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2StateChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2StateChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2StateChangedEventHandler ICoreWebView2StateChangedEventHandler; + +#endif /* __ICoreWebView2StateChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DownloadStartingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2DownloadStartingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2DownloadStartingEventArgs ICoreWebView2DownloadStartingEventArgs; + +#endif /* __ICoreWebView2DownloadStartingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DragStartingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2DragStartingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2DragStartingEventArgs ICoreWebView2DragStartingEventArgs; + +#endif /* __ICoreWebView2DragStartingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment_FWD_DEFINED__ +#define __ICoreWebView2Environment_FWD_DEFINED__ +typedef interface ICoreWebView2Environment ICoreWebView2Environment; + +#endif /* __ICoreWebView2Environment_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewBrowserVersionAvailableEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NewBrowserVersionAvailableEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NewBrowserVersionAvailableEventHandler ICoreWebView2NewBrowserVersionAvailableEventHandler; + +#endif /* __ICoreWebView2NewBrowserVersionAvailableEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler ICoreWebView2CreateCoreWebView2ControllerCompletedHandler; + +#endif /* __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler; + +#endif /* __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment2_FWD_DEFINED__ +#define __ICoreWebView2Environment2_FWD_DEFINED__ +typedef interface ICoreWebView2Environment2 ICoreWebView2Environment2; + +#endif /* __ICoreWebView2Environment2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment3_FWD_DEFINED__ +#define __ICoreWebView2Environment3_FWD_DEFINED__ +typedef interface ICoreWebView2Environment3 ICoreWebView2Environment3; + +#endif /* __ICoreWebView2Environment3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler; + +#endif /* __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment4_FWD_DEFINED__ +#define __ICoreWebView2Environment4_FWD_DEFINED__ +typedef interface ICoreWebView2Environment4 ICoreWebView2Environment4; + +#endif /* __ICoreWebView2Environment4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment5_FWD_DEFINED__ +#define __ICoreWebView2Environment5_FWD_DEFINED__ +typedef interface ICoreWebView2Environment5 ICoreWebView2Environment5; + +#endif /* __ICoreWebView2Environment5_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserProcessExitedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2BrowserProcessExitedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2BrowserProcessExitedEventHandler ICoreWebView2BrowserProcessExitedEventHandler; + +#endif /* __ICoreWebView2BrowserProcessExitedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment6_FWD_DEFINED__ +#define __ICoreWebView2Environment6_FWD_DEFINED__ +typedef interface ICoreWebView2Environment6 ICoreWebView2Environment6; + +#endif /* __ICoreWebView2Environment6_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment7_FWD_DEFINED__ +#define __ICoreWebView2Environment7_FWD_DEFINED__ +typedef interface ICoreWebView2Environment7 ICoreWebView2Environment7; + +#endif /* __ICoreWebView2Environment7_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment8_FWD_DEFINED__ +#define __ICoreWebView2Environment8_FWD_DEFINED__ +typedef interface ICoreWebView2Environment8 ICoreWebView2Environment8; + +#endif /* __ICoreWebView2Environment8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfosChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ProcessInfosChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessInfosChangedEventHandler ICoreWebView2ProcessInfosChangedEventHandler; + +#endif /* __ICoreWebView2ProcessInfosChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfoCollection_FWD_DEFINED__ +#define __ICoreWebView2ProcessInfoCollection_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessInfoCollection ICoreWebView2ProcessInfoCollection; + +#endif /* __ICoreWebView2ProcessInfoCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment9_FWD_DEFINED__ +#define __ICoreWebView2Environment9_FWD_DEFINED__ +typedef interface ICoreWebView2Environment9 ICoreWebView2Environment9; + +#endif /* __ICoreWebView2Environment9_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment10_FWD_DEFINED__ +#define __ICoreWebView2Environment10_FWD_DEFINED__ +typedef interface ICoreWebView2Environment10 ICoreWebView2Environment10; + +#endif /* __ICoreWebView2Environment10_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment11_FWD_DEFINED__ +#define __ICoreWebView2Environment11_FWD_DEFINED__ +typedef interface ICoreWebView2Environment11 ICoreWebView2Environment11; + +#endif /* __ICoreWebView2Environment11_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment12_FWD_DEFINED__ +#define __ICoreWebView2Environment12_FWD_DEFINED__ +typedef interface ICoreWebView2Environment12 ICoreWebView2Environment12; + +#endif /* __ICoreWebView2Environment12_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment13_FWD_DEFINED__ +#define __ICoreWebView2Environment13_FWD_DEFINED__ +typedef interface ICoreWebView2Environment13 ICoreWebView2Environment13; + +#endif /* __ICoreWebView2Environment13_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2GetProcessExtendedInfosCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2GetProcessExtendedInfosCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2GetProcessExtendedInfosCompletedHandler ICoreWebView2GetProcessExtendedInfosCompletedHandler; + +#endif /* __ICoreWebView2GetProcessExtendedInfosCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessExtendedInfoCollection_FWD_DEFINED__ +#define __ICoreWebView2ProcessExtendedInfoCollection_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessExtendedInfoCollection ICoreWebView2ProcessExtendedInfoCollection; + +#endif /* __ICoreWebView2ProcessExtendedInfoCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment14_FWD_DEFINED__ +#define __ICoreWebView2Environment14_FWD_DEFINED__ +typedef interface ICoreWebView2Environment14 ICoreWebView2Environment14; + +#endif /* __ICoreWebView2Environment14_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment15_FWD_DEFINED__ +#define __ICoreWebView2Environment15_FWD_DEFINED__ +typedef interface ICoreWebView2Environment15 ICoreWebView2Environment15; + +#endif /* __ICoreWebView2Environment15_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions ICoreWebView2EnvironmentOptions; + +#endif /* __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions2_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions2_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions2 ICoreWebView2EnvironmentOptions2; + +#endif /* __ICoreWebView2EnvironmentOptions2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions3_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions3_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions3 ICoreWebView2EnvironmentOptions3; + +#endif /* __ICoreWebView2EnvironmentOptions3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions4_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions4_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions4 ICoreWebView2EnvironmentOptions4; + +#endif /* __ICoreWebView2EnvironmentOptions4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions5_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions5_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions5 ICoreWebView2EnvironmentOptions5; + +#endif /* __ICoreWebView2EnvironmentOptions5_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions6_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions6_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions6 ICoreWebView2EnvironmentOptions6; + +#endif /* __ICoreWebView2EnvironmentOptions6_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions7_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions7_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions7 ICoreWebView2EnvironmentOptions7; + +#endif /* __ICoreWebView2EnvironmentOptions7_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions8_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions8_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions8 ICoreWebView2EnvironmentOptions8; + +#endif /* __ICoreWebView2EnvironmentOptions8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptResult_FWD_DEFINED__ +#define __ICoreWebView2ExecuteScriptResult_FWD_DEFINED__ +typedef interface ICoreWebView2ExecuteScriptResult ICoreWebView2ExecuteScriptResult; + +#endif /* __ICoreWebView2ExecuteScriptResult_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2File_FWD_DEFINED__ +#define __ICoreWebView2File_FWD_DEFINED__ +typedef interface ICoreWebView2File ICoreWebView2File; + +#endif /* __ICoreWebView2File_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FileSystemHandle_FWD_DEFINED__ +#define __ICoreWebView2FileSystemHandle_FWD_DEFINED__ +typedef interface ICoreWebView2FileSystemHandle ICoreWebView2FileSystemHandle; + +#endif /* __ICoreWebView2FileSystemHandle_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Find_FWD_DEFINED__ +#define __ICoreWebView2Find_FWD_DEFINED__ +typedef interface ICoreWebView2Find ICoreWebView2Find; + +#endif /* __ICoreWebView2Find_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FindActiveMatchIndexChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FindActiveMatchIndexChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FindActiveMatchIndexChangedEventHandler ICoreWebView2FindActiveMatchIndexChangedEventHandler; + +#endif /* __ICoreWebView2FindActiveMatchIndexChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FindMatchCountChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FindMatchCountChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FindMatchCountChangedEventHandler ICoreWebView2FindMatchCountChangedEventHandler; + +#endif /* __ICoreWebView2FindMatchCountChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FindStartCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2FindStartCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FindStartCompletedHandler ICoreWebView2FindStartCompletedHandler; + +#endif /* __ICoreWebView2FindStartCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FindOptions_FWD_DEFINED__ +#define __ICoreWebView2FindOptions_FWD_DEFINED__ +typedef interface ICoreWebView2FindOptions ICoreWebView2FindOptions; + +#endif /* __ICoreWebView2FindOptions_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame_FWD_DEFINED__ +#define __ICoreWebView2Frame_FWD_DEFINED__ +typedef interface ICoreWebView2Frame ICoreWebView2Frame; + +#endif /* __ICoreWebView2Frame_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameDestroyedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameDestroyedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameDestroyedEventHandler ICoreWebView2FrameDestroyedEventHandler; + +#endif /* __ICoreWebView2FrameDestroyedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNameChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameNameChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameNameChangedEventHandler ICoreWebView2FrameNameChangedEventHandler; + +#endif /* __ICoreWebView2FrameNameChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame2_FWD_DEFINED__ +#define __ICoreWebView2Frame2_FWD_DEFINED__ +typedef interface ICoreWebView2Frame2 ICoreWebView2Frame2; + +#endif /* __ICoreWebView2Frame2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameContentLoadingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameContentLoadingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameContentLoadingEventHandler ICoreWebView2FrameContentLoadingEventHandler; + +#endif /* __ICoreWebView2FrameContentLoadingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameDOMContentLoadedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameDOMContentLoadedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameDOMContentLoadedEventHandler ICoreWebView2FrameDOMContentLoadedEventHandler; + +#endif /* __ICoreWebView2FrameDOMContentLoadedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNavigationCompletedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameNavigationCompletedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameNavigationCompletedEventHandler ICoreWebView2FrameNavigationCompletedEventHandler; + +#endif /* __ICoreWebView2FrameNavigationCompletedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNavigationStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameNavigationStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameNavigationStartingEventHandler ICoreWebView2FrameNavigationStartingEventHandler; + +#endif /* __ICoreWebView2FrameNavigationStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameWebMessageReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameWebMessageReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameWebMessageReceivedEventHandler ICoreWebView2FrameWebMessageReceivedEventHandler; + +#endif /* __ICoreWebView2FrameWebMessageReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame3_FWD_DEFINED__ +#define __ICoreWebView2Frame3_FWD_DEFINED__ +typedef interface ICoreWebView2Frame3 ICoreWebView2Frame3; + +#endif /* __ICoreWebView2Frame3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FramePermissionRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FramePermissionRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FramePermissionRequestedEventHandler ICoreWebView2FramePermissionRequestedEventHandler; + +#endif /* __ICoreWebView2FramePermissionRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame4_FWD_DEFINED__ +#define __ICoreWebView2Frame4_FWD_DEFINED__ +typedef interface ICoreWebView2Frame4 ICoreWebView2Frame4; + +#endif /* __ICoreWebView2Frame4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame5_FWD_DEFINED__ +#define __ICoreWebView2Frame5_FWD_DEFINED__ +typedef interface ICoreWebView2Frame5 ICoreWebView2Frame5; + +#endif /* __ICoreWebView2Frame5_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame6_FWD_DEFINED__ +#define __ICoreWebView2Frame6_FWD_DEFINED__ +typedef interface ICoreWebView2Frame6 ICoreWebView2Frame6; + +#endif /* __ICoreWebView2Frame6_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameScreenCaptureStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameScreenCaptureStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameScreenCaptureStartingEventHandler ICoreWebView2FrameScreenCaptureStartingEventHandler; + +#endif /* __ICoreWebView2FrameScreenCaptureStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame7_FWD_DEFINED__ +#define __ICoreWebView2Frame7_FWD_DEFINED__ +typedef interface ICoreWebView2Frame7 ICoreWebView2Frame7; + +#endif /* __ICoreWebView2Frame7_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameChildFrameCreatedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameChildFrameCreatedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameChildFrameCreatedEventHandler ICoreWebView2FrameChildFrameCreatedEventHandler; + +#endif /* __ICoreWebView2FrameChildFrameCreatedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame8_FWD_DEFINED__ +#define __ICoreWebView2Frame8_FWD_DEFINED__ +typedef interface ICoreWebView2Frame8 ICoreWebView2Frame8; + +#endif /* __ICoreWebView2Frame8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameDedicatedWorkerCreatedEventHandler ICoreWebView2FrameDedicatedWorkerCreatedEventHandler; + +#endif /* __ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameCreatedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2FrameCreatedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2FrameCreatedEventArgs ICoreWebView2FrameCreatedEventArgs; + +#endif /* __ICoreWebView2FrameCreatedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfo_FWD_DEFINED__ +#define __ICoreWebView2FrameInfo_FWD_DEFINED__ +typedef interface ICoreWebView2FrameInfo ICoreWebView2FrameInfo; + +#endif /* __ICoreWebView2FrameInfo_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfo2_FWD_DEFINED__ +#define __ICoreWebView2FrameInfo2_FWD_DEFINED__ +typedef interface ICoreWebView2FrameInfo2 ICoreWebView2FrameInfo2; + +#endif /* __ICoreWebView2FrameInfo2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfoCollection_FWD_DEFINED__ +#define __ICoreWebView2FrameInfoCollection_FWD_DEFINED__ +typedef interface ICoreWebView2FrameInfoCollection ICoreWebView2FrameInfoCollection; + +#endif /* __ICoreWebView2FrameInfoCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfoCollectionIterator_FWD_DEFINED__ +#define __ICoreWebView2FrameInfoCollectionIterator_FWD_DEFINED__ +typedef interface ICoreWebView2FrameInfoCollectionIterator ICoreWebView2FrameInfoCollectionIterator; + +#endif /* __ICoreWebView2FrameInfoCollectionIterator_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpHeadersCollectionIterator_FWD_DEFINED__ +#define __ICoreWebView2HttpHeadersCollectionIterator_FWD_DEFINED__ +typedef interface ICoreWebView2HttpHeadersCollectionIterator ICoreWebView2HttpHeadersCollectionIterator; + +#endif /* __ICoreWebView2HttpHeadersCollectionIterator_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpRequestHeaders_FWD_DEFINED__ +#define __ICoreWebView2HttpRequestHeaders_FWD_DEFINED__ +typedef interface ICoreWebView2HttpRequestHeaders ICoreWebView2HttpRequestHeaders; + +#endif /* __ICoreWebView2HttpRequestHeaders_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpResponseHeaders_FWD_DEFINED__ +#define __ICoreWebView2HttpResponseHeaders_FWD_DEFINED__ +typedef interface ICoreWebView2HttpResponseHeaders ICoreWebView2HttpResponseHeaders; + +#endif /* __ICoreWebView2HttpResponseHeaders_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2LaunchingExternalUriSchemeEventArgs_FWD_DEFINED__ +#define __ICoreWebView2LaunchingExternalUriSchemeEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2LaunchingExternalUriSchemeEventArgs ICoreWebView2LaunchingExternalUriSchemeEventArgs; + +#endif /* __ICoreWebView2LaunchingExternalUriSchemeEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2MoveFocusRequestedEventArgs ICoreWebView2MoveFocusRequestedEventArgs; + +#endif /* __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationCompletedEventArgs ICoreWebView2NavigationCompletedEventArgs; + +#endif /* __ICoreWebView2NavigationCompletedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationCompletedEventArgs2 ICoreWebView2NavigationCompletedEventArgs2; + +#endif /* __ICoreWebView2NavigationCompletedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationStartingEventArgs ICoreWebView2NavigationStartingEventArgs; + +#endif /* __ICoreWebView2NavigationStartingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationStartingEventArgs2 ICoreWebView2NavigationStartingEventArgs2; + +#endif /* __ICoreWebView2NavigationStartingEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs3_FWD_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs3_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationStartingEventArgs3 ICoreWebView2NavigationStartingEventArgs3; + +#endif /* __ICoreWebView2NavigationStartingEventArgs3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NewWindowRequestedEventArgs ICoreWebView2NewWindowRequestedEventArgs; + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2NewWindowRequestedEventArgs2 ICoreWebView2NewWindowRequestedEventArgs2; + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs3_FWD_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs3_FWD_DEFINED__ +typedef interface ICoreWebView2NewWindowRequestedEventArgs3 ICoreWebView2NewWindowRequestedEventArgs3; + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NonClientRegionChangedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NonClientRegionChangedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NonClientRegionChangedEventArgs ICoreWebView2NonClientRegionChangedEventArgs; + +#endif /* __ICoreWebView2NonClientRegionChangedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Notification_FWD_DEFINED__ +#define __ICoreWebView2Notification_FWD_DEFINED__ +typedef interface ICoreWebView2Notification ICoreWebView2Notification; + +#endif /* __ICoreWebView2Notification_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NotificationCloseRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NotificationCloseRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NotificationCloseRequestedEventHandler ICoreWebView2NotificationCloseRequestedEventHandler; + +#endif /* __ICoreWebView2NotificationCloseRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NotificationReceivedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NotificationReceivedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NotificationReceivedEventArgs ICoreWebView2NotificationReceivedEventArgs; + +#endif /* __ICoreWebView2NotificationReceivedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ObjectCollectionView_FWD_DEFINED__ +#define __ICoreWebView2ObjectCollectionView_FWD_DEFINED__ +typedef interface ICoreWebView2ObjectCollectionView ICoreWebView2ObjectCollectionView; + +#endif /* __ICoreWebView2ObjectCollectionView_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ObjectCollection_FWD_DEFINED__ +#define __ICoreWebView2ObjectCollection_FWD_DEFINED__ +typedef interface ICoreWebView2ObjectCollection ICoreWebView2ObjectCollection; + +#endif /* __ICoreWebView2ObjectCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionRequestedEventArgs ICoreWebView2PermissionRequestedEventArgs; + +#endif /* __ICoreWebView2PermissionRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionRequestedEventArgs2 ICoreWebView2PermissionRequestedEventArgs2; + +#endif /* __ICoreWebView2PermissionRequestedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs3_FWD_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs3_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionRequestedEventArgs3 ICoreWebView2PermissionRequestedEventArgs3; + +#endif /* __ICoreWebView2PermissionRequestedEventArgs3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionSetting_FWD_DEFINED__ +#define __ICoreWebView2PermissionSetting_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionSetting ICoreWebView2PermissionSetting; + +#endif /* __ICoreWebView2PermissionSetting_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PointerInfo_FWD_DEFINED__ +#define __ICoreWebView2PointerInfo_FWD_DEFINED__ +typedef interface ICoreWebView2PointerInfo ICoreWebView2PointerInfo; + +#endif /* __ICoreWebView2PointerInfo_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintSettings_FWD_DEFINED__ +#define __ICoreWebView2PrintSettings_FWD_DEFINED__ +typedef interface ICoreWebView2PrintSettings ICoreWebView2PrintSettings; + +#endif /* __ICoreWebView2PrintSettings_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintSettings2_FWD_DEFINED__ +#define __ICoreWebView2PrintSettings2_FWD_DEFINED__ +typedef interface ICoreWebView2PrintSettings2 ICoreWebView2PrintSettings2; + +#endif /* __ICoreWebView2PrintSettings2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessExtendedInfo_FWD_DEFINED__ +#define __ICoreWebView2ProcessExtendedInfo_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessExtendedInfo ICoreWebView2ProcessExtendedInfo; + +#endif /* __ICoreWebView2ProcessExtendedInfo_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessFailedEventArgs ICoreWebView2ProcessFailedEventArgs; + +#endif /* __ICoreWebView2ProcessFailedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessFailedEventArgs2 ICoreWebView2ProcessFailedEventArgs2; + +#endif /* __ICoreWebView2ProcessFailedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs3_FWD_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs3_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessFailedEventArgs3 ICoreWebView2ProcessFailedEventArgs3; + +#endif /* __ICoreWebView2ProcessFailedEventArgs3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfo_FWD_DEFINED__ +#define __ICoreWebView2ProcessInfo_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessInfo ICoreWebView2ProcessInfo; + +#endif /* __ICoreWebView2ProcessInfo_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile_FWD_DEFINED__ +#define __ICoreWebView2Profile_FWD_DEFINED__ +typedef interface ICoreWebView2Profile ICoreWebView2Profile; + +#endif /* __ICoreWebView2Profile_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile2_FWD_DEFINED__ +#define __ICoreWebView2Profile2_FWD_DEFINED__ +typedef interface ICoreWebView2Profile2 ICoreWebView2Profile2; + +#endif /* __ICoreWebView2Profile2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ClearBrowsingDataCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ClearBrowsingDataCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ClearBrowsingDataCompletedHandler ICoreWebView2ClearBrowsingDataCompletedHandler; + +#endif /* __ICoreWebView2ClearBrowsingDataCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile3_FWD_DEFINED__ +#define __ICoreWebView2Profile3_FWD_DEFINED__ +typedef interface ICoreWebView2Profile3 ICoreWebView2Profile3; + +#endif /* __ICoreWebView2Profile3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile4_FWD_DEFINED__ +#define __ICoreWebView2Profile4_FWD_DEFINED__ +typedef interface ICoreWebView2Profile4 ICoreWebView2Profile4; + +#endif /* __ICoreWebView2Profile4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SetPermissionStateCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2SetPermissionStateCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2SetPermissionStateCompletedHandler ICoreWebView2SetPermissionStateCompletedHandler; + +#endif /* __ICoreWebView2SetPermissionStateCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler; + +#endif /* __ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile5_FWD_DEFINED__ +#define __ICoreWebView2Profile5_FWD_DEFINED__ +typedef interface ICoreWebView2Profile5 ICoreWebView2Profile5; + +#endif /* __ICoreWebView2Profile5_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile6_FWD_DEFINED__ +#define __ICoreWebView2Profile6_FWD_DEFINED__ +typedef interface ICoreWebView2Profile6 ICoreWebView2Profile6; + +#endif /* __ICoreWebView2Profile6_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile7_FWD_DEFINED__ +#define __ICoreWebView2Profile7_FWD_DEFINED__ +typedef interface ICoreWebView2Profile7 ICoreWebView2Profile7; + +#endif /* __ICoreWebView2Profile7_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ProfileAddBrowserExtensionCompletedHandler ICoreWebView2ProfileAddBrowserExtensionCompletedHandler; + +#endif /* __ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler; + +#endif /* __ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtensionList_FWD_DEFINED__ +#define __ICoreWebView2BrowserExtensionList_FWD_DEFINED__ +typedef interface ICoreWebView2BrowserExtensionList ICoreWebView2BrowserExtensionList; + +#endif /* __ICoreWebView2BrowserExtensionList_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile8_FWD_DEFINED__ +#define __ICoreWebView2Profile8_FWD_DEFINED__ +typedef interface ICoreWebView2Profile8 ICoreWebView2Profile8; + +#endif /* __ICoreWebView2Profile8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProfileDeletedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ProfileDeletedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ProfileDeletedEventHandler ICoreWebView2ProfileDeletedEventHandler; + +#endif /* __ICoreWebView2ProfileDeletedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile9_FWD_DEFINED__ +#define __ICoreWebView2Profile9_FWD_DEFINED__ +typedef interface ICoreWebView2Profile9 ICoreWebView2Profile9; + +#endif /* __ICoreWebView2Profile9_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveAsUIShowingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2SaveAsUIShowingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2SaveAsUIShowingEventArgs ICoreWebView2SaveAsUIShowingEventArgs; + +#endif /* __ICoreWebView2SaveAsUIShowingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveFileSecurityCheckStartingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2SaveFileSecurityCheckStartingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2SaveFileSecurityCheckStartingEventArgs ICoreWebView2SaveFileSecurityCheckStartingEventArgs; + +#endif /* __ICoreWebView2SaveFileSecurityCheckStartingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ScreenCaptureStartingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ScreenCaptureStartingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ScreenCaptureStartingEventArgs ICoreWebView2ScreenCaptureStartingEventArgs; + +#endif /* __ICoreWebView2ScreenCaptureStartingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ScriptDialogOpeningEventArgs ICoreWebView2ScriptDialogOpeningEventArgs; + +#endif /* __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptException_FWD_DEFINED__ +#define __ICoreWebView2ScriptException_FWD_DEFINED__ +typedef interface ICoreWebView2ScriptException ICoreWebView2ScriptException; + +#endif /* __ICoreWebView2ScriptException_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ServerCertificateErrorDetectedEventArgs ICoreWebView2ServerCertificateErrorDetectedEventArgs; + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorker_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorker_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorker ICoreWebView2ServiceWorker; + +#endif /* __ICoreWebView2ServiceWorker_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerDestroyingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerDestroyingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerDestroyingEventHandler ICoreWebView2ServiceWorkerDestroyingEventHandler; + +#endif /* __ICoreWebView2ServiceWorkerDestroyingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler; + +#endif /* __ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerActivatedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerActivatedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerActivatedEventArgs ICoreWebView2ServiceWorkerActivatedEventArgs; + +#endif /* __ICoreWebView2ServiceWorkerActivatedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerManager_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerManager_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerManager ICoreWebView2ServiceWorkerManager; + +#endif /* __ICoreWebView2ServiceWorkerManager_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegisteredEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegisteredEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerRegisteredEventHandler ICoreWebView2ServiceWorkerRegisteredEventHandler; + +#endif /* __ICoreWebView2ServiceWorkerRegisteredEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler; + +#endif /* __ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegistrationCollectionView_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegistrationCollectionView_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerRegistrationCollectionView ICoreWebView2ServiceWorkerRegistrationCollectionView; + +#endif /* __ICoreWebView2ServiceWorkerRegistrationCollectionView_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegisteredEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegisteredEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerRegisteredEventArgs ICoreWebView2ServiceWorkerRegisteredEventArgs; + +#endif /* __ICoreWebView2ServiceWorkerRegisteredEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegistration_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegistration_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerRegistration ICoreWebView2ServiceWorkerRegistration; + +#endif /* __ICoreWebView2ServiceWorkerRegistration_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerActivatedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerActivatedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerActivatedEventHandler ICoreWebView2ServiceWorkerActivatedEventHandler; + +#endif /* __ICoreWebView2ServiceWorkerActivatedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler; + +#endif /* __ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings_FWD_DEFINED__ +#define __ICoreWebView2Settings_FWD_DEFINED__ +typedef interface ICoreWebView2Settings ICoreWebView2Settings; + +#endif /* __ICoreWebView2Settings_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings2_FWD_DEFINED__ +#define __ICoreWebView2Settings2_FWD_DEFINED__ +typedef interface ICoreWebView2Settings2 ICoreWebView2Settings2; + +#endif /* __ICoreWebView2Settings2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings3_FWD_DEFINED__ +#define __ICoreWebView2Settings3_FWD_DEFINED__ +typedef interface ICoreWebView2Settings3 ICoreWebView2Settings3; + +#endif /* __ICoreWebView2Settings3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings4_FWD_DEFINED__ +#define __ICoreWebView2Settings4_FWD_DEFINED__ +typedef interface ICoreWebView2Settings4 ICoreWebView2Settings4; + +#endif /* __ICoreWebView2Settings4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings5_FWD_DEFINED__ +#define __ICoreWebView2Settings5_FWD_DEFINED__ +typedef interface ICoreWebView2Settings5 ICoreWebView2Settings5; + +#endif /* __ICoreWebView2Settings5_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings6_FWD_DEFINED__ +#define __ICoreWebView2Settings6_FWD_DEFINED__ +typedef interface ICoreWebView2Settings6 ICoreWebView2Settings6; + +#endif /* __ICoreWebView2Settings6_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings7_FWD_DEFINED__ +#define __ICoreWebView2Settings7_FWD_DEFINED__ +typedef interface ICoreWebView2Settings7 ICoreWebView2Settings7; + +#endif /* __ICoreWebView2Settings7_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings8_FWD_DEFINED__ +#define __ICoreWebView2Settings8_FWD_DEFINED__ +typedef interface ICoreWebView2Settings8 ICoreWebView2Settings8; + +#endif /* __ICoreWebView2Settings8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings9_FWD_DEFINED__ +#define __ICoreWebView2Settings9_FWD_DEFINED__ +typedef interface ICoreWebView2Settings9 ICoreWebView2Settings9; + +#endif /* __ICoreWebView2Settings9_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedBuffer_FWD_DEFINED__ +#define __ICoreWebView2SharedBuffer_FWD_DEFINED__ +typedef interface ICoreWebView2SharedBuffer ICoreWebView2SharedBuffer; + +#endif /* __ICoreWebView2SharedBuffer_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorker_FWD_DEFINED__ +#define __ICoreWebView2SharedWorker_FWD_DEFINED__ +typedef interface ICoreWebView2SharedWorker ICoreWebView2SharedWorker; + +#endif /* __ICoreWebView2SharedWorker_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerDestroyingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2SharedWorkerDestroyingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2SharedWorkerDestroyingEventHandler ICoreWebView2SharedWorkerDestroyingEventHandler; + +#endif /* __ICoreWebView2SharedWorkerDestroyingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerCreatedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2SharedWorkerCreatedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2SharedWorkerCreatedEventArgs ICoreWebView2SharedWorkerCreatedEventArgs; + +#endif /* __ICoreWebView2SharedWorkerCreatedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerManager_FWD_DEFINED__ +#define __ICoreWebView2SharedWorkerManager_FWD_DEFINED__ +typedef interface ICoreWebView2SharedWorkerManager ICoreWebView2SharedWorkerManager; + +#endif /* __ICoreWebView2SharedWorkerManager_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerCreatedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2SharedWorkerCreatedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2SharedWorkerCreatedEventHandler ICoreWebView2SharedWorkerCreatedEventHandler; + +#endif /* __ICoreWebView2SharedWorkerCreatedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2GetSharedWorkersCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2GetSharedWorkersCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2GetSharedWorkersCompletedHandler ICoreWebView2GetSharedWorkersCompletedHandler; + +#endif /* __ICoreWebView2GetSharedWorkersCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerCollectionView_FWD_DEFINED__ +#define __ICoreWebView2SharedWorkerCollectionView_FWD_DEFINED__ +typedef interface ICoreWebView2SharedWorkerCollectionView ICoreWebView2SharedWorkerCollectionView; + +#endif /* __ICoreWebView2SharedWorkerCollectionView_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2SourceChangedEventArgs ICoreWebView2SourceChangedEventArgs; + +#endif /* __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2WebMessageReceivedEventArgs ICoreWebView2WebMessageReceivedEventArgs; + +#endif /* __ICoreWebView2WebMessageReceivedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2WebMessageReceivedEventArgs2 ICoreWebView2WebMessageReceivedEventArgs2; + +#endif /* __ICoreWebView2WebMessageReceivedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequest_FWD_DEFINED__ +#define __ICoreWebView2WebResourceRequest_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceRequest ICoreWebView2WebResourceRequest; + +#endif /* __ICoreWebView2WebResourceRequest_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceRequestedEventArgs ICoreWebView2WebResourceRequestedEventArgs; + +#endif /* __ICoreWebView2WebResourceRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceRequestedEventArgs2 ICoreWebView2WebResourceRequestedEventArgs2; + +#endif /* __ICoreWebView2WebResourceRequestedEventArgs2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponse_FWD_DEFINED__ +#define __ICoreWebView2WebResourceResponse_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceResponse ICoreWebView2WebResourceResponse; + +#endif /* __ICoreWebView2WebResourceResponse_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseReceivedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2WebResourceResponseReceivedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceResponseReceivedEventArgs ICoreWebView2WebResourceResponseReceivedEventArgs; + +#endif /* __ICoreWebView2WebResourceResponseReceivedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseView_FWD_DEFINED__ +#define __ICoreWebView2WebResourceResponseView_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceResponseView ICoreWebView2WebResourceResponseView; + +#endif /* __ICoreWebView2WebResourceResponseView_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceResponseViewGetContentCompletedHandler ICoreWebView2WebResourceResponseViewGetContentCompletedHandler; + +#endif /* __ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WindowFeatures_FWD_DEFINED__ +#define __ICoreWebView2WindowFeatures_FWD_DEFINED__ +typedef interface ICoreWebView2WindowFeatures ICoreWebView2WindowFeatures; + +#endif /* __ICoreWebView2WindowFeatures_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionSettingCollectionView_FWD_DEFINED__ +#define __ICoreWebView2PermissionSettingCollectionView_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionSettingCollectionView ICoreWebView2PermissionSettingCollectionView; + +#endif /* __ICoreWebView2PermissionSettingCollectionView_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "objidl.h" +#include "oaidl.h" +#include "EventToken.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + + +#ifndef __WebView2_LIBRARY_DEFINED__ +#define __WebView2_LIBRARY_DEFINED__ + +/* library WebView2 */ +/* [version][uuid] */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_BOUNDS_MODE + { + COREWEBVIEW2_BOUNDS_MODE_USE_RAW_PIXELS = 0, + COREWEBVIEW2_BOUNDS_MODE_USE_RASTERIZATION_SCALE = ( COREWEBVIEW2_BOUNDS_MODE_USE_RAW_PIXELS + 1 ) + } COREWEBVIEW2_BOUNDS_MODE; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND + { + COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND_NORMAL = 0, + COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND_FAILED = ( COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND_NORMAL + 1 ) + } COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_BROWSING_DATA_KINDS + { + COREWEBVIEW2_BROWSING_DATA_KINDS_FILE_SYSTEMS = 0x1, + COREWEBVIEW2_BROWSING_DATA_KINDS_INDEXED_DB = 0x2, + COREWEBVIEW2_BROWSING_DATA_KINDS_LOCAL_STORAGE = 0x4, + COREWEBVIEW2_BROWSING_DATA_KINDS_WEB_SQL = 0x8, + COREWEBVIEW2_BROWSING_DATA_KINDS_CACHE_STORAGE = 0x10, + COREWEBVIEW2_BROWSING_DATA_KINDS_ALL_DOM_STORAGE = 0x20, + COREWEBVIEW2_BROWSING_DATA_KINDS_COOKIES = 0x40, + COREWEBVIEW2_BROWSING_DATA_KINDS_ALL_SITE = 0x80, + COREWEBVIEW2_BROWSING_DATA_KINDS_DISK_CACHE = 0x100, + COREWEBVIEW2_BROWSING_DATA_KINDS_DOWNLOAD_HISTORY = 0x200, + COREWEBVIEW2_BROWSING_DATA_KINDS_GENERAL_AUTOFILL = 0x400, + COREWEBVIEW2_BROWSING_DATA_KINDS_PASSWORD_AUTOSAVE = 0x800, + COREWEBVIEW2_BROWSING_DATA_KINDS_BROWSING_HISTORY = 0x1000, + COREWEBVIEW2_BROWSING_DATA_KINDS_SETTINGS = 0x2000, + COREWEBVIEW2_BROWSING_DATA_KINDS_ALL_PROFILE = 0x4000, + COREWEBVIEW2_BROWSING_DATA_KINDS_SERVICE_WORKERS = 0x8000 + } COREWEBVIEW2_BROWSING_DATA_KINDS; + +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_BROWSING_DATA_KINDS) +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT + { + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG = 0, + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_JPEG = ( COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG + 1 ) + } COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CHANNEL_SEARCH_KIND + { + COREWEBVIEW2_CHANNEL_SEARCH_KIND_MOST_STABLE = 0, + COREWEBVIEW2_CHANNEL_SEARCH_KIND_LEAST_STABLE = ( COREWEBVIEW2_CHANNEL_SEARCH_KIND_MOST_STABLE + 1 ) + } COREWEBVIEW2_CHANNEL_SEARCH_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CLIENT_CERTIFICATE_KIND + { + COREWEBVIEW2_CLIENT_CERTIFICATE_KIND_SMART_CARD = 0, + COREWEBVIEW2_CLIENT_CERTIFICATE_KIND_PIN = ( COREWEBVIEW2_CLIENT_CERTIFICATE_KIND_SMART_CARD + 1 ) , + COREWEBVIEW2_CLIENT_CERTIFICATE_KIND_OTHER = ( COREWEBVIEW2_CLIENT_CERTIFICATE_KIND_PIN + 1 ) + } COREWEBVIEW2_CLIENT_CERTIFICATE_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND + { + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_COMMAND = 0, + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_CHECK_BOX = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_COMMAND + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_RADIO = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_CHECK_BOX + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_SEPARATOR = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_RADIO + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_SUBMENU = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_SEPARATOR + 1 ) + } COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND + { + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_PAGE = 0, + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_IMAGE = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_PAGE + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_SELECTED_TEXT = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_IMAGE + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_AUDIO = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_SELECTED_TEXT + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_VIDEO = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_AUDIO + 1 ) + } COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_COOKIE_SAME_SITE_KIND + { + COREWEBVIEW2_COOKIE_SAME_SITE_KIND_NONE = 0, + COREWEBVIEW2_COOKIE_SAME_SITE_KIND_LAX = ( COREWEBVIEW2_COOKIE_SAME_SITE_KIND_NONE + 1 ) , + COREWEBVIEW2_COOKIE_SAME_SITE_KIND_STRICT = ( COREWEBVIEW2_COOKIE_SAME_SITE_KIND_LAX + 1 ) + } COREWEBVIEW2_COOKIE_SAME_SITE_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT + { + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_LEFT = 0, + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_RIGHT = ( COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_LEFT + 1 ) , + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_BOTTOM_LEFT = ( COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_RIGHT + 1 ) , + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_BOTTOM_RIGHT = ( COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_BOTTOM_LEFT + 1 ) + } COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON + { + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NONE = 0, + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_FAILED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NONE + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_FAILED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TOO_LARGE = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_MALICIOUS = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TOO_LARGE + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_MALICIOUS + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED_BY_POLICY = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_SECURITY_CHECK_FAILED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED_BY_POLICY + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TOO_SHORT = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_SECURITY_CHECK_FAILED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_HASH_MISMATCH = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TOO_SHORT + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_HASH_MISMATCH + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_TIMEOUT = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_TIMEOUT + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_SERVER_DOWN = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_SERVER_DOWN + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_NO_RANGE = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_NO_RANGE + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_UNAUTHORIZED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CERTIFICATE_PROBLEM = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_UNAUTHORIZED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_FORBIDDEN = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CERTIFICATE_PROBLEM + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_UNEXPECTED_RESPONSE = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_FORBIDDEN + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CONTENT_LENGTH_MISMATCH = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_UNEXPECTED_RESPONSE + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CROSS_ORIGIN_REDIRECT = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CONTENT_LENGTH_MISMATCH + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_CANCELED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CROSS_ORIGIN_REDIRECT + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_CANCELED + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_PAUSED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN + 1 ) , + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_DOWNLOAD_PROCESS_CRASHED = ( COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_PAUSED + 1 ) + } COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_DOWNLOAD_STATE + { + COREWEBVIEW2_DOWNLOAD_STATE_IN_PROGRESS = 0, + COREWEBVIEW2_DOWNLOAD_STATE_INTERRUPTED = ( COREWEBVIEW2_DOWNLOAD_STATE_IN_PROGRESS + 1 ) , + COREWEBVIEW2_DOWNLOAD_STATE_COMPLETED = ( COREWEBVIEW2_DOWNLOAD_STATE_INTERRUPTED + 1 ) + } COREWEBVIEW2_DOWNLOAD_STATE; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_FAVICON_IMAGE_FORMAT + { + COREWEBVIEW2_FAVICON_IMAGE_FORMAT_PNG = 0, + COREWEBVIEW2_FAVICON_IMAGE_FORMAT_JPEG = ( COREWEBVIEW2_FAVICON_IMAGE_FORMAT_PNG + 1 ) + } COREWEBVIEW2_FAVICON_IMAGE_FORMAT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_FILE_SYSTEM_HANDLE_KIND + { + COREWEBVIEW2_FILE_SYSTEM_HANDLE_KIND_FILE = 0, + COREWEBVIEW2_FILE_SYSTEM_HANDLE_KIND_DIRECTORY = ( COREWEBVIEW2_FILE_SYSTEM_HANDLE_KIND_FILE + 1 ) + } COREWEBVIEW2_FILE_SYSTEM_HANDLE_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION + { + COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION_READ_ONLY = 0, + COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION_READ_WRITE = ( COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION_READ_ONLY + 1 ) + } COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_FRAME_KIND + { + COREWEBVIEW2_FRAME_KIND_UNKNOWN = 0, + COREWEBVIEW2_FRAME_KIND_MAIN_FRAME = ( COREWEBVIEW2_FRAME_KIND_UNKNOWN + 1 ) , + COREWEBVIEW2_FRAME_KIND_IFRAME = ( COREWEBVIEW2_FRAME_KIND_MAIN_FRAME + 1 ) , + COREWEBVIEW2_FRAME_KIND_EMBED = ( COREWEBVIEW2_FRAME_KIND_IFRAME + 1 ) , + COREWEBVIEW2_FRAME_KIND_OBJECT = ( COREWEBVIEW2_FRAME_KIND_EMBED + 1 ) + } COREWEBVIEW2_FRAME_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND + { + COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY = 0, + COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_ALLOW = ( COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY + 1 ) , + COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY_CORS = ( COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_ALLOW + 1 ) + } COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_KEY_EVENT_KIND + { + COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN = 0, + COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP = ( COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN + 1 ) , + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN = ( COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP + 1 ) , + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_UP = ( COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN + 1 ) + } COREWEBVIEW2_KEY_EVENT_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL + { + COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_NORMAL = 0, + COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_LOW = ( COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_NORMAL + 1 ) + } COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_MOUSE_EVENT_KIND + { + COREWEBVIEW2_MOUSE_EVENT_KIND_HORIZONTAL_WHEEL = 526, + COREWEBVIEW2_MOUSE_EVENT_KIND_LEFT_BUTTON_DOUBLE_CLICK = 515, + COREWEBVIEW2_MOUSE_EVENT_KIND_LEFT_BUTTON_DOWN = 513, + COREWEBVIEW2_MOUSE_EVENT_KIND_LEFT_BUTTON_UP = 514, + COREWEBVIEW2_MOUSE_EVENT_KIND_LEAVE = 675, + COREWEBVIEW2_MOUSE_EVENT_KIND_MIDDLE_BUTTON_DOUBLE_CLICK = 521, + COREWEBVIEW2_MOUSE_EVENT_KIND_MIDDLE_BUTTON_DOWN = 519, + COREWEBVIEW2_MOUSE_EVENT_KIND_MIDDLE_BUTTON_UP = 520, + COREWEBVIEW2_MOUSE_EVENT_KIND_MOVE = 512, + COREWEBVIEW2_MOUSE_EVENT_KIND_RIGHT_BUTTON_DOUBLE_CLICK = 518, + COREWEBVIEW2_MOUSE_EVENT_KIND_RIGHT_BUTTON_DOWN = 516, + COREWEBVIEW2_MOUSE_EVENT_KIND_RIGHT_BUTTON_UP = 517, + COREWEBVIEW2_MOUSE_EVENT_KIND_WHEEL = 522, + COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_DOUBLE_CLICK = 525, + COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_DOWN = 523, + COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_UP = 524, + COREWEBVIEW2_MOUSE_EVENT_KIND_NON_CLIENT_RIGHT_BUTTON_DOWN = 164, + COREWEBVIEW2_MOUSE_EVENT_KIND_NON_CLIENT_RIGHT_BUTTON_UP = 165 + } COREWEBVIEW2_MOUSE_EVENT_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS + { + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_NONE = 0, + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_LEFT_BUTTON = 0x1, + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_RIGHT_BUTTON = 0x2, + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_SHIFT = 0x4, + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_CONTROL = 0x8, + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_MIDDLE_BUTTON = 0x10, + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_X_BUTTON1 = 0x20, + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_X_BUTTON2 = 0x40 + } COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS; + +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS) +typedef /* [v1_enum] */ +enum COREWEBVIEW2_MOVE_FOCUS_REASON + { + COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC = 0, + COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT = ( COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC + 1 ) , + COREWEBVIEW2_MOVE_FOCUS_REASON_PREVIOUS = ( COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT + 1 ) + } COREWEBVIEW2_MOVE_FOCUS_REASON; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_NAVIGATION_KIND + { + COREWEBVIEW2_NAVIGATION_KIND_RELOAD = 0, + COREWEBVIEW2_NAVIGATION_KIND_BACK_OR_FORWARD = ( COREWEBVIEW2_NAVIGATION_KIND_RELOAD + 1 ) , + COREWEBVIEW2_NAVIGATION_KIND_NEW_DOCUMENT = ( COREWEBVIEW2_NAVIGATION_KIND_BACK_OR_FORWARD + 1 ) + } COREWEBVIEW2_NAVIGATION_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_NON_CLIENT_REGION_KIND + { + COREWEBVIEW2_NON_CLIENT_REGION_KIND_NOWHERE = 0, + COREWEBVIEW2_NON_CLIENT_REGION_KIND_CLIENT = 1, + COREWEBVIEW2_NON_CLIENT_REGION_KIND_CAPTION = 2, + COREWEBVIEW2_NON_CLIENT_REGION_KIND_MINIMIZE = 8, + COREWEBVIEW2_NON_CLIENT_REGION_KIND_MAXIMIZE = 9, + COREWEBVIEW2_NON_CLIENT_REGION_KIND_CLOSE = 20 + } COREWEBVIEW2_NON_CLIENT_REGION_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PDF_TOOLBAR_ITEMS + { + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_NONE = 0, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_SAVE = 0x1, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_PRINT = 0x2, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_SAVE_AS = 0x4, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_ZOOM_IN = 0x8, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_ZOOM_OUT = 0x10, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_ROTATE = 0x20, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_FIT_PAGE = 0x40, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_PAGE_LAYOUT = 0x80, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_BOOKMARKS = 0x100, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_PAGE_SELECTOR = 0x200, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_SEARCH = 0x400, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_FULL_SCREEN = 0x800, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_MORE_SETTINGS = 0x1000 + } COREWEBVIEW2_PDF_TOOLBAR_ITEMS; + +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_PDF_TOOLBAR_ITEMS) +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PERMISSION_KIND + { + COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION = 0, + COREWEBVIEW2_PERMISSION_KIND_MICROPHONE = ( COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_CAMERA = ( COREWEBVIEW2_PERMISSION_KIND_MICROPHONE + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION = ( COREWEBVIEW2_PERMISSION_KIND_CAMERA + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS = ( COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS = ( COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ = ( COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_MULTIPLE_AUTOMATIC_DOWNLOADS = ( COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_FILE_READ_WRITE = ( COREWEBVIEW2_PERMISSION_KIND_MULTIPLE_AUTOMATIC_DOWNLOADS + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_AUTOPLAY = ( COREWEBVIEW2_PERMISSION_KIND_FILE_READ_WRITE + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_LOCAL_FONTS = ( COREWEBVIEW2_PERMISSION_KIND_AUTOPLAY + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_MIDI_SYSTEM_EXCLUSIVE_MESSAGES = ( COREWEBVIEW2_PERMISSION_KIND_LOCAL_FONTS + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_WINDOW_MANAGEMENT = ( COREWEBVIEW2_PERMISSION_KIND_MIDI_SYSTEM_EXCLUSIVE_MESSAGES + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_PERSISTENT_STORAGE = ( COREWEBVIEW2_PERMISSION_KIND_WINDOW_MANAGEMENT + 1 ) + } COREWEBVIEW2_PERMISSION_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PERMISSION_STATE + { + COREWEBVIEW2_PERMISSION_STATE_DEFAULT = 0, + COREWEBVIEW2_PERMISSION_STATE_ALLOW = ( COREWEBVIEW2_PERMISSION_STATE_DEFAULT + 1 ) , + COREWEBVIEW2_PERMISSION_STATE_DENY = ( COREWEBVIEW2_PERMISSION_STATE_ALLOW + 1 ) + } COREWEBVIEW2_PERMISSION_STATE; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_POINTER_EVENT_KIND + { + COREWEBVIEW2_POINTER_EVENT_KIND_ACTIVATE = 587, + COREWEBVIEW2_POINTER_EVENT_KIND_DOWN = 582, + COREWEBVIEW2_POINTER_EVENT_KIND_ENTER = 585, + COREWEBVIEW2_POINTER_EVENT_KIND_LEAVE = 586, + COREWEBVIEW2_POINTER_EVENT_KIND_UP = 583, + COREWEBVIEW2_POINTER_EVENT_KIND_UPDATE = 581 + } COREWEBVIEW2_POINTER_EVENT_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PREFERRED_COLOR_SCHEME + { + COREWEBVIEW2_PREFERRED_COLOR_SCHEME_AUTO = 0, + COREWEBVIEW2_PREFERRED_COLOR_SCHEME_LIGHT = ( COREWEBVIEW2_PREFERRED_COLOR_SCHEME_AUTO + 1 ) , + COREWEBVIEW2_PREFERRED_COLOR_SCHEME_DARK = ( COREWEBVIEW2_PREFERRED_COLOR_SCHEME_LIGHT + 1 ) + } COREWEBVIEW2_PREFERRED_COLOR_SCHEME; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PRINT_COLLATION + { + COREWEBVIEW2_PRINT_COLLATION_DEFAULT = 0, + COREWEBVIEW2_PRINT_COLLATION_COLLATED = ( COREWEBVIEW2_PRINT_COLLATION_DEFAULT + 1 ) , + COREWEBVIEW2_PRINT_COLLATION_UNCOLLATED = ( COREWEBVIEW2_PRINT_COLLATION_COLLATED + 1 ) + } COREWEBVIEW2_PRINT_COLLATION; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PRINT_COLOR_MODE + { + COREWEBVIEW2_PRINT_COLOR_MODE_DEFAULT = 0, + COREWEBVIEW2_PRINT_COLOR_MODE_COLOR = ( COREWEBVIEW2_PRINT_COLOR_MODE_DEFAULT + 1 ) , + COREWEBVIEW2_PRINT_COLOR_MODE_GRAYSCALE = ( COREWEBVIEW2_PRINT_COLOR_MODE_COLOR + 1 ) + } COREWEBVIEW2_PRINT_COLOR_MODE; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PRINT_DIALOG_KIND + { + COREWEBVIEW2_PRINT_DIALOG_KIND_BROWSER = 0, + COREWEBVIEW2_PRINT_DIALOG_KIND_SYSTEM = ( COREWEBVIEW2_PRINT_DIALOG_KIND_BROWSER + 1 ) + } COREWEBVIEW2_PRINT_DIALOG_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PRINT_DUPLEX + { + COREWEBVIEW2_PRINT_DUPLEX_DEFAULT = 0, + COREWEBVIEW2_PRINT_DUPLEX_ONE_SIDED = ( COREWEBVIEW2_PRINT_DUPLEX_DEFAULT + 1 ) , + COREWEBVIEW2_PRINT_DUPLEX_TWO_SIDED_LONG_EDGE = ( COREWEBVIEW2_PRINT_DUPLEX_ONE_SIDED + 1 ) , + COREWEBVIEW2_PRINT_DUPLEX_TWO_SIDED_SHORT_EDGE = ( COREWEBVIEW2_PRINT_DUPLEX_TWO_SIDED_LONG_EDGE + 1 ) + } COREWEBVIEW2_PRINT_DUPLEX; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PRINT_MEDIA_SIZE + { + COREWEBVIEW2_PRINT_MEDIA_SIZE_DEFAULT = 0, + COREWEBVIEW2_PRINT_MEDIA_SIZE_CUSTOM = ( COREWEBVIEW2_PRINT_MEDIA_SIZE_DEFAULT + 1 ) + } COREWEBVIEW2_PRINT_MEDIA_SIZE; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PRINT_ORIENTATION + { + COREWEBVIEW2_PRINT_ORIENTATION_PORTRAIT = 0, + COREWEBVIEW2_PRINT_ORIENTATION_LANDSCAPE = ( COREWEBVIEW2_PRINT_ORIENTATION_PORTRAIT + 1 ) + } COREWEBVIEW2_PRINT_ORIENTATION; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PRINT_STATUS + { + COREWEBVIEW2_PRINT_STATUS_SUCCEEDED = 0, + COREWEBVIEW2_PRINT_STATUS_PRINTER_UNAVAILABLE = ( COREWEBVIEW2_PRINT_STATUS_SUCCEEDED + 1 ) , + COREWEBVIEW2_PRINT_STATUS_OTHER_ERROR = ( COREWEBVIEW2_PRINT_STATUS_PRINTER_UNAVAILABLE + 1 ) + } COREWEBVIEW2_PRINT_STATUS; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PROCESS_FAILED_KIND + { + COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED = 0, + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE = ( COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_FRAME_RENDER_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_UTILITY_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_FRAME_RENDER_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_SANDBOX_HELPER_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_UTILITY_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_GPU_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_SANDBOX_HELPER_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_PPAPI_PLUGIN_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_GPU_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_PPAPI_BROKER_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_PPAPI_PLUGIN_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_UNKNOWN_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_PPAPI_BROKER_PROCESS_EXITED + 1 ) + } COREWEBVIEW2_PROCESS_FAILED_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PROCESS_FAILED_REASON + { + COREWEBVIEW2_PROCESS_FAILED_REASON_UNEXPECTED = 0, + COREWEBVIEW2_PROCESS_FAILED_REASON_UNRESPONSIVE = ( COREWEBVIEW2_PROCESS_FAILED_REASON_UNEXPECTED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_TERMINATED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_UNRESPONSIVE + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_CRASHED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_TERMINATED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_LAUNCH_FAILED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_CRASHED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_OUT_OF_MEMORY = ( COREWEBVIEW2_PROCESS_FAILED_REASON_LAUNCH_FAILED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_PROFILE_DELETED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_OUT_OF_MEMORY + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_NORMAL_EXIT = ( COREWEBVIEW2_PROCESS_FAILED_REASON_PROFILE_DELETED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_ABNORMAL_EXIT = ( COREWEBVIEW2_PROCESS_FAILED_REASON_NORMAL_EXIT + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_INTEGRITY_FAILURE = ( COREWEBVIEW2_PROCESS_FAILED_REASON_ABNORMAL_EXIT + 1 ) + } COREWEBVIEW2_PROCESS_FAILED_REASON; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PROCESS_KIND + { + COREWEBVIEW2_PROCESS_KIND_BROWSER = 0, + COREWEBVIEW2_PROCESS_KIND_RENDERER = ( COREWEBVIEW2_PROCESS_KIND_BROWSER + 1 ) , + COREWEBVIEW2_PROCESS_KIND_UTILITY = ( COREWEBVIEW2_PROCESS_KIND_RENDERER + 1 ) , + COREWEBVIEW2_PROCESS_KIND_SANDBOX_HELPER = ( COREWEBVIEW2_PROCESS_KIND_UTILITY + 1 ) , + COREWEBVIEW2_PROCESS_KIND_GPU = ( COREWEBVIEW2_PROCESS_KIND_SANDBOX_HELPER + 1 ) , + COREWEBVIEW2_PROCESS_KIND_PPAPI_PLUGIN = ( COREWEBVIEW2_PROCESS_KIND_GPU + 1 ) , + COREWEBVIEW2_PROCESS_KIND_PPAPI_BROKER = ( COREWEBVIEW2_PROCESS_KIND_PPAPI_PLUGIN + 1 ) + } COREWEBVIEW2_PROCESS_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_RELEASE_CHANNELS + { + COREWEBVIEW2_RELEASE_CHANNELS_NONE = 0, + COREWEBVIEW2_RELEASE_CHANNELS_STABLE = 0x1, + COREWEBVIEW2_RELEASE_CHANNELS_BETA = 0x2, + COREWEBVIEW2_RELEASE_CHANNELS_DEV = 0x4, + COREWEBVIEW2_RELEASE_CHANNELS_CANARY = 0x8 + } COREWEBVIEW2_RELEASE_CHANNELS; + +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_RELEASE_CHANNELS) +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SAVE_AS_KIND + { + COREWEBVIEW2_SAVE_AS_KIND_DEFAULT = 0, + COREWEBVIEW2_SAVE_AS_KIND_HTML_ONLY = ( COREWEBVIEW2_SAVE_AS_KIND_DEFAULT + 1 ) , + COREWEBVIEW2_SAVE_AS_KIND_SINGLE_FILE = ( COREWEBVIEW2_SAVE_AS_KIND_HTML_ONLY + 1 ) , + COREWEBVIEW2_SAVE_AS_KIND_COMPLETE = ( COREWEBVIEW2_SAVE_AS_KIND_SINGLE_FILE + 1 ) + } COREWEBVIEW2_SAVE_AS_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SAVE_AS_UI_RESULT + { + COREWEBVIEW2_SAVE_AS_UI_RESULT_SUCCESS = 0, + COREWEBVIEW2_SAVE_AS_UI_RESULT_INVALID_PATH = ( COREWEBVIEW2_SAVE_AS_UI_RESULT_SUCCESS + 1 ) , + COREWEBVIEW2_SAVE_AS_UI_RESULT_FILE_ALREADY_EXISTS = ( COREWEBVIEW2_SAVE_AS_UI_RESULT_INVALID_PATH + 1 ) , + COREWEBVIEW2_SAVE_AS_UI_RESULT_KIND_NOT_SUPPORTED = ( COREWEBVIEW2_SAVE_AS_UI_RESULT_FILE_ALREADY_EXISTS + 1 ) , + COREWEBVIEW2_SAVE_AS_UI_RESULT_CANCELLED = ( COREWEBVIEW2_SAVE_AS_UI_RESULT_KIND_NOT_SUPPORTED + 1 ) + } COREWEBVIEW2_SAVE_AS_UI_RESULT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SCRIPT_DIALOG_KIND + { + COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT = 0, + COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM = ( COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT + 1 ) , + COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT = ( COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM + 1 ) , + COREWEBVIEW2_SCRIPT_DIALOG_KIND_BEFOREUNLOAD = ( COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT + 1 ) + } COREWEBVIEW2_SCRIPT_DIALOG_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SCROLLBAR_STYLE + { + COREWEBVIEW2_SCROLLBAR_STYLE_DEFAULT = 0, + COREWEBVIEW2_SCROLLBAR_STYLE_FLUENT_OVERLAY = ( COREWEBVIEW2_SCROLLBAR_STYLE_DEFAULT + 1 ) + } COREWEBVIEW2_SCROLLBAR_STYLE; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION + { + COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_ALWAYS_ALLOW = 0, + COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_CANCEL = ( COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_ALWAYS_ALLOW + 1 ) , + COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_DEFAULT = ( COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_CANCEL + 1 ) + } COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SHARED_BUFFER_ACCESS + { + COREWEBVIEW2_SHARED_BUFFER_ACCESS_READ_ONLY = 0, + COREWEBVIEW2_SHARED_BUFFER_ACCESS_READ_WRITE = ( COREWEBVIEW2_SHARED_BUFFER_ACCESS_READ_ONLY + 1 ) + } COREWEBVIEW2_SHARED_BUFFER_ACCESS; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_TEXT_DIRECTION_KIND + { + COREWEBVIEW2_TEXT_DIRECTION_KIND_DEFAULT = 0, + COREWEBVIEW2_TEXT_DIRECTION_KIND_LEFT_TO_RIGHT = ( COREWEBVIEW2_TEXT_DIRECTION_KIND_DEFAULT + 1 ) , + COREWEBVIEW2_TEXT_DIRECTION_KIND_RIGHT_TO_LEFT = ( COREWEBVIEW2_TEXT_DIRECTION_KIND_LEFT_TO_RIGHT + 1 ) + } COREWEBVIEW2_TEXT_DIRECTION_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_TRACKING_PREVENTION_LEVEL + { + COREWEBVIEW2_TRACKING_PREVENTION_LEVEL_NONE = 0, + COREWEBVIEW2_TRACKING_PREVENTION_LEVEL_BASIC = ( COREWEBVIEW2_TRACKING_PREVENTION_LEVEL_NONE + 1 ) , + COREWEBVIEW2_TRACKING_PREVENTION_LEVEL_BALANCED = ( COREWEBVIEW2_TRACKING_PREVENTION_LEVEL_BASIC + 1 ) , + COREWEBVIEW2_TRACKING_PREVENTION_LEVEL_STRICT = ( COREWEBVIEW2_TRACKING_PREVENTION_LEVEL_BALANCED + 1 ) + } COREWEBVIEW2_TRACKING_PREVENTION_LEVEL; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_WEB_ERROR_STATUS + { + COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN = 0, + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT = ( COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT = ( COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE = ( COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED = ( COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET = ( COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT = ( COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED = ( COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED = ( COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR = ( COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_VALID_AUTHENTICATION_CREDENTIALS_REQUIRED = ( COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_VALID_PROXY_AUTHENTICATION_REQUIRED = ( COREWEBVIEW2_WEB_ERROR_STATUS_VALID_AUTHENTICATION_CREDENTIALS_REQUIRED + 1 ) + } COREWEBVIEW2_WEB_ERROR_STATUS; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_WEB_RESOURCE_CONTEXT + { + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL = 0, + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_OTHER = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT + 1 ) + } COREWEBVIEW2_WEB_RESOURCE_CONTEXT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS + { + COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS_NONE = 0, + COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS_DOCUMENT = 0x1, + COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS_SHARED_WORKER = 0x2, + COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS_SERVICE_WORKER = 0x4, + COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS_ALL = 0xffffffff + } COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS; + +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS) +typedef struct COREWEBVIEW2_COLOR + { + BYTE A; + BYTE R; + BYTE G; + BYTE B; + } COREWEBVIEW2_COLOR; + +typedef struct COREWEBVIEW2_PHYSICAL_KEY_STATUS + { + UINT32 RepeatCount; + UINT32 ScanCode; + BOOL IsExtendedKey; + BOOL IsMenuKeyDown; + BOOL WasKeyDown; + BOOL IsKeyReleased; + } COREWEBVIEW2_PHYSICAL_KEY_STATUS; + +STDAPI CreateCoreWebView2Environment(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environmentCreatedHandler); +STDAPI CreateCoreWebView2EnvironmentWithOptions(PCWSTR browserExecutableFolder, PCWSTR userDataFolder, ICoreWebView2EnvironmentOptions* environmentOptions, ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environmentCreatedHandler); +STDAPI GetAvailableCoreWebView2BrowserVersionString(PCWSTR browserExecutableFolder, LPWSTR* versionInfo); +STDAPI CompareBrowserVersions(PCWSTR version1, PCWSTR version2, int* result); +STDAPI GetAvailableCoreWebView2BrowserVersionStringWithOptions(PCWSTR browserExecutableFolder, ICoreWebView2EnvironmentOptions* environmentOptions, LPWSTR* versionInfo); + +EXTERN_C const IID LIBID_WebView2; + +#ifndef __ICoreWebView2_INTERFACE_DEFINED__ +#define __ICoreWebView2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2 = {0x76eceacb,0x0462,0x4d94,{0xac,0x83,0x42,0x3a,0x67,0x93,0x77,0x5e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("76eceacb-0462-4d94-ac83-423a6793775e") + ICoreWebView2 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Settings( + /* [retval][out] */ ICoreWebView2Settings **settings) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Source( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual HRESULT STDMETHODCALLTYPE Navigate( + /* [in] */ LPCWSTR uri) = 0; + + virtual HRESULT STDMETHODCALLTYPE NavigateToString( + /* [in] */ LPCWSTR htmlContent) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NavigationStarting( + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationStarting( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContentLoading( + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContentLoading( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_SourceChanged( + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_SourceChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_HistoryChanged( + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_HistoryChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NavigationCompleted( + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationCompleted( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_FrameNavigationStarting( + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FrameNavigationStarting( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_FrameNavigationCompleted( + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FrameNavigationCompleted( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ScriptDialogOpening( + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ScriptDialogOpening( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_PermissionRequested( + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_PermissionRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ProcessFailed( + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ProcessFailed( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddScriptToExecuteOnDocumentCreated( + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveScriptToExecuteOnDocumentCreated( + /* [in] */ LPCWSTR id) = 0; + + virtual HRESULT STDMETHODCALLTYPE ExecuteScript( + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE CapturePreview( + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reload( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsJson( + /* [in] */ LPCWSTR webMessageAsJson) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsString( + /* [in] */ LPCWSTR webMessageAsString) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebMessageReceived( + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebMessageReceived( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE CallDevToolsProtocolMethod( + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BrowserProcessId( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CanGoBack( + /* [retval][out] */ BOOL *canGoBack) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CanGoForward( + /* [retval][out] */ BOOL *canGoForward) = 0; + + virtual HRESULT STDMETHODCALLTYPE GoBack( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GoForward( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDevToolsProtocolEventReceiver( + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver) = 0; + + virtual HRESULT STDMETHODCALLTYPE Stop( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NewWindowRequested( + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NewWindowRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_DocumentTitleChanged( + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DocumentTitleChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DocumentTitle( + /* [retval][out] */ LPWSTR *title) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddHostObjectToScript( + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveHostObjectFromScript( + /* [in] */ LPCWSTR name) = 0; + + virtual HRESULT STDMETHODCALLTYPE OpenDevToolsWindow( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContainsFullScreenElementChanged( + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContainsFullScreenElementChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ContainsFullScreenElement( + /* [retval][out] */ BOOL *containsFullScreenElement) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebResourceRequested( + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebResourceRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddWebResourceRequestedFilter( + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveWebResourceRequestedFilter( + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WindowCloseRequested( + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WindowCloseRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Vtbl; + + interface ICoreWebView2 + { + CONST_VTBL struct ICoreWebView2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContainsFullScreenElementChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ContainsFullScreenElementChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContainsFullScreenElementChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContainsFullScreenElementChangedEventHandler = {0xe45d98b1,0xafef,0x45be,{0x8b,0xaf,0x6c,0x77,0x28,0x86,0x7f,0x73}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e45d98b1-afef-45be-8baf-6c7728867f73") + ICoreWebView2ContainsFullScreenElementChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContainsFullScreenElementChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContainsFullScreenElementChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ContainsFullScreenElementChangedEventHandlerVtbl; + + interface ICoreWebView2ContainsFullScreenElementChangedEventHandler + { + CONST_VTBL struct ICoreWebView2ContainsFullScreenElementChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContainsFullScreenElementChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ContentLoadingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContentLoadingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContentLoadingEventHandler = {0x364471e7,0xf2be,0x4910,{0xbd,0xba,0xd7,0x20,0x77,0xd5,0x1c,0x4b}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("364471e7-f2be-4910-bdba-d72077d51c4b") + ICoreWebView2ContentLoadingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContentLoadingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContentLoadingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContentLoadingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContentLoadingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContentLoadingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ContentLoadingEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args); + + END_INTERFACE + } ICoreWebView2ContentLoadingEventHandlerVtbl; + + interface ICoreWebView2ContentLoadingEventHandler + { + CONST_VTBL struct ICoreWebView2ContentLoadingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContentLoadingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContentLoadingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContentLoadingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContentLoadingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContentLoadingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DocumentTitleChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DocumentTitleChangedEventHandler = {0xf5f2b923,0x953e,0x4042,{0x9f,0x95,0xf3,0xa1,0x18,0xe1,0xaf,0xd4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f5f2b923-953e-4042-9f95-f3a118e1afd4") + ICoreWebView2DocumentTitleChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DocumentTitleChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DocumentTitleChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DocumentTitleChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DocumentTitleChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DocumentTitleChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DocumentTitleChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2DocumentTitleChangedEventHandlerVtbl; + + interface ICoreWebView2DocumentTitleChangedEventHandler + { + CONST_VTBL struct ICoreWebView2DocumentTitleChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DocumentTitleChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DocumentTitleChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DocumentTitleChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DocumentTitleChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HistoryChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2HistoryChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HistoryChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HistoryChangedEventHandler = {0xc79a420c,0xefd9,0x4058,{0x92,0x95,0x3e,0x8b,0x4b,0xca,0xb6,0x45}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c79a420c-efd9-4058-9295-3e8b4bcab645") + ICoreWebView2HistoryChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HistoryChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HistoryChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HistoryChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HistoryChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2HistoryChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2HistoryChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2HistoryChangedEventHandlerVtbl; + + interface ICoreWebView2HistoryChangedEventHandler + { + CONST_VTBL struct ICoreWebView2HistoryChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HistoryChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HistoryChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HistoryChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HistoryChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HistoryChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationCompletedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationCompletedEventHandler = {0xd33a35bf,0x1c49,0x4f98,{0x93,0xab,0x00,0x6e,0x05,0x33,0xfe,0x1c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("d33a35bf-1c49-4f98-93ab-006e0533fe1c") + ICoreWebView2NavigationCompletedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationCompletedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationCompletedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationCompletedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationCompletedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NavigationCompletedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args); + + END_INTERFACE + } ICoreWebView2NavigationCompletedEventHandlerVtbl; + + interface ICoreWebView2NavigationCompletedEventHandler + { + CONST_VTBL struct ICoreWebView2NavigationCompletedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationCompletedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationCompletedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationCompletedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationCompletedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEventHandler = {0x9adbe429,0xf36d,0x432b,{0x9d,0xdc,0xf8,0x88,0x1f,0xbd,0x76,0xe3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9adbe429-f36d-432b-9ddc-f8881fbd76e3") + ICoreWebView2NavigationStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NavigationStartingEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2NavigationStartingEventHandlerVtbl; + + interface ICoreWebView2NavigationStartingEventHandler + { + CONST_VTBL struct ICoreWebView2NavigationStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewWindowRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewWindowRequestedEventHandler = {0xd4c185fe,0xc81c,0x4989,{0x97,0xaf,0x2d,0x3f,0xa7,0xab,0x56,0x51}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("d4c185fe-c81c-4989-97af-2d3fa7ab5651") + ICoreWebView2NewWindowRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NewWindowRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewWindowRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewWindowRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewWindowRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewWindowRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NewWindowRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NewWindowRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2NewWindowRequestedEventHandlerVtbl; + + interface ICoreWebView2NewWindowRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2NewWindowRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewWindowRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewWindowRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewWindowRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewWindowRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewWindowRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEventHandler = {0x15e1c6a3,0xc72a,0x4df3,{0x91,0xd7,0xd0,0x97,0xfb,0xec,0x6b,0xfd}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("15e1c6a3-c72a-4df3-91d7-d097fbec6bfd") + ICoreWebView2PermissionRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2PermissionRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2PermissionRequestedEventHandlerVtbl; + + interface ICoreWebView2PermissionRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2PermissionRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessFailedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessFailedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventHandler = {0x79e0aea4,0x990b,0x42d9,{0xaa,0x1d,0x0f,0xcc,0x2e,0x5b,0xc7,0xf1}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("79e0aea4-990b-42d9-aa1d-0fcc2e5bc7f1") + ICoreWebView2ProcessFailedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ProcessFailedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessFailedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessFailedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessFailedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessFailedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ProcessFailedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ProcessFailedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ProcessFailedEventHandlerVtbl; + + interface ICoreWebView2ProcessFailedEventHandler + { + CONST_VTBL struct ICoreWebView2ProcessFailedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessFailedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessFailedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessFailedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessFailedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessFailedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ScriptDialogOpeningEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ScriptDialogOpeningEventHandler = {0xef381bf9,0xafa8,0x4e37,{0x91,0xc4,0x8a,0xc4,0x85,0x24,0xbd,0xfb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ef381bf9-afa8-4e37-91c4-8ac48524bdfb") + ICoreWebView2ScriptDialogOpeningEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ScriptDialogOpeningEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ScriptDialogOpeningEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ScriptDialogOpeningEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ScriptDialogOpeningEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ScriptDialogOpeningEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventArgs *args); + + END_INTERFACE + } ICoreWebView2ScriptDialogOpeningEventHandlerVtbl; + + interface ICoreWebView2ScriptDialogOpeningEventHandler + { + CONST_VTBL struct ICoreWebView2ScriptDialogOpeningEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ScriptDialogOpeningEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ScriptDialogOpeningEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ScriptDialogOpeningEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ScriptDialogOpeningEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ScriptDialogOpeningEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2SourceChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SourceChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SourceChangedEventHandler = {0x3c067f9f,0x5388,0x4772,{0x8b,0x48,0x79,0xf7,0xef,0x1a,0xb3,0x7c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3c067f9f-5388-4772-8b48-79f7ef1ab37c") + ICoreWebView2SourceChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2SourceChangedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SourceChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SourceChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SourceChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SourceChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SourceChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2SourceChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2SourceChangedEventArgs *args); + + END_INTERFACE + } ICoreWebView2SourceChangedEventHandlerVtbl; + + interface ICoreWebView2SourceChangedEventHandler + { + CONST_VTBL struct ICoreWebView2SourceChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SourceChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SourceChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SourceChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SourceChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SourceChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebMessageReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebMessageReceivedEventHandler = {0x57213f19,0x00e6,0x49fa,{0x8e,0x07,0x89,0x8e,0xa0,0x1e,0xcb,0xd2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("57213f19-00e6-49fa-8e07-898ea01ecbd2") + ICoreWebView2WebMessageReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebMessageReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebMessageReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WebMessageReceivedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2WebMessageReceivedEventHandlerVtbl; + + interface ICoreWebView2WebMessageReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2WebMessageReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebMessageReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebMessageReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebMessageReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebMessageReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebMessageReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceRequestedEventHandler = {0xab00b74c,0x15f1,0x4646,{0x80,0xe8,0xe7,0x63,0x41,0xd2,0x5d,0x71}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ab00b74c-15f1-4646-80e8-e76341d25d71") + ICoreWebView2WebResourceRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebResourceRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WebResourceRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebResourceRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2WebResourceRequestedEventHandlerVtbl; + + interface ICoreWebView2WebResourceRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2WebResourceRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WindowCloseRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WindowCloseRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WindowCloseRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WindowCloseRequestedEventHandler = {0x5c19e9e0,0x092f,0x486b,{0xaf,0xfa,0xca,0x82,0x31,0x91,0x30,0x39}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5c19e9e0-092f-486b-affa-ca8231913039") + ICoreWebView2WindowCloseRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WindowCloseRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WindowCloseRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WindowCloseRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WindowCloseRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowCloseRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WindowCloseRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2WindowCloseRequestedEventHandlerVtbl; + + interface ICoreWebView2WindowCloseRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2WindowCloseRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WindowCloseRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WindowCloseRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WindowCloseRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WindowCloseRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WindowCloseRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler = {0xb99369f3,0x9b11,0x47b5,{0xbc,0x6f,0x8e,0x78,0x95,0xfc,0xea,0x17}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b99369f3-9b11-47b5-bc6f-8e7895fcea17") + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR result); + + END_INTERFACE + } ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandlerVtbl; + + interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler + { + CONST_VTBL struct ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ExecuteScriptCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ExecuteScriptCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ExecuteScriptCompletedHandler = {0x49511172,0xcc67,0x4bca,{0x99,0x23,0x13,0x71,0x12,0xf4,0xc4,0xcc}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("49511172-cc67-4bca-9923-137112f4c4cc") + ICoreWebView2ExecuteScriptCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ExecuteScriptCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ExecuteScriptCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ExecuteScriptCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ExecuteScriptCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ExecuteScriptCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ExecuteScriptCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR result); + + END_INTERFACE + } ICoreWebView2ExecuteScriptCompletedHandlerVtbl; + + interface ICoreWebView2ExecuteScriptCompletedHandler + { + CONST_VTBL struct ICoreWebView2ExecuteScriptCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ExecuteScriptCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ExecuteScriptCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ExecuteScriptCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ExecuteScriptCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ExecuteScriptCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CapturePreviewCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CapturePreviewCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CapturePreviewCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CapturePreviewCompletedHandler = {0x697e05e9,0x3d8f,0x45fa,{0x96,0xf4,0x8f,0xfe,0x1e,0xde,0xda,0xf5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("697e05e9-3d8f-45fa-96f4-8ffe1ededaf5") + ICoreWebView2CapturePreviewCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CapturePreviewCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CapturePreviewCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CapturePreviewCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CapturePreviewCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CapturePreviewCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CapturePreviewCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2CapturePreviewCompletedHandlerVtbl; + + interface ICoreWebView2CapturePreviewCompletedHandler + { + CONST_VTBL struct ICoreWebView2CapturePreviewCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CapturePreviewCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CapturePreviewCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CapturePreviewCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CapturePreviewCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CapturePreviewCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CallDevToolsProtocolMethodCompletedHandler = {0x5c4889f0,0x5ef6,0x4c5a,{0x95,0x2c,0xd8,0xf1,0xb9,0x2d,0x05,0x74}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5c4889f0-5ef6-4c5a-952c-d8f1b92d0574") + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CallDevToolsProtocolMethodCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CallDevToolsProtocolMethodCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR result); + + END_INTERFACE + } ICoreWebView2CallDevToolsProtocolMethodCompletedHandlerVtbl; + + interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler + { + CONST_VTBL struct ICoreWebView2CallDevToolsProtocolMethodCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_2_INTERFACE_DEFINED__ +#define __ICoreWebView2_2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_2 = {0x9E8F0CF8,0xE670,0x4B5E,{0xB2,0xBC,0x73,0xE0,0x61,0xE3,0x18,0x4C}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9E8F0CF8-E670-4B5E-B2BC-73E061E3184C") + ICoreWebView2_2 : public ICoreWebView2 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_WebResourceResponseReceived( + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebResourceResponseReceived( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE NavigateWithWebResourceRequest( + /* [in] */ ICoreWebView2WebResourceRequest *request) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_DOMContentLoaded( + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DOMContentLoaded( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CookieManager( + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Environment( + /* [retval][out] */ ICoreWebView2Environment **environment) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_2 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_2 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_2 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_2 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_2 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_2 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_2 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_2 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_2 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_2 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_2 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_2 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_2 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_2 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + END_INTERFACE + } ICoreWebView2_2Vtbl; + + interface ICoreWebView2_2 + { + CONST_VTBL struct ICoreWebView2_2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_2_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_2_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_2_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_2_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_2_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_2_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_2_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_2_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_2_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_2_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_2_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_2_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_2_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_2_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_2_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_2_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_2_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_2_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_2_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_2_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_2_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_2_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_2_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_2_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_2_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_2_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_2_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_2_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_2_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_2_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_2_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_2_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_2_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_2_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_2_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_2_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_2_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_2_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_2_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_2_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_2_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_2_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_2_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_2_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_2_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_2_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_2_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_2_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_2_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DOMContentLoadedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DOMContentLoadedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DOMContentLoadedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DOMContentLoadedEventHandler = {0x4bac7e9c,0x199e,0x49ed,{0x87,0xed,0x24,0x93,0x03,0xac,0xf0,0x19}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4bac7e9c-199e-49ed-87ed-249303acf019") + ICoreWebView2DOMContentLoadedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DOMContentLoadedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DOMContentLoadedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DOMContentLoadedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DOMContentLoadedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DOMContentLoadedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DOMContentLoadedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DOMContentLoadedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DOMContentLoadedEventArgs *args); + + END_INTERFACE + } ICoreWebView2DOMContentLoadedEventHandlerVtbl; + + interface ICoreWebView2DOMContentLoadedEventHandler + { + CONST_VTBL struct ICoreWebView2DOMContentLoadedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DOMContentLoadedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DOMContentLoadedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DOMContentLoadedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DOMContentLoadedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DOMContentLoadedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceResponseReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceResponseReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseReceivedEventHandler = {0x7de9898a,0x24f5,0x40c3,{0xa2,0xde,0xd4,0xf4,0x58,0xe6,0x98,0x28}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7de9898a-24f5-40c3-a2de-d4f458e69828") + ICoreWebView2WebResourceResponseReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceResponseReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceResponseReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceResponseReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceResponseReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WebResourceResponseReceivedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2WebResourceResponseReceivedEventHandlerVtbl; + + interface ICoreWebView2WebResourceResponseReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2WebResourceResponseReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceResponseReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceResponseReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceResponseReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceResponseReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceResponseReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_3_INTERFACE_DEFINED__ +#define __ICoreWebView2_3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_3 = {0xA0D6DF20,0x3B92,0x416D,{0xAA,0x0C,0x43,0x7A,0x9C,0x72,0x78,0x57}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A0D6DF20-3B92-416D-AA0C-437A9C727857") + ICoreWebView2_3 : public ICoreWebView2_2 + { + public: + virtual HRESULT STDMETHODCALLTYPE TrySuspend( + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE Resume( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsSuspended( + /* [retval][out] */ BOOL *isSuspended) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetVirtualHostNameToFolderMapping( + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearVirtualHostNameToFolderMapping( + /* [in] */ LPCWSTR hostName) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_3 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_3 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_3 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_3 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_3 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_3 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_3 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_3 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_3 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_3 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_3 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_3 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_3 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_3 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_3 * This, + /* [in] */ LPCWSTR hostName); + + END_INTERFACE + } ICoreWebView2_3Vtbl; + + interface ICoreWebView2_3 + { + CONST_VTBL struct ICoreWebView2_3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_3_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_3_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_3_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_3_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_3_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_3_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_3_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_3_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_3_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_3_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_3_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_3_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_3_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_3_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_3_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_3_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_3_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_3_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_3_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_3_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_3_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_3_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_3_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_3_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_3_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_3_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_3_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_3_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_3_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_3_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_3_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_3_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_3_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_3_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_3_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_3_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_3_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_3_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_3_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_3_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_3_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_3_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_3_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_3_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_3_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_3_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_3_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_3_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_3_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_3_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_3_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_3_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_3_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_3_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2TrySuspendCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2TrySuspendCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2TrySuspendCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2TrySuspendCompletedHandler = {0x00f206a7,0x9d17,0x4605,{0x91,0xf6,0x4e,0x8e,0x4d,0xe1,0x92,0xe3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("00f206a7-9d17-4605-91f6-4e8e4de192e3") + ICoreWebView2TrySuspendCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ BOOL result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2TrySuspendCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2TrySuspendCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2TrySuspendCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2TrySuspendCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2TrySuspendCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2TrySuspendCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ BOOL result); + + END_INTERFACE + } ICoreWebView2TrySuspendCompletedHandlerVtbl; + + interface ICoreWebView2TrySuspendCompletedHandler + { + CONST_VTBL struct ICoreWebView2TrySuspendCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2TrySuspendCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2TrySuspendCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2TrySuspendCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2TrySuspendCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2TrySuspendCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_4_INTERFACE_DEFINED__ +#define __ICoreWebView2_4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_4 = {0x20d02d59,0x6df2,0x42dc,{0xbd,0x06,0xf9,0x8a,0x69,0x4b,0x13,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("20d02d59-6df2-42dc-bd06-f98a694b1302") + ICoreWebView2_4 : public ICoreWebView2_3 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_FrameCreated( + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FrameCreated( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_DownloadStarting( + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DownloadStarting( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_4 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_4 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_4 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_4 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_4 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_4 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_4 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_4 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_4 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_4 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_4 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_4 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_4 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_4 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_4 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_4 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_4Vtbl; + + interface ICoreWebView2_4 + { + CONST_VTBL struct ICoreWebView2_4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_4_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_4_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_4_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_4_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_4_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_4_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_4_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_4_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_4_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_4_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_4_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_4_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_4_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_4_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_4_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_4_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_4_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_4_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_4_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_4_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_4_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_4_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_4_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_4_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_4_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_4_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_4_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_4_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_4_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_4_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_4_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_4_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_4_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_4_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_4_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_4_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_4_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_4_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_4_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_4_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_4_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_4_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_4_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_4_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_4_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_4_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_4_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_4_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_4_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_4_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_4_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_4_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_4_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_4_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_4_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_4_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DownloadStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DownloadStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DownloadStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DownloadStartingEventHandler = {0xefedc989,0xc396,0x41ca,{0x83,0xf7,0x07,0xf8,0x45,0xa5,0x57,0x24}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("efedc989-c396-41ca-83f7-07f845a55724") + ICoreWebView2DownloadStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DownloadStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DownloadStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DownloadStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DownloadStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DownloadStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DownloadStartingEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DownloadStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2DownloadStartingEventHandlerVtbl; + + interface ICoreWebView2DownloadStartingEventHandler + { + CONST_VTBL struct ICoreWebView2DownloadStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DownloadStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DownloadStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DownloadStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DownloadStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DownloadStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameCreatedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameCreatedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameCreatedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameCreatedEventHandler = {0x38059770,0x9baa,0x11eb,{0xa8,0xb3,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("38059770-9baa-11eb-a8b3-0242ac130003") + ICoreWebView2FrameCreatedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2FrameCreatedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameCreatedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameCreatedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameCreatedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameCreatedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2FrameCreatedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameCreatedEventHandlerVtbl; + + interface ICoreWebView2FrameCreatedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameCreatedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameCreatedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameCreatedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameCreatedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameCreatedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameCreatedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_5_INTERFACE_DEFINED__ +#define __ICoreWebView2_5_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_5 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_5 = {0xbedb11b8,0xd63c,0x11eb,{0xb8,0xbc,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bedb11b8-d63c-11eb-b8bc-0242ac130003") + ICoreWebView2_5 : public ICoreWebView2_4 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ClientCertificateRequested( + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ClientCertificateRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_5Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_5 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_5 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_5 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_5 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_5 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_5 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_5 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_5 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_5 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_5 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_5 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_5 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_5 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_5 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_5 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_5 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_5 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_5Vtbl; + + interface ICoreWebView2_5 + { + CONST_VTBL struct ICoreWebView2_5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_5_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_5_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_5_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_5_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_5_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_5_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_5_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_5_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_5_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_5_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_5_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_5_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_5_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_5_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_5_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_5_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_5_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_5_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_5_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_5_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_5_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_5_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_5_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_5_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_5_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_5_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_5_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_5_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_5_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_5_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_5_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_5_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_5_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_5_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_5_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_5_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_5_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_5_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_5_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_5_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_5_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_5_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_5_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_5_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_5_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_5_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_5_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_5_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_5_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_5_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_5_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_5_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_5_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_5_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_5_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_5_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_5_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_5_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificateRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ClientCertificateRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClientCertificateRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificateRequestedEventHandler = {0xd7175ba2,0xbcc3,0x11eb,{0x85,0x29,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("d7175ba2-bcc3-11eb-8529-0242ac130003") + ICoreWebView2ClientCertificateRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClientCertificateRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClientCertificateRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClientCertificateRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClientCertificateRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ClientCertificateRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ClientCertificateRequestedEventHandlerVtbl; + + interface ICoreWebView2ClientCertificateRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2ClientCertificateRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClientCertificateRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClientCertificateRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClientCertificateRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClientCertificateRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClientCertificateRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_6_INTERFACE_DEFINED__ +#define __ICoreWebView2_6_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_6 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_6 = {0x499aadac,0xd92c,0x4589,{0x8a,0x75,0x11,0x1b,0xfc,0x16,0x77,0x95}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("499aadac-d92c-4589-8a75-111bfc167795") + ICoreWebView2_6 : public ICoreWebView2_5 + { + public: + virtual HRESULT STDMETHODCALLTYPE OpenTaskManagerWindow( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_6Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_6 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_6 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_6 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_6 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_6 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_6 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_6 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_6 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_6 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_6 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_6 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_6 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_6 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_6 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_6 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_6 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_6 * This); + + END_INTERFACE + } ICoreWebView2_6Vtbl; + + interface ICoreWebView2_6 + { + CONST_VTBL struct ICoreWebView2_6Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_6_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_6_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_6_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_6_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_6_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_6_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_6_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_6_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_6_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_6_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_6_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_6_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_6_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_6_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_6_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_6_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_6_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_6_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_6_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_6_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_6_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_6_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_6_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_6_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_6_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_6_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_6_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_6_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_6_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_6_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_6_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_6_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_6_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_6_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_6_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_6_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_6_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_6_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_6_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_6_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_6_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_6_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_6_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_6_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_6_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_6_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_6_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_6_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_6_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_6_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_6_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_6_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_6_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_6_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_6_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_6_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_6_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_6_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_6_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_6_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_6_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_6_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_7_INTERFACE_DEFINED__ +#define __ICoreWebView2_7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_7 = {0x79c24d83,0x09a3,0x45ae,{0x94,0x18,0x48,0x7f,0x32,0xa5,0x87,0x40}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("79c24d83-09a3-45ae-9418-487f32a58740") + ICoreWebView2_7 : public ICoreWebView2_6 + { + public: + virtual HRESULT STDMETHODCALLTYPE PrintToPdf( + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_7 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_7 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_7 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_7 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_7 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_7 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_7 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_7 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_7 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_7 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_7 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_7 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_7 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_7 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_7 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2_7Vtbl; + + interface ICoreWebView2_7 + { + CONST_VTBL struct ICoreWebView2_7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_7_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_7_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_7_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_7_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_7_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_7_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_7_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_7_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_7_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_7_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_7_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_7_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_7_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_7_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_7_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_7_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_7_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_7_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_7_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_7_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_7_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_7_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_7_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_7_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_7_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_7_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_7_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_7_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_7_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_7_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_7_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_7_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_7_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_7_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_7_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_7_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_7_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_7_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_7_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_7_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_7_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_7_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_7_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_7_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_7_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_7_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_7_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_7_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_7_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_7_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_7_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_7_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_7_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_7_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_7_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_7_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_7_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_7_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_7_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_7_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintToPdfCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2PrintToPdfCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PrintToPdfCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PrintToPdfCompletedHandler = {0xccf1ef04,0xfd8e,0x4d5f,{0xb2,0xde,0x09,0x83,0xe4,0x1b,0x8c,0x36}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ccf1ef04-fd8e-4d5f-b2de-0983e41b8c36") + ICoreWebView2PrintToPdfCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ BOOL result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PrintToPdfCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PrintToPdfCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PrintToPdfCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PrintToPdfCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintToPdfCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2PrintToPdfCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ BOOL result); + + END_INTERFACE + } ICoreWebView2PrintToPdfCompletedHandlerVtbl; + + interface ICoreWebView2PrintToPdfCompletedHandler + { + CONST_VTBL struct ICoreWebView2PrintToPdfCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PrintToPdfCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PrintToPdfCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PrintToPdfCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PrintToPdfCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PrintToPdfCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_8_INTERFACE_DEFINED__ +#define __ICoreWebView2_8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_8 = {0xE9632730,0x6E1E,0x43AB,{0xB7,0xB8,0x7B,0x2C,0x9E,0x62,0xE0,0x94}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("E9632730-6E1E-43AB-B7B8-7B2C9E62E094") + ICoreWebView2_8 : public ICoreWebView2_7 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_IsMutedChanged( + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_IsMutedChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsMuted( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsMuted( + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_IsDocumentPlayingAudioChanged( + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_IsDocumentPlayingAudioChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsDocumentPlayingAudio( + /* [retval][out] */ BOOL *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_8 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_8 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_8 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_8 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_8 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_8 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_8 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_8 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_8 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *value); + + END_INTERFACE + } ICoreWebView2_8Vtbl; + + interface ICoreWebView2_8 + { + CONST_VTBL struct ICoreWebView2_8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_8_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_8_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_8_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_8_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_8_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_8_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_8_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_8_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_8_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_8_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_8_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_8_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_8_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_8_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_8_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_8_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_8_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_8_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_8_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_8_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_8_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_8_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_8_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_8_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_8_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_8_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_8_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_8_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_8_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_8_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_8_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_8_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_8_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_8_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_8_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_8_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_8_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_8_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_8_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_8_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_8_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_8_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_8_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_8_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_8_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_8_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_8_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_8_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_8_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_8_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_8_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_8_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_8_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_8_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_8_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_8_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_8_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_8_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_8_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_8_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_8_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_8_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_8_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2IsDocumentPlayingAudioChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2IsDocumentPlayingAudioChangedEventHandler = {0x5def109a,0x2f4b,0x49fa,{0xb7,0xf6,0x11,0xc3,0x9e,0x51,0x33,0x28}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5def109a-2f4b-49fa-b7f6-11c39e513328") + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2IsDocumentPlayingAudioChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2IsDocumentPlayingAudioChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2IsDocumentPlayingAudioChangedEventHandlerVtbl; + + interface ICoreWebView2IsDocumentPlayingAudioChangedEventHandler + { + CONST_VTBL struct ICoreWebView2IsDocumentPlayingAudioChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2IsMutedChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2IsMutedChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2IsMutedChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2IsMutedChangedEventHandler = {0x57d90347,0xcd0e,0x4952,{0xa4,0xa2,0x74,0x83,0xa2,0x75,0x6f,0x08}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("57d90347-cd0e-4952-a4a2-7483a2756f08") + ICoreWebView2IsMutedChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2IsMutedChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2IsMutedChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2IsMutedChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2IsMutedChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2IsMutedChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2IsMutedChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2IsMutedChangedEventHandlerVtbl; + + interface ICoreWebView2IsMutedChangedEventHandler + { + CONST_VTBL struct ICoreWebView2IsMutedChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2IsMutedChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2IsMutedChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2IsMutedChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2IsMutedChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2IsMutedChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_9_INTERFACE_DEFINED__ +#define __ICoreWebView2_9_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_9 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_9 = {0x4d7b2eab,0x9fdc,0x468d,{0xb9,0x98,0xa9,0x26,0x0b,0x5e,0xd6,0x51}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4d7b2eab-9fdc-468d-b998-a9260b5ed651") + ICoreWebView2_9 : public ICoreWebView2_8 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_IsDefaultDownloadDialogOpenChanged( + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_IsDefaultDownloadDialogOpenChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsDefaultDownloadDialogOpen( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE OpenDefaultDownloadDialog( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE CloseDefaultDownloadDialog( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultDownloadDialogCornerAlignment( + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultDownloadDialogCornerAlignment( + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultDownloadDialogMargin( + /* [retval][out] */ POINT *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultDownloadDialogMargin( + /* [in] */ POINT value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_9Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_9 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_9 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_9 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_9 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_9 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_9 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_9 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_9 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_9 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_9 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_9 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_9 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_9 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_9 * This, + /* [in] */ POINT value); + + END_INTERFACE + } ICoreWebView2_9Vtbl; + + interface ICoreWebView2_9 + { + CONST_VTBL struct ICoreWebView2_9Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_9_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_9_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_9_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_9_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_9_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_9_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_9_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_9_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_9_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_9_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_9_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_9_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_9_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_9_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_9_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_9_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_9_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_9_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_9_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_9_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_9_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_9_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_9_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_9_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_9_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_9_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_9_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_9_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_9_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_9_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_9_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_9_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_9_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_9_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_9_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_9_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_9_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_9_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_9_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_9_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_9_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_9_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_9_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_9_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_9_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_9_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_9_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_9_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_9_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_9_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_9_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_9_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_9_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_9_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_9_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_9_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_9_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_9_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_9_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_9_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_9_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_9_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_9_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_9_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_9_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_9_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_9_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_9_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_9_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_9_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_9_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_9_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_9_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_9_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_9_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_9_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler = {0x3117da26,0xae13,0x438d,{0xbd,0x46,0xed,0xbe,0xb2,0xc4,0xce,0x81}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3117da26-ae13-438d-bd46-edbeb2c4ce81") + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandlerVtbl; + + interface ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler + { + CONST_VTBL struct ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_10_INTERFACE_DEFINED__ +#define __ICoreWebView2_10_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_10 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_10 = {0xb1690564,0x6f5a,0x4983,{0x8e,0x48,0x31,0xd1,0x14,0x3f,0xec,0xdb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b1690564-6f5a-4983-8e48-31d1143fecdb") + ICoreWebView2_10 : public ICoreWebView2_9 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_BasicAuthenticationRequested( + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_BasicAuthenticationRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_10Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_10 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_10 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_10 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_10 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_10 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_10 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_10 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_10 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_10 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_10 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_10 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_10 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_10 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_10 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_10 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_10Vtbl; + + interface ICoreWebView2_10 + { + CONST_VTBL struct ICoreWebView2_10Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_10_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_10_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_10_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_10_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_10_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_10_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_10_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_10_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_10_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_10_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_10_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_10_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_10_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_10_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_10_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_10_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_10_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_10_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_10_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_10_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_10_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_10_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_10_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_10_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_10_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_10_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_10_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_10_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_10_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_10_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_10_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_10_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_10_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_10_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_10_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_10_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_10_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_10_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_10_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_10_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_10_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_10_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_10_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_10_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_10_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_10_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_10_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_10_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_10_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_10_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_10_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_10_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_10_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_10_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_10_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_10_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_10_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_10_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_10_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_10_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_10_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_10_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_10_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_10_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_10_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_10_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_10_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_10_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_10_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_10_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_10_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_10_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_10_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_10_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_10_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_10_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_10_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BasicAuthenticationRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BasicAuthenticationRequestedEventHandler = {0x58b4d6c2,0x18d4,0x497e,{0xb3,0x9b,0x9a,0x96,0x53,0x3f,0xa2,0x78}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("58b4d6c2-18d4-497e-b39b-9a96533fa278") + ICoreWebView2BasicAuthenticationRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BasicAuthenticationRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2BasicAuthenticationRequestedEventHandlerVtbl; + + interface ICoreWebView2BasicAuthenticationRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2BasicAuthenticationRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_11_INTERFACE_DEFINED__ +#define __ICoreWebView2_11_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_11 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_11 = {0x0be78e56,0xc193,0x4051,{0xb9,0x43,0x23,0xb4,0x60,0xc0,0x8b,0xdb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0be78e56-c193-4051-b943-23b460c08bdb") + ICoreWebView2_11 : public ICoreWebView2_10 + { + public: + virtual HRESULT STDMETHODCALLTYPE CallDevToolsProtocolMethodForSession( + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContextMenuRequested( + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContextMenuRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_11Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_11 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_11 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_11 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_11 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_11 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_11 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_11 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_11 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_11 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_11 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_11 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_11 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_11 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_11 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_11 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_11Vtbl; + + interface ICoreWebView2_11 + { + CONST_VTBL struct ICoreWebView2_11Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_11_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_11_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_11_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_11_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_11_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_11_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_11_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_11_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_11_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_11_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_11_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_11_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_11_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_11_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_11_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_11_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_11_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_11_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_11_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_11_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_11_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_11_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_11_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_11_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_11_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_11_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_11_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_11_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_11_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_11_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_11_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_11_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_11_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_11_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_11_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_11_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_11_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_11_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_11_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_11_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_11_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_11_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_11_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_11_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_11_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_11_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_11_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_11_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_11_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_11_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_11_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_11_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_11_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_11_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_11_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_11_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_11_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_11_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_11_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_11_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_11_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_11_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_11_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_11_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_11_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_11_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_11_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_11_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_11_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_11_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_11_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_11_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_11_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_11_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_11_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_11_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_11_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_11_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_11_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuRequestedEventHandler = {0x04d3fe1d,0xab87,0x42fb,{0xa8,0x98,0xda,0x24,0x1d,0x35,0xb6,0x3c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("04d3fe1d-ab87-42fb-a898-da241d35b63c") + ICoreWebView2ContextMenuRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ContextMenuRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ContextMenuRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ContextMenuRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ContextMenuRequestedEventHandlerVtbl; + + interface ICoreWebView2ContextMenuRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2ContextMenuRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_12_INTERFACE_DEFINED__ +#define __ICoreWebView2_12_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_12 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_12 = {0x35D69927,0xBCFA,0x4566,{0x93,0x49,0x6B,0x3E,0x0D,0x15,0x4C,0xAC}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("35D69927-BCFA-4566-9349-6B3E0D154CAC") + ICoreWebView2_12 : public ICoreWebView2_11 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_StatusBarTextChanged( + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_StatusBarTextChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_StatusBarText( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_12Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_12 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_12 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_12 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_12 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_12 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_12 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_12 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_12 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_12 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_12 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_12 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_12 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_12 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_12 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_12 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_12 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2_12Vtbl; + + interface ICoreWebView2_12 + { + CONST_VTBL struct ICoreWebView2_12Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_12_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_12_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_12_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_12_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_12_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_12_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_12_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_12_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_12_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_12_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_12_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_12_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_12_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_12_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_12_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_12_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_12_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_12_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_12_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_12_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_12_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_12_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_12_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_12_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_12_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_12_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_12_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_12_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_12_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_12_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_12_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_12_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_12_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_12_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_12_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_12_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_12_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_12_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_12_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_12_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_12_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_12_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_12_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_12_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_12_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_12_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_12_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_12_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_12_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_12_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_12_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_12_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_12_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_12_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_12_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_12_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_12_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_12_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_12_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_12_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_12_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_12_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_12_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_12_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_12_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_12_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_12_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_12_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_12_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_12_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_12_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_12_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_12_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_12_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_12_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_12_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_12_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_12_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_12_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_12_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_12_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2StatusBarTextChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2StatusBarTextChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2StatusBarTextChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StatusBarTextChangedEventHandler = {0xa5e3b0d0,0x10df,0x4156,{0xbf,0xad,0x3b,0x43,0x86,0x7a,0xca,0xc6}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a5e3b0d0-10df-4156-bfad-3b43867acac6") + ICoreWebView2StatusBarTextChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2StatusBarTextChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2StatusBarTextChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2StatusBarTextChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2StatusBarTextChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2StatusBarTextChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2StatusBarTextChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2StatusBarTextChangedEventHandlerVtbl; + + interface ICoreWebView2StatusBarTextChangedEventHandler + { + CONST_VTBL struct ICoreWebView2StatusBarTextChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2StatusBarTextChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2StatusBarTextChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2StatusBarTextChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2StatusBarTextChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2StatusBarTextChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_13_INTERFACE_DEFINED__ +#define __ICoreWebView2_13_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_13 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_13 = {0xf75f09a8,0x667e,0x4983,{0x88,0xd6,0xc8,0x77,0x3f,0x31,0x5e,0x84}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f75f09a8-667e-4983-88d6-c8773f315e84") + ICoreWebView2_13 : public ICoreWebView2_12 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Profile( + /* [retval][out] */ ICoreWebView2Profile **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_13Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_13 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_13 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_13 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_13 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_13 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_13 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_13 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_13 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_13 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_13 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_13 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_13 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_13 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + END_INTERFACE + } ICoreWebView2_13Vtbl; + + interface ICoreWebView2_13 + { + CONST_VTBL struct ICoreWebView2_13Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_13_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_13_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_13_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_13_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_13_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_13_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_13_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_13_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_13_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_13_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_13_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_13_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_13_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_13_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_13_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_13_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_13_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_13_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_13_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_13_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_13_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_13_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_13_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_13_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_13_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_13_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_13_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_13_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_13_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_13_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_13_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_13_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_13_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_13_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_13_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_13_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_13_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_13_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_13_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_13_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_13_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_13_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_13_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_13_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_13_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_13_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_13_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_13_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_13_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_13_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_13_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_13_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_13_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_13_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_13_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_13_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_13_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_13_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_13_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_13_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_13_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_13_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_13_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_13_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_13_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_13_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_13_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_13_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_13_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_13_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_13_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_13_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_13_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_13_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_13_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_13_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_13_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_13_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_13_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_13_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_13_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_13_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_14_INTERFACE_DEFINED__ +#define __ICoreWebView2_14_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_14 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_14 = {0x6daa4f10,0x4a90,0x4753,{0x88,0x98,0x77,0xc5,0xdf,0x53,0x41,0x65}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6daa4f10-4a90-4753-8898-77c5df534165") + ICoreWebView2_14 : public ICoreWebView2_13 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ServerCertificateErrorDetected( + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ServerCertificateErrorDetected( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearServerCertificateErrorActions( + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_14Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_14 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_14 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_14 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_14 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_14 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_14 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_14 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_14 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_14 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_14 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_14 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_14 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_14 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2_14Vtbl; + + interface ICoreWebView2_14 + { + CONST_VTBL struct ICoreWebView2_14Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_14_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_14_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_14_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_14_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_14_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_14_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_14_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_14_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_14_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_14_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_14_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_14_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_14_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_14_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_14_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_14_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_14_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_14_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_14_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_14_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_14_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_14_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_14_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_14_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_14_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_14_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_14_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_14_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_14_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_14_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_14_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_14_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_14_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_14_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_14_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_14_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_14_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_14_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_14_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_14_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_14_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_14_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_14_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_14_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_14_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_14_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_14_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_14_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_14_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_14_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_14_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_14_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_14_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_14_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_14_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_14_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_14_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_14_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_14_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_14_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_14_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_14_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_14_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_14_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_14_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_14_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_14_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_14_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_14_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_14_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_14_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_14_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_14_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_14_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_14_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_14_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_14_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_14_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_14_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_14_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_14_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_14_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_14_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_14_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServerCertificateErrorDetectedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServerCertificateErrorDetectedEventHandler = {0x969b3a26,0xd85e,0x4795,{0x81,0x99,0xfe,0xf5,0x73,0x44,0xda,0x22}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("969b3a26-d85e-4795-8199-fef57344da22") + ICoreWebView2ServerCertificateErrorDetectedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServerCertificateErrorDetectedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ServerCertificateErrorDetectedEventHandlerVtbl; + + interface ICoreWebView2ServerCertificateErrorDetectedEventHandler + { + CONST_VTBL struct ICoreWebView2ServerCertificateErrorDetectedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler = {0x3b40aac6,0xacfe,0x4ffd,{0x82,0x11,0xf6,0x07,0xb9,0x6e,0x2d,0x5b}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3b40aac6-acfe-4ffd-8211-f607b96e2d5b") + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClearServerCertificateErrorActionsCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2ClearServerCertificateErrorActionsCompletedHandlerVtbl; + + interface ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler + { + CONST_VTBL struct ICoreWebView2ClearServerCertificateErrorActionsCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_15_INTERFACE_DEFINED__ +#define __ICoreWebView2_15_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_15 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_15 = {0x517B2D1D,0x7DAE,0x4A66,{0xA4,0xF4,0x10,0x35,0x2F,0xFB,0x95,0x18}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("517B2D1D-7DAE-4A66-A4F4-10352FFB9518") + ICoreWebView2_15 : public ICoreWebView2_14 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_FaviconChanged( + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FaviconChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FaviconUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetFavicon( + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_15Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_15 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_15 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_15 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_15 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_15 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_15 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_15 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_15 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_15 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_15 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_15 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + END_INTERFACE + } ICoreWebView2_15Vtbl; + + interface ICoreWebView2_15 + { + CONST_VTBL struct ICoreWebView2_15Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_15_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_15_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_15_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_15_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_15_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_15_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_15_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_15_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_15_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_15_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_15_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_15_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_15_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_15_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_15_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_15_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_15_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_15_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_15_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_15_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_15_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_15_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_15_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_15_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_15_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_15_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_15_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_15_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_15_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_15_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_15_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_15_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_15_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_15_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_15_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_15_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_15_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_15_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_15_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_15_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_15_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_15_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_15_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_15_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_15_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_15_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_15_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_15_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_15_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_15_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_15_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_15_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_15_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_15_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_15_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_15_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_15_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_15_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_15_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_15_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_15_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_15_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_15_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_15_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_15_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_15_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_15_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_15_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_15_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_15_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_15_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_15_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_15_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_15_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_15_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_15_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_15_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_15_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_15_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_15_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_15_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_15_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_15_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_15_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_15_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_15_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_15_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FaviconChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FaviconChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FaviconChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FaviconChangedEventHandler = {0x2913da94,0x833d,0x4de0,{0x8d,0xca,0x90,0x0f,0xc5,0x24,0xa1,0xa4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2913da94-833d-4de0-8dca-900fc524a1a4") + ICoreWebView2FaviconChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FaviconChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FaviconChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FaviconChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FaviconChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FaviconChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FaviconChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FaviconChangedEventHandlerVtbl; + + interface ICoreWebView2FaviconChangedEventHandler + { + CONST_VTBL struct ICoreWebView2FaviconChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FaviconChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FaviconChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FaviconChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FaviconChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FaviconChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2GetFaviconCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2GetFaviconCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2GetFaviconCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetFaviconCompletedHandler = {0xa2508329,0x7da8,0x49d7,{0x8c,0x05,0xfa,0x12,0x5e,0x4a,0xee,0x8d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a2508329-7da8-49d7-8c05-fa125e4aee8d") + ICoreWebView2GetFaviconCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2GetFaviconCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2GetFaviconCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2GetFaviconCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2GetFaviconCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2GetFaviconCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2GetFaviconCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *result); + + END_INTERFACE + } ICoreWebView2GetFaviconCompletedHandlerVtbl; + + interface ICoreWebView2GetFaviconCompletedHandler + { + CONST_VTBL struct ICoreWebView2GetFaviconCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2GetFaviconCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2GetFaviconCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2GetFaviconCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2GetFaviconCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2GetFaviconCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_16_INTERFACE_DEFINED__ +#define __ICoreWebView2_16_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_16 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_16 = {0x0EB34DC9,0x9F91,0x41E1,{0x86,0x39,0x95,0xCD,0x59,0x43,0x90,0x6B}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0EB34DC9-9F91-41E1-8639-95CD5943906B") + ICoreWebView2_16 : public ICoreWebView2_15 + { + public: + virtual HRESULT STDMETHODCALLTYPE Print( + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE ShowPrintUI( + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind) = 0; + + virtual HRESULT STDMETHODCALLTYPE PrintToPdfStream( + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_16Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_16 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_16 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_16 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_16 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_16 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_16 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_16 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_16 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_16 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_16 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_16 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_16 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_16 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_16 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_16 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_16 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_16 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_16 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_16 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_16 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_16 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_16 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_16 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_16 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_16 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_16 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_16 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_16 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_16 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_16 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_16 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2_16Vtbl; + + interface ICoreWebView2_16 + { + CONST_VTBL struct ICoreWebView2_16Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_16_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_16_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_16_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_16_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_16_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_16_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_16_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_16_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_16_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_16_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_16_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_16_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_16_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_16_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_16_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_16_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_16_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_16_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_16_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_16_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_16_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_16_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_16_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_16_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_16_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_16_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_16_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_16_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_16_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_16_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_16_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_16_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_16_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_16_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_16_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_16_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_16_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_16_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_16_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_16_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_16_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_16_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_16_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_16_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_16_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_16_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_16_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_16_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_16_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_16_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_16_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_16_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_16_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_16_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_16_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_16_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_16_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_16_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_16_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_16_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_16_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_16_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_16_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_16_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_16_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_16_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_16_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_16_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_16_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_16_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_16_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_16_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_16_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_16_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_16_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_16_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_16_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_16_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_16_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_16_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_16_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_16_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_16_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_16_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_16_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_16_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_16_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_16_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_16_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_16_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_16_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2PrintCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PrintCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PrintCompletedHandler = {0x8fd80075,0xed08,0x42db,{0x85,0x70,0xf5,0xd1,0x49,0x77,0x46,0x1e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8fd80075-ed08-42db-8570-f5d14977461e") + ICoreWebView2PrintCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ COREWEBVIEW2_PRINT_STATUS result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PrintCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PrintCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PrintCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PrintCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2PrintCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ COREWEBVIEW2_PRINT_STATUS result); + + END_INTERFACE + } ICoreWebView2PrintCompletedHandlerVtbl; + + interface ICoreWebView2PrintCompletedHandler + { + CONST_VTBL struct ICoreWebView2PrintCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PrintCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PrintCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PrintCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PrintCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PrintCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintToPdfStreamCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2PrintToPdfStreamCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PrintToPdfStreamCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PrintToPdfStreamCompletedHandler = {0x4c9f8229,0x8f93,0x444f,{0xa7,0x11,0x2c,0x0d,0xfd,0x63,0x59,0xd5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4c9f8229-8f93-444f-a711-2c0dfd6359d5") + ICoreWebView2PrintToPdfStreamCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PrintToPdfStreamCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PrintToPdfStreamCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PrintToPdfStreamCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PrintToPdfStreamCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintToPdfStreamCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2PrintToPdfStreamCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *result); + + END_INTERFACE + } ICoreWebView2PrintToPdfStreamCompletedHandlerVtbl; + + interface ICoreWebView2PrintToPdfStreamCompletedHandler + { + CONST_VTBL struct ICoreWebView2PrintToPdfStreamCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PrintToPdfStreamCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PrintToPdfStreamCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PrintToPdfStreamCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PrintToPdfStreamCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PrintToPdfStreamCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_17_INTERFACE_DEFINED__ +#define __ICoreWebView2_17_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_17 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_17 = {0x702e75d4,0xfd44,0x434d,{0x9d,0x70,0x1a,0x68,0xa6,0xb1,0x19,0x2a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("702e75d4-fd44-434d-9d70-1a68a6b1192a") + ICoreWebView2_17 : public ICoreWebView2_16 + { + public: + virtual HRESULT STDMETHODCALLTYPE PostSharedBufferToScript( + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_17Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_17 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_17 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_17 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_17 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_17 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_17 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_17 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_17 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_17 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_17 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_17 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_17 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_17 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_17 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_17 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_17 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_17 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_17 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_17 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_17 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_17 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_17 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_17 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_17 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_17 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_17 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_17 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_17 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_17 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_17 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_17 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + END_INTERFACE + } ICoreWebView2_17Vtbl; + + interface ICoreWebView2_17 + { + CONST_VTBL struct ICoreWebView2_17Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_17_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_17_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_17_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_17_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_17_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_17_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_17_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_17_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_17_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_17_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_17_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_17_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_17_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_17_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_17_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_17_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_17_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_17_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_17_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_17_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_17_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_17_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_17_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_17_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_17_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_17_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_17_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_17_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_17_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_17_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_17_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_17_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_17_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_17_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_17_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_17_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_17_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_17_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_17_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_17_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_17_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_17_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_17_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_17_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_17_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_17_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_17_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_17_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_17_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_17_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_17_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_17_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_17_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_17_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_17_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_17_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_17_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_17_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_17_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_17_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_17_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_17_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_17_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_17_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_17_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_17_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_17_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_17_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_17_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_17_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_17_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_17_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_17_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_17_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_17_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_17_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_17_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_17_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_17_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_17_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_17_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_17_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_17_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_17_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_17_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_17_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_17_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_17_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_17_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_17_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_17_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_17_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_18_INTERFACE_DEFINED__ +#define __ICoreWebView2_18_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_18 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_18 = {0x7a626017,0x28be,0x49b2,{0xb8,0x65,0x3b,0xa2,0xb3,0x52,0x2d,0x90}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7a626017-28be-49b2-b865-3ba2b3522d90") + ICoreWebView2_18 : public ICoreWebView2_17 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_LaunchingExternalUriScheme( + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_LaunchingExternalUriScheme( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_18Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_18 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_18 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_18 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_18 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_18 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_18 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_18 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_18 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_18 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_18 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_18 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_18 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_18 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_18 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_18 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_18 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_18 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_18 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_18 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_18 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_18 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_18 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_18 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_18 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_18 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_18 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_18 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_18 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_18 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_18 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_18 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_18Vtbl; + + interface ICoreWebView2_18 + { + CONST_VTBL struct ICoreWebView2_18Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_18_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_18_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_18_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_18_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_18_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_18_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_18_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_18_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_18_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_18_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_18_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_18_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_18_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_18_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_18_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_18_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_18_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_18_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_18_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_18_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_18_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_18_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_18_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_18_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_18_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_18_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_18_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_18_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_18_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_18_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_18_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_18_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_18_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_18_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_18_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_18_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_18_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_18_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_18_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_18_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_18_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_18_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_18_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_18_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_18_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_18_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_18_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_18_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_18_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_18_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_18_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_18_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_18_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_18_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_18_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_18_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_18_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_18_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_18_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_18_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_18_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_18_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_18_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_18_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_18_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_18_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_18_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_18_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_18_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_18_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_18_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_18_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_18_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_18_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_18_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_18_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_18_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_18_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_18_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_18_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_18_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_18_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_18_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_18_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_18_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_18_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_18_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_18_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_18_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_18_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_18_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_18_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_18_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2LaunchingExternalUriSchemeEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2LaunchingExternalUriSchemeEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2LaunchingExternalUriSchemeEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2LaunchingExternalUriSchemeEventHandler = {0x74f712e0,0x8165,0x43a9,{0xa1,0x3f,0x0c,0xce,0x59,0x7e,0x75,0xdf}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("74f712e0-8165-43a9-a13f-0cce597e75df") + ICoreWebView2LaunchingExternalUriSchemeEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2LaunchingExternalUriSchemeEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2LaunchingExternalUriSchemeEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2LaunchingExternalUriSchemeEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2LaunchingExternalUriSchemeEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2LaunchingExternalUriSchemeEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2LaunchingExternalUriSchemeEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventArgs *args); + + END_INTERFACE + } ICoreWebView2LaunchingExternalUriSchemeEventHandlerVtbl; + + interface ICoreWebView2LaunchingExternalUriSchemeEventHandler + { + CONST_VTBL struct ICoreWebView2LaunchingExternalUriSchemeEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2LaunchingExternalUriSchemeEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2LaunchingExternalUriSchemeEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2LaunchingExternalUriSchemeEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_19_INTERFACE_DEFINED__ +#define __ICoreWebView2_19_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_19 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_19 = {0x6921f954,0x79b0,0x437f,{0xa9,0x97,0xc8,0x58,0x11,0x89,0x7c,0x68}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6921f954-79b0-437f-a997-c85811897c68") + ICoreWebView2_19 : public ICoreWebView2_18 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MemoryUsageTargetLevel( + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_MemoryUsageTargetLevel( + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_19Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_19 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_19 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_19 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_19 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_19 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_19 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_19 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_19 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_19 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_19 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_19 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_19 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_19 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_19 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_19 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_19 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_19 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_19 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_19 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_19 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_19 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_19 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_19 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_19 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_19 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_19 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_19 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_19 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_19 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_19 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_19 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_19 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_19 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + END_INTERFACE + } ICoreWebView2_19Vtbl; + + interface ICoreWebView2_19 + { + CONST_VTBL struct ICoreWebView2_19Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_19_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_19_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_19_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_19_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_19_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_19_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_19_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_19_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_19_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_19_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_19_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_19_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_19_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_19_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_19_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_19_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_19_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_19_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_19_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_19_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_19_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_19_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_19_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_19_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_19_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_19_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_19_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_19_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_19_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_19_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_19_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_19_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_19_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_19_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_19_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_19_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_19_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_19_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_19_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_19_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_19_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_19_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_19_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_19_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_19_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_19_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_19_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_19_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_19_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_19_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_19_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_19_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_19_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_19_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_19_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_19_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_19_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_19_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_19_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_19_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_19_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_19_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_19_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_19_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_19_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_19_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_19_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_19_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_19_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_19_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_19_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_19_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_19_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_19_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_19_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_19_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_19_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_19_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_19_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_19_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_19_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_19_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_19_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_19_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_19_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_19_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_19_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_19_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_19_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_19_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_19_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_19_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_19_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_19_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_19_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_20_INTERFACE_DEFINED__ +#define __ICoreWebView2_20_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_20 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_20 = {0xb4bc1926,0x7305,0x11ee,{0xb9,0x62,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b4bc1926-7305-11ee-b962-0242ac120002") + ICoreWebView2_20 : public ICoreWebView2_19 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameId( + /* [retval][out] */ UINT32 *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_20Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_20 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_20 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_20 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_20 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_20 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_20 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_20 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_20 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_20 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_20 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_20 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_20 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_20 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_20 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_20 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_20 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_20 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_20 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_20 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_20 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_20 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_20 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_20 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_20 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_20 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_20 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_20 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_20 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_20 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_20 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_20 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_20 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_20 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_20 * This, + /* [retval][out] */ UINT32 *value); + + END_INTERFACE + } ICoreWebView2_20Vtbl; + + interface ICoreWebView2_20 + { + CONST_VTBL struct ICoreWebView2_20Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_20_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_20_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_20_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_20_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_20_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_20_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_20_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_20_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_20_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_20_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_20_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_20_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_20_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_20_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_20_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_20_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_20_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_20_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_20_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_20_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_20_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_20_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_20_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_20_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_20_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_20_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_20_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_20_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_20_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_20_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_20_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_20_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_20_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_20_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_20_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_20_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_20_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_20_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_20_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_20_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_20_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_20_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_20_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_20_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_20_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_20_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_20_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_20_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_20_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_20_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_20_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_20_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_20_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_20_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_20_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_20_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_20_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_20_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_20_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_20_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_20_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_20_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_20_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_20_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_20_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_20_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_20_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_20_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_20_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_20_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_20_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_20_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_20_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_20_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_20_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_20_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_20_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_20_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_20_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_20_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_20_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_20_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_20_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_20_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_20_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_20_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_20_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_20_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_20_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_20_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_20_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_20_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_20_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_20_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_20_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_20_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_21_INTERFACE_DEFINED__ +#define __ICoreWebView2_21_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_21 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_21 = {0xc4980dea,0x587b,0x43b9,{0x81,0x43,0x3e,0xf3,0xbf,0x55,0x2d,0x95}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c4980dea-587b-43b9-8143-3ef3bf552d95") + ICoreWebView2_21 : public ICoreWebView2_20 + { + public: + virtual HRESULT STDMETHODCALLTYPE ExecuteScriptWithResult( + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_21Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_21 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_21 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_21 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_21 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_21 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_21 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_21 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_21 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_21 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_21 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_21 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_21 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_21 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_21 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_21 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_21 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_21 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_21 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_21 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_21 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_21 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_21 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_21 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_21 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_21 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_21 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_21 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_21 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_21 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_21 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_21 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_21 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_21 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_21 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2_21Vtbl; + + interface ICoreWebView2_21 + { + CONST_VTBL struct ICoreWebView2_21Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_21_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_21_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_21_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_21_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_21_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_21_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_21_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_21_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_21_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_21_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_21_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_21_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_21_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_21_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_21_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_21_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_21_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_21_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_21_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_21_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_21_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_21_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_21_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_21_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_21_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_21_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_21_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_21_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_21_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_21_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_21_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_21_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_21_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_21_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_21_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_21_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_21_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_21_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_21_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_21_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_21_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_21_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_21_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_21_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_21_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_21_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_21_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_21_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_21_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_21_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_21_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_21_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_21_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_21_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_21_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_21_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_21_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_21_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_21_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_21_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_21_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_21_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_21_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_21_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_21_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_21_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_21_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_21_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_21_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_21_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_21_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_21_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_21_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_21_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_21_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_21_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_21_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_21_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_21_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_21_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_21_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_21_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_21_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_21_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_21_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_21_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_21_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_21_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_21_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_21_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_21_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_21_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_21_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_21_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_21_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_21_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_21_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptWithResultCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ExecuteScriptWithResultCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ExecuteScriptWithResultCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ExecuteScriptWithResultCompletedHandler = {0x1bb5317b,0x8238,0x4c67,{0xa7,0xff,0xba,0xf6,0x55,0x8f,0x28,0x9d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1bb5317b-8238-4c67-a7ff-baf6558f289d") + ICoreWebView2ExecuteScriptWithResultCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2ExecuteScriptResult *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ExecuteScriptWithResultCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ExecuteScriptWithResultCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ExecuteScriptWithResultCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ExecuteScriptWithResultCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ExecuteScriptWithResultCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ExecuteScriptWithResultCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2ExecuteScriptResult *result); + + END_INTERFACE + } ICoreWebView2ExecuteScriptWithResultCompletedHandlerVtbl; + + interface ICoreWebView2ExecuteScriptWithResultCompletedHandler + { + CONST_VTBL struct ICoreWebView2ExecuteScriptWithResultCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ExecuteScriptWithResultCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ExecuteScriptWithResultCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ExecuteScriptWithResultCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ExecuteScriptWithResultCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ExecuteScriptWithResultCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_22_INTERFACE_DEFINED__ +#define __ICoreWebView2_22_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_22 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_22 = {0xdb75dfc7,0xa857,0x4632,{0xa3,0x98,0x69,0x69,0xdd,0xe2,0x6c,0x0a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("db75dfc7-a857-4632-a398-6969dde26c0a") + ICoreWebView2_22 : public ICoreWebView2_21 + { + public: + virtual HRESULT STDMETHODCALLTYPE AddWebResourceRequestedFilterWithRequestSourceKinds( + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveWebResourceRequestedFilterWithRequestSourceKinds( + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_22Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_22 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_22 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_22 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_22 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_22 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_22 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_22 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_22 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_22 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_22 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_22 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_22 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_22 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_22 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_22 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_22 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_22 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_22 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_22 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_22 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_22 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_22 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_22 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_22 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_22 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_22 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_22 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_22 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_22 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_22 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_22 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_22 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_22 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_22 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + END_INTERFACE + } ICoreWebView2_22Vtbl; + + interface ICoreWebView2_22 + { + CONST_VTBL struct ICoreWebView2_22Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_22_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_22_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_22_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_22_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_22_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_22_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_22_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_22_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_22_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_22_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_22_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_22_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_22_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_22_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_22_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_22_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_22_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_22_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_22_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_22_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_22_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_22_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_22_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_22_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_22_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_22_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_22_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_22_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_22_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_22_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_22_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_22_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_22_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_22_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_22_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_22_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_22_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_22_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_22_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_22_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_22_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_22_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_22_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_22_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_22_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_22_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_22_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_22_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_22_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_22_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_22_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_22_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_22_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_22_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_22_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_22_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_22_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_22_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_22_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_22_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_22_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_22_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_22_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_22_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_22_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_22_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_22_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_22_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_22_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_22_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_22_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_22_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_22_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_22_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_22_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_22_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_22_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_22_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_22_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_22_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_22_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_22_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_22_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_22_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_22_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_22_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_22_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_22_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_22_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_22_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_22_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_22_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_22_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_22_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_22_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_22_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_22_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_22_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_22_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_23_INTERFACE_DEFINED__ +#define __ICoreWebView2_23_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_23 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_23 = {0x508f0db5,0x90c4,0x5872,{0x90,0xa7,0x26,0x7a,0x91,0x37,0x75,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("508f0db5-90c4-5872-90a7-267a91377502") + ICoreWebView2_23 : public ICoreWebView2_22 + { + public: + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsJsonWithAdditionalObjects( + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_23Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_23 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_23 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_23 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_23 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_23 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_23 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_23 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_23 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_23 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_23 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_23 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_23 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_23 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_23 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_23 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_23 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_23 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_23 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_23 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_23 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_23 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_23 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_23 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_23 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_23 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_23 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_23 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_23 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_23 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_23 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_23 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_23 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_23 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_23, PostWebMessageAsJsonWithAdditionalObjects) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJsonWithAdditionalObjects )( + ICoreWebView2_23 * This, + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects); + + END_INTERFACE + } ICoreWebView2_23Vtbl; + + interface ICoreWebView2_23 + { + CONST_VTBL struct ICoreWebView2_23Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_23_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_23_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_23_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_23_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_23_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_23_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_23_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_23_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_23_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_23_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_23_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_23_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_23_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_23_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_23_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_23_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_23_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_23_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_23_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_23_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_23_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_23_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_23_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_23_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_23_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_23_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_23_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_23_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_23_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_23_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_23_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_23_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_23_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_23_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_23_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_23_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_23_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_23_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_23_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_23_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_23_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_23_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_23_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_23_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_23_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_23_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_23_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_23_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_23_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_23_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_23_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_23_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_23_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_23_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_23_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_23_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_23_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_23_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_23_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_23_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_23_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_23_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_23_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_23_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_23_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_23_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_23_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_23_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_23_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_23_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_23_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_23_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_23_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_23_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_23_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_23_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_23_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_23_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_23_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_23_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_23_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_23_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_23_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_23_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_23_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_23_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_23_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_23_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_23_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_23_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_23_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_23_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_23_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_23_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_23_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_23_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_23_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_23_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + + +#define ICoreWebView2_23_PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) \ + ( (This)->lpVtbl -> PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_23_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_24_INTERFACE_DEFINED__ +#define __ICoreWebView2_24_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_24 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_24 = {0x39a7ad55,0x4287,0x5cc1,{0x88,0xa1,0xc6,0xf4,0x58,0x59,0x38,0x24}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("39a7ad55-4287-5cc1-88a1-c6f458593824") + ICoreWebView2_24 : public ICoreWebView2_23 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_NotificationReceived( + /* [in] */ ICoreWebView2NotificationReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NotificationReceived( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_24Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_24 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_24 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_24 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_24 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_24 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_24 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_24 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_24 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_24 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_24 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_24 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_24 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_24 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_24 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_24 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_24 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_24 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_24 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_24 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_24 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_24 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_24 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_24 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_24 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_24 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_24 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_24 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_24 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_24 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_24 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_24 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_23, PostWebMessageAsJsonWithAdditionalObjects) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJsonWithAdditionalObjects )( + ICoreWebView2_24 * This, + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, add_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *add_NotificationReceived )( + ICoreWebView2_24 * This, + /* [in] */ ICoreWebView2NotificationReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, remove_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *remove_NotificationReceived )( + ICoreWebView2_24 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_24Vtbl; + + interface ICoreWebView2_24 + { + CONST_VTBL struct ICoreWebView2_24Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_24_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_24_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_24_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_24_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_24_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_24_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_24_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_24_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_24_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_24_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_24_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_24_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_24_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_24_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_24_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_24_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_24_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_24_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_24_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_24_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_24_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_24_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_24_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_24_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_24_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_24_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_24_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_24_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_24_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_24_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_24_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_24_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_24_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_24_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_24_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_24_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_24_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_24_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_24_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_24_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_24_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_24_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_24_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_24_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_24_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_24_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_24_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_24_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_24_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_24_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_24_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_24_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_24_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_24_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_24_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_24_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_24_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_24_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_24_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_24_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_24_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_24_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_24_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_24_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_24_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_24_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_24_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_24_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_24_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_24_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_24_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_24_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_24_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_24_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_24_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_24_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_24_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_24_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_24_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_24_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_24_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_24_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_24_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_24_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_24_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_24_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_24_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_24_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_24_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_24_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_24_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_24_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_24_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_24_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_24_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_24_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_24_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + + +#define ICoreWebView2_24_PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) \ + ( (This)->lpVtbl -> PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) ) + + +#define ICoreWebView2_24_add_NotificationReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NotificationReceived(This,eventHandler,token) ) + +#define ICoreWebView2_24_remove_NotificationReceived(This,token) \ + ( (This)->lpVtbl -> remove_NotificationReceived(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_24_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NotificationReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NotificationReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NotificationReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NotificationReceivedEventHandler = {0x89c5d598,0x8788,0x423b,{0xbe,0x97,0xe6,0xe0,0x1c,0x0f,0x9e,0xe3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("89c5d598-8788-423b-be97-e6e01c0f9ee3") + ICoreWebView2NotificationReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NotificationReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NotificationReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NotificationReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NotificationReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NotificationReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NotificationReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NotificationReceivedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NotificationReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2NotificationReceivedEventHandlerVtbl; + + interface ICoreWebView2NotificationReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2NotificationReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NotificationReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NotificationReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NotificationReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NotificationReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NotificationReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_25_INTERFACE_DEFINED__ +#define __ICoreWebView2_25_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_25 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_25 = {0xb5a86092,0xdf50,0x5b4f,{0xa1,0x7b,0x6c,0x8f,0x8b,0x40,0xb7,0x71}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b5a86092-df50-5b4f-a17b-6c8f8b40b771") + ICoreWebView2_25 : public ICoreWebView2_24 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_SaveAsUIShowing( + /* [in] */ ICoreWebView2SaveAsUIShowingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_SaveAsUIShowing( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE ShowSaveAsUI( + /* [in] */ ICoreWebView2ShowSaveAsUICompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_25Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_25 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_25 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_25 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_25 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_25 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_25 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_25 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_25 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_25 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_25 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_25 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_25 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_25 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_25 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_25 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_25 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_25 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_25 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_25 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_25 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_25 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_25 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_25 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_25 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_25 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_25 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_25 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_25 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_25 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_25 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_25 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_23, PostWebMessageAsJsonWithAdditionalObjects) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJsonWithAdditionalObjects )( + ICoreWebView2_25 * This, + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, add_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *add_NotificationReceived )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2NotificationReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, remove_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *remove_NotificationReceived )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, add_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *add_SaveAsUIShowing )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2SaveAsUIShowingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, remove_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *remove_SaveAsUIShowing )( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, ShowSaveAsUI) + HRESULT ( STDMETHODCALLTYPE *ShowSaveAsUI )( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ShowSaveAsUICompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2_25Vtbl; + + interface ICoreWebView2_25 + { + CONST_VTBL struct ICoreWebView2_25Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_25_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_25_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_25_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_25_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_25_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_25_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_25_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_25_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_25_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_25_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_25_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_25_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_25_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_25_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_25_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_25_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_25_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_25_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_25_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_25_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_25_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_25_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_25_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_25_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_25_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_25_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_25_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_25_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_25_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_25_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_25_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_25_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_25_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_25_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_25_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_25_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_25_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_25_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_25_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_25_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_25_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_25_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_25_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_25_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_25_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_25_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_25_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_25_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_25_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_25_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_25_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_25_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_25_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_25_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_25_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_25_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_25_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_25_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_25_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_25_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_25_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_25_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_25_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_25_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_25_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_25_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_25_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_25_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_25_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_25_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_25_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_25_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_25_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_25_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_25_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_25_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_25_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_25_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_25_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_25_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_25_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_25_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_25_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_25_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_25_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_25_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_25_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_25_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_25_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_25_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_25_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_25_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_25_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_25_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_25_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_25_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_25_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + + +#define ICoreWebView2_25_PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) \ + ( (This)->lpVtbl -> PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) ) + + +#define ICoreWebView2_25_add_NotificationReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NotificationReceived(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_NotificationReceived(This,token) \ + ( (This)->lpVtbl -> remove_NotificationReceived(This,token) ) + + +#define ICoreWebView2_25_add_SaveAsUIShowing(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveAsUIShowing(This,eventHandler,token) ) + +#define ICoreWebView2_25_remove_SaveAsUIShowing(This,token) \ + ( (This)->lpVtbl -> remove_SaveAsUIShowing(This,token) ) + +#define ICoreWebView2_25_ShowSaveAsUI(This,handler) \ + ( (This)->lpVtbl -> ShowSaveAsUI(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_25_add_SaveAsUIShowing_Proxy( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2SaveAsUIShowingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + +void __RPC_STUB ICoreWebView2_25_add_SaveAsUIShowing_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_25_remove_SaveAsUIShowing_Proxy( + ICoreWebView2_25 * This, + /* [in] */ EventRegistrationToken token); + + +void __RPC_STUB ICoreWebView2_25_remove_SaveAsUIShowing_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_25_ShowSaveAsUI_Proxy( + ICoreWebView2_25 * This, + /* [in] */ ICoreWebView2ShowSaveAsUICompletedHandler *handler); + + +void __RPC_STUB ICoreWebView2_25_ShowSaveAsUI_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __ICoreWebView2_25_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveAsUIShowingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2SaveAsUIShowingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SaveAsUIShowingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SaveAsUIShowingEventHandler = {0x6baa177e,0x3a2e,0x5ccf,{0x9a,0x13,0xfa,0xd6,0x76,0xcd,0x05,0x22}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6baa177e-3a2e-5ccf-9a13-fad676cd0522") + ICoreWebView2SaveAsUIShowingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2SaveAsUIShowingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SaveAsUIShowingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SaveAsUIShowingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SaveAsUIShowingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SaveAsUIShowingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2SaveAsUIShowingEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2SaveAsUIShowingEventArgs *args); + + END_INTERFACE + } ICoreWebView2SaveAsUIShowingEventHandlerVtbl; + + interface ICoreWebView2SaveAsUIShowingEventHandler + { + CONST_VTBL struct ICoreWebView2SaveAsUIShowingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SaveAsUIShowingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SaveAsUIShowingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SaveAsUIShowingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SaveAsUIShowingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SaveAsUIShowingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ShowSaveAsUICompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ShowSaveAsUICompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ShowSaveAsUICompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ShowSaveAsUICompletedHandler = {0xe24b07e3,0x8169,0x5c34,{0x99,0x4a,0x7f,0x64,0x78,0x94,0x6a,0x3c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e24b07e3-8169-5c34-994a-7f6478946a3c") + ICoreWebView2ShowSaveAsUICompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ COREWEBVIEW2_SAVE_AS_UI_RESULT result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ShowSaveAsUICompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ShowSaveAsUICompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ShowSaveAsUICompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ShowSaveAsUICompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ShowSaveAsUICompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ShowSaveAsUICompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ COREWEBVIEW2_SAVE_AS_UI_RESULT result); + + END_INTERFACE + } ICoreWebView2ShowSaveAsUICompletedHandlerVtbl; + + interface ICoreWebView2ShowSaveAsUICompletedHandler + { + CONST_VTBL struct ICoreWebView2ShowSaveAsUICompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ShowSaveAsUICompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ShowSaveAsUICompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ShowSaveAsUICompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ShowSaveAsUICompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ShowSaveAsUICompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_26_INTERFACE_DEFINED__ +#define __ICoreWebView2_26_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_26 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_26 = {0x806268b8,0xf897,0x5685,{0x88,0xe5,0xc4,0x5f,0xca,0x0b,0x1a,0x48}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("806268b8-f897-5685-88e5-c45fca0b1a48") + ICoreWebView2_26 : public ICoreWebView2_25 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_SaveFileSecurityCheckStarting( + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_SaveFileSecurityCheckStarting( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_26Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_26 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_26 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_26 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_26 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_26 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_26 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_26 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_26 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_26 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_26 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_26 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_26 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_26 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_26 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_26 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_26 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_26 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_26 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_26 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_26 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_26 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_26 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_26 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_26 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_26 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_26 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_26 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_26 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_26 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_26 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_26 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_23, PostWebMessageAsJsonWithAdditionalObjects) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJsonWithAdditionalObjects )( + ICoreWebView2_26 * This, + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, add_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *add_NotificationReceived )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2NotificationReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, remove_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *remove_NotificationReceived )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, add_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *add_SaveAsUIShowing )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2SaveAsUIShowingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, remove_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *remove_SaveAsUIShowing )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, ShowSaveAsUI) + HRESULT ( STDMETHODCALLTYPE *ShowSaveAsUI )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2ShowSaveAsUICompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, add_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *add_SaveFileSecurityCheckStarting )( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, remove_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *remove_SaveFileSecurityCheckStarting )( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_26Vtbl; + + interface ICoreWebView2_26 + { + CONST_VTBL struct ICoreWebView2_26Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_26_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_26_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_26_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_26_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_26_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_26_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_26_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_26_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_26_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_26_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_26_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_26_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_26_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_26_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_26_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_26_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_26_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_26_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_26_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_26_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_26_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_26_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_26_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_26_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_26_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_26_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_26_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_26_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_26_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_26_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_26_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_26_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_26_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_26_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_26_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_26_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_26_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_26_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_26_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_26_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_26_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_26_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_26_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_26_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_26_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_26_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_26_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_26_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_26_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_26_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_26_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_26_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_26_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_26_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_26_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_26_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_26_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_26_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_26_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_26_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_26_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_26_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_26_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_26_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_26_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_26_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_26_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_26_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_26_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_26_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_26_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_26_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_26_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_26_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_26_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_26_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_26_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_26_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_26_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_26_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_26_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_26_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_26_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_26_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_26_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_26_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_26_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_26_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_26_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_26_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_26_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_26_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_26_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_26_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_26_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_26_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_26_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + + +#define ICoreWebView2_26_PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) \ + ( (This)->lpVtbl -> PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) ) + + +#define ICoreWebView2_26_add_NotificationReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NotificationReceived(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_NotificationReceived(This,token) \ + ( (This)->lpVtbl -> remove_NotificationReceived(This,token) ) + + +#define ICoreWebView2_26_add_SaveAsUIShowing(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveAsUIShowing(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_SaveAsUIShowing(This,token) \ + ( (This)->lpVtbl -> remove_SaveAsUIShowing(This,token) ) + +#define ICoreWebView2_26_ShowSaveAsUI(This,handler) \ + ( (This)->lpVtbl -> ShowSaveAsUI(This,handler) ) + + +#define ICoreWebView2_26_add_SaveFileSecurityCheckStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveFileSecurityCheckStarting(This,eventHandler,token) ) + +#define ICoreWebView2_26_remove_SaveFileSecurityCheckStarting(This,token) \ + ( (This)->lpVtbl -> remove_SaveFileSecurityCheckStarting(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_26_add_SaveFileSecurityCheckStarting_Proxy( + ICoreWebView2_26 * This, + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + +void __RPC_STUB ICoreWebView2_26_add_SaveFileSecurityCheckStarting_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_26_remove_SaveFileSecurityCheckStarting_Proxy( + ICoreWebView2_26 * This, + /* [in] */ EventRegistrationToken token); + + +void __RPC_STUB ICoreWebView2_26_remove_SaveFileSecurityCheckStarting_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __ICoreWebView2_26_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveFileSecurityCheckStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2SaveFileSecurityCheckStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SaveFileSecurityCheckStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SaveFileSecurityCheckStartingEventHandler = {0x7899576c,0x19e3,0x57c8,{0xb7,0xd1,0x55,0x80,0x82,0x92,0xde,0x57}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7899576c-19e3-57c8-b7d1-55808292de57") + ICoreWebView2SaveFileSecurityCheckStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SaveFileSecurityCheckStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SaveFileSecurityCheckStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SaveFileSecurityCheckStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SaveFileSecurityCheckStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2SaveFileSecurityCheckStartingEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2SaveFileSecurityCheckStartingEventHandlerVtbl; + + interface ICoreWebView2SaveFileSecurityCheckStartingEventHandler + { + CONST_VTBL struct ICoreWebView2SaveFileSecurityCheckStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SaveFileSecurityCheckStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SaveFileSecurityCheckStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SaveFileSecurityCheckStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_27_INTERFACE_DEFINED__ +#define __ICoreWebView2_27_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_27 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_27 = {0x00fbe33b,0x8c07,0x517c,{0xaa,0x23,0x0d,0xdd,0x4b,0x5f,0x6f,0xa0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("00fbe33b-8c07-517c-aa23-0ddd4b5f6fa0") + ICoreWebView2_27 : public ICoreWebView2_26 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ScreenCaptureStarting( + /* [in] */ ICoreWebView2ScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ScreenCaptureStarting( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_27Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_27 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_27 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_27 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_27 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_27 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_27 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_27 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_27 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_27 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_27 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_27 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_27 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_27 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_27 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_27 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_27 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_27 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_27 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_27 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_27 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_27 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_27 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_27 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_27 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_27 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_27 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_27 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_27 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_27 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_27 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_27 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_23, PostWebMessageAsJsonWithAdditionalObjects) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJsonWithAdditionalObjects )( + ICoreWebView2_27 * This, + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, add_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *add_NotificationReceived )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2NotificationReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, remove_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *remove_NotificationReceived )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, add_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *add_SaveAsUIShowing )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2SaveAsUIShowingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, remove_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *remove_SaveAsUIShowing )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, ShowSaveAsUI) + HRESULT ( STDMETHODCALLTYPE *ShowSaveAsUI )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ShowSaveAsUICompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, add_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *add_SaveFileSecurityCheckStarting )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, remove_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *remove_SaveFileSecurityCheckStarting )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_27, add_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *add_ScreenCaptureStarting )( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_27, remove_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *remove_ScreenCaptureStarting )( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_27Vtbl; + + interface ICoreWebView2_27 + { + CONST_VTBL struct ICoreWebView2_27Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_27_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_27_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_27_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_27_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_27_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_27_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_27_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_27_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_27_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_27_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_27_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_27_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_27_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_27_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_27_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_27_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_27_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_27_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_27_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_27_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_27_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_27_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_27_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_27_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_27_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_27_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_27_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_27_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_27_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_27_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_27_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_27_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_27_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_27_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_27_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_27_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_27_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_27_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_27_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_27_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_27_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_27_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_27_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_27_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_27_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_27_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_27_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_27_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_27_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_27_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_27_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_27_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_27_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_27_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_27_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_27_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_27_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_27_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_27_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_27_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_27_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_27_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_27_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_27_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_27_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_27_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_27_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_27_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_27_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_27_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_27_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_27_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_27_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_27_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_27_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_27_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_27_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_27_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_27_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_27_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_27_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_27_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_27_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_27_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_27_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_27_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_27_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_27_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_27_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_27_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_27_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_27_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_27_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_27_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_27_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_27_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_27_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + + +#define ICoreWebView2_27_PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) \ + ( (This)->lpVtbl -> PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) ) + + +#define ICoreWebView2_27_add_NotificationReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NotificationReceived(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_NotificationReceived(This,token) \ + ( (This)->lpVtbl -> remove_NotificationReceived(This,token) ) + + +#define ICoreWebView2_27_add_SaveAsUIShowing(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveAsUIShowing(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_SaveAsUIShowing(This,token) \ + ( (This)->lpVtbl -> remove_SaveAsUIShowing(This,token) ) + +#define ICoreWebView2_27_ShowSaveAsUI(This,handler) \ + ( (This)->lpVtbl -> ShowSaveAsUI(This,handler) ) + + +#define ICoreWebView2_27_add_SaveFileSecurityCheckStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveFileSecurityCheckStarting(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_SaveFileSecurityCheckStarting(This,token) \ + ( (This)->lpVtbl -> remove_SaveFileSecurityCheckStarting(This,token) ) + + +#define ICoreWebView2_27_add_ScreenCaptureStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScreenCaptureStarting(This,eventHandler,token) ) + +#define ICoreWebView2_27_remove_ScreenCaptureStarting(This,token) \ + ( (This)->lpVtbl -> remove_ScreenCaptureStarting(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_27_add_ScreenCaptureStarting_Proxy( + ICoreWebView2_27 * This, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + +void __RPC_STUB ICoreWebView2_27_add_ScreenCaptureStarting_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_27_remove_ScreenCaptureStarting_Proxy( + ICoreWebView2_27 * This, + /* [in] */ EventRegistrationToken token); + + +void __RPC_STUB ICoreWebView2_27_remove_ScreenCaptureStarting_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __ICoreWebView2_27_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ScreenCaptureStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ScreenCaptureStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ScreenCaptureStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ScreenCaptureStartingEventHandler = {0xe24ff05a,0x1db5,0x59d9,{0x89,0xf3,0x3c,0x86,0x42,0x68,0xdb,0x4a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e24ff05a-1db5-59d9-89f3-3c864268db4a") + ICoreWebView2ScreenCaptureStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ScreenCaptureStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ScreenCaptureStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ScreenCaptureStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ScreenCaptureStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ScreenCaptureStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ScreenCaptureStartingEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2ScreenCaptureStartingEventHandlerVtbl; + + interface ICoreWebView2ScreenCaptureStartingEventHandler + { + CONST_VTBL struct ICoreWebView2ScreenCaptureStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ScreenCaptureStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ScreenCaptureStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ScreenCaptureStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ScreenCaptureStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ScreenCaptureStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_28_INTERFACE_DEFINED__ +#define __ICoreWebView2_28_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_28 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_28 = {0x62e50381,0x5bf5,0x51a8,{0xaa,0xe0,0xf2,0x0a,0x3a,0x9c,0x8a,0x90}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("62e50381-5bf5-51a8-aae0-f20a3a9c8a90") + ICoreWebView2_28 : public ICoreWebView2_27 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Find( + /* [retval][out] */ ICoreWebView2Find **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_28Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_28 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_28 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_28 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_28 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_28 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_28 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_28 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_28 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_28 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_28 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_28 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_28 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_28 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_28 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_28 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_28 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_28 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_28 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_28 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_28 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_28 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_28 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_28 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_28 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_28 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_28 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_28 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_28 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_28 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_28 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_28 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_23, PostWebMessageAsJsonWithAdditionalObjects) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJsonWithAdditionalObjects )( + ICoreWebView2_28 * This, + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, add_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *add_NotificationReceived )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2NotificationReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, remove_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *remove_NotificationReceived )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, add_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *add_SaveAsUIShowing )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2SaveAsUIShowingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, remove_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *remove_SaveAsUIShowing )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, ShowSaveAsUI) + HRESULT ( STDMETHODCALLTYPE *ShowSaveAsUI )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ShowSaveAsUICompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, add_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *add_SaveFileSecurityCheckStarting )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, remove_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *remove_SaveFileSecurityCheckStarting )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_27, add_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *add_ScreenCaptureStarting )( + ICoreWebView2_28 * This, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_27, remove_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *remove_ScreenCaptureStarting )( + ICoreWebView2_28 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_28, get_Find) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Find )( + ICoreWebView2_28 * This, + /* [retval][out] */ ICoreWebView2Find **value); + + END_INTERFACE + } ICoreWebView2_28Vtbl; + + interface ICoreWebView2_28 + { + CONST_VTBL struct ICoreWebView2_28Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_28_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_28_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_28_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_28_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_28_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_28_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_28_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_28_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_28_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_28_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_28_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_28_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_28_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_28_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_28_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_28_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_28_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_28_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_28_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_28_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_28_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_28_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_28_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_28_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_28_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_28_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_28_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_28_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_28_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_28_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_28_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_28_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_28_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_28_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_28_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_28_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_28_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_28_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_28_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_28_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_28_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_28_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_28_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_28_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_28_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_28_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_28_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_28_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_28_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_28_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_28_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_28_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_28_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_28_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_28_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_28_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_28_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_28_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_28_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_28_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_28_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_28_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_28_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_28_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_28_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_28_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_28_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_28_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_28_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_28_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_28_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_28_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_28_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_28_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_28_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_28_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_28_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_28_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_28_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_28_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_28_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_28_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_28_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_28_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_28_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_28_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_28_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_28_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_28_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_28_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_28_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_28_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_28_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_28_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_28_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_28_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_28_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + + +#define ICoreWebView2_28_PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) \ + ( (This)->lpVtbl -> PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) ) + + +#define ICoreWebView2_28_add_NotificationReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NotificationReceived(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_NotificationReceived(This,token) \ + ( (This)->lpVtbl -> remove_NotificationReceived(This,token) ) + + +#define ICoreWebView2_28_add_SaveAsUIShowing(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveAsUIShowing(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_SaveAsUIShowing(This,token) \ + ( (This)->lpVtbl -> remove_SaveAsUIShowing(This,token) ) + +#define ICoreWebView2_28_ShowSaveAsUI(This,handler) \ + ( (This)->lpVtbl -> ShowSaveAsUI(This,handler) ) + + +#define ICoreWebView2_28_add_SaveFileSecurityCheckStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveFileSecurityCheckStarting(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_SaveFileSecurityCheckStarting(This,token) \ + ( (This)->lpVtbl -> remove_SaveFileSecurityCheckStarting(This,token) ) + + +#define ICoreWebView2_28_add_ScreenCaptureStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScreenCaptureStarting(This,eventHandler,token) ) + +#define ICoreWebView2_28_remove_ScreenCaptureStarting(This,token) \ + ( (This)->lpVtbl -> remove_ScreenCaptureStarting(This,token) ) + + +#define ICoreWebView2_28_get_Find(This,value) \ + ( (This)->lpVtbl -> get_Find(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [propget] */ HRESULT STDMETHODCALLTYPE ICoreWebView2_28_get_Find_Proxy( + ICoreWebView2_28 * This, + /* [retval][out] */ ICoreWebView2Find **value); + + +void __RPC_STUB ICoreWebView2_28_get_Find_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __ICoreWebView2_28_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_29_INTERFACE_DEFINED__ +#define __ICoreWebView2_29_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_29 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_29 = {0x650f917e,0xcc16,0x5c8c,{0x92,0x87,0xb0,0xbb,0xc8,0xa4,0xab,0x2c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("650f917e-cc16-5c8c-9287-b0bbc8a4ab2c") + ICoreWebView2_29 : public ICoreWebView2_28 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_DedicatedWorkerCreated( + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DedicatedWorkerCreated( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_29Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_29 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_29 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_29 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_29 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_29 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_29 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_29 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_29 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_29 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_29 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_29 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_29 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_29 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_29 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR ResultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_29 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_29 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_29 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_29 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_29 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_29 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_29 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_29 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_29 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_29 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_29 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_29 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_29 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, Print) + HRESULT ( STDMETHODCALLTYPE *Print )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, ShowPrintUI) + HRESULT ( STDMETHODCALLTYPE *ShowPrintUI )( + ICoreWebView2_29 * This, + /* [in] */ COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_16, PrintToPdfStream) + HRESULT ( STDMETHODCALLTYPE *PrintToPdfStream )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfStreamCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_17, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, add_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *add_LaunchingExternalUriScheme )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2LaunchingExternalUriSchemeEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_18, remove_LaunchingExternalUriScheme) + HRESULT ( STDMETHODCALLTYPE *remove_LaunchingExternalUriScheme )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, get_MemoryUsageTargetLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MemoryUsageTargetLevel )( + ICoreWebView2_29 * This, + /* [retval][out] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_19, put_MemoryUsageTargetLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MemoryUsageTargetLevel )( + ICoreWebView2_29 * This, + /* [in] */ COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_20, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2_29 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_21, ExecuteScriptWithResult) + HRESULT ( STDMETHODCALLTYPE *ExecuteScriptWithResult )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptWithResultCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, AddWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_22, RemoveWebResourceRequestedFilterWithRequestSourceKinds) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilterWithRequestSourceKinds )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT ResourceContext, + /* [in] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS requestSourceKinds); + + DECLSPEC_XFGVIRT(ICoreWebView2_23, PostWebMessageAsJsonWithAdditionalObjects) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJsonWithAdditionalObjects )( + ICoreWebView2_29 * This, + /* [in] */ LPCWSTR webMessageAsJson, + /* [in] */ ICoreWebView2ObjectCollectionView *additionalObjects); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, add_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *add_NotificationReceived )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2NotificationReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_24, remove_NotificationReceived) + HRESULT ( STDMETHODCALLTYPE *remove_NotificationReceived )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, add_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *add_SaveAsUIShowing )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2SaveAsUIShowingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, remove_SaveAsUIShowing) + HRESULT ( STDMETHODCALLTYPE *remove_SaveAsUIShowing )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_25, ShowSaveAsUI) + HRESULT ( STDMETHODCALLTYPE *ShowSaveAsUI )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ShowSaveAsUICompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, add_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *add_SaveFileSecurityCheckStarting )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2SaveFileSecurityCheckStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_26, remove_SaveFileSecurityCheckStarting) + HRESULT ( STDMETHODCALLTYPE *remove_SaveFileSecurityCheckStarting )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_27, add_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *add_ScreenCaptureStarting )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_27, remove_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *remove_ScreenCaptureStarting )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_28, get_Find) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Find )( + ICoreWebView2_29 * This, + /* [retval][out] */ ICoreWebView2Find **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_29, add_DedicatedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *add_DedicatedWorkerCreated )( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_29, remove_DedicatedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *remove_DedicatedWorkerCreated )( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_29Vtbl; + + interface ICoreWebView2_29 + { + CONST_VTBL struct ICoreWebView2_29Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_29_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_29_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_29_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_29_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_29_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_29_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_29_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_29_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_29_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_29_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_29_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_29_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_29_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_29_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_29_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_29_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_29_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_29_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_29_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_29_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_29_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_29_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_29_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_29_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_29_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_29_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_29_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_29_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_29_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_29_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_29_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_29_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_29_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_29_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_29_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_29_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_29_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_29_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_29_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_29_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_29_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_29_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_29_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_29_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_29_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_29_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_29_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_29_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_29_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_29_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_29_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_29_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_29_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_29_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_29_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_29_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_29_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_29_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_29_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_29_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_29_PrintToPdf(This,ResultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,ResultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_29_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_29_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_29_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_29_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_29_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_29_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_29_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_29_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_29_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_29_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_29_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_29_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_29_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_29_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_29_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_29_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_29_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_29_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_29_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_29_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_29_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_29_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_29_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_29_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_29_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + + +#define ICoreWebView2_29_Print(This,printSettings,handler) \ + ( (This)->lpVtbl -> Print(This,printSettings,handler) ) + +#define ICoreWebView2_29_ShowPrintUI(This,printDialogKind) \ + ( (This)->lpVtbl -> ShowPrintUI(This,printDialogKind) ) + +#define ICoreWebView2_29_PrintToPdfStream(This,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdfStream(This,printSettings,handler) ) + + +#define ICoreWebView2_29_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2_29_add_LaunchingExternalUriScheme(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LaunchingExternalUriScheme(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_LaunchingExternalUriScheme(This,token) \ + ( (This)->lpVtbl -> remove_LaunchingExternalUriScheme(This,token) ) + + +#define ICoreWebView2_29_get_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> get_MemoryUsageTargetLevel(This,value) ) + +#define ICoreWebView2_29_put_MemoryUsageTargetLevel(This,value) \ + ( (This)->lpVtbl -> put_MemoryUsageTargetLevel(This,value) ) + + +#define ICoreWebView2_29_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2_29_ExecuteScriptWithResult(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScriptWithResult(This,javaScript,handler) ) + + +#define ICoreWebView2_29_AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + +#define ICoreWebView2_29_RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilterWithRequestSourceKinds(This,uri,ResourceContext,requestSourceKinds) ) + + +#define ICoreWebView2_29_PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) \ + ( (This)->lpVtbl -> PostWebMessageAsJsonWithAdditionalObjects(This,webMessageAsJson,additionalObjects) ) + + +#define ICoreWebView2_29_add_NotificationReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NotificationReceived(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_NotificationReceived(This,token) \ + ( (This)->lpVtbl -> remove_NotificationReceived(This,token) ) + + +#define ICoreWebView2_29_add_SaveAsUIShowing(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveAsUIShowing(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_SaveAsUIShowing(This,token) \ + ( (This)->lpVtbl -> remove_SaveAsUIShowing(This,token) ) + +#define ICoreWebView2_29_ShowSaveAsUI(This,handler) \ + ( (This)->lpVtbl -> ShowSaveAsUI(This,handler) ) + + +#define ICoreWebView2_29_add_SaveFileSecurityCheckStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SaveFileSecurityCheckStarting(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_SaveFileSecurityCheckStarting(This,token) \ + ( (This)->lpVtbl -> remove_SaveFileSecurityCheckStarting(This,token) ) + + +#define ICoreWebView2_29_add_ScreenCaptureStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScreenCaptureStarting(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_ScreenCaptureStarting(This,token) \ + ( (This)->lpVtbl -> remove_ScreenCaptureStarting(This,token) ) + + +#define ICoreWebView2_29_get_Find(This,value) \ + ( (This)->lpVtbl -> get_Find(This,value) ) + + +#define ICoreWebView2_29_add_DedicatedWorkerCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DedicatedWorkerCreated(This,eventHandler,token) ) + +#define ICoreWebView2_29_remove_DedicatedWorkerCreated(This,token) \ + ( (This)->lpVtbl -> remove_DedicatedWorkerCreated(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_29_add_DedicatedWorkerCreated_Proxy( + ICoreWebView2_29 * This, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + +void __RPC_STUB ICoreWebView2_29_add_DedicatedWorkerCreated_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE ICoreWebView2_29_remove_DedicatedWorkerCreated_Proxy( + ICoreWebView2_29 * This, + /* [in] */ EventRegistrationToken token); + + +void __RPC_STUB ICoreWebView2_29_remove_DedicatedWorkerCreated_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __ICoreWebView2_29_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DedicatedWorkerCreatedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DedicatedWorkerCreatedEventHandler = {0xcba7462c,0x52c1,0x5706,{0x8b,0xbc,0xe9,0xfc,0x36,0x47,0x6d,0xe4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("cba7462c-52c1-5706-8bbc-e9fc36476de4") + ICoreWebView2DedicatedWorkerCreatedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DedicatedWorkerCreatedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DedicatedWorkerCreatedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DedicatedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DedicatedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorkerCreatedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DedicatedWorkerCreatedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventArgs *args); + + END_INTERFACE + } ICoreWebView2DedicatedWorkerCreatedEventHandlerVtbl; + + interface ICoreWebView2DedicatedWorkerCreatedEventHandler + { + CONST_VTBL struct ICoreWebView2DedicatedWorkerCreatedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DedicatedWorkerCreatedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DedicatedWorkerCreatedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DedicatedWorkerCreatedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DedicatedWorkerCreatedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2AcceleratorKeyPressedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2AcceleratorKeyPressedEventArgs = {0x9f760f8a,0xfb79,0x42be,{0x99,0x90,0x7b,0x56,0x90,0x0f,0xa9,0xc7}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9f760f8a-fb79-42be-9990-7b56900fa9c7") + ICoreWebView2AcceleratorKeyPressedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_KeyEventKind( + /* [retval][out] */ COREWEBVIEW2_KEY_EVENT_KIND *keyEventKind) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_VirtualKey( + /* [retval][out] */ UINT *virtualKey) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_KeyEventLParam( + /* [retval][out] */ INT *lParam) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PhysicalKeyStatus( + /* [retval][out] */ COREWEBVIEW2_PHYSICAL_KEY_STATUS *physicalKeyStatus) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *handled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL handled) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2AcceleratorKeyPressedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_KeyEventKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventKind )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_KEY_EVENT_KIND *keyEventKind); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_VirtualKey) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_VirtualKey )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ UINT *virtualKey); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_KeyEventLParam) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventLParam )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ INT *lParam); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_PhysicalKeyStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PhysicalKeyStatus )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PHYSICAL_KEY_STATUS *physicalKeyStatus); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ BOOL *handled); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [in] */ BOOL handled); + + END_INTERFACE + } ICoreWebView2AcceleratorKeyPressedEventArgsVtbl; + + interface ICoreWebView2AcceleratorKeyPressedEventArgs + { + CONST_VTBL struct ICoreWebView2AcceleratorKeyPressedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_KeyEventKind(This,keyEventKind) \ + ( (This)->lpVtbl -> get_KeyEventKind(This,keyEventKind) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_VirtualKey(This,virtualKey) \ + ( (This)->lpVtbl -> get_VirtualKey(This,virtualKey) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_KeyEventLParam(This,lParam) \ + ( (This)->lpVtbl -> get_KeyEventLParam(This,lParam) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_PhysicalKeyStatus(This,physicalKeyStatus) \ + ( (This)->lpVtbl -> get_PhysicalKeyStatus(This,physicalKeyStatus) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2AcceleratorKeyPressedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2AcceleratorKeyPressedEventArgs2 = {0x03b2c8c8,0x7799,0x4e34,{0xbd,0x66,0xed,0x26,0xaa,0x85,0xf2,0xbf}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("03b2c8c8-7799-4e34-bd66-ed26aa85f2bf") + ICoreWebView2AcceleratorKeyPressedEventArgs2 : public ICoreWebView2AcceleratorKeyPressedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsBrowserAcceleratorKeyEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsBrowserAcceleratorKeyEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2AcceleratorKeyPressedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_KeyEventKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventKind )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_KEY_EVENT_KIND *keyEventKind); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_VirtualKey) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_VirtualKey )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [retval][out] */ UINT *virtualKey); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_KeyEventLParam) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventLParam )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [retval][out] */ INT *lParam); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_PhysicalKeyStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PhysicalKeyStatus )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_PHYSICAL_KEY_STATUS *physicalKeyStatus); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [retval][out] */ BOOL *handled); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [in] */ BOOL handled); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs2, get_IsBrowserAcceleratorKeyEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBrowserAcceleratorKeyEnabled )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs2, put_IsBrowserAcceleratorKeyEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBrowserAcceleratorKeyEnabled )( + ICoreWebView2AcceleratorKeyPressedEventArgs2 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2AcceleratorKeyPressedEventArgs2Vtbl; + + interface ICoreWebView2AcceleratorKeyPressedEventArgs2 + { + CONST_VTBL struct ICoreWebView2AcceleratorKeyPressedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_get_KeyEventKind(This,keyEventKind) \ + ( (This)->lpVtbl -> get_KeyEventKind(This,keyEventKind) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_get_VirtualKey(This,virtualKey) \ + ( (This)->lpVtbl -> get_VirtualKey(This,virtualKey) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_get_KeyEventLParam(This,lParam) \ + ( (This)->lpVtbl -> get_KeyEventLParam(This,lParam) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_get_PhysicalKeyStatus(This,physicalKeyStatus) \ + ( (This)->lpVtbl -> get_PhysicalKeyStatus(This,physicalKeyStatus) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_get_IsBrowserAcceleratorKeyEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsBrowserAcceleratorKeyEnabled(This,value) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs2_put_IsBrowserAcceleratorKeyEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsBrowserAcceleratorKeyEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BasicAuthenticationRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BasicAuthenticationRequestedEventArgs = {0xef05516f,0xd897,0x4f9e,{0xb6,0x72,0xd8,0xe2,0x30,0x7a,0x3f,0xb0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ef05516f-d897-4f9e-b672-d8e2307a3fb0") + ICoreWebView2BasicAuthenticationRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Challenge( + /* [retval][out] */ LPWSTR *challenge) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Response( + /* [retval][out] */ ICoreWebView2BasicAuthenticationResponse **response) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *cancel) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL cancel) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BasicAuthenticationRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Challenge) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Challenge )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *challenge); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Response) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2BasicAuthenticationResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ BOOL *cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [in] */ BOOL cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2BasicAuthenticationRequestedEventArgsVtbl; + + interface ICoreWebView2BasicAuthenticationRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2BasicAuthenticationRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Uri(This,value) \ + ( (This)->lpVtbl -> get_Uri(This,value) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Challenge(This,challenge) \ + ( (This)->lpVtbl -> get_Challenge(This,challenge) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Response(This,response) \ + ( (This)->lpVtbl -> get_Response(This,response) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationResponse_INTERFACE_DEFINED__ +#define __ICoreWebView2BasicAuthenticationResponse_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BasicAuthenticationResponse */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BasicAuthenticationResponse = {0x07023f7d,0x2d77,0x4d67,{0x90,0x40,0x6e,0x7d,0x42,0x8c,0x6a,0x40}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("07023f7d-2d77-4d67-9040-6e7d428c6a40") + ICoreWebView2BasicAuthenticationResponse : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_UserName( + /* [retval][out] */ LPWSTR *userName) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_UserName( + /* [in] */ LPCWSTR userName) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Password( + /* [retval][out] */ LPWSTR *password) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Password( + /* [in] */ LPCWSTR password) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BasicAuthenticationResponseVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BasicAuthenticationResponse * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BasicAuthenticationResponse * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, get_UserName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserName )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [retval][out] */ LPWSTR *userName); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, put_UserName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserName )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [in] */ LPCWSTR userName); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, get_Password) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Password )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [retval][out] */ LPWSTR *password); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, put_Password) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Password )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [in] */ LPCWSTR password); + + END_INTERFACE + } ICoreWebView2BasicAuthenticationResponseVtbl; + + interface ICoreWebView2BasicAuthenticationResponse + { + CONST_VTBL struct ICoreWebView2BasicAuthenticationResponseVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BasicAuthenticationResponse_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BasicAuthenticationResponse_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BasicAuthenticationResponse_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BasicAuthenticationResponse_get_UserName(This,userName) \ + ( (This)->lpVtbl -> get_UserName(This,userName) ) + +#define ICoreWebView2BasicAuthenticationResponse_put_UserName(This,userName) \ + ( (This)->lpVtbl -> put_UserName(This,userName) ) + +#define ICoreWebView2BasicAuthenticationResponse_get_Password(This,password) \ + ( (This)->lpVtbl -> get_Password(This,password) ) + +#define ICoreWebView2BasicAuthenticationResponse_put_Password(This,password) \ + ( (This)->lpVtbl -> put_Password(This,password) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BasicAuthenticationResponse_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtension_INTERFACE_DEFINED__ +#define __ICoreWebView2BrowserExtension_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BrowserExtension */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserExtension = {0x7EF7FFA0,0xFAC5,0x462C,{0xB1,0x89,0x3D,0x9E,0xDB,0xE5,0x75,0xDA}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7EF7FFA0-FAC5-462C-B189-3D9EDBE575DA") + ICoreWebView2BrowserExtension : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Id( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE Remove( + /* [in] */ ICoreWebView2BrowserExtensionRemoveCompletedHandler *handler) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE Enable( + /* [in] */ BOOL isEnabled, + /* [in] */ ICoreWebView2BrowserExtensionEnableCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BrowserExtensionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BrowserExtension * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BrowserExtension * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BrowserExtension * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtension, get_Id) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Id )( + ICoreWebView2BrowserExtension * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtension, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2BrowserExtension * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtension, Remove) + HRESULT ( STDMETHODCALLTYPE *Remove )( + ICoreWebView2BrowserExtension * This, + /* [in] */ ICoreWebView2BrowserExtensionRemoveCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtension, get_IsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsEnabled )( + ICoreWebView2BrowserExtension * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtension, Enable) + HRESULT ( STDMETHODCALLTYPE *Enable )( + ICoreWebView2BrowserExtension * This, + /* [in] */ BOOL isEnabled, + /* [in] */ ICoreWebView2BrowserExtensionEnableCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2BrowserExtensionVtbl; + + interface ICoreWebView2BrowserExtension + { + CONST_VTBL struct ICoreWebView2BrowserExtensionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BrowserExtension_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BrowserExtension_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BrowserExtension_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BrowserExtension_get_Id(This,value) \ + ( (This)->lpVtbl -> get_Id(This,value) ) + +#define ICoreWebView2BrowserExtension_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + +#define ICoreWebView2BrowserExtension_Remove(This,handler) \ + ( (This)->lpVtbl -> Remove(This,handler) ) + +#define ICoreWebView2BrowserExtension_get_IsEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsEnabled(This,value) ) + +#define ICoreWebView2BrowserExtension_Enable(This,isEnabled,handler) \ + ( (This)->lpVtbl -> Enable(This,isEnabled,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BrowserExtension_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtensionRemoveCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2BrowserExtensionRemoveCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BrowserExtensionRemoveCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserExtensionRemoveCompletedHandler = {0x8e41909a,0x9b18,0x4bb1,{0x8c,0xdf,0x93,0x0f,0x46,0x7a,0x50,0xbe}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8e41909a-9b18-4bb1-8cdf-930f467a50be") + ICoreWebView2BrowserExtensionRemoveCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BrowserExtensionRemoveCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BrowserExtensionRemoveCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BrowserExtensionRemoveCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BrowserExtensionRemoveCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtensionRemoveCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2BrowserExtensionRemoveCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2BrowserExtensionRemoveCompletedHandlerVtbl; + + interface ICoreWebView2BrowserExtensionRemoveCompletedHandler + { + CONST_VTBL struct ICoreWebView2BrowserExtensionRemoveCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BrowserExtensionRemoveCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BrowserExtensionRemoveCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BrowserExtensionRemoveCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BrowserExtensionRemoveCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BrowserExtensionRemoveCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtensionEnableCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2BrowserExtensionEnableCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BrowserExtensionEnableCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserExtensionEnableCompletedHandler = {0x30c186ce,0x7fad,0x421f,{0xa3,0xbc,0xa8,0xea,0xf0,0x71,0xdd,0xb8}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("30c186ce-7fad-421f-a3bc-a8eaf071ddb8") + ICoreWebView2BrowserExtensionEnableCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BrowserExtensionEnableCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BrowserExtensionEnableCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BrowserExtensionEnableCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BrowserExtensionEnableCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtensionEnableCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2BrowserExtensionEnableCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2BrowserExtensionEnableCompletedHandlerVtbl; + + interface ICoreWebView2BrowserExtensionEnableCompletedHandler + { + CONST_VTBL struct ICoreWebView2BrowserExtensionEnableCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BrowserExtensionEnableCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BrowserExtensionEnableCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BrowserExtensionEnableCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BrowserExtensionEnableCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BrowserExtensionEnableCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserProcessExitedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2BrowserProcessExitedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BrowserProcessExitedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserProcessExitedEventArgs = {0x1f00663f,0xaf8c,0x4782,{0x9c,0xdd,0xdd,0x01,0xc5,0x2e,0x34,0xcb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1f00663f-af8c-4782-9cdd-dd01c52e34cb") + ICoreWebView2BrowserProcessExitedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BrowserProcessExitKind( + /* [retval][out] */ COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BrowserProcessId( + /* [retval][out] */ UINT32 *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BrowserProcessExitedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BrowserProcessExitedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BrowserProcessExitedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BrowserProcessExitedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserProcessExitedEventArgs, get_BrowserProcessExitKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessExitKind )( + ICoreWebView2BrowserProcessExitedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserProcessExitedEventArgs, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2BrowserProcessExitedEventArgs * This, + /* [retval][out] */ UINT32 *value); + + END_INTERFACE + } ICoreWebView2BrowserProcessExitedEventArgsVtbl; + + interface ICoreWebView2BrowserProcessExitedEventArgs + { + CONST_VTBL struct ICoreWebView2BrowserProcessExitedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BrowserProcessExitedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BrowserProcessExitedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BrowserProcessExitedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BrowserProcessExitedEventArgs_get_BrowserProcessExitKind(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessExitKind(This,value) ) + +#define ICoreWebView2BrowserProcessExitedEventArgs_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BrowserProcessExitedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Certificate_INTERFACE_DEFINED__ +#define __ICoreWebView2Certificate_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Certificate */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Certificate = {0xC5FB2FCE,0x1CAC,0x4AEE,{0x9C,0x79,0x5E,0xD0,0x36,0x2E,0xAA,0xE0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C5FB2FCE-1CAC-4AEE-9C79-5ED0362EAAE0") + ICoreWebView2Certificate : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Subject( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Issuer( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ValidFrom( + /* [retval][out] */ double *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ValidTo( + /* [retval][out] */ double *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DerEncodedSerialNumber( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DisplayName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE ToPemEncoding( + /* [retval][out] */ LPWSTR *pemEncodedData) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PemEncodedIssuerCertificateChain( + /* [retval][out] */ ICoreWebView2StringCollection **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CertificateVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Certificate * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Certificate * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Certificate * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_Subject) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Subject )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_Issuer) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Issuer )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_ValidFrom) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidFrom )( + ICoreWebView2Certificate * This, + /* [retval][out] */ double *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_ValidTo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidTo )( + ICoreWebView2Certificate * This, + /* [retval][out] */ double *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_DerEncodedSerialNumber) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DerEncodedSerialNumber )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_DisplayName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DisplayName )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, ToPemEncoding) + HRESULT ( STDMETHODCALLTYPE *ToPemEncoding )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *pemEncodedData); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_PemEncodedIssuerCertificateChain) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PemEncodedIssuerCertificateChain )( + ICoreWebView2Certificate * This, + /* [retval][out] */ ICoreWebView2StringCollection **value); + + END_INTERFACE + } ICoreWebView2CertificateVtbl; + + interface ICoreWebView2Certificate + { + CONST_VTBL struct ICoreWebView2CertificateVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Certificate_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Certificate_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Certificate_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Certificate_get_Subject(This,value) \ + ( (This)->lpVtbl -> get_Subject(This,value) ) + +#define ICoreWebView2Certificate_get_Issuer(This,value) \ + ( (This)->lpVtbl -> get_Issuer(This,value) ) + +#define ICoreWebView2Certificate_get_ValidFrom(This,value) \ + ( (This)->lpVtbl -> get_ValidFrom(This,value) ) + +#define ICoreWebView2Certificate_get_ValidTo(This,value) \ + ( (This)->lpVtbl -> get_ValidTo(This,value) ) + +#define ICoreWebView2Certificate_get_DerEncodedSerialNumber(This,value) \ + ( (This)->lpVtbl -> get_DerEncodedSerialNumber(This,value) ) + +#define ICoreWebView2Certificate_get_DisplayName(This,value) \ + ( (This)->lpVtbl -> get_DisplayName(This,value) ) + +#define ICoreWebView2Certificate_ToPemEncoding(This,pemEncodedData) \ + ( (This)->lpVtbl -> ToPemEncoding(This,pemEncodedData) ) + +#define ICoreWebView2Certificate_get_PemEncodedIssuerCertificateChain(This,value) \ + ( (This)->lpVtbl -> get_PemEncodedIssuerCertificateChain(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Certificate_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificate_INTERFACE_DEFINED__ +#define __ICoreWebView2ClientCertificate_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClientCertificate */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificate = {0xe7188076,0xbcc3,0x11eb,{0x85,0x29,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e7188076-bcc3-11eb-8529-0242ac130003") + ICoreWebView2ClientCertificate : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Subject( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Issuer( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ValidFrom( + /* [retval][out] */ double *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ValidTo( + /* [retval][out] */ double *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DerEncodedSerialNumber( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DisplayName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE ToPemEncoding( + /* [retval][out] */ LPWSTR *pemEncodedData) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PemEncodedIssuerCertificateChain( + /* [retval][out] */ ICoreWebView2StringCollection **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_CLIENT_CERTIFICATE_KIND *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClientCertificateVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClientCertificate * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClientCertificate * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClientCertificate * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_Subject) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Subject )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_Issuer) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Issuer )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_ValidFrom) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidFrom )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ double *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_ValidTo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidTo )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ double *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_DerEncodedSerialNumber) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DerEncodedSerialNumber )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_DisplayName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DisplayName )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, ToPemEncoding) + HRESULT ( STDMETHODCALLTYPE *ToPemEncoding )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ LPWSTR *pemEncodedData); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_PemEncodedIssuerCertificateChain) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PemEncodedIssuerCertificateChain )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ ICoreWebView2StringCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ClientCertificate * This, + /* [retval][out] */ COREWEBVIEW2_CLIENT_CERTIFICATE_KIND *value); + + END_INTERFACE + } ICoreWebView2ClientCertificateVtbl; + + interface ICoreWebView2ClientCertificate + { + CONST_VTBL struct ICoreWebView2ClientCertificateVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClientCertificate_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClientCertificate_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClientCertificate_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClientCertificate_get_Subject(This,value) \ + ( (This)->lpVtbl -> get_Subject(This,value) ) + +#define ICoreWebView2ClientCertificate_get_Issuer(This,value) \ + ( (This)->lpVtbl -> get_Issuer(This,value) ) + +#define ICoreWebView2ClientCertificate_get_ValidFrom(This,value) \ + ( (This)->lpVtbl -> get_ValidFrom(This,value) ) + +#define ICoreWebView2ClientCertificate_get_ValidTo(This,value) \ + ( (This)->lpVtbl -> get_ValidTo(This,value) ) + +#define ICoreWebView2ClientCertificate_get_DerEncodedSerialNumber(This,value) \ + ( (This)->lpVtbl -> get_DerEncodedSerialNumber(This,value) ) + +#define ICoreWebView2ClientCertificate_get_DisplayName(This,value) \ + ( (This)->lpVtbl -> get_DisplayName(This,value) ) + +#define ICoreWebView2ClientCertificate_ToPemEncoding(This,pemEncodedData) \ + ( (This)->lpVtbl -> ToPemEncoding(This,pemEncodedData) ) + +#define ICoreWebView2ClientCertificate_get_PemEncodedIssuerCertificateChain(This,value) \ + ( (This)->lpVtbl -> get_PemEncodedIssuerCertificateChain(This,value) ) + +#define ICoreWebView2ClientCertificate_get_Kind(This,value) \ + ( (This)->lpVtbl -> get_Kind(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClientCertificate_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificateRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ClientCertificateRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClientCertificateRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificateRequestedEventArgs = {0xbc59db28,0xbcc3,0x11eb,{0x85,0x29,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bc59db28-bcc3-11eb-8529-0242ac130003") + ICoreWebView2ClientCertificateRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Host( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Port( + /* [retval][out] */ int *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsProxy( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AllowedCertificateAuthorities( + /* [retval][out] */ ICoreWebView2StringCollection **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MutuallyTrustedCertificates( + /* [retval][out] */ ICoreWebView2ClientCertificateCollection **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SelectedCertificate( + /* [retval][out] */ ICoreWebView2ClientCertificate **value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SelectedCertificate( + /* [in] */ ICoreWebView2ClientCertificate *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClientCertificateRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClientCertificateRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClientCertificateRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Host) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Host )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Port) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Port )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ int *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_IsProxy) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsProxy )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_AllowedCertificateAuthorities) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowedCertificateAuthorities )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2StringCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_MutuallyTrustedCertificates) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MutuallyTrustedCertificates )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2ClientCertificateCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_SelectedCertificate) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SelectedCertificate )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2ClientCertificate **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, put_SelectedCertificate) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SelectedCertificate )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [in] */ ICoreWebView2ClientCertificate *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ClientCertificateRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2ClientCertificateRequestedEventArgsVtbl; + + interface ICoreWebView2ClientCertificateRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2ClientCertificateRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClientCertificateRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_Host(This,value) \ + ( (This)->lpVtbl -> get_Host(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_Port(This,value) \ + ( (This)->lpVtbl -> get_Port(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_IsProxy(This,value) \ + ( (This)->lpVtbl -> get_IsProxy(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_AllowedCertificateAuthorities(This,value) \ + ( (This)->lpVtbl -> get_AllowedCertificateAuthorities(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_MutuallyTrustedCertificates(This,value) \ + ( (This)->lpVtbl -> get_MutuallyTrustedCertificates(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_SelectedCertificate(This,value) \ + ( (This)->lpVtbl -> get_SelectedCertificate(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_put_SelectedCertificate(This,value) \ + ( (This)->lpVtbl -> put_SelectedCertificate(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_Cancel(This,value) \ + ( (This)->lpVtbl -> get_Cancel(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_put_Cancel(This,value) \ + ( (This)->lpVtbl -> put_Cancel(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#define ICoreWebView2ClientCertificateRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClientCertificateRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2StringCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2StringCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2StringCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StringCollection = {0xf41f3f8a,0xbcc3,0x11eb,{0x85,0x29,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f41f3f8a-bcc3-11eb-8529-0242ac130003") + ICoreWebView2StringCollection : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2StringCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2StringCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2StringCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2StringCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2StringCollection, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2StringCollection * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2StringCollection, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2StringCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2StringCollectionVtbl; + + interface ICoreWebView2StringCollection + { + CONST_VTBL struct ICoreWebView2StringCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2StringCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2StringCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2StringCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2StringCollection_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2StringCollection_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2StringCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ClientCertificateCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2ClientCertificateCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClientCertificateCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificateCollection = {0xef5674d2,0xbcc3,0x11eb,{0x85,0x29,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ef5674d2-bcc3-11eb-8529-0242ac130003") + ICoreWebView2ClientCertificateCollection : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ClientCertificate **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClientCertificateCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClientCertificateCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClientCertificateCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClientCertificateCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateCollection, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ClientCertificateCollection * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateCollection, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ClientCertificateCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ClientCertificate **value); + + END_INTERFACE + } ICoreWebView2ClientCertificateCollectionVtbl; + + interface ICoreWebView2ClientCertificateCollection + { + CONST_VTBL struct ICoreWebView2ClientCertificateCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClientCertificateCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClientCertificateCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClientCertificateCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClientCertificateCollection_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ClientCertificateCollection_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClientCertificateCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController_INTERFACE_DEFINED__ +#define __ICoreWebView2CompositionController_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CompositionController */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController = {0x3df9b733,0xb9ae,0x4a15,{0x86,0xb4,0xeb,0x9e,0xe9,0x82,0x64,0x69}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3df9b733-b9ae-4a15-86b4-eb9ee9826469") + ICoreWebView2CompositionController : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RootVisualTarget( + /* [retval][out] */ IUnknown **target) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_RootVisualTarget( + /* [in] */ IUnknown *target) = 0; + + virtual HRESULT STDMETHODCALLTYPE SendMouseInput( + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + /* [in] */ UINT32 mouseData, + /* [in] */ POINT point) = 0; + + virtual HRESULT STDMETHODCALLTYPE SendPointerInput( + /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + /* [in] */ ICoreWebView2PointerInfo *pointerInfo) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cursor( + /* [retval][out] */ HCURSOR *cursor) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SystemCursorId( + /* [retval][out] */ UINT32 *systemCursorId) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_CursorChanged( + /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_CursorChanged( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CompositionControllerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CompositionController * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CompositionController * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CompositionController * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( + ICoreWebView2CompositionController * This, + /* [retval][out] */ IUnknown **target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( + ICoreWebView2CompositionController * This, + /* [in] */ IUnknown *target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) + HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( + ICoreWebView2CompositionController * This, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + /* [in] */ UINT32 mouseData, + /* [in] */ POINT point); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) + HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( + ICoreWebView2CompositionController * This, + /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( + ICoreWebView2CompositionController * This, + /* [retval][out] */ HCURSOR *cursor); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( + ICoreWebView2CompositionController * This, + /* [retval][out] */ UINT32 *systemCursorId); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( + ICoreWebView2CompositionController * This, + /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( + ICoreWebView2CompositionController * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2CompositionControllerVtbl; + + interface ICoreWebView2CompositionController + { + CONST_VTBL struct ICoreWebView2CompositionControllerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CompositionController_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CompositionController_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CompositionController_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CompositionController_get_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> get_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController_put_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> put_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController_SendMouseInput(This,eventKind,virtualKeys,mouseData,point) \ + ( (This)->lpVtbl -> SendMouseInput(This,eventKind,virtualKeys,mouseData,point) ) + +#define ICoreWebView2CompositionController_SendPointerInput(This,eventKind,pointerInfo) \ + ( (This)->lpVtbl -> SendPointerInput(This,eventKind,pointerInfo) ) + +#define ICoreWebView2CompositionController_get_Cursor(This,cursor) \ + ( (This)->lpVtbl -> get_Cursor(This,cursor) ) + +#define ICoreWebView2CompositionController_get_SystemCursorId(This,systemCursorId) \ + ( (This)->lpVtbl -> get_SystemCursorId(This,systemCursorId) ) + +#define ICoreWebView2CompositionController_add_CursorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CursorChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController_remove_CursorChanged(This,token) \ + ( (This)->lpVtbl -> remove_CursorChanged(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CompositionController_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CursorChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CursorChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CursorChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CursorChangedEventHandler = {0x9da43ccc,0x26e1,0x4dad,{0xb5,0x6c,0xd8,0x96,0x1c,0x94,0xc5,0x71}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9da43ccc-26e1-4dad-b56c-d8961c94c571") + ICoreWebView2CursorChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2CompositionController *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CursorChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CursorChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CursorChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CursorChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CursorChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CursorChangedEventHandler * This, + /* [in] */ ICoreWebView2CompositionController *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2CursorChangedEventHandlerVtbl; + + interface ICoreWebView2CursorChangedEventHandler + { + CONST_VTBL struct ICoreWebView2CursorChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CursorChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CursorChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CursorChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CursorChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CursorChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController2_INTERFACE_DEFINED__ +#define __ICoreWebView2CompositionController2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CompositionController2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController2 = {0x0b6a3d24,0x49cb,0x4806,{0xba,0x20,0xb5,0xe0,0x73,0x4a,0x7b,0x26}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0b6a3d24-49cb-4806-ba20-b5e0734a7b26") + ICoreWebView2CompositionController2 : public ICoreWebView2CompositionController + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AutomationProvider( + /* [retval][out] */ IUnknown **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CompositionController2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CompositionController2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CompositionController2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CompositionController2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( + ICoreWebView2CompositionController2 * This, + /* [retval][out] */ IUnknown **target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( + ICoreWebView2CompositionController2 * This, + /* [in] */ IUnknown *target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) + HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( + ICoreWebView2CompositionController2 * This, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + /* [in] */ UINT32 mouseData, + /* [in] */ POINT point); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) + HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( + ICoreWebView2CompositionController2 * This, + /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( + ICoreWebView2CompositionController2 * This, + /* [retval][out] */ HCURSOR *cursor); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( + ICoreWebView2CompositionController2 * This, + /* [retval][out] */ UINT32 *systemCursorId); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( + ICoreWebView2CompositionController2 * This, + /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( + ICoreWebView2CompositionController2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController2, get_AutomationProvider) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AutomationProvider )( + ICoreWebView2CompositionController2 * This, + /* [retval][out] */ IUnknown **value); + + END_INTERFACE + } ICoreWebView2CompositionController2Vtbl; + + interface ICoreWebView2CompositionController2 + { + CONST_VTBL struct ICoreWebView2CompositionController2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CompositionController2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CompositionController2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CompositionController2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CompositionController2_get_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> get_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController2_put_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> put_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController2_SendMouseInput(This,eventKind,virtualKeys,mouseData,point) \ + ( (This)->lpVtbl -> SendMouseInput(This,eventKind,virtualKeys,mouseData,point) ) + +#define ICoreWebView2CompositionController2_SendPointerInput(This,eventKind,pointerInfo) \ + ( (This)->lpVtbl -> SendPointerInput(This,eventKind,pointerInfo) ) + +#define ICoreWebView2CompositionController2_get_Cursor(This,cursor) \ + ( (This)->lpVtbl -> get_Cursor(This,cursor) ) + +#define ICoreWebView2CompositionController2_get_SystemCursorId(This,systemCursorId) \ + ( (This)->lpVtbl -> get_SystemCursorId(This,systemCursorId) ) + +#define ICoreWebView2CompositionController2_add_CursorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CursorChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController2_remove_CursorChanged(This,token) \ + ( (This)->lpVtbl -> remove_CursorChanged(This,token) ) + + +#define ICoreWebView2CompositionController2_get_AutomationProvider(This,value) \ + ( (This)->lpVtbl -> get_AutomationProvider(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CompositionController2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController3_INTERFACE_DEFINED__ +#define __ICoreWebView2CompositionController3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CompositionController3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController3 = {0x9570570e,0x4d76,0x4361,{0x9e,0xe1,0xf0,0x4d,0x0d,0xbd,0xfb,0x1e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9570570e-4d76-4361-9ee1-f04d0dbdfb1e") + ICoreWebView2CompositionController3 : public ICoreWebView2CompositionController2 + { + public: + virtual HRESULT STDMETHODCALLTYPE DragEnter( + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect) = 0; + + virtual HRESULT STDMETHODCALLTYPE DragLeave( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE DragOver( + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect) = 0; + + virtual HRESULT STDMETHODCALLTYPE Drop( + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CompositionController3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CompositionController3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CompositionController3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CompositionController3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ IUnknown **target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( + ICoreWebView2CompositionController3 * This, + /* [in] */ IUnknown *target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) + HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( + ICoreWebView2CompositionController3 * This, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + /* [in] */ UINT32 mouseData, + /* [in] */ POINT point); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) + HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( + ICoreWebView2CompositionController3 * This, + /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ HCURSOR *cursor); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ UINT32 *systemCursorId); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( + ICoreWebView2CompositionController3 * This, + /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( + ICoreWebView2CompositionController3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController2, get_AutomationProvider) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AutomationProvider )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragEnter) + HRESULT ( STDMETHODCALLTYPE *DragEnter )( + ICoreWebView2CompositionController3 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragLeave) + HRESULT ( STDMETHODCALLTYPE *DragLeave )( + ICoreWebView2CompositionController3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragOver) + HRESULT ( STDMETHODCALLTYPE *DragOver )( + ICoreWebView2CompositionController3 * This, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, Drop) + HRESULT ( STDMETHODCALLTYPE *Drop )( + ICoreWebView2CompositionController3 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + END_INTERFACE + } ICoreWebView2CompositionController3Vtbl; + + interface ICoreWebView2CompositionController3 + { + CONST_VTBL struct ICoreWebView2CompositionController3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CompositionController3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CompositionController3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CompositionController3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CompositionController3_get_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> get_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController3_put_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> put_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController3_SendMouseInput(This,eventKind,virtualKeys,mouseData,point) \ + ( (This)->lpVtbl -> SendMouseInput(This,eventKind,virtualKeys,mouseData,point) ) + +#define ICoreWebView2CompositionController3_SendPointerInput(This,eventKind,pointerInfo) \ + ( (This)->lpVtbl -> SendPointerInput(This,eventKind,pointerInfo) ) + +#define ICoreWebView2CompositionController3_get_Cursor(This,cursor) \ + ( (This)->lpVtbl -> get_Cursor(This,cursor) ) + +#define ICoreWebView2CompositionController3_get_SystemCursorId(This,systemCursorId) \ + ( (This)->lpVtbl -> get_SystemCursorId(This,systemCursorId) ) + +#define ICoreWebView2CompositionController3_add_CursorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CursorChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController3_remove_CursorChanged(This,token) \ + ( (This)->lpVtbl -> remove_CursorChanged(This,token) ) + + +#define ICoreWebView2CompositionController3_get_AutomationProvider(This,value) \ + ( (This)->lpVtbl -> get_AutomationProvider(This,value) ) + + +#define ICoreWebView2CompositionController3_DragEnter(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> DragEnter(This,dataObject,keyState,point,effect) ) + +#define ICoreWebView2CompositionController3_DragLeave(This) \ + ( (This)->lpVtbl -> DragLeave(This) ) + +#define ICoreWebView2CompositionController3_DragOver(This,keyState,point,effect) \ + ( (This)->lpVtbl -> DragOver(This,keyState,point,effect) ) + +#define ICoreWebView2CompositionController3_Drop(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> Drop(This,dataObject,keyState,point,effect) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CompositionController3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController4_INTERFACE_DEFINED__ +#define __ICoreWebView2CompositionController4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CompositionController4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController4 = {0x7C367B9B,0x3D2B,0x450F,{0x9E,0x58,0xD6,0x1A,0x20,0xF4,0x86,0xAA}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7C367B9B-3D2B-450F-9E58-D61A20F486AA") + ICoreWebView2CompositionController4 : public ICoreWebView2CompositionController3 + { + public: + virtual HRESULT STDMETHODCALLTYPE GetNonClientRegionAtPoint( + /* [in] */ POINT point, + /* [retval][out] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE QueryNonClientRegion( + /* [in] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND kind, + /* [retval][out] */ ICoreWebView2RegionRectCollectionView **rects) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NonClientRegionChanged( + /* [in] */ ICoreWebView2NonClientRegionChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NonClientRegionChanged( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CompositionController4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CompositionController4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CompositionController4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CompositionController4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( + ICoreWebView2CompositionController4 * This, + /* [retval][out] */ IUnknown **target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( + ICoreWebView2CompositionController4 * This, + /* [in] */ IUnknown *target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) + HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( + ICoreWebView2CompositionController4 * This, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + /* [in] */ UINT32 mouseData, + /* [in] */ POINT point); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) + HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( + ICoreWebView2CompositionController4 * This, + /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( + ICoreWebView2CompositionController4 * This, + /* [retval][out] */ HCURSOR *cursor); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( + ICoreWebView2CompositionController4 * This, + /* [retval][out] */ UINT32 *systemCursorId); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( + ICoreWebView2CompositionController4 * This, + /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( + ICoreWebView2CompositionController4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController2, get_AutomationProvider) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AutomationProvider )( + ICoreWebView2CompositionController4 * This, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragEnter) + HRESULT ( STDMETHODCALLTYPE *DragEnter )( + ICoreWebView2CompositionController4 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragLeave) + HRESULT ( STDMETHODCALLTYPE *DragLeave )( + ICoreWebView2CompositionController4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragOver) + HRESULT ( STDMETHODCALLTYPE *DragOver )( + ICoreWebView2CompositionController4 * This, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, Drop) + HRESULT ( STDMETHODCALLTYPE *Drop )( + ICoreWebView2CompositionController4 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, GetNonClientRegionAtPoint) + HRESULT ( STDMETHODCALLTYPE *GetNonClientRegionAtPoint )( + ICoreWebView2CompositionController4 * This, + /* [in] */ POINT point, + /* [retval][out] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, QueryNonClientRegion) + HRESULT ( STDMETHODCALLTYPE *QueryNonClientRegion )( + ICoreWebView2CompositionController4 * This, + /* [in] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND kind, + /* [retval][out] */ ICoreWebView2RegionRectCollectionView **rects); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, add_NonClientRegionChanged) + HRESULT ( STDMETHODCALLTYPE *add_NonClientRegionChanged )( + ICoreWebView2CompositionController4 * This, + /* [in] */ ICoreWebView2NonClientRegionChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, remove_NonClientRegionChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NonClientRegionChanged )( + ICoreWebView2CompositionController4 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2CompositionController4Vtbl; + + interface ICoreWebView2CompositionController4 + { + CONST_VTBL struct ICoreWebView2CompositionController4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CompositionController4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CompositionController4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CompositionController4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CompositionController4_get_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> get_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController4_put_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> put_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController4_SendMouseInput(This,eventKind,virtualKeys,mouseData,point) \ + ( (This)->lpVtbl -> SendMouseInput(This,eventKind,virtualKeys,mouseData,point) ) + +#define ICoreWebView2CompositionController4_SendPointerInput(This,eventKind,pointerInfo) \ + ( (This)->lpVtbl -> SendPointerInput(This,eventKind,pointerInfo) ) + +#define ICoreWebView2CompositionController4_get_Cursor(This,cursor) \ + ( (This)->lpVtbl -> get_Cursor(This,cursor) ) + +#define ICoreWebView2CompositionController4_get_SystemCursorId(This,systemCursorId) \ + ( (This)->lpVtbl -> get_SystemCursorId(This,systemCursorId) ) + +#define ICoreWebView2CompositionController4_add_CursorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CursorChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController4_remove_CursorChanged(This,token) \ + ( (This)->lpVtbl -> remove_CursorChanged(This,token) ) + + +#define ICoreWebView2CompositionController4_get_AutomationProvider(This,value) \ + ( (This)->lpVtbl -> get_AutomationProvider(This,value) ) + + +#define ICoreWebView2CompositionController4_DragEnter(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> DragEnter(This,dataObject,keyState,point,effect) ) + +#define ICoreWebView2CompositionController4_DragLeave(This) \ + ( (This)->lpVtbl -> DragLeave(This) ) + +#define ICoreWebView2CompositionController4_DragOver(This,keyState,point,effect) \ + ( (This)->lpVtbl -> DragOver(This,keyState,point,effect) ) + +#define ICoreWebView2CompositionController4_Drop(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> Drop(This,dataObject,keyState,point,effect) ) + + +#define ICoreWebView2CompositionController4_GetNonClientRegionAtPoint(This,point,value) \ + ( (This)->lpVtbl -> GetNonClientRegionAtPoint(This,point,value) ) + +#define ICoreWebView2CompositionController4_QueryNonClientRegion(This,kind,rects) \ + ( (This)->lpVtbl -> QueryNonClientRegion(This,kind,rects) ) + +#define ICoreWebView2CompositionController4_add_NonClientRegionChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NonClientRegionChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController4_remove_NonClientRegionChanged(This,token) \ + ( (This)->lpVtbl -> remove_NonClientRegionChanged(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CompositionController4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NonClientRegionChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NonClientRegionChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NonClientRegionChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NonClientRegionChangedEventHandler = {0x4a794e66,0xaa6c,0x46bd,{0x93,0xa3,0x38,0x21,0x96,0x83,0x76,0x80}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4a794e66-aa6c-46bd-93a3-382196837680") + ICoreWebView2NonClientRegionChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2CompositionController *sender, + /* [in] */ ICoreWebView2NonClientRegionChangedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NonClientRegionChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NonClientRegionChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NonClientRegionChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NonClientRegionChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NonClientRegionChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NonClientRegionChangedEventHandler * This, + /* [in] */ ICoreWebView2CompositionController *sender, + /* [in] */ ICoreWebView2NonClientRegionChangedEventArgs *args); + + END_INTERFACE + } ICoreWebView2NonClientRegionChangedEventHandlerVtbl; + + interface ICoreWebView2NonClientRegionChangedEventHandler + { + CONST_VTBL struct ICoreWebView2NonClientRegionChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NonClientRegionChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NonClientRegionChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NonClientRegionChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NonClientRegionChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NonClientRegionChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2RegionRectCollectionView_INTERFACE_DEFINED__ +#define __ICoreWebView2RegionRectCollectionView_INTERFACE_DEFINED__ + +/* interface ICoreWebView2RegionRectCollectionView */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2RegionRectCollectionView = {0x333353b8,0x48bf,0x4449,{0x8f,0xcc,0x22,0x69,0x7f,0xaf,0x57,0x53}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("333353b8-48bf-4449-8fcc-22697faf5753") + ICoreWebView2RegionRectCollectionView : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ RECT *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2RegionRectCollectionViewVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2RegionRectCollectionView * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2RegionRectCollectionView * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2RegionRectCollectionView * This); + + DECLSPEC_XFGVIRT(ICoreWebView2RegionRectCollectionView, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2RegionRectCollectionView * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2RegionRectCollectionView, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2RegionRectCollectionView * This, + /* [in] */ UINT32 index, + /* [retval][out] */ RECT *value); + + END_INTERFACE + } ICoreWebView2RegionRectCollectionViewVtbl; + + interface ICoreWebView2RegionRectCollectionView + { + CONST_VTBL struct ICoreWebView2RegionRectCollectionViewVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2RegionRectCollectionView_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2RegionRectCollectionView_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2RegionRectCollectionView_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2RegionRectCollectionView_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2RegionRectCollectionView_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2RegionRectCollectionView_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CompositionController5_INTERFACE_DEFINED__ +#define __ICoreWebView2CompositionController5_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CompositionController5 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController5 = {0x8d0f82eb,0x7c33,0x5a4c,{0x91,0x08,0x84,0xca,0x28,0xcc,0xc3,0xb4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8d0f82eb-7c33-5a4c-9108-84ca28ccc3b4") + ICoreWebView2CompositionController5 : public ICoreWebView2CompositionController4 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_DragStarting( + /* [in] */ ICoreWebView2DragStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DragStarting( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CompositionController5Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CompositionController5 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CompositionController5 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CompositionController5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( + ICoreWebView2CompositionController5 * This, + /* [retval][out] */ IUnknown **target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( + ICoreWebView2CompositionController5 * This, + /* [in] */ IUnknown *target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) + HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( + ICoreWebView2CompositionController5 * This, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + /* [in] */ UINT32 mouseData, + /* [in] */ POINT point); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) + HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( + ICoreWebView2CompositionController5 * This, + /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( + ICoreWebView2CompositionController5 * This, + /* [retval][out] */ HCURSOR *cursor); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( + ICoreWebView2CompositionController5 * This, + /* [retval][out] */ UINT32 *systemCursorId); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( + ICoreWebView2CompositionController5 * This, + /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( + ICoreWebView2CompositionController5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController2, get_AutomationProvider) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AutomationProvider )( + ICoreWebView2CompositionController5 * This, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragEnter) + HRESULT ( STDMETHODCALLTYPE *DragEnter )( + ICoreWebView2CompositionController5 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragLeave) + HRESULT ( STDMETHODCALLTYPE *DragLeave )( + ICoreWebView2CompositionController5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragOver) + HRESULT ( STDMETHODCALLTYPE *DragOver )( + ICoreWebView2CompositionController5 * This, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, Drop) + HRESULT ( STDMETHODCALLTYPE *Drop )( + ICoreWebView2CompositionController5 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, GetNonClientRegionAtPoint) + HRESULT ( STDMETHODCALLTYPE *GetNonClientRegionAtPoint )( + ICoreWebView2CompositionController5 * This, + /* [in] */ POINT point, + /* [retval][out] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, QueryNonClientRegion) + HRESULT ( STDMETHODCALLTYPE *QueryNonClientRegion )( + ICoreWebView2CompositionController5 * This, + /* [in] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND kind, + /* [retval][out] */ ICoreWebView2RegionRectCollectionView **rects); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, add_NonClientRegionChanged) + HRESULT ( STDMETHODCALLTYPE *add_NonClientRegionChanged )( + ICoreWebView2CompositionController5 * This, + /* [in] */ ICoreWebView2NonClientRegionChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController4, remove_NonClientRegionChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NonClientRegionChanged )( + ICoreWebView2CompositionController5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController5, add_DragStarting) + HRESULT ( STDMETHODCALLTYPE *add_DragStarting )( + ICoreWebView2CompositionController5 * This, + /* [in] */ ICoreWebView2DragStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController5, remove_DragStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DragStarting )( + ICoreWebView2CompositionController5 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2CompositionController5Vtbl; + + interface ICoreWebView2CompositionController5 + { + CONST_VTBL struct ICoreWebView2CompositionController5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CompositionController5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CompositionController5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CompositionController5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CompositionController5_get_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> get_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController5_put_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> put_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController5_SendMouseInput(This,eventKind,virtualKeys,mouseData,point) \ + ( (This)->lpVtbl -> SendMouseInput(This,eventKind,virtualKeys,mouseData,point) ) + +#define ICoreWebView2CompositionController5_SendPointerInput(This,eventKind,pointerInfo) \ + ( (This)->lpVtbl -> SendPointerInput(This,eventKind,pointerInfo) ) + +#define ICoreWebView2CompositionController5_get_Cursor(This,cursor) \ + ( (This)->lpVtbl -> get_Cursor(This,cursor) ) + +#define ICoreWebView2CompositionController5_get_SystemCursorId(This,systemCursorId) \ + ( (This)->lpVtbl -> get_SystemCursorId(This,systemCursorId) ) + +#define ICoreWebView2CompositionController5_add_CursorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CursorChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController5_remove_CursorChanged(This,token) \ + ( (This)->lpVtbl -> remove_CursorChanged(This,token) ) + + +#define ICoreWebView2CompositionController5_get_AutomationProvider(This,value) \ + ( (This)->lpVtbl -> get_AutomationProvider(This,value) ) + + +#define ICoreWebView2CompositionController5_DragEnter(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> DragEnter(This,dataObject,keyState,point,effect) ) + +#define ICoreWebView2CompositionController5_DragLeave(This) \ + ( (This)->lpVtbl -> DragLeave(This) ) + +#define ICoreWebView2CompositionController5_DragOver(This,keyState,point,effect) \ + ( (This)->lpVtbl -> DragOver(This,keyState,point,effect) ) + +#define ICoreWebView2CompositionController5_Drop(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> Drop(This,dataObject,keyState,point,effect) ) + + +#define ICoreWebView2CompositionController5_GetNonClientRegionAtPoint(This,point,value) \ + ( (This)->lpVtbl -> GetNonClientRegionAtPoint(This,point,value) ) + +#define ICoreWebView2CompositionController5_QueryNonClientRegion(This,kind,rects) \ + ( (This)->lpVtbl -> QueryNonClientRegion(This,kind,rects) ) + +#define ICoreWebView2CompositionController5_add_NonClientRegionChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NonClientRegionChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController5_remove_NonClientRegionChanged(This,token) \ + ( (This)->lpVtbl -> remove_NonClientRegionChanged(This,token) ) + + +#define ICoreWebView2CompositionController5_add_DragStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DragStarting(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController5_remove_DragStarting(This,token) \ + ( (This)->lpVtbl -> remove_DragStarting(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CompositionController5_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DragStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DragStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DragStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DragStartingEventHandler = {0x3b149321,0x83c3,0x5d1f,{0xb0,0x3f,0xa4,0x28,0x99,0xbc,0x1c,0x15}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3b149321-83c3-5d1f-b03f-a42899bc1c15") + ICoreWebView2DragStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2CompositionController *sender, + /* [in] */ ICoreWebView2DragStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DragStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DragStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DragStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DragStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DragStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DragStartingEventHandler * This, + /* [in] */ ICoreWebView2CompositionController *sender, + /* [in] */ ICoreWebView2DragStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2DragStartingEventHandlerVtbl; + + interface ICoreWebView2DragStartingEventHandler + { + CONST_VTBL struct ICoreWebView2DragStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DragStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DragStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DragStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DragStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DragStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContentLoadingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContentLoadingEventArgs = {0x0c8a1275,0x9b6b,0x4901,{0x87,0xad,0x70,0xdf,0x25,0xba,0xfa,0x6e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0c8a1275-9b6b-4901-87ad-70df25bafa6e") + ICoreWebView2ContentLoadingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsErrorPage( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationId( + /* [retval][out] */ UINT64 *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContentLoadingEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContentLoadingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContentLoadingEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContentLoadingEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContentLoadingEventArgs, get_IsErrorPage) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsErrorPage )( + ICoreWebView2ContentLoadingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContentLoadingEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2ContentLoadingEventArgs * This, + /* [retval][out] */ UINT64 *value); + + END_INTERFACE + } ICoreWebView2ContentLoadingEventArgsVtbl; + + interface ICoreWebView2ContentLoadingEventArgs + { + CONST_VTBL struct ICoreWebView2ContentLoadingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContentLoadingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContentLoadingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContentLoadingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContentLoadingEventArgs_get_IsErrorPage(This,value) \ + ( (This)->lpVtbl -> get_IsErrorPage(This,value) ) + +#define ICoreWebView2ContentLoadingEventArgs_get_NavigationId(This,value) \ + ( (This)->lpVtbl -> get_NavigationId(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuItem_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuItem_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuItem */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuItem = {0x7aed49e3,0xa93f,0x497a,{0x81,0x1c,0x74,0x9c,0x6b,0x6b,0x6c,0x65}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7aed49e3-a93f-497a-811c-749c6b6b6c65") + ICoreWebView2ContextMenuItem : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Label( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CommandId( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShortcutKeyDescription( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Icon( + /* [retval][out] */ IStream **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsEnabled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsChecked( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsChecked( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Children( + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_CustomItemSelected( + /* [in] */ ICoreWebView2CustomItemSelectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_CustomItemSelected( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuItemVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuItem * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuItem * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Label) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Label )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_CommandId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CommandId )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_ShortcutKeyDescription) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShortcutKeyDescription )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Icon) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Icon )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ IStream **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, put_IsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsEnabled )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_IsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsEnabled )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, put_IsChecked) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsChecked )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_IsChecked) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsChecked )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Children) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Children )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, add_CustomItemSelected) + HRESULT ( STDMETHODCALLTYPE *add_CustomItemSelected )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ ICoreWebView2CustomItemSelectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, remove_CustomItemSelected) + HRESULT ( STDMETHODCALLTYPE *remove_CustomItemSelected )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2ContextMenuItemVtbl; + + interface ICoreWebView2ContextMenuItem + { + CONST_VTBL struct ICoreWebView2ContextMenuItemVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuItem_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuItem_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuItem_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuItem_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Label(This,value) \ + ( (This)->lpVtbl -> get_Label(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_CommandId(This,value) \ + ( (This)->lpVtbl -> get_CommandId(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_ShortcutKeyDescription(This,value) \ + ( (This)->lpVtbl -> get_ShortcutKeyDescription(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Icon(This,value) \ + ( (This)->lpVtbl -> get_Icon(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Kind(This,value) \ + ( (This)->lpVtbl -> get_Kind(This,value) ) + +#define ICoreWebView2ContextMenuItem_put_IsEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsEnabled(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_IsEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsEnabled(This,value) ) + +#define ICoreWebView2ContextMenuItem_put_IsChecked(This,value) \ + ( (This)->lpVtbl -> put_IsChecked(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_IsChecked(This,value) \ + ( (This)->lpVtbl -> get_IsChecked(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Children(This,value) \ + ( (This)->lpVtbl -> get_Children(This,value) ) + +#define ICoreWebView2ContextMenuItem_add_CustomItemSelected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CustomItemSelected(This,eventHandler,token) ) + +#define ICoreWebView2ContextMenuItem_remove_CustomItemSelected(This,token) \ + ( (This)->lpVtbl -> remove_CustomItemSelected(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuItem_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CustomItemSelectedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CustomItemSelectedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CustomItemSelectedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CustomItemSelectedEventHandler = {0x49e1d0bc,0xfe9e,0x4481,{0xb7,0xc2,0x32,0x32,0x4a,0xa2,0x19,0x98}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("49e1d0bc-fe9e-4481-b7c2-32324aa21998") + ICoreWebView2CustomItemSelectedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2ContextMenuItem *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CustomItemSelectedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CustomItemSelectedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CustomItemSelectedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CustomItemSelectedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomItemSelectedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CustomItemSelectedEventHandler * This, + /* [in] */ ICoreWebView2ContextMenuItem *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2CustomItemSelectedEventHandlerVtbl; + + interface ICoreWebView2CustomItemSelectedEventHandler + { + CONST_VTBL struct ICoreWebView2CustomItemSelectedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CustomItemSelectedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CustomItemSelectedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CustomItemSelectedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CustomItemSelectedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CustomItemSelectedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuItemCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuItemCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuItemCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuItemCollection = {0xf562a2f5,0xc415,0x45cf,{0xb9,0x09,0xd4,0xb7,0xc1,0xe2,0x76,0xd3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f562a2f5-c415-45cf-b909-d4b7c1e276d3") + ICoreWebView2ContextMenuItemCollection : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveValueAtIndex( + /* [in] */ UINT32 index) = 0; + + virtual HRESULT STDMETHODCALLTYPE InsertValueAtIndex( + /* [in] */ UINT32 index, + /* [in] */ ICoreWebView2ContextMenuItem *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuItemCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuItemCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuItemCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ContextMenuItemCollection * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, RemoveValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *RemoveValueAtIndex )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ UINT32 index); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, InsertValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *InsertValueAtIndex )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ UINT32 index, + /* [in] */ ICoreWebView2ContextMenuItem *value); + + END_INTERFACE + } ICoreWebView2ContextMenuItemCollectionVtbl; + + interface ICoreWebView2ContextMenuItemCollection + { + CONST_VTBL struct ICoreWebView2ContextMenuItemCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuItemCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuItemCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuItemCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuItemCollection_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ContextMenuItemCollection_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#define ICoreWebView2ContextMenuItemCollection_RemoveValueAtIndex(This,index) \ + ( (This)->lpVtbl -> RemoveValueAtIndex(This,index) ) + +#define ICoreWebView2ContextMenuItemCollection_InsertValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> InsertValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuItemCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuRequestedEventArgs = {0xa1d309ee,0xc03f,0x11eb,{0x85,0x29,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a1d309ee-c03f-11eb-8529-0242ac130003") + ICoreWebView2ContextMenuRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MenuItems( + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ContextMenuTarget( + /* [retval][out] */ ICoreWebView2ContextMenuTarget **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Location( + /* [retval][out] */ POINT *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SelectedCommandId( + /* [in] */ INT32 value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SelectedCommandId( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_MenuItems) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MenuItems )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_ContextMenuTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContextMenuTarget )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2ContextMenuTarget **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_Location) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Location )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, put_SelectedCommandId) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SelectedCommandId )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [in] */ INT32 value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_SelectedCommandId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SelectedCommandId )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2ContextMenuRequestedEventArgsVtbl; + + interface ICoreWebView2ContextMenuRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2ContextMenuRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_MenuItems(This,value) \ + ( (This)->lpVtbl -> get_MenuItems(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_ContextMenuTarget(This,value) \ + ( (This)->lpVtbl -> get_ContextMenuTarget(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_Location(This,value) \ + ( (This)->lpVtbl -> get_Location(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_put_SelectedCommandId(This,value) \ + ( (This)->lpVtbl -> put_SelectedCommandId(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_SelectedCommandId(This,value) \ + ( (This)->lpVtbl -> get_SelectedCommandId(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuTarget_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuTarget_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuTarget */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuTarget = {0xb8611d99,0xeed6,0x4f3f,{0x90,0x2c,0xa1,0x98,0x50,0x2a,0xd4,0x72}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b8611d99-eed6-4f3f-902c-a198502ad472") + ICoreWebView2ContextMenuTarget : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsEditable( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsRequestedForMainFrame( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PageUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasLinkUri( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_LinkUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasLinkText( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_LinkText( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasSourceUri( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SourceUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasSelection( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SelectionText( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuTargetVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuTarget * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuTarget * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuTarget * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_IsEditable) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsEditable )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_IsRequestedForMainFrame) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRequestedForMainFrame )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_PageUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_FrameUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasLinkUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasLinkUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_LinkUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_LinkUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasLinkText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasLinkText )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_LinkText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_LinkText )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasSourceUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasSourceUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_SourceUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SourceUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasSelection) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasSelection )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_SelectionText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SelectionText )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2ContextMenuTargetVtbl; + + interface ICoreWebView2ContextMenuTarget + { + CONST_VTBL struct ICoreWebView2ContextMenuTargetVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuTarget_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuTarget_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuTarget_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuTarget_get_Kind(This,value) \ + ( (This)->lpVtbl -> get_Kind(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_IsEditable(This,value) \ + ( (This)->lpVtbl -> get_IsEditable(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_IsRequestedForMainFrame(This,value) \ + ( (This)->lpVtbl -> get_IsRequestedForMainFrame(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_PageUri(This,value) \ + ( (This)->lpVtbl -> get_PageUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_FrameUri(This,value) \ + ( (This)->lpVtbl -> get_FrameUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasLinkUri(This,value) \ + ( (This)->lpVtbl -> get_HasLinkUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_LinkUri(This,value) \ + ( (This)->lpVtbl -> get_LinkUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasLinkText(This,value) \ + ( (This)->lpVtbl -> get_HasLinkText(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_LinkText(This,value) \ + ( (This)->lpVtbl -> get_LinkText(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasSourceUri(This,value) \ + ( (This)->lpVtbl -> get_HasSourceUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_SourceUri(This,value) \ + ( (This)->lpVtbl -> get_SourceUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasSelection(This,value) \ + ( (This)->lpVtbl -> get_HasSelection(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_SelectionText(This,value) \ + ( (This)->lpVtbl -> get_SelectionText(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuTarget_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller_INTERFACE_DEFINED__ +#define __ICoreWebView2Controller_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Controller */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller = {0x4d00c0d1,0x9434,0x4eb6,{0x80,0x78,0x86,0x97,0xa5,0x60,0x33,0x4f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4d00c0d1-9434-4eb6-8078-8697a560334f") + ICoreWebView2Controller : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsVisible( + /* [retval][out] */ BOOL *isVisible) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsVisible( + /* [in] */ BOOL isVisible) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Bounds( + /* [retval][out] */ RECT *bounds) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Bounds( + /* [in] */ RECT bounds) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ZoomFactor( + /* [retval][out] */ double *zoomFactor) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ZoomFactor( + /* [in] */ double zoomFactor) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ZoomFactorChanged( + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ZoomFactorChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetBoundsAndZoomFactor( + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveFocus( + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_MoveFocusRequested( + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_MoveFocusRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_GotFocus( + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_GotFocus( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_LostFocus( + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_LostFocus( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_AcceleratorKeyPressed( + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_AcceleratorKeyPressed( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ParentWindow( + /* [retval][out] */ HWND *parentWindow) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ParentWindow( + /* [in] */ HWND parentWindow) = 0; + + virtual HRESULT STDMETHODCALLTYPE NotifyParentWindowPositionChanged( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CoreWebView2( + /* [retval][out] */ ICoreWebView2 **coreWebView2) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ControllerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Controller * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Controller * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Controller * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( + ICoreWebView2Controller * This, + /* [retval][out] */ BOOL *isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( + ICoreWebView2Controller * This, + /* [in] */ BOOL isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( + ICoreWebView2Controller * This, + /* [retval][out] */ RECT *bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( + ICoreWebView2Controller * This, + /* [in] */ RECT bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( + ICoreWebView2Controller * This, + /* [retval][out] */ double *zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( + ICoreWebView2Controller * This, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) + HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( + ICoreWebView2Controller * This, + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) + HRESULT ( STDMETHODCALLTYPE *MoveFocus )( + ICoreWebView2Controller * This, + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) + HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) + HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) + HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) + HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( + ICoreWebView2Controller * This, + /* [retval][out] */ HWND *parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( + ICoreWebView2Controller * This, + /* [in] */ HWND parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) + HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( + ICoreWebView2Controller * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ICoreWebView2Controller * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( + ICoreWebView2Controller * This, + /* [retval][out] */ ICoreWebView2 **coreWebView2); + + END_INTERFACE + } ICoreWebView2ControllerVtbl; + + interface ICoreWebView2Controller + { + CONST_VTBL struct ICoreWebView2ControllerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Controller_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Controller_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Controller_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Controller_get_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> get_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller_put_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> put_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller_get_Bounds(This,bounds) \ + ( (This)->lpVtbl -> get_Bounds(This,bounds) ) + +#define ICoreWebView2Controller_put_Bounds(This,bounds) \ + ( (This)->lpVtbl -> put_Bounds(This,bounds) ) + +#define ICoreWebView2Controller_get_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> get_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller_put_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> put_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller_add_ZoomFactorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ZoomFactorChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_ZoomFactorChanged(This,token) \ + ( (This)->lpVtbl -> remove_ZoomFactorChanged(This,token) ) + +#define ICoreWebView2Controller_SetBoundsAndZoomFactor(This,bounds,zoomFactor) \ + ( (This)->lpVtbl -> SetBoundsAndZoomFactor(This,bounds,zoomFactor) ) + +#define ICoreWebView2Controller_MoveFocus(This,reason) \ + ( (This)->lpVtbl -> MoveFocus(This,reason) ) + +#define ICoreWebView2Controller_add_MoveFocusRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_MoveFocusRequested(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_MoveFocusRequested(This,token) \ + ( (This)->lpVtbl -> remove_MoveFocusRequested(This,token) ) + +#define ICoreWebView2Controller_add_GotFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_GotFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_GotFocus(This,token) \ + ( (This)->lpVtbl -> remove_GotFocus(This,token) ) + +#define ICoreWebView2Controller_add_LostFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LostFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_LostFocus(This,token) \ + ( (This)->lpVtbl -> remove_LostFocus(This,token) ) + +#define ICoreWebView2Controller_add_AcceleratorKeyPressed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_AcceleratorKeyPressed(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_AcceleratorKeyPressed(This,token) \ + ( (This)->lpVtbl -> remove_AcceleratorKeyPressed(This,token) ) + +#define ICoreWebView2Controller_get_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> get_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller_put_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> put_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller_NotifyParentWindowPositionChanged(This) \ + ( (This)->lpVtbl -> NotifyParentWindowPositionChanged(This) ) + +#define ICoreWebView2Controller_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ICoreWebView2Controller_get_CoreWebView2(This,coreWebView2) \ + ( (This)->lpVtbl -> get_CoreWebView2(This,coreWebView2) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Controller_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2AcceleratorKeyPressedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2AcceleratorKeyPressedEventHandler = {0xb29c7e28,0xfa79,0x41a8,{0x8e,0x44,0x65,0x81,0x1c,0x76,0xdc,0xb2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b29c7e28-fa79-41a8-8e44-65811c76dcb2") + ICoreWebView2AcceleratorKeyPressedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2AcceleratorKeyPressedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventArgs *args); + + END_INTERFACE + } ICoreWebView2AcceleratorKeyPressedEventHandlerVtbl; + + interface ICoreWebView2AcceleratorKeyPressedEventHandler + { + CONST_VTBL struct ICoreWebView2AcceleratorKeyPressedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FocusChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FocusChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FocusChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FocusChangedEventHandler = {0x05ea24bd,0x6452,0x4926,{0x90,0x14,0x4b,0x82,0xb4,0x98,0x13,0x5d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("05ea24bd-6452-4926-9014-4b82b498135d") + ICoreWebView2FocusChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FocusChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FocusChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FocusChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FocusChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FocusChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FocusChangedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FocusChangedEventHandlerVtbl; + + interface ICoreWebView2FocusChangedEventHandler + { + CONST_VTBL struct ICoreWebView2FocusChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FocusChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FocusChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FocusChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FocusChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FocusChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2MoveFocusRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2MoveFocusRequestedEventHandler = {0x69035451,0x6dc7,0x4cb8,{0x9b,0xce,0xb2,0xbd,0x70,0xad,0x28,0x9f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("69035451-6dc7-4cb8-9bce-b2bd70ad289f") + ICoreWebView2MoveFocusRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2MoveFocusRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2MoveFocusRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2MoveFocusRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2MoveFocusRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2MoveFocusRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2MoveFocusRequestedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2MoveFocusRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2MoveFocusRequestedEventHandlerVtbl; + + interface ICoreWebView2MoveFocusRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2MoveFocusRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2MoveFocusRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2MoveFocusRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2MoveFocusRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2MoveFocusRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2MoveFocusRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ZoomFactorChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ZoomFactorChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ZoomFactorChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ZoomFactorChangedEventHandler = {0xb52d71d6,0xc4df,0x4543,{0xa9,0x0c,0x64,0xa3,0xe6,0x0f,0x38,0xcb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b52d71d6-c4df-4543-a90c-64a3e60f38cb") + ICoreWebView2ZoomFactorChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ZoomFactorChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ZoomFactorChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ZoomFactorChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ZoomFactorChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ZoomFactorChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ZoomFactorChangedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ZoomFactorChangedEventHandlerVtbl; + + interface ICoreWebView2ZoomFactorChangedEventHandler + { + CONST_VTBL struct ICoreWebView2ZoomFactorChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ZoomFactorChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ZoomFactorChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ZoomFactorChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ZoomFactorChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ZoomFactorChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller2_INTERFACE_DEFINED__ +#define __ICoreWebView2Controller2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Controller2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller2 = {0xc979903e,0xd4ca,0x4228,{0x92,0xeb,0x47,0xee,0x3f,0xa9,0x6e,0xab}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c979903e-d4ca-4228-92eb-47ee3fa96eab") + ICoreWebView2Controller2 : public ICoreWebView2Controller + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultBackgroundColor( + /* [retval][out] */ COREWEBVIEW2_COLOR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultBackgroundColor( + /* [in] */ COREWEBVIEW2_COLOR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Controller2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Controller2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Controller2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Controller2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( + ICoreWebView2Controller2 * This, + /* [retval][out] */ BOOL *isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( + ICoreWebView2Controller2 * This, + /* [in] */ BOOL isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( + ICoreWebView2Controller2 * This, + /* [retval][out] */ RECT *bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( + ICoreWebView2Controller2 * This, + /* [in] */ RECT bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( + ICoreWebView2Controller2 * This, + /* [retval][out] */ double *zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( + ICoreWebView2Controller2 * This, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( + ICoreWebView2Controller2 * This, + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( + ICoreWebView2Controller2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) + HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( + ICoreWebView2Controller2 * This, + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) + HRESULT ( STDMETHODCALLTYPE *MoveFocus )( + ICoreWebView2Controller2 * This, + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( + ICoreWebView2Controller2 * This, + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( + ICoreWebView2Controller2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) + HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( + ICoreWebView2Controller2 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) + HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( + ICoreWebView2Controller2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) + HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( + ICoreWebView2Controller2 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) + HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( + ICoreWebView2Controller2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( + ICoreWebView2Controller2 * This, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( + ICoreWebView2Controller2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( + ICoreWebView2Controller2 * This, + /* [retval][out] */ HWND *parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( + ICoreWebView2Controller2 * This, + /* [in] */ HWND parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) + HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( + ICoreWebView2Controller2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ICoreWebView2Controller2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( + ICoreWebView2Controller2 * This, + /* [retval][out] */ ICoreWebView2 **coreWebView2); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, get_DefaultBackgroundColor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( + ICoreWebView2Controller2 * This, + /* [retval][out] */ COREWEBVIEW2_COLOR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, put_DefaultBackgroundColor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( + ICoreWebView2Controller2 * This, + /* [in] */ COREWEBVIEW2_COLOR value); + + END_INTERFACE + } ICoreWebView2Controller2Vtbl; + + interface ICoreWebView2Controller2 + { + CONST_VTBL struct ICoreWebView2Controller2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Controller2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Controller2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Controller2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Controller2_get_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> get_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller2_put_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> put_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller2_get_Bounds(This,bounds) \ + ( (This)->lpVtbl -> get_Bounds(This,bounds) ) + +#define ICoreWebView2Controller2_put_Bounds(This,bounds) \ + ( (This)->lpVtbl -> put_Bounds(This,bounds) ) + +#define ICoreWebView2Controller2_get_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> get_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller2_put_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> put_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller2_add_ZoomFactorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ZoomFactorChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller2_remove_ZoomFactorChanged(This,token) \ + ( (This)->lpVtbl -> remove_ZoomFactorChanged(This,token) ) + +#define ICoreWebView2Controller2_SetBoundsAndZoomFactor(This,bounds,zoomFactor) \ + ( (This)->lpVtbl -> SetBoundsAndZoomFactor(This,bounds,zoomFactor) ) + +#define ICoreWebView2Controller2_MoveFocus(This,reason) \ + ( (This)->lpVtbl -> MoveFocus(This,reason) ) + +#define ICoreWebView2Controller2_add_MoveFocusRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_MoveFocusRequested(This,eventHandler,token) ) + +#define ICoreWebView2Controller2_remove_MoveFocusRequested(This,token) \ + ( (This)->lpVtbl -> remove_MoveFocusRequested(This,token) ) + +#define ICoreWebView2Controller2_add_GotFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_GotFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller2_remove_GotFocus(This,token) \ + ( (This)->lpVtbl -> remove_GotFocus(This,token) ) + +#define ICoreWebView2Controller2_add_LostFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LostFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller2_remove_LostFocus(This,token) \ + ( (This)->lpVtbl -> remove_LostFocus(This,token) ) + +#define ICoreWebView2Controller2_add_AcceleratorKeyPressed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_AcceleratorKeyPressed(This,eventHandler,token) ) + +#define ICoreWebView2Controller2_remove_AcceleratorKeyPressed(This,token) \ + ( (This)->lpVtbl -> remove_AcceleratorKeyPressed(This,token) ) + +#define ICoreWebView2Controller2_get_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> get_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller2_put_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> put_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller2_NotifyParentWindowPositionChanged(This) \ + ( (This)->lpVtbl -> NotifyParentWindowPositionChanged(This) ) + +#define ICoreWebView2Controller2_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ICoreWebView2Controller2_get_CoreWebView2(This,coreWebView2) \ + ( (This)->lpVtbl -> get_CoreWebView2(This,coreWebView2) ) + + +#define ICoreWebView2Controller2_get_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> get_DefaultBackgroundColor(This,value) ) + +#define ICoreWebView2Controller2_put_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> put_DefaultBackgroundColor(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Controller2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller3_INTERFACE_DEFINED__ +#define __ICoreWebView2Controller3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Controller3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller3 = {0xf9614724,0x5d2b,0x41dc,{0xae,0xf7,0x73,0xd6,0x2b,0x51,0x54,0x3b}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f9614724-5d2b-41dc-aef7-73d62b51543b") + ICoreWebView2Controller3 : public ICoreWebView2Controller2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RasterizationScale( + /* [retval][out] */ double *scale) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_RasterizationScale( + /* [in] */ double scale) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldDetectMonitorScaleChanges( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ShouldDetectMonitorScaleChanges( + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_RasterizationScaleChanged( + /* [in] */ ICoreWebView2RasterizationScaleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_RasterizationScaleChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BoundsMode( + /* [retval][out] */ COREWEBVIEW2_BOUNDS_MODE *boundsMode) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_BoundsMode( + /* [in] */ COREWEBVIEW2_BOUNDS_MODE boundsMode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Controller3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Controller3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Controller3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Controller3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ BOOL *isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( + ICoreWebView2Controller3 * This, + /* [in] */ BOOL isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ RECT *bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( + ICoreWebView2Controller3 * This, + /* [in] */ RECT bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ double *zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( + ICoreWebView2Controller3 * This, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( + ICoreWebView2Controller3 * This, + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( + ICoreWebView2Controller3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) + HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( + ICoreWebView2Controller3 * This, + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) + HRESULT ( STDMETHODCALLTYPE *MoveFocus )( + ICoreWebView2Controller3 * This, + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( + ICoreWebView2Controller3 * This, + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( + ICoreWebView2Controller3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) + HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( + ICoreWebView2Controller3 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) + HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( + ICoreWebView2Controller3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) + HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( + ICoreWebView2Controller3 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) + HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( + ICoreWebView2Controller3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( + ICoreWebView2Controller3 * This, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( + ICoreWebView2Controller3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ HWND *parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( + ICoreWebView2Controller3 * This, + /* [in] */ HWND parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) + HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( + ICoreWebView2Controller3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ICoreWebView2Controller3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ ICoreWebView2 **coreWebView2); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, get_DefaultBackgroundColor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ COREWEBVIEW2_COLOR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, put_DefaultBackgroundColor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( + ICoreWebView2Controller3 * This, + /* [in] */ COREWEBVIEW2_COLOR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_RasterizationScale) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RasterizationScale )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ double *scale); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_RasterizationScale) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RasterizationScale )( + ICoreWebView2Controller3 * This, + /* [in] */ double scale); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_ShouldDetectMonitorScaleChanges) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDetectMonitorScaleChanges )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_ShouldDetectMonitorScaleChanges) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldDetectMonitorScaleChanges )( + ICoreWebView2Controller3 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, add_RasterizationScaleChanged) + HRESULT ( STDMETHODCALLTYPE *add_RasterizationScaleChanged )( + ICoreWebView2Controller3 * This, + /* [in] */ ICoreWebView2RasterizationScaleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, remove_RasterizationScaleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_RasterizationScaleChanged )( + ICoreWebView2Controller3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_BoundsMode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BoundsMode )( + ICoreWebView2Controller3 * This, + /* [retval][out] */ COREWEBVIEW2_BOUNDS_MODE *boundsMode); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_BoundsMode) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_BoundsMode )( + ICoreWebView2Controller3 * This, + /* [in] */ COREWEBVIEW2_BOUNDS_MODE boundsMode); + + END_INTERFACE + } ICoreWebView2Controller3Vtbl; + + interface ICoreWebView2Controller3 + { + CONST_VTBL struct ICoreWebView2Controller3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Controller3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Controller3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Controller3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Controller3_get_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> get_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller3_put_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> put_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller3_get_Bounds(This,bounds) \ + ( (This)->lpVtbl -> get_Bounds(This,bounds) ) + +#define ICoreWebView2Controller3_put_Bounds(This,bounds) \ + ( (This)->lpVtbl -> put_Bounds(This,bounds) ) + +#define ICoreWebView2Controller3_get_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> get_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller3_put_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> put_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller3_add_ZoomFactorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ZoomFactorChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller3_remove_ZoomFactorChanged(This,token) \ + ( (This)->lpVtbl -> remove_ZoomFactorChanged(This,token) ) + +#define ICoreWebView2Controller3_SetBoundsAndZoomFactor(This,bounds,zoomFactor) \ + ( (This)->lpVtbl -> SetBoundsAndZoomFactor(This,bounds,zoomFactor) ) + +#define ICoreWebView2Controller3_MoveFocus(This,reason) \ + ( (This)->lpVtbl -> MoveFocus(This,reason) ) + +#define ICoreWebView2Controller3_add_MoveFocusRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_MoveFocusRequested(This,eventHandler,token) ) + +#define ICoreWebView2Controller3_remove_MoveFocusRequested(This,token) \ + ( (This)->lpVtbl -> remove_MoveFocusRequested(This,token) ) + +#define ICoreWebView2Controller3_add_GotFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_GotFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller3_remove_GotFocus(This,token) \ + ( (This)->lpVtbl -> remove_GotFocus(This,token) ) + +#define ICoreWebView2Controller3_add_LostFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LostFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller3_remove_LostFocus(This,token) \ + ( (This)->lpVtbl -> remove_LostFocus(This,token) ) + +#define ICoreWebView2Controller3_add_AcceleratorKeyPressed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_AcceleratorKeyPressed(This,eventHandler,token) ) + +#define ICoreWebView2Controller3_remove_AcceleratorKeyPressed(This,token) \ + ( (This)->lpVtbl -> remove_AcceleratorKeyPressed(This,token) ) + +#define ICoreWebView2Controller3_get_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> get_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller3_put_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> put_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller3_NotifyParentWindowPositionChanged(This) \ + ( (This)->lpVtbl -> NotifyParentWindowPositionChanged(This) ) + +#define ICoreWebView2Controller3_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ICoreWebView2Controller3_get_CoreWebView2(This,coreWebView2) \ + ( (This)->lpVtbl -> get_CoreWebView2(This,coreWebView2) ) + + +#define ICoreWebView2Controller3_get_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> get_DefaultBackgroundColor(This,value) ) + +#define ICoreWebView2Controller3_put_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> put_DefaultBackgroundColor(This,value) ) + + +#define ICoreWebView2Controller3_get_RasterizationScale(This,scale) \ + ( (This)->lpVtbl -> get_RasterizationScale(This,scale) ) + +#define ICoreWebView2Controller3_put_RasterizationScale(This,scale) \ + ( (This)->lpVtbl -> put_RasterizationScale(This,scale) ) + +#define ICoreWebView2Controller3_get_ShouldDetectMonitorScaleChanges(This,value) \ + ( (This)->lpVtbl -> get_ShouldDetectMonitorScaleChanges(This,value) ) + +#define ICoreWebView2Controller3_put_ShouldDetectMonitorScaleChanges(This,value) \ + ( (This)->lpVtbl -> put_ShouldDetectMonitorScaleChanges(This,value) ) + +#define ICoreWebView2Controller3_add_RasterizationScaleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_RasterizationScaleChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller3_remove_RasterizationScaleChanged(This,token) \ + ( (This)->lpVtbl -> remove_RasterizationScaleChanged(This,token) ) + +#define ICoreWebView2Controller3_get_BoundsMode(This,boundsMode) \ + ( (This)->lpVtbl -> get_BoundsMode(This,boundsMode) ) + +#define ICoreWebView2Controller3_put_BoundsMode(This,boundsMode) \ + ( (This)->lpVtbl -> put_BoundsMode(This,boundsMode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Controller3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2RasterizationScaleChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2RasterizationScaleChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2RasterizationScaleChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2RasterizationScaleChangedEventHandler = {0x9c98c8b1,0xac53,0x427e,{0xa3,0x45,0x30,0x49,0xb5,0x52,0x4b,0xbe}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9c98c8b1-ac53-427e-a345-3049b5524bbe") + ICoreWebView2RasterizationScaleChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2RasterizationScaleChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2RasterizationScaleChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2RasterizationScaleChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2RasterizationScaleChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2RasterizationScaleChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2RasterizationScaleChangedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2RasterizationScaleChangedEventHandlerVtbl; + + interface ICoreWebView2RasterizationScaleChangedEventHandler + { + CONST_VTBL struct ICoreWebView2RasterizationScaleChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2RasterizationScaleChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2RasterizationScaleChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2RasterizationScaleChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2RasterizationScaleChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2RasterizationScaleChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller4_INTERFACE_DEFINED__ +#define __ICoreWebView2Controller4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Controller4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller4 = {0x97d418d5,0xa426,0x4e49,{0xa1,0x51,0xe1,0xa1,0x0f,0x32,0x7d,0x9e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("97d418d5-a426-4e49-a151-e1a10f327d9e") + ICoreWebView2Controller4 : public ICoreWebView2Controller3 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AllowExternalDrop( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AllowExternalDrop( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Controller4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Controller4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ BOOL *isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( + ICoreWebView2Controller4 * This, + /* [in] */ BOOL isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ RECT *bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( + ICoreWebView2Controller4 * This, + /* [in] */ RECT bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ double *zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( + ICoreWebView2Controller4 * This, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) + HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( + ICoreWebView2Controller4 * This, + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) + HRESULT ( STDMETHODCALLTYPE *MoveFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) + HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) + HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) + HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) + HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ HWND *parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( + ICoreWebView2Controller4 * This, + /* [in] */ HWND parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) + HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ ICoreWebView2 **coreWebView2); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, get_DefaultBackgroundColor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ COREWEBVIEW2_COLOR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, put_DefaultBackgroundColor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( + ICoreWebView2Controller4 * This, + /* [in] */ COREWEBVIEW2_COLOR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_RasterizationScale) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RasterizationScale )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ double *scale); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_RasterizationScale) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RasterizationScale )( + ICoreWebView2Controller4 * This, + /* [in] */ double scale); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_ShouldDetectMonitorScaleChanges) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDetectMonitorScaleChanges )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_ShouldDetectMonitorScaleChanges) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldDetectMonitorScaleChanges )( + ICoreWebView2Controller4 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, add_RasterizationScaleChanged) + HRESULT ( STDMETHODCALLTYPE *add_RasterizationScaleChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2RasterizationScaleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, remove_RasterizationScaleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_RasterizationScaleChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_BoundsMode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BoundsMode )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ COREWEBVIEW2_BOUNDS_MODE *boundsMode); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_BoundsMode) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_BoundsMode )( + ICoreWebView2Controller4 * This, + /* [in] */ COREWEBVIEW2_BOUNDS_MODE boundsMode); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller4, get_AllowExternalDrop) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowExternalDrop )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller4, put_AllowExternalDrop) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AllowExternalDrop )( + ICoreWebView2Controller4 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Controller4Vtbl; + + interface ICoreWebView2Controller4 + { + CONST_VTBL struct ICoreWebView2Controller4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Controller4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Controller4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Controller4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Controller4_get_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> get_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller4_put_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> put_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller4_get_Bounds(This,bounds) \ + ( (This)->lpVtbl -> get_Bounds(This,bounds) ) + +#define ICoreWebView2Controller4_put_Bounds(This,bounds) \ + ( (This)->lpVtbl -> put_Bounds(This,bounds) ) + +#define ICoreWebView2Controller4_get_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> get_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller4_put_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> put_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller4_add_ZoomFactorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ZoomFactorChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_ZoomFactorChanged(This,token) \ + ( (This)->lpVtbl -> remove_ZoomFactorChanged(This,token) ) + +#define ICoreWebView2Controller4_SetBoundsAndZoomFactor(This,bounds,zoomFactor) \ + ( (This)->lpVtbl -> SetBoundsAndZoomFactor(This,bounds,zoomFactor) ) + +#define ICoreWebView2Controller4_MoveFocus(This,reason) \ + ( (This)->lpVtbl -> MoveFocus(This,reason) ) + +#define ICoreWebView2Controller4_add_MoveFocusRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_MoveFocusRequested(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_MoveFocusRequested(This,token) \ + ( (This)->lpVtbl -> remove_MoveFocusRequested(This,token) ) + +#define ICoreWebView2Controller4_add_GotFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_GotFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_GotFocus(This,token) \ + ( (This)->lpVtbl -> remove_GotFocus(This,token) ) + +#define ICoreWebView2Controller4_add_LostFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LostFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_LostFocus(This,token) \ + ( (This)->lpVtbl -> remove_LostFocus(This,token) ) + +#define ICoreWebView2Controller4_add_AcceleratorKeyPressed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_AcceleratorKeyPressed(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_AcceleratorKeyPressed(This,token) \ + ( (This)->lpVtbl -> remove_AcceleratorKeyPressed(This,token) ) + +#define ICoreWebView2Controller4_get_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> get_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller4_put_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> put_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller4_NotifyParentWindowPositionChanged(This) \ + ( (This)->lpVtbl -> NotifyParentWindowPositionChanged(This) ) + +#define ICoreWebView2Controller4_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ICoreWebView2Controller4_get_CoreWebView2(This,coreWebView2) \ + ( (This)->lpVtbl -> get_CoreWebView2(This,coreWebView2) ) + + +#define ICoreWebView2Controller4_get_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> get_DefaultBackgroundColor(This,value) ) + +#define ICoreWebView2Controller4_put_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> put_DefaultBackgroundColor(This,value) ) + + +#define ICoreWebView2Controller4_get_RasterizationScale(This,scale) \ + ( (This)->lpVtbl -> get_RasterizationScale(This,scale) ) + +#define ICoreWebView2Controller4_put_RasterizationScale(This,scale) \ + ( (This)->lpVtbl -> put_RasterizationScale(This,scale) ) + +#define ICoreWebView2Controller4_get_ShouldDetectMonitorScaleChanges(This,value) \ + ( (This)->lpVtbl -> get_ShouldDetectMonitorScaleChanges(This,value) ) + +#define ICoreWebView2Controller4_put_ShouldDetectMonitorScaleChanges(This,value) \ + ( (This)->lpVtbl -> put_ShouldDetectMonitorScaleChanges(This,value) ) + +#define ICoreWebView2Controller4_add_RasterizationScaleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_RasterizationScaleChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_RasterizationScaleChanged(This,token) \ + ( (This)->lpVtbl -> remove_RasterizationScaleChanged(This,token) ) + +#define ICoreWebView2Controller4_get_BoundsMode(This,boundsMode) \ + ( (This)->lpVtbl -> get_BoundsMode(This,boundsMode) ) + +#define ICoreWebView2Controller4_put_BoundsMode(This,boundsMode) \ + ( (This)->lpVtbl -> put_BoundsMode(This,boundsMode) ) + + +#define ICoreWebView2Controller4_get_AllowExternalDrop(This,value) \ + ( (This)->lpVtbl -> get_AllowExternalDrop(This,value) ) + +#define ICoreWebView2Controller4_put_AllowExternalDrop(This,value) \ + ( (This)->lpVtbl -> put_AllowExternalDrop(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Controller4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions_INTERFACE_DEFINED__ +#define __ICoreWebView2ControllerOptions_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ControllerOptions */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ControllerOptions = {0x12aae616,0x8ccb,0x44ec,{0xbc,0xb3,0xeb,0x18,0x31,0x88,0x16,0x35}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("12aae616-8ccb-44ec-bcb3-eb1831881635") + ICoreWebView2ControllerOptions : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProfileName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ProfileName( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsInPrivateModeEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsInPrivateModeEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ControllerOptionsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ControllerOptions * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ControllerOptions * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ControllerOptions * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2ControllerOptions * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_ProfileName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ProfileName )( + ICoreWebView2ControllerOptions * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_IsInPrivateModeEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2ControllerOptionsVtbl; + + interface ICoreWebView2ControllerOptions + { + CONST_VTBL struct ICoreWebView2ControllerOptionsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ControllerOptions_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ControllerOptions_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ControllerOptions_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ControllerOptions_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions_put_ProfileName(This,value) \ + ( (This)->lpVtbl -> put_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2ControllerOptions_put_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsInPrivateModeEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ControllerOptions_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions2_INTERFACE_DEFINED__ +#define __ICoreWebView2ControllerOptions2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ControllerOptions2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ControllerOptions2 = {0x06c991d8,0x9e7e,0x11ed,{0xa8,0xfc,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("06c991d8-9e7e-11ed-a8fc-0242ac120002") + ICoreWebView2ControllerOptions2 : public ICoreWebView2ControllerOptions + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ScriptLocale( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ScriptLocale( + /* [in] */ LPCWSTR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ControllerOptions2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ControllerOptions2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ControllerOptions2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ControllerOptions2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2ControllerOptions2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_ProfileName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ProfileName )( + ICoreWebView2ControllerOptions2 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions2 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_IsInPrivateModeEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions2 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions2, get_ScriptLocale) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScriptLocale )( + ICoreWebView2ControllerOptions2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions2, put_ScriptLocale) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ScriptLocale )( + ICoreWebView2ControllerOptions2 * This, + /* [in] */ LPCWSTR value); + + END_INTERFACE + } ICoreWebView2ControllerOptions2Vtbl; + + interface ICoreWebView2ControllerOptions2 + { + CONST_VTBL struct ICoreWebView2ControllerOptions2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ControllerOptions2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ControllerOptions2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ControllerOptions2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ControllerOptions2_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions2_put_ProfileName(This,value) \ + ( (This)->lpVtbl -> put_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions2_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2ControllerOptions2_put_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsInPrivateModeEnabled(This,value) ) + + +#define ICoreWebView2ControllerOptions2_get_ScriptLocale(This,value) \ + ( (This)->lpVtbl -> get_ScriptLocale(This,value) ) + +#define ICoreWebView2ControllerOptions2_put_ScriptLocale(This,value) \ + ( (This)->lpVtbl -> put_ScriptLocale(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ControllerOptions2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions3_INTERFACE_DEFINED__ +#define __ICoreWebView2ControllerOptions3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ControllerOptions3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ControllerOptions3 = {0xb32b191a,0x8998,0x57ca,{0xb7,0xcb,0xe0,0x46,0x17,0xe4,0xce,0x4a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b32b191a-8998-57ca-b7cb-e04617e4ce4a") + ICoreWebView2ControllerOptions3 : public ICoreWebView2ControllerOptions2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultBackgroundColor( + /* [retval][out] */ COREWEBVIEW2_COLOR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultBackgroundColor( + /* [in] */ COREWEBVIEW2_COLOR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ControllerOptions3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ControllerOptions3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ControllerOptions3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ControllerOptions3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2ControllerOptions3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_ProfileName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ProfileName )( + ICoreWebView2ControllerOptions3 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions3 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_IsInPrivateModeEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions3 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions2, get_ScriptLocale) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScriptLocale )( + ICoreWebView2ControllerOptions3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions2, put_ScriptLocale) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ScriptLocale )( + ICoreWebView2ControllerOptions3 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions3, get_DefaultBackgroundColor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( + ICoreWebView2ControllerOptions3 * This, + /* [retval][out] */ COREWEBVIEW2_COLOR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions3, put_DefaultBackgroundColor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( + ICoreWebView2ControllerOptions3 * This, + /* [in] */ COREWEBVIEW2_COLOR value); + + END_INTERFACE + } ICoreWebView2ControllerOptions3Vtbl; + + interface ICoreWebView2ControllerOptions3 + { + CONST_VTBL struct ICoreWebView2ControllerOptions3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ControllerOptions3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ControllerOptions3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ControllerOptions3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ControllerOptions3_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions3_put_ProfileName(This,value) \ + ( (This)->lpVtbl -> put_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions3_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2ControllerOptions3_put_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsInPrivateModeEnabled(This,value) ) + + +#define ICoreWebView2ControllerOptions3_get_ScriptLocale(This,value) \ + ( (This)->lpVtbl -> get_ScriptLocale(This,value) ) + +#define ICoreWebView2ControllerOptions3_put_ScriptLocale(This,value) \ + ( (This)->lpVtbl -> put_ScriptLocale(This,value) ) + + +#define ICoreWebView2ControllerOptions3_get_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> get_DefaultBackgroundColor(This,value) ) + +#define ICoreWebView2ControllerOptions3_put_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> put_DefaultBackgroundColor(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ControllerOptions3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions4_INTERFACE_DEFINED__ +#define __ICoreWebView2ControllerOptions4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ControllerOptions4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ControllerOptions4 = {0x21eb052f,0xad39,0x555e,{0x82,0x4a,0xc8,0x7b,0x09,0x1d,0x4d,0x36}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("21eb052f-ad39-555e-824a-c87b091d4d36") + ICoreWebView2ControllerOptions4 : public ICoreWebView2ControllerOptions3 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AllowHostInputProcessing( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AllowHostInputProcessing( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ControllerOptions4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ControllerOptions4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ControllerOptions4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ControllerOptions4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2ControllerOptions4 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_ProfileName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ProfileName )( + ICoreWebView2ControllerOptions4 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_IsInPrivateModeEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions4 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions2, get_ScriptLocale) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScriptLocale )( + ICoreWebView2ControllerOptions4 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions2, put_ScriptLocale) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ScriptLocale )( + ICoreWebView2ControllerOptions4 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions3, get_DefaultBackgroundColor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( + ICoreWebView2ControllerOptions4 * This, + /* [retval][out] */ COREWEBVIEW2_COLOR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions3, put_DefaultBackgroundColor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( + ICoreWebView2ControllerOptions4 * This, + /* [in] */ COREWEBVIEW2_COLOR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions4, get_AllowHostInputProcessing) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowHostInputProcessing )( + ICoreWebView2ControllerOptions4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions4, put_AllowHostInputProcessing) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AllowHostInputProcessing )( + ICoreWebView2ControllerOptions4 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2ControllerOptions4Vtbl; + + interface ICoreWebView2ControllerOptions4 + { + CONST_VTBL struct ICoreWebView2ControllerOptions4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ControllerOptions4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ControllerOptions4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ControllerOptions4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ControllerOptions4_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions4_put_ProfileName(This,value) \ + ( (This)->lpVtbl -> put_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions4_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2ControllerOptions4_put_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsInPrivateModeEnabled(This,value) ) + + +#define ICoreWebView2ControllerOptions4_get_ScriptLocale(This,value) \ + ( (This)->lpVtbl -> get_ScriptLocale(This,value) ) + +#define ICoreWebView2ControllerOptions4_put_ScriptLocale(This,value) \ + ( (This)->lpVtbl -> put_ScriptLocale(This,value) ) + + +#define ICoreWebView2ControllerOptions4_get_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> get_DefaultBackgroundColor(This,value) ) + +#define ICoreWebView2ControllerOptions4_put_DefaultBackgroundColor(This,value) \ + ( (This)->lpVtbl -> put_DefaultBackgroundColor(This,value) ) + + +#define ICoreWebView2ControllerOptions4_get_AllowHostInputProcessing(This,value) \ + ( (This)->lpVtbl -> get_AllowHostInputProcessing(This,value) ) + +#define ICoreWebView2ControllerOptions4_put_AllowHostInputProcessing(This,value) \ + ( (This)->lpVtbl -> put_AllowHostInputProcessing(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ControllerOptions4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Cookie_INTERFACE_DEFINED__ +#define __ICoreWebView2Cookie_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Cookie */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Cookie = {0xAD26D6BE,0x1486,0x43E6,{0xBF,0x87,0xA2,0x03,0x40,0x06,0xCA,0x21}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("AD26D6BE-1486-43E6-BF87-A2034006CA21") + ICoreWebView2Cookie : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *name) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Value( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Value( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Domain( + /* [retval][out] */ LPWSTR *domain) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Path( + /* [retval][out] */ LPWSTR *path) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Expires( + /* [retval][out] */ double *expires) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Expires( + /* [in] */ double expires) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsHttpOnly( + /* [retval][out] */ BOOL *isHttpOnly) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsHttpOnly( + /* [in] */ BOOL isHttpOnly) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SameSite( + /* [retval][out] */ COREWEBVIEW2_COOKIE_SAME_SITE_KIND *sameSite) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SameSite( + /* [in] */ COREWEBVIEW2_COOKIE_SAME_SITE_KIND sameSite) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsSecure( + /* [retval][out] */ BOOL *isSecure) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsSecure( + /* [in] */ BOOL isSecure) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsSession( + /* [retval][out] */ BOOL *isSession) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CookieVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Cookie * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Cookie * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Cookie * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Cookie * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Value) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Value )( + ICoreWebView2Cookie * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_Value) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Value )( + ICoreWebView2Cookie * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Domain) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Domain )( + ICoreWebView2Cookie * This, + /* [retval][out] */ LPWSTR *domain); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Path) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )( + ICoreWebView2Cookie * This, + /* [retval][out] */ LPWSTR *path); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Expires) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Expires )( + ICoreWebView2Cookie * This, + /* [retval][out] */ double *expires); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_Expires) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Expires )( + ICoreWebView2Cookie * This, + /* [in] */ double expires); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_IsHttpOnly) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsHttpOnly )( + ICoreWebView2Cookie * This, + /* [retval][out] */ BOOL *isHttpOnly); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_IsHttpOnly) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsHttpOnly )( + ICoreWebView2Cookie * This, + /* [in] */ BOOL isHttpOnly); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_SameSite) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SameSite )( + ICoreWebView2Cookie * This, + /* [retval][out] */ COREWEBVIEW2_COOKIE_SAME_SITE_KIND *sameSite); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_SameSite) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SameSite )( + ICoreWebView2Cookie * This, + /* [in] */ COREWEBVIEW2_COOKIE_SAME_SITE_KIND sameSite); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_IsSecure) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSecure )( + ICoreWebView2Cookie * This, + /* [retval][out] */ BOOL *isSecure); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_IsSecure) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSecure )( + ICoreWebView2Cookie * This, + /* [in] */ BOOL isSecure); + + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_IsSession) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSession )( + ICoreWebView2Cookie * This, + /* [retval][out] */ BOOL *isSession); + + END_INTERFACE + } ICoreWebView2CookieVtbl; + + interface ICoreWebView2Cookie + { + CONST_VTBL struct ICoreWebView2CookieVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Cookie_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Cookie_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Cookie_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Cookie_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Cookie_get_Value(This,value) \ + ( (This)->lpVtbl -> get_Value(This,value) ) + +#define ICoreWebView2Cookie_put_Value(This,value) \ + ( (This)->lpVtbl -> put_Value(This,value) ) + +#define ICoreWebView2Cookie_get_Domain(This,domain) \ + ( (This)->lpVtbl -> get_Domain(This,domain) ) + +#define ICoreWebView2Cookie_get_Path(This,path) \ + ( (This)->lpVtbl -> get_Path(This,path) ) + +#define ICoreWebView2Cookie_get_Expires(This,expires) \ + ( (This)->lpVtbl -> get_Expires(This,expires) ) + +#define ICoreWebView2Cookie_put_Expires(This,expires) \ + ( (This)->lpVtbl -> put_Expires(This,expires) ) + +#define ICoreWebView2Cookie_get_IsHttpOnly(This,isHttpOnly) \ + ( (This)->lpVtbl -> get_IsHttpOnly(This,isHttpOnly) ) + +#define ICoreWebView2Cookie_put_IsHttpOnly(This,isHttpOnly) \ + ( (This)->lpVtbl -> put_IsHttpOnly(This,isHttpOnly) ) + +#define ICoreWebView2Cookie_get_SameSite(This,sameSite) \ + ( (This)->lpVtbl -> get_SameSite(This,sameSite) ) + +#define ICoreWebView2Cookie_put_SameSite(This,sameSite) \ + ( (This)->lpVtbl -> put_SameSite(This,sameSite) ) + +#define ICoreWebView2Cookie_get_IsSecure(This,isSecure) \ + ( (This)->lpVtbl -> get_IsSecure(This,isSecure) ) + +#define ICoreWebView2Cookie_put_IsSecure(This,isSecure) \ + ( (This)->lpVtbl -> put_IsSecure(This,isSecure) ) + +#define ICoreWebView2Cookie_get_IsSession(This,isSession) \ + ( (This)->lpVtbl -> get_IsSession(This,isSession) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Cookie_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CookieManager_INTERFACE_DEFINED__ +#define __ICoreWebView2CookieManager_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CookieManager */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CookieManager = {0x177CD9E7,0xB6F5,0x451A,{0x94,0xA0,0x5D,0x7A,0x3A,0x4C,0x41,0x41}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("177CD9E7-B6F5-451A-94A0-5D7A3A4C4141") + ICoreWebView2CookieManager : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateCookie( + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value, + /* [in] */ LPCWSTR domain, + /* [in] */ LPCWSTR path, + /* [retval][out] */ ICoreWebView2Cookie **cookie) = 0; + + virtual HRESULT STDMETHODCALLTYPE CopyCookie( + /* [in] */ ICoreWebView2Cookie *cookieParam, + /* [retval][out] */ ICoreWebView2Cookie **cookie) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCookies( + /* [in] */ LPCWSTR uri, + /* [in] */ ICoreWebView2GetCookiesCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddOrUpdateCookie( + /* [in] */ ICoreWebView2Cookie *cookie) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeleteCookie( + /* [in] */ ICoreWebView2Cookie *cookie) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeleteCookies( + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR uri) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeleteCookiesWithDomainAndPath( + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR domain, + /* [in] */ LPCWSTR path) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeleteAllCookies( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CookieManagerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CookieManager * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CookieManager * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CookieManager * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, CreateCookie) + HRESULT ( STDMETHODCALLTYPE *CreateCookie )( + ICoreWebView2CookieManager * This, + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value, + /* [in] */ LPCWSTR domain, + /* [in] */ LPCWSTR path, + /* [retval][out] */ ICoreWebView2Cookie **cookie); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, CopyCookie) + HRESULT ( STDMETHODCALLTYPE *CopyCookie )( + ICoreWebView2CookieManager * This, + /* [in] */ ICoreWebView2Cookie *cookieParam, + /* [retval][out] */ ICoreWebView2Cookie **cookie); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, GetCookies) + HRESULT ( STDMETHODCALLTYPE *GetCookies )( + ICoreWebView2CookieManager * This, + /* [in] */ LPCWSTR uri, + /* [in] */ ICoreWebView2GetCookiesCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, AddOrUpdateCookie) + HRESULT ( STDMETHODCALLTYPE *AddOrUpdateCookie )( + ICoreWebView2CookieManager * This, + /* [in] */ ICoreWebView2Cookie *cookie); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteCookie) + HRESULT ( STDMETHODCALLTYPE *DeleteCookie )( + ICoreWebView2CookieManager * This, + /* [in] */ ICoreWebView2Cookie *cookie); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteCookies) + HRESULT ( STDMETHODCALLTYPE *DeleteCookies )( + ICoreWebView2CookieManager * This, + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteCookiesWithDomainAndPath) + HRESULT ( STDMETHODCALLTYPE *DeleteCookiesWithDomainAndPath )( + ICoreWebView2CookieManager * This, + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR domain, + /* [in] */ LPCWSTR path); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteAllCookies) + HRESULT ( STDMETHODCALLTYPE *DeleteAllCookies )( + ICoreWebView2CookieManager * This); + + END_INTERFACE + } ICoreWebView2CookieManagerVtbl; + + interface ICoreWebView2CookieManager + { + CONST_VTBL struct ICoreWebView2CookieManagerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CookieManager_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CookieManager_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CookieManager_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CookieManager_CreateCookie(This,name,value,domain,path,cookie) \ + ( (This)->lpVtbl -> CreateCookie(This,name,value,domain,path,cookie) ) + +#define ICoreWebView2CookieManager_CopyCookie(This,cookieParam,cookie) \ + ( (This)->lpVtbl -> CopyCookie(This,cookieParam,cookie) ) + +#define ICoreWebView2CookieManager_GetCookies(This,uri,handler) \ + ( (This)->lpVtbl -> GetCookies(This,uri,handler) ) + +#define ICoreWebView2CookieManager_AddOrUpdateCookie(This,cookie) \ + ( (This)->lpVtbl -> AddOrUpdateCookie(This,cookie) ) + +#define ICoreWebView2CookieManager_DeleteCookie(This,cookie) \ + ( (This)->lpVtbl -> DeleteCookie(This,cookie) ) + +#define ICoreWebView2CookieManager_DeleteCookies(This,name,uri) \ + ( (This)->lpVtbl -> DeleteCookies(This,name,uri) ) + +#define ICoreWebView2CookieManager_DeleteCookiesWithDomainAndPath(This,name,domain,path) \ + ( (This)->lpVtbl -> DeleteCookiesWithDomainAndPath(This,name,domain,path) ) + +#define ICoreWebView2CookieManager_DeleteAllCookies(This) \ + ( (This)->lpVtbl -> DeleteAllCookies(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CookieManager_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2GetCookiesCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2GetCookiesCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2GetCookiesCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetCookiesCompletedHandler = {0x5a4f5069,0x5c15,0x47c3,{0x86,0x46,0xf4,0xde,0x1c,0x11,0x66,0x70}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5a4f5069-5c15-47c3-8646-f4de1c116670") + ICoreWebView2GetCookiesCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2CookieList *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2GetCookiesCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2GetCookiesCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2GetCookiesCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2GetCookiesCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2GetCookiesCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2GetCookiesCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2CookieList *result); + + END_INTERFACE + } ICoreWebView2GetCookiesCompletedHandlerVtbl; + + interface ICoreWebView2GetCookiesCompletedHandler + { + CONST_VTBL struct ICoreWebView2GetCookiesCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2GetCookiesCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2GetCookiesCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2GetCookiesCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2GetCookiesCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2GetCookiesCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CookieList_INTERFACE_DEFINED__ +#define __ICoreWebView2CookieList_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CookieList */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CookieList = {0xf7f6f714,0x5d2a,0x43c6,{0x95,0x03,0x34,0x6e,0xce,0x02,0xd1,0x86}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f7f6f714-5d2a-43c6-9503-346ece02d186") + ICoreWebView2CookieList : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2Cookie **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CookieListVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CookieList * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CookieList * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CookieList * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieList, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2CookieList * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2CookieList, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2CookieList * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2Cookie **value); + + END_INTERFACE + } ICoreWebView2CookieListVtbl; + + interface ICoreWebView2CookieList + { + CONST_VTBL struct ICoreWebView2CookieListVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CookieList_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CookieList_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CookieList_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CookieList_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2CookieList_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CookieList_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CustomSchemeRegistration_INTERFACE_DEFINED__ +#define __ICoreWebView2CustomSchemeRegistration_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CustomSchemeRegistration */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CustomSchemeRegistration = {0xd60ac92c,0x37a6,0x4b26,{0xa3,0x9e,0x95,0xcf,0xe5,0x90,0x47,0xbb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("d60ac92c-37a6-4b26-a39e-95cfe59047bb") + ICoreWebView2CustomSchemeRegistration : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SchemeName( + /* [retval][out] */ LPWSTR *schemeName) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TreatAsSecure( + /* [retval][out] */ BOOL *treatAsSecure) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TreatAsSecure( + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAllowedOrigins( + /* [out] */ UINT32 *allowedOriginsCount, + /* [out] */ LPWSTR **allowedOrigins) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetAllowedOrigins( + /* [in] */ UINT32 allowedOriginsCount, + /* [in] */ LPCWSTR *allowedOrigins) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasAuthorityComponent( + /* [retval][out] */ BOOL *hasAuthorityComponent) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_HasAuthorityComponent( + /* [in] */ BOOL hasAuthorityComponent) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CustomSchemeRegistrationVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CustomSchemeRegistration * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CustomSchemeRegistration * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CustomSchemeRegistration * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomSchemeRegistration, get_SchemeName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SchemeName )( + ICoreWebView2CustomSchemeRegistration * This, + /* [retval][out] */ LPWSTR *schemeName); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomSchemeRegistration, get_TreatAsSecure) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TreatAsSecure )( + ICoreWebView2CustomSchemeRegistration * This, + /* [retval][out] */ BOOL *treatAsSecure); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomSchemeRegistration, put_TreatAsSecure) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TreatAsSecure )( + ICoreWebView2CustomSchemeRegistration * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomSchemeRegistration, GetAllowedOrigins) + HRESULT ( STDMETHODCALLTYPE *GetAllowedOrigins )( + ICoreWebView2CustomSchemeRegistration * This, + /* [out] */ UINT32 *allowedOriginsCount, + /* [out] */ LPWSTR **allowedOrigins); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomSchemeRegistration, SetAllowedOrigins) + HRESULT ( STDMETHODCALLTYPE *SetAllowedOrigins )( + ICoreWebView2CustomSchemeRegistration * This, + /* [in] */ UINT32 allowedOriginsCount, + /* [in] */ LPCWSTR *allowedOrigins); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomSchemeRegistration, get_HasAuthorityComponent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasAuthorityComponent )( + ICoreWebView2CustomSchemeRegistration * This, + /* [retval][out] */ BOOL *hasAuthorityComponent); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomSchemeRegistration, put_HasAuthorityComponent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HasAuthorityComponent )( + ICoreWebView2CustomSchemeRegistration * This, + /* [in] */ BOOL hasAuthorityComponent); + + END_INTERFACE + } ICoreWebView2CustomSchemeRegistrationVtbl; + + interface ICoreWebView2CustomSchemeRegistration + { + CONST_VTBL struct ICoreWebView2CustomSchemeRegistrationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CustomSchemeRegistration_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CustomSchemeRegistration_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CustomSchemeRegistration_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CustomSchemeRegistration_get_SchemeName(This,schemeName) \ + ( (This)->lpVtbl -> get_SchemeName(This,schemeName) ) + +#define ICoreWebView2CustomSchemeRegistration_get_TreatAsSecure(This,treatAsSecure) \ + ( (This)->lpVtbl -> get_TreatAsSecure(This,treatAsSecure) ) + +#define ICoreWebView2CustomSchemeRegistration_put_TreatAsSecure(This,value) \ + ( (This)->lpVtbl -> put_TreatAsSecure(This,value) ) + +#define ICoreWebView2CustomSchemeRegistration_GetAllowedOrigins(This,allowedOriginsCount,allowedOrigins) \ + ( (This)->lpVtbl -> GetAllowedOrigins(This,allowedOriginsCount,allowedOrigins) ) + +#define ICoreWebView2CustomSchemeRegistration_SetAllowedOrigins(This,allowedOriginsCount,allowedOrigins) \ + ( (This)->lpVtbl -> SetAllowedOrigins(This,allowedOriginsCount,allowedOrigins) ) + +#define ICoreWebView2CustomSchemeRegistration_get_HasAuthorityComponent(This,hasAuthorityComponent) \ + ( (This)->lpVtbl -> get_HasAuthorityComponent(This,hasAuthorityComponent) ) + +#define ICoreWebView2CustomSchemeRegistration_put_HasAuthorityComponent(This,hasAuthorityComponent) \ + ( (This)->lpVtbl -> put_HasAuthorityComponent(This,hasAuthorityComponent) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CustomSchemeRegistration_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DOMContentLoadedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2DOMContentLoadedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DOMContentLoadedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DOMContentLoadedEventArgs = {0x16b1e21a,0xc503,0x44f2,{0x84,0xc9,0x70,0xab,0xa5,0x03,0x12,0x83}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("16b1e21a-c503-44f2-84c9-70aba5031283") + ICoreWebView2DOMContentLoadedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationId( + /* [retval][out] */ UINT64 *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DOMContentLoadedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DOMContentLoadedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DOMContentLoadedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DOMContentLoadedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DOMContentLoadedEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2DOMContentLoadedEventArgs * This, + /* [retval][out] */ UINT64 *value); + + END_INTERFACE + } ICoreWebView2DOMContentLoadedEventArgsVtbl; + + interface ICoreWebView2DOMContentLoadedEventArgs + { + CONST_VTBL struct ICoreWebView2DOMContentLoadedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DOMContentLoadedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DOMContentLoadedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DOMContentLoadedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DOMContentLoadedEventArgs_get_NavigationId(This,value) \ + ( (This)->lpVtbl -> get_NavigationId(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DOMContentLoadedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorker_INTERFACE_DEFINED__ +#define __ICoreWebView2DedicatedWorker_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DedicatedWorker */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DedicatedWorker = {0x66833876,0xedba,0x5a60,{0x85,0x08,0x7d,0xa6,0x45,0x04,0xa9,0xd2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("66833876-edba-5a60-8508-7da64504a9d2") + ICoreWebView2DedicatedWorker : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ScriptUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_DedicatedWorkerCreated( + /* [in] */ ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DedicatedWorkerCreated( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_Destroying( + /* [in] */ ICoreWebView2DedicatedWorkerDestroyingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_Destroying( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebMessageReceived( + /* [in] */ ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebMessageReceived( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsJson( + /* [in] */ LPCWSTR webMessageAsJson) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsString( + /* [in] */ LPCWSTR webMessageAsString) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DedicatedWorkerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DedicatedWorker * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DedicatedWorker * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, get_ScriptUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScriptUri )( + ICoreWebView2DedicatedWorker * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, add_DedicatedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *add_DedicatedWorkerCreated )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, remove_DedicatedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *remove_DedicatedWorkerCreated )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, add_Destroying) + HRESULT ( STDMETHODCALLTYPE *add_Destroying )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ ICoreWebView2DedicatedWorkerDestroyingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, remove_Destroying) + HRESULT ( STDMETHODCALLTYPE *remove_Destroying )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorker, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2DedicatedWorker * This, + /* [in] */ LPCWSTR webMessageAsString); + + END_INTERFACE + } ICoreWebView2DedicatedWorkerVtbl; + + interface ICoreWebView2DedicatedWorker + { + CONST_VTBL struct ICoreWebView2DedicatedWorkerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DedicatedWorker_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DedicatedWorker_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DedicatedWorker_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DedicatedWorker_get_ScriptUri(This,value) \ + ( (This)->lpVtbl -> get_ScriptUri(This,value) ) + +#define ICoreWebView2DedicatedWorker_add_DedicatedWorkerCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DedicatedWorkerCreated(This,eventHandler,token) ) + +#define ICoreWebView2DedicatedWorker_remove_DedicatedWorkerCreated(This,token) \ + ( (This)->lpVtbl -> remove_DedicatedWorkerCreated(This,token) ) + +#define ICoreWebView2DedicatedWorker_add_Destroying(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroying(This,eventHandler,token) ) + +#define ICoreWebView2DedicatedWorker_remove_Destroying(This,token) \ + ( (This)->lpVtbl -> remove_Destroying(This,token) ) + +#define ICoreWebView2DedicatedWorker_add_WebMessageReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,eventHandler,token) ) + +#define ICoreWebView2DedicatedWorker_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2DedicatedWorker_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2DedicatedWorker_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DedicatedWorker_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler = {0xa85b1b35,0xf6d7,0x5ae6,{0x9f,0xd7,0x57,0x90,0x5d,0xef,0xf7,0x9f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a85b1b35-f6d7-5ae6-9fd7-57905deff79f") + ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2DedicatedWorker *sender, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler * This, + /* [in] */ ICoreWebView2DedicatedWorker *sender, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventArgs *args); + + END_INTERFACE + } ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandlerVtbl; + + interface ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler + { + CONST_VTBL struct ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DedicatedWorkerDedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerDestroyingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DedicatedWorkerDestroyingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DedicatedWorkerDestroyingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DedicatedWorkerDestroyingEventHandler = {0x72473d5f,0xcba2,0x57ca,{0xa4,0x2e,0x03,0x61,0x0a,0x34,0x9f,0xef}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("72473d5f-cba2-57ca-a42e-03610a349fef") + ICoreWebView2DedicatedWorkerDestroyingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2DedicatedWorker *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DedicatedWorkerDestroyingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DedicatedWorkerDestroyingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DedicatedWorkerDestroyingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DedicatedWorkerDestroyingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorkerDestroyingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DedicatedWorkerDestroyingEventHandler * This, + /* [in] */ ICoreWebView2DedicatedWorker *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2DedicatedWorkerDestroyingEventHandlerVtbl; + + interface ICoreWebView2DedicatedWorkerDestroyingEventHandler + { + CONST_VTBL struct ICoreWebView2DedicatedWorkerDestroyingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DedicatedWorkerDestroyingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DedicatedWorkerDestroyingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DedicatedWorkerDestroyingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DedicatedWorkerDestroyingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DedicatedWorkerDestroyingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler = {0xb366218b,0x0bb8,0x58a3,{0xac,0x33,0xf4,0x0a,0x22,0x35,0x36,0x6e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b366218b-0bb8-58a3-ac33-f40a2235366e") + ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2DedicatedWorker *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler * This, + /* [in] */ ICoreWebView2DedicatedWorker *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandlerVtbl; + + interface ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DedicatedWorkerCreatedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2DedicatedWorkerCreatedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DedicatedWorkerCreatedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DedicatedWorkerCreatedEventArgs = {0x910c52af,0x8129,0x516d,{0xab,0x9a,0xb5,0x24,0xe3,0x77,0xd8,0xac}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("910c52af-8129-516d-ab9a-b524e377d8ac") + ICoreWebView2DedicatedWorkerCreatedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_OriginalSourceFrameInfo( + /* [retval][out] */ ICoreWebView2FrameInfo **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Worker( + /* [retval][out] */ ICoreWebView2DedicatedWorker **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DedicatedWorkerCreatedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DedicatedWorkerCreatedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DedicatedWorkerCreatedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DedicatedWorkerCreatedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorkerCreatedEventArgs, get_OriginalSourceFrameInfo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_OriginalSourceFrameInfo )( + ICoreWebView2DedicatedWorkerCreatedEventArgs * This, + /* [retval][out] */ ICoreWebView2FrameInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2DedicatedWorkerCreatedEventArgs, get_Worker) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Worker )( + ICoreWebView2DedicatedWorkerCreatedEventArgs * This, + /* [retval][out] */ ICoreWebView2DedicatedWorker **value); + + END_INTERFACE + } ICoreWebView2DedicatedWorkerCreatedEventArgsVtbl; + + interface ICoreWebView2DedicatedWorkerCreatedEventArgs + { + CONST_VTBL struct ICoreWebView2DedicatedWorkerCreatedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DedicatedWorkerCreatedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DedicatedWorkerCreatedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DedicatedWorkerCreatedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DedicatedWorkerCreatedEventArgs_get_OriginalSourceFrameInfo(This,value) \ + ( (This)->lpVtbl -> get_OriginalSourceFrameInfo(This,value) ) + +#define ICoreWebView2DedicatedWorkerCreatedEventArgs_get_Worker(This,value) \ + ( (This)->lpVtbl -> get_Worker(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DedicatedWorkerCreatedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Deferral_INTERFACE_DEFINED__ +#define __ICoreWebView2Deferral_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Deferral */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Deferral = {0xc10e7f7b,0xb585,0x46f0,{0xa6,0x23,0x8b,0xef,0xbf,0x3e,0x4e,0xe0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c10e7f7b-b585-46f0-a623-8befbf3e4ee0") + ICoreWebView2Deferral : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Complete( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DeferralVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Deferral * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Deferral * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Deferral * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Deferral, Complete) + HRESULT ( STDMETHODCALLTYPE *Complete )( + ICoreWebView2Deferral * This); + + END_INTERFACE + } ICoreWebView2DeferralVtbl; + + interface ICoreWebView2Deferral + { + CONST_VTBL struct ICoreWebView2DeferralVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Deferral_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Deferral_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Deferral_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Deferral_Complete(This) \ + ( (This)->lpVtbl -> Complete(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Deferral_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventReceivedEventArgs = {0x653c2959,0xbb3a,0x4377,{0x86,0x32,0xb5,0x8a,0xda,0x4e,0x66,0xc4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("653c2959-bb3a-4377-8632-b58ada4e66c4") + ICoreWebView2DevToolsProtocolEventReceivedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ParameterObjectAsJson( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceivedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventArgs, get_ParameterObjectAsJson) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParameterObjectAsJson )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceivedEventArgsVtbl; + + interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceivedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_get_ParameterObjectAsJson(This,value) \ + ( (This)->lpVtbl -> get_ParameterObjectAsJson(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 = {0x2dc4959d,0x1494,0x4393,{0x95,0xba,0xbe,0xa4,0xcb,0x9e,0xbd,0x1b}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2dc4959d-1494-4393-95ba-bea4cb9ebd1b") + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 : public ICoreWebView2DevToolsProtocolEventReceivedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SessionId( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceivedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventArgs, get_ParameterObjectAsJson) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParameterObjectAsJson )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventArgs2, get_SessionId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SessionId )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceivedEventArgs2Vtbl; + + interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceivedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_get_ParameterObjectAsJson(This,value) \ + ( (This)->lpVtbl -> get_ParameterObjectAsJson(This,value) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_get_SessionId(This,value) \ + ( (This)->lpVtbl -> get_SessionId(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceiver_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceiver_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceiver */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventReceiver = {0xb32ca51a,0x8371,0x45e9,{0x93,0x17,0xaf,0x02,0x1d,0x08,0x03,0x67}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b32ca51a-8371-45e9-9317-af021d080367") + ICoreWebView2DevToolsProtocolEventReceiver : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE add_DevToolsProtocolEventReceived( + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DevToolsProtocolEventReceived( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceiverVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceiver * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceiver * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceiver * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceiver, add_DevToolsProtocolEventReceived) + HRESULT ( STDMETHODCALLTYPE *add_DevToolsProtocolEventReceived )( + ICoreWebView2DevToolsProtocolEventReceiver * This, + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceiver, remove_DevToolsProtocolEventReceived) + HRESULT ( STDMETHODCALLTYPE *remove_DevToolsProtocolEventReceived )( + ICoreWebView2DevToolsProtocolEventReceiver * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceiverVtbl; + + interface ICoreWebView2DevToolsProtocolEventReceiver + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceiverVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceiver_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceiver_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceiver_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceiver_add_DevToolsProtocolEventReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DevToolsProtocolEventReceived(This,eventHandler,token) ) + +#define ICoreWebView2DevToolsProtocolEventReceiver_remove_DevToolsProtocolEventReceived(This,token) \ + ( (This)->lpVtbl -> remove_DevToolsProtocolEventReceived(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceiver_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventReceivedEventHandler = {0xe2fda4be,0x5456,0x406c,{0xa2,0x61,0x3d,0x45,0x21,0x38,0x36,0x2c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e2fda4be-5456-406c-a261-3d452138362c") + ICoreWebView2DevToolsProtocolEventReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceivedEventHandlerVtbl; + + interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DownloadOperation_INTERFACE_DEFINED__ +#define __ICoreWebView2DownloadOperation_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DownloadOperation */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DownloadOperation = {0x3d6b6cf2,0xafe1,0x44c7,{0xa9,0x95,0xc6,0x51,0x17,0x71,0x43,0x36}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3d6b6cf2-afe1-44c7-a995-c65117714336") + ICoreWebView2DownloadOperation : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE add_BytesReceivedChanged( + /* [in] */ ICoreWebView2BytesReceivedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_BytesReceivedChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_EstimatedEndTimeChanged( + /* [in] */ ICoreWebView2EstimatedEndTimeChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_EstimatedEndTimeChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_StateChanged( + /* [in] */ ICoreWebView2StateChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_StateChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ContentDisposition( + /* [retval][out] */ LPWSTR *contentDisposition) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MimeType( + /* [retval][out] */ LPWSTR *mimeType) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TotalBytesToReceive( + /* [retval][out] */ INT64 *totalBytesToReceive) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BytesReceived( + /* [retval][out] */ INT64 *bytesReceived) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_EstimatedEndTime( + /* [retval][out] */ LPWSTR *estimatedEndTime) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ResultFilePath( + /* [retval][out] */ LPWSTR *resultFilePath) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_State( + /* [retval][out] */ COREWEBVIEW2_DOWNLOAD_STATE *downloadState) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_InterruptReason( + /* [retval][out] */ COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON *interruptReason) = 0; + + virtual HRESULT STDMETHODCALLTYPE Cancel( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Pause( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Resume( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CanResume( + /* [retval][out] */ BOOL *canResume) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DownloadOperationVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DownloadOperation * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DownloadOperation * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DownloadOperation * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, add_BytesReceivedChanged) + HRESULT ( STDMETHODCALLTYPE *add_BytesReceivedChanged )( + ICoreWebView2DownloadOperation * This, + /* [in] */ ICoreWebView2BytesReceivedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, remove_BytesReceivedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_BytesReceivedChanged )( + ICoreWebView2DownloadOperation * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, add_EstimatedEndTimeChanged) + HRESULT ( STDMETHODCALLTYPE *add_EstimatedEndTimeChanged )( + ICoreWebView2DownloadOperation * This, + /* [in] */ ICoreWebView2EstimatedEndTimeChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, remove_EstimatedEndTimeChanged) + HRESULT ( STDMETHODCALLTYPE *remove_EstimatedEndTimeChanged )( + ICoreWebView2DownloadOperation * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, add_StateChanged) + HRESULT ( STDMETHODCALLTYPE *add_StateChanged )( + ICoreWebView2DownloadOperation * This, + /* [in] */ ICoreWebView2StateChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, remove_StateChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StateChanged )( + ICoreWebView2DownloadOperation * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_ContentDisposition) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContentDisposition )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ LPWSTR *contentDisposition); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_MimeType) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MimeType )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ LPWSTR *mimeType); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_TotalBytesToReceive) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TotalBytesToReceive )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ INT64 *totalBytesToReceive); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_BytesReceived) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BytesReceived )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ INT64 *bytesReceived); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_EstimatedEndTime) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_EstimatedEndTime )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ LPWSTR *estimatedEndTime); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_ResultFilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultFilePath )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ LPWSTR *resultFilePath); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_State) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ COREWEBVIEW2_DOWNLOAD_STATE *downloadState); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_InterruptReason) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_InterruptReason )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON *interruptReason); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, Cancel) + HRESULT ( STDMETHODCALLTYPE *Cancel )( + ICoreWebView2DownloadOperation * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, Pause) + HRESULT ( STDMETHODCALLTYPE *Pause )( + ICoreWebView2DownloadOperation * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2DownloadOperation * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_CanResume) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanResume )( + ICoreWebView2DownloadOperation * This, + /* [retval][out] */ BOOL *canResume); + + END_INTERFACE + } ICoreWebView2DownloadOperationVtbl; + + interface ICoreWebView2DownloadOperation + { + CONST_VTBL struct ICoreWebView2DownloadOperationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DownloadOperation_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DownloadOperation_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DownloadOperation_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DownloadOperation_add_BytesReceivedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BytesReceivedChanged(This,eventHandler,token) ) + +#define ICoreWebView2DownloadOperation_remove_BytesReceivedChanged(This,token) \ + ( (This)->lpVtbl -> remove_BytesReceivedChanged(This,token) ) + +#define ICoreWebView2DownloadOperation_add_EstimatedEndTimeChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_EstimatedEndTimeChanged(This,eventHandler,token) ) + +#define ICoreWebView2DownloadOperation_remove_EstimatedEndTimeChanged(This,token) \ + ( (This)->lpVtbl -> remove_EstimatedEndTimeChanged(This,token) ) + +#define ICoreWebView2DownloadOperation_add_StateChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StateChanged(This,eventHandler,token) ) + +#define ICoreWebView2DownloadOperation_remove_StateChanged(This,token) \ + ( (This)->lpVtbl -> remove_StateChanged(This,token) ) + +#define ICoreWebView2DownloadOperation_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2DownloadOperation_get_ContentDisposition(This,contentDisposition) \ + ( (This)->lpVtbl -> get_ContentDisposition(This,contentDisposition) ) + +#define ICoreWebView2DownloadOperation_get_MimeType(This,mimeType) \ + ( (This)->lpVtbl -> get_MimeType(This,mimeType) ) + +#define ICoreWebView2DownloadOperation_get_TotalBytesToReceive(This,totalBytesToReceive) \ + ( (This)->lpVtbl -> get_TotalBytesToReceive(This,totalBytesToReceive) ) + +#define ICoreWebView2DownloadOperation_get_BytesReceived(This,bytesReceived) \ + ( (This)->lpVtbl -> get_BytesReceived(This,bytesReceived) ) + +#define ICoreWebView2DownloadOperation_get_EstimatedEndTime(This,estimatedEndTime) \ + ( (This)->lpVtbl -> get_EstimatedEndTime(This,estimatedEndTime) ) + +#define ICoreWebView2DownloadOperation_get_ResultFilePath(This,resultFilePath) \ + ( (This)->lpVtbl -> get_ResultFilePath(This,resultFilePath) ) + +#define ICoreWebView2DownloadOperation_get_State(This,downloadState) \ + ( (This)->lpVtbl -> get_State(This,downloadState) ) + +#define ICoreWebView2DownloadOperation_get_InterruptReason(This,interruptReason) \ + ( (This)->lpVtbl -> get_InterruptReason(This,interruptReason) ) + +#define ICoreWebView2DownloadOperation_Cancel(This) \ + ( (This)->lpVtbl -> Cancel(This) ) + +#define ICoreWebView2DownloadOperation_Pause(This) \ + ( (This)->lpVtbl -> Pause(This) ) + +#define ICoreWebView2DownloadOperation_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2DownloadOperation_get_CanResume(This,canResume) \ + ( (This)->lpVtbl -> get_CanResume(This,canResume) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DownloadOperation_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BytesReceivedChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2BytesReceivedChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BytesReceivedChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BytesReceivedChangedEventHandler = {0x828e8ab6,0xd94c,0x4264,{0x9c,0xef,0x52,0x17,0x17,0x0d,0x62,0x51}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("828e8ab6-d94c-4264-9cef-5217170d6251") + ICoreWebView2BytesReceivedChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2DownloadOperation *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BytesReceivedChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BytesReceivedChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BytesReceivedChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BytesReceivedChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BytesReceivedChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2BytesReceivedChangedEventHandler * This, + /* [in] */ ICoreWebView2DownloadOperation *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2BytesReceivedChangedEventHandlerVtbl; + + interface ICoreWebView2BytesReceivedChangedEventHandler + { + CONST_VTBL struct ICoreWebView2BytesReceivedChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BytesReceivedChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BytesReceivedChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BytesReceivedChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BytesReceivedChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BytesReceivedChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EstimatedEndTimeChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2EstimatedEndTimeChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EstimatedEndTimeChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EstimatedEndTimeChangedEventHandler = {0x28f0d425,0x93fe,0x4e63,{0x9f,0x8d,0x2a,0xee,0xc6,0xd3,0xba,0x1e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("28f0d425-93fe-4e63-9f8d-2aeec6d3ba1e") + ICoreWebView2EstimatedEndTimeChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2DownloadOperation *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EstimatedEndTimeChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EstimatedEndTimeChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EstimatedEndTimeChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EstimatedEndTimeChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EstimatedEndTimeChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2EstimatedEndTimeChangedEventHandler * This, + /* [in] */ ICoreWebView2DownloadOperation *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2EstimatedEndTimeChangedEventHandlerVtbl; + + interface ICoreWebView2EstimatedEndTimeChangedEventHandler + { + CONST_VTBL struct ICoreWebView2EstimatedEndTimeChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EstimatedEndTimeChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EstimatedEndTimeChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EstimatedEndTimeChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EstimatedEndTimeChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EstimatedEndTimeChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2StateChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2StateChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2StateChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StateChangedEventHandler = {0x81336594,0x7ede,0x4ba9,{0xbf,0x71,0xac,0xf0,0xa9,0x5b,0x58,0xdd}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("81336594-7ede-4ba9-bf71-acf0a95b58dd") + ICoreWebView2StateChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2DownloadOperation *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2StateChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2StateChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2StateChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2StateChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2StateChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2StateChangedEventHandler * This, + /* [in] */ ICoreWebView2DownloadOperation *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2StateChangedEventHandlerVtbl; + + interface ICoreWebView2StateChangedEventHandler + { + CONST_VTBL struct ICoreWebView2StateChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2StateChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2StateChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2StateChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2StateChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2StateChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DownloadStartingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2DownloadStartingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DownloadStartingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DownloadStartingEventArgs = {0xe99bbe21,0x43e9,0x4544,{0xa7,0x32,0x28,0x27,0x64,0xea,0xfa,0x60}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e99bbe21-43e9-4544-a732-282764eafa60") + ICoreWebView2DownloadStartingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DownloadOperation( + /* [retval][out] */ ICoreWebView2DownloadOperation **downloadOperation) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *cancel) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL cancel) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ResultFilePath( + /* [retval][out] */ LPWSTR *resultFilePath) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ResultFilePath( + /* [in] */ LPCWSTR resultFilePath) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *handled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL handled) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DownloadStartingEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DownloadStartingEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DownloadStartingEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_DownloadOperation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadOperation )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2DownloadOperation **downloadOperation); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [retval][out] */ BOOL *cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [in] */ BOOL cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_ResultFilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultFilePath )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [retval][out] */ LPWSTR *resultFilePath); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, put_ResultFilePath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ResultFilePath )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [in] */ LPCWSTR resultFilePath); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [retval][out] */ BOOL *handled); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [in] */ BOOL handled); + + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2DownloadStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2DownloadStartingEventArgsVtbl; + + interface ICoreWebView2DownloadStartingEventArgs + { + CONST_VTBL struct ICoreWebView2DownloadStartingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DownloadStartingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DownloadStartingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DownloadStartingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DownloadStartingEventArgs_get_DownloadOperation(This,downloadOperation) \ + ( (This)->lpVtbl -> get_DownloadOperation(This,downloadOperation) ) + +#define ICoreWebView2DownloadStartingEventArgs_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2DownloadStartingEventArgs_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2DownloadStartingEventArgs_get_ResultFilePath(This,resultFilePath) \ + ( (This)->lpVtbl -> get_ResultFilePath(This,resultFilePath) ) + +#define ICoreWebView2DownloadStartingEventArgs_put_ResultFilePath(This,resultFilePath) \ + ( (This)->lpVtbl -> put_ResultFilePath(This,resultFilePath) ) + +#define ICoreWebView2DownloadStartingEventArgs_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2DownloadStartingEventArgs_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#define ICoreWebView2DownloadStartingEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DownloadStartingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DragStartingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2DragStartingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DragStartingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DragStartingEventArgs = {0x8b8d9c7e,0x2f1a,0x4e6b,{0x9d,0x5a,0x3c,0x8f,0x7b,0x9e,0x1a,0x2d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8b8d9c7e-2f1a-4e6b-9d5a-3c8f7b9e1a2d") + ICoreWebView2DragStartingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AllowedDropEffects( + /* [retval][out] */ DWORD *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Data( + /* [retval][out] */ IDataObject **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Position( + /* [retval][out] */ POINT *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DragStartingEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DragStartingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DragStartingEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DragStartingEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DragStartingEventArgs, get_AllowedDropEffects) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowedDropEffects )( + ICoreWebView2DragStartingEventArgs * This, + /* [retval][out] */ DWORD *value); + + DECLSPEC_XFGVIRT(ICoreWebView2DragStartingEventArgs, get_Data) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Data )( + ICoreWebView2DragStartingEventArgs * This, + /* [retval][out] */ IDataObject **value); + + DECLSPEC_XFGVIRT(ICoreWebView2DragStartingEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2DragStartingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2DragStartingEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2DragStartingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2DragStartingEventArgs, get_Position) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Position )( + ICoreWebView2DragStartingEventArgs * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2DragStartingEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2DragStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **value); + + END_INTERFACE + } ICoreWebView2DragStartingEventArgsVtbl; + + interface ICoreWebView2DragStartingEventArgs + { + CONST_VTBL struct ICoreWebView2DragStartingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DragStartingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DragStartingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DragStartingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DragStartingEventArgs_get_AllowedDropEffects(This,value) \ + ( (This)->lpVtbl -> get_AllowedDropEffects(This,value) ) + +#define ICoreWebView2DragStartingEventArgs_get_Data(This,value) \ + ( (This)->lpVtbl -> get_Data(This,value) ) + +#define ICoreWebView2DragStartingEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2DragStartingEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#define ICoreWebView2DragStartingEventArgs_get_Position(This,value) \ + ( (This)->lpVtbl -> get_Position(This,value) ) + +#define ICoreWebView2DragStartingEventArgs_GetDeferral(This,value) \ + ( (This)->lpVtbl -> GetDeferral(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DragStartingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment = {0xb96d755e,0x0319,0x4e92,{0xa2,0x96,0x23,0x43,0x6f,0x46,0xa1,0xfc}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b96d755e-0319-4e92-a296-23436f46a1fc") + ICoreWebView2Environment : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2Controller( + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateWebResourceResponse( + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BrowserVersionString( + /* [retval][out] */ LPWSTR *versionInfo) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NewBrowserVersionAvailable( + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NewBrowserVersionAvailable( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2EnvironmentVtbl; + + interface ICoreWebView2Environment + { + CONST_VTBL struct ICoreWebView2EnvironmentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewBrowserVersionAvailableEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NewBrowserVersionAvailableEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewBrowserVersionAvailableEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewBrowserVersionAvailableEventHandler = {0xf9a2976e,0xd34e,0x44fc,{0xad,0xee,0x81,0xb6,0xb5,0x7c,0xa9,0x14}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f9a2976e-d34e-44fc-adee-81b6b57ca914") + ICoreWebView2NewBrowserVersionAvailableEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewBrowserVersionAvailableEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NewBrowserVersionAvailableEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This, + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2NewBrowserVersionAvailableEventHandlerVtbl; + + interface ICoreWebView2NewBrowserVersionAvailableEventHandler + { + CONST_VTBL struct ICoreWebView2NewBrowserVersionAvailableEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewBrowserVersionAvailableEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CreateCoreWebView2ControllerCompletedHandler = {0x6c4819f3,0xc9b7,0x4260,{0x81,0x27,0xc9,0xf5,0xbd,0xe7,0xf6,0x8c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6c4819f3-c9b7-4260-8127-c9f5bde7f68c") + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2Controller *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CreateCoreWebView2ControllerCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CreateCoreWebView2ControllerCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2Controller *result); + + END_INTERFACE + } ICoreWebView2CreateCoreWebView2ControllerCompletedHandlerVtbl; + + interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler + { + CONST_VTBL struct ICoreWebView2CreateCoreWebView2ControllerCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler = {0x4e8a3389,0xc9d8,0x4bd2,{0xb6,0xb5,0x12,0x4f,0xee,0x6c,0xc1,0x4d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4e8a3389-c9d8-4bd2-b6b5-124fee6cc14d") + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2Environment *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2Environment *result); + + END_INTERFACE + } ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl; + + interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler + { + CONST_VTBL struct ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment2_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment2 = {0x41f3632b,0x5ef4,0x404f,{0xad,0x82,0x2d,0x60,0x6c,0x5a,0x9a,0x21}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("41f3632b-5ef4-404f-ad82-2d606c5a9a21") + ICoreWebView2Environment2 : public ICoreWebView2Environment + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateWebResourceRequest( + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment2 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment2 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment2 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment2 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment2 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + END_INTERFACE + } ICoreWebView2Environment2Vtbl; + + interface ICoreWebView2Environment2 + { + CONST_VTBL struct ICoreWebView2Environment2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment2_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment2_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment2_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment2_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment2_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment2_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment3_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment3 = {0x80a22ae3,0xbe7c,0x4ce2,{0xaf,0xe1,0x5a,0x50,0x05,0x6c,0xde,0xeb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("80a22ae3-be7c-4ce2-afe1-5a50056cdeeb") + ICoreWebView2Environment3 : public ICoreWebView2Environment2 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2CompositionController( + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2PointerInfo( + /* [retval][out] */ ICoreWebView2PointerInfo **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment3 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment3 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment3 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment3 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment3 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment3 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment3 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + END_INTERFACE + } ICoreWebView2Environment3Vtbl; + + interface ICoreWebView2Environment3 + { + CONST_VTBL struct ICoreWebView2Environment3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment3_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment3_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment3_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment3_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment3_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment3_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment3_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment3_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler = {0x02fab84b,0x1428,0x4fb7,{0xad,0x45,0x1b,0x2e,0x64,0x73,0x61,0x84}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("02fab84b-1428-4fb7-ad45-1b2e64736184") + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2CompositionController *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2CompositionController *result); + + END_INTERFACE + } ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandlerVtbl; + + interface ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler + { + CONST_VTBL struct ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment4_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment4 = {0x20944379,0x6dcf,0x41d6,{0xa0,0xa0,0xab,0xc0,0xfc,0x50,0xde,0x0d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("20944379-6dcf-41d6-a0a0-abc0fc50de0d") + ICoreWebView2Environment4 : public ICoreWebView2Environment3 + { + public: + virtual HRESULT STDMETHODCALLTYPE GetAutomationProviderForWindow( + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment4 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment4 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment4 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment4 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment4 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment4 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment4 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment4 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + END_INTERFACE + } ICoreWebView2Environment4Vtbl; + + interface ICoreWebView2Environment4 + { + CONST_VTBL struct ICoreWebView2Environment4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment4_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment4_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment4_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment4_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment4_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment4_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment4_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment4_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment4_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment5_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment5_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment5 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment5 = {0x319e423d,0xe0d7,0x4b8d,{0x92,0x54,0xae,0x94,0x75,0xde,0x9b,0x17}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("319e423d-e0d7-4b8d-9254-ae9475de9b17") + ICoreWebView2Environment5 : public ICoreWebView2Environment4 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_BrowserProcessExited( + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_BrowserProcessExited( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment5Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment5 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment5 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment5 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment5 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment5 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment5 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment5 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment5 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment5 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment5 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment5 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment5 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Environment5Vtbl; + + interface ICoreWebView2Environment5 + { + CONST_VTBL struct ICoreWebView2Environment5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment5_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment5_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment5_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment5_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment5_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment5_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment5_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment5_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment5_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment5_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment5_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment5_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserProcessExitedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2BrowserProcessExitedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BrowserProcessExitedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserProcessExitedEventHandler = {0xfa504257,0xa216,0x4911,{0xa8,0x60,0xfe,0x88,0x25,0x71,0x28,0x61}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fa504257-a216-4911-a860-fe8825712861") + ICoreWebView2BrowserProcessExitedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ ICoreWebView2BrowserProcessExitedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BrowserProcessExitedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BrowserProcessExitedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BrowserProcessExitedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BrowserProcessExitedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserProcessExitedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2BrowserProcessExitedEventHandler * This, + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ ICoreWebView2BrowserProcessExitedEventArgs *args); + + END_INTERFACE + } ICoreWebView2BrowserProcessExitedEventHandlerVtbl; + + interface ICoreWebView2BrowserProcessExitedEventHandler + { + CONST_VTBL struct ICoreWebView2BrowserProcessExitedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BrowserProcessExitedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BrowserProcessExitedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BrowserProcessExitedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BrowserProcessExitedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BrowserProcessExitedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment6_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment6_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment6 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment6 = {0xe59ee362,0xacbd,0x4857,{0x9a,0x8e,0xd3,0x64,0x4d,0x94,0x59,0xa9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e59ee362-acbd-4857-9a8e-d3644d9459a9") + ICoreWebView2Environment6 : public ICoreWebView2Environment5 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreatePrintSettings( + /* [retval][out] */ ICoreWebView2PrintSettings **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment6Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment6 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment6 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment6 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment6 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment6 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment6 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment6 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment6 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment6 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment6 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment6 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment6 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + END_INTERFACE + } ICoreWebView2Environment6Vtbl; + + interface ICoreWebView2Environment6 + { + CONST_VTBL struct ICoreWebView2Environment6Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment6_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment6_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment6_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment6_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment6_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment6_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment6_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment6_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment6_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment6_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment6_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment6_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment6_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment6_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment6_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment6_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment7_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment7 = {0x43c22296,0x3bbd,0x43a4,{0x9c,0x00,0x5c,0x0d,0xf6,0xdd,0x29,0xa2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("43c22296-3bbd-43a4-9c00-5c0df6dd29a2") + ICoreWebView2Environment7 : public ICoreWebView2Environment6 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_UserDataFolder( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment7 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment7 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment7 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment7 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment7 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment7 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment7 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2Environment7Vtbl; + + interface ICoreWebView2Environment7 + { + CONST_VTBL struct ICoreWebView2Environment7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment7_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment7_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment7_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment7_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment7_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment7_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment7_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment7_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment7_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment7_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment7_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment7_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment7_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment7_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment8_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment8 = {0xd6eb91dd,0xc3d2,0x45e5,{0xbd,0x29,0x6d,0xc2,0xbc,0x4d,0xe9,0xcf}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("d6eb91dd-c3d2-45e5-bd29-6dc2bc4de9cf") + ICoreWebView2Environment8 : public ICoreWebView2Environment7 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ProcessInfosChanged( + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ProcessInfosChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetProcessInfos( + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment8 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment8 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment8 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment8 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment8 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment8 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment8 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment8 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + END_INTERFACE + } ICoreWebView2Environment8Vtbl; + + interface ICoreWebView2Environment8 + { + CONST_VTBL struct ICoreWebView2Environment8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment8_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment8_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment8_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment8_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment8_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment8_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment8_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment8_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment8_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment8_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment8_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment8_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment8_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment8_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment8_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment8_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfosChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessInfosChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessInfosChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessInfosChangedEventHandler = {0xf4af0c39,0x44b9,0x40e9,{0x8b,0x11,0x04,0x84,0xcf,0xb9,0xe0,0xa1}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f4af0c39-44b9-40e9-8b11-0484cfb9e0a1") + ICoreWebView2ProcessInfosChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessInfosChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessInfosChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessInfosChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessInfosChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfosChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ProcessInfosChangedEventHandler * This, + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ProcessInfosChangedEventHandlerVtbl; + + interface ICoreWebView2ProcessInfosChangedEventHandler + { + CONST_VTBL struct ICoreWebView2ProcessInfosChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessInfosChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessInfosChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessInfosChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessInfosChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessInfosChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfoCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessInfoCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessInfoCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessInfoCollection = {0x402b99cd,0xa0cc,0x4fa5,{0xb7,0xa5,0x51,0xd8,0x6a,0x1d,0x23,0x39}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("402b99cd-a0cc-4fa5-b7a5-51d86a1d2339") + ICoreWebView2ProcessInfoCollection : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ProcessInfo **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessInfoCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessInfoCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessInfoCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessInfoCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfoCollection, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ProcessInfoCollection * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfoCollection, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ProcessInfoCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ProcessInfo **value); + + END_INTERFACE + } ICoreWebView2ProcessInfoCollectionVtbl; + + interface ICoreWebView2ProcessInfoCollection + { + CONST_VTBL struct ICoreWebView2ProcessInfoCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessInfoCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessInfoCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessInfoCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessInfoCollection_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ProcessInfoCollection_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessInfoCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment9_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment9_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment9 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment9 = {0xf06f41bf,0x4b5a,0x49d8,{0xb9,0xf6,0xfa,0x16,0xcd,0x29,0xf2,0x74}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f06f41bf-4b5a-49d8-b9f6-fa16cd29f274") + ICoreWebView2Environment9 : public ICoreWebView2Environment8 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateContextMenuItem( + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment9Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment9 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment9 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment9 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment9 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment9 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment9 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment9 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment9 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment9 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment9 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment9 * This, + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + END_INTERFACE + } ICoreWebView2Environment9Vtbl; + + interface ICoreWebView2Environment9 + { + CONST_VTBL struct ICoreWebView2Environment9Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment9_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment9_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment9_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment9_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment9_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment9_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment9_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment9_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment9_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment9_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment9_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment9_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment9_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment9_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment9_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment9_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment9_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment9_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment9_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment9_CreateContextMenuItem(This,Label,iconStream,Kind,value) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,Label,iconStream,Kind,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment9_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment10_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment10_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment10 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment10 = {0xee0eb9df,0x6f12,0x46ce,{0xb5,0x3f,0x3f,0x47,0xb9,0xc9,0x28,0xe0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ee0eb9df-6f12-46ce-b53f-3f47b9c928e0") + ICoreWebView2Environment10 : public ICoreWebView2Environment9 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2ControllerOptions( + /* [retval][out] */ ICoreWebView2ControllerOptions **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2ControllerWithOptions( + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2CompositionControllerWithOptions( + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment10Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment10 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment10 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment10 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment10 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment10 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment10 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment10 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment10 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment10 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment10 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment10 * This, + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerOptions )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2ControllerOptions **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerWithOptions )( + ICoreWebView2Environment10 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2CompositionControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionControllerWithOptions )( + ICoreWebView2Environment10 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2Environment10Vtbl; + + interface ICoreWebView2Environment10 + { + CONST_VTBL struct ICoreWebView2Environment10Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment10_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment10_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment10_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment10_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment10_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment10_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment10_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment10_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment10_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment10_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment10_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment10_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment10_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment10_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment10_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment10_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment10_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment10_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment10_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment10_CreateContextMenuItem(This,Label,iconStream,Kind,value) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,Label,iconStream,Kind,value) ) + + +#define ICoreWebView2Environment10_CreateCoreWebView2ControllerOptions(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerOptions(This,value) ) + +#define ICoreWebView2Environment10_CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) ) + +#define ICoreWebView2Environment10_CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment10_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment11_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment11_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment11 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment11 = {0xf0913dc6,0xa0ec,0x42ef,{0x98,0x05,0x91,0xdf,0xf3,0xa2,0x96,0x6a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f0913dc6-a0ec-42ef-9805-91dff3a2966a") + ICoreWebView2Environment11 : public ICoreWebView2Environment10 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FailureReportFolderPath( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment11Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment11 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment11 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment11 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment11 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment11 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment11 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment11 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment11 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment11 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment11 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment11 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment11 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment11 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment11 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment11 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment11 * This, + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerOptions )( + ICoreWebView2Environment11 * This, + /* [retval][out] */ ICoreWebView2ControllerOptions **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerWithOptions )( + ICoreWebView2Environment11 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2CompositionControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionControllerWithOptions )( + ICoreWebView2Environment11 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment11, get_FailureReportFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FailureReportFolderPath )( + ICoreWebView2Environment11 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2Environment11Vtbl; + + interface ICoreWebView2Environment11 + { + CONST_VTBL struct ICoreWebView2Environment11Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment11_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment11_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment11_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment11_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment11_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment11_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment11_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment11_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment11_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment11_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment11_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment11_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment11_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment11_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment11_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment11_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment11_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment11_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment11_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment11_CreateContextMenuItem(This,Label,iconStream,Kind,value) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,Label,iconStream,Kind,value) ) + + +#define ICoreWebView2Environment11_CreateCoreWebView2ControllerOptions(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerOptions(This,value) ) + +#define ICoreWebView2Environment11_CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) ) + +#define ICoreWebView2Environment11_CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) ) + + +#define ICoreWebView2Environment11_get_FailureReportFolderPath(This,value) \ + ( (This)->lpVtbl -> get_FailureReportFolderPath(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment11_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment12_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment12_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment12 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment12 = {0xf503db9b,0x739f,0x48dd,{0xb1,0x51,0xfd,0xfc,0xf2,0x53,0xf5,0x4e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f503db9b-739f-48dd-b151-fdfcf253f54e") + ICoreWebView2Environment12 : public ICoreWebView2Environment11 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateSharedBuffer( + /* [in] */ UINT64 Size, + /* [retval][out] */ ICoreWebView2SharedBuffer **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment12Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment12 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment12 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment12 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment12 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment12 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment12 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment12 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment12 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment12 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment12 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment12 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment12 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment12 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment12 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment12 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment12 * This, + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerOptions )( + ICoreWebView2Environment12 * This, + /* [retval][out] */ ICoreWebView2ControllerOptions **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerWithOptions )( + ICoreWebView2Environment12 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2CompositionControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionControllerWithOptions )( + ICoreWebView2Environment12 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment11, get_FailureReportFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FailureReportFolderPath )( + ICoreWebView2Environment12 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment12, CreateSharedBuffer) + HRESULT ( STDMETHODCALLTYPE *CreateSharedBuffer )( + ICoreWebView2Environment12 * This, + /* [in] */ UINT64 Size, + /* [retval][out] */ ICoreWebView2SharedBuffer **value); + + END_INTERFACE + } ICoreWebView2Environment12Vtbl; + + interface ICoreWebView2Environment12 + { + CONST_VTBL struct ICoreWebView2Environment12Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment12_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment12_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment12_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment12_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment12_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment12_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment12_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment12_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment12_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment12_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment12_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment12_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment12_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment12_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment12_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment12_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment12_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment12_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment12_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment12_CreateContextMenuItem(This,Label,iconStream,Kind,value) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,Label,iconStream,Kind,value) ) + + +#define ICoreWebView2Environment12_CreateCoreWebView2ControllerOptions(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerOptions(This,value) ) + +#define ICoreWebView2Environment12_CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) ) + +#define ICoreWebView2Environment12_CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) ) + + +#define ICoreWebView2Environment12_get_FailureReportFolderPath(This,value) \ + ( (This)->lpVtbl -> get_FailureReportFolderPath(This,value) ) + + +#define ICoreWebView2Environment12_CreateSharedBuffer(This,Size,value) \ + ( (This)->lpVtbl -> CreateSharedBuffer(This,Size,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment12_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment13_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment13_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment13 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment13 = {0xaf641f58,0x72b2,0x11ee,{0xb9,0x62,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("af641f58-72b2-11ee-b962-0242ac120002") + ICoreWebView2Environment13 : public ICoreWebView2Environment12 + { + public: + virtual HRESULT STDMETHODCALLTYPE GetProcessExtendedInfos( + /* [in] */ ICoreWebView2GetProcessExtendedInfosCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment13Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment13 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment13 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment13 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment13 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment13 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment13 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment13 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment13 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment13 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment13 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment13 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment13 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment13 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment13 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment13 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment13 * This, + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerOptions )( + ICoreWebView2Environment13 * This, + /* [retval][out] */ ICoreWebView2ControllerOptions **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerWithOptions )( + ICoreWebView2Environment13 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2CompositionControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionControllerWithOptions )( + ICoreWebView2Environment13 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment11, get_FailureReportFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FailureReportFolderPath )( + ICoreWebView2Environment13 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment12, CreateSharedBuffer) + HRESULT ( STDMETHODCALLTYPE *CreateSharedBuffer )( + ICoreWebView2Environment13 * This, + /* [in] */ UINT64 Size, + /* [retval][out] */ ICoreWebView2SharedBuffer **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment13, GetProcessExtendedInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessExtendedInfos )( + ICoreWebView2Environment13 * This, + /* [in] */ ICoreWebView2GetProcessExtendedInfosCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2Environment13Vtbl; + + interface ICoreWebView2Environment13 + { + CONST_VTBL struct ICoreWebView2Environment13Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment13_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment13_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment13_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment13_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment13_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment13_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment13_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment13_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment13_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment13_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment13_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment13_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment13_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment13_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment13_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment13_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment13_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment13_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment13_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment13_CreateContextMenuItem(This,Label,iconStream,Kind,value) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,Label,iconStream,Kind,value) ) + + +#define ICoreWebView2Environment13_CreateCoreWebView2ControllerOptions(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerOptions(This,value) ) + +#define ICoreWebView2Environment13_CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) ) + +#define ICoreWebView2Environment13_CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) ) + + +#define ICoreWebView2Environment13_get_FailureReportFolderPath(This,value) \ + ( (This)->lpVtbl -> get_FailureReportFolderPath(This,value) ) + + +#define ICoreWebView2Environment13_CreateSharedBuffer(This,Size,value) \ + ( (This)->lpVtbl -> CreateSharedBuffer(This,Size,value) ) + + +#define ICoreWebView2Environment13_GetProcessExtendedInfos(This,handler) \ + ( (This)->lpVtbl -> GetProcessExtendedInfos(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment13_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2GetProcessExtendedInfosCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2GetProcessExtendedInfosCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2GetProcessExtendedInfosCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetProcessExtendedInfosCompletedHandler = {0xf45e55aa,0x3bc2,0x11ee,{0xbe,0x56,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f45e55aa-3bc2-11ee-be56-0242ac120002") + ICoreWebView2GetProcessExtendedInfosCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2ProcessExtendedInfoCollection *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2GetProcessExtendedInfosCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2GetProcessExtendedInfosCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2GetProcessExtendedInfosCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2GetProcessExtendedInfosCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2GetProcessExtendedInfosCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2GetProcessExtendedInfosCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2ProcessExtendedInfoCollection *result); + + END_INTERFACE + } ICoreWebView2GetProcessExtendedInfosCompletedHandlerVtbl; + + interface ICoreWebView2GetProcessExtendedInfosCompletedHandler + { + CONST_VTBL struct ICoreWebView2GetProcessExtendedInfosCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2GetProcessExtendedInfosCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2GetProcessExtendedInfosCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2GetProcessExtendedInfosCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2GetProcessExtendedInfosCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2GetProcessExtendedInfosCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessExtendedInfoCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessExtendedInfoCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessExtendedInfoCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessExtendedInfoCollection = {0x32efa696,0x407a,0x11ee,{0xbe,0x56,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("32efa696-407a-11ee-be56-0242ac120002") + ICoreWebView2ProcessExtendedInfoCollection : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ProcessExtendedInfo **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessExtendedInfoCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessExtendedInfoCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessExtendedInfoCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessExtendedInfoCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessExtendedInfoCollection, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ProcessExtendedInfoCollection * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessExtendedInfoCollection, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ProcessExtendedInfoCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ProcessExtendedInfo **value); + + END_INTERFACE + } ICoreWebView2ProcessExtendedInfoCollectionVtbl; + + interface ICoreWebView2ProcessExtendedInfoCollection + { + CONST_VTBL struct ICoreWebView2ProcessExtendedInfoCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessExtendedInfoCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessExtendedInfoCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessExtendedInfoCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessExtendedInfoCollection_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ProcessExtendedInfoCollection_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessExtendedInfoCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment14_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment14_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment14 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment14 = {0xa5e9fad9,0xc875,0x59da,{0x9b,0xd7,0x47,0x3a,0xa5,0xca,0x1c,0xef}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a5e9fad9-c875-59da-9bd7-473aa5ca1cef") + ICoreWebView2Environment14 : public ICoreWebView2Environment13 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateWebFileSystemFileHandle( + /* [in] */ LPCWSTR path, + /* [in] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION permission, + /* [retval][out] */ ICoreWebView2FileSystemHandle **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateWebFileSystemDirectoryHandle( + /* [in] */ LPCWSTR path, + /* [in] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION permission, + /* [retval][out] */ ICoreWebView2FileSystemHandle **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateObjectCollection( + /* [in] */ UINT32 length, + /* [size_is][in] */ IUnknown **items, + /* [retval][out] */ ICoreWebView2ObjectCollection **objectCollection) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment14Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment14 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment14 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment14 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment14 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment14 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment14 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment14 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment14 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment14 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment14 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment14 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment14 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment14 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment14 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment14 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment14 * This, + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerOptions )( + ICoreWebView2Environment14 * This, + /* [retval][out] */ ICoreWebView2ControllerOptions **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerWithOptions )( + ICoreWebView2Environment14 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2CompositionControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionControllerWithOptions )( + ICoreWebView2Environment14 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment11, get_FailureReportFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FailureReportFolderPath )( + ICoreWebView2Environment14 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment12, CreateSharedBuffer) + HRESULT ( STDMETHODCALLTYPE *CreateSharedBuffer )( + ICoreWebView2Environment14 * This, + /* [in] */ UINT64 Size, + /* [retval][out] */ ICoreWebView2SharedBuffer **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment13, GetProcessExtendedInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessExtendedInfos )( + ICoreWebView2Environment14 * This, + /* [in] */ ICoreWebView2GetProcessExtendedInfosCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment14, CreateWebFileSystemFileHandle) + HRESULT ( STDMETHODCALLTYPE *CreateWebFileSystemFileHandle )( + ICoreWebView2Environment14 * This, + /* [in] */ LPCWSTR path, + /* [in] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION permission, + /* [retval][out] */ ICoreWebView2FileSystemHandle **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment14, CreateWebFileSystemDirectoryHandle) + HRESULT ( STDMETHODCALLTYPE *CreateWebFileSystemDirectoryHandle )( + ICoreWebView2Environment14 * This, + /* [in] */ LPCWSTR path, + /* [in] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION permission, + /* [retval][out] */ ICoreWebView2FileSystemHandle **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment14, CreateObjectCollection) + HRESULT ( STDMETHODCALLTYPE *CreateObjectCollection )( + ICoreWebView2Environment14 * This, + /* [in] */ UINT32 length, + /* [size_is][in] */ IUnknown **items, + /* [retval][out] */ ICoreWebView2ObjectCollection **objectCollection); + + END_INTERFACE + } ICoreWebView2Environment14Vtbl; + + interface ICoreWebView2Environment14 + { + CONST_VTBL struct ICoreWebView2Environment14Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment14_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment14_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment14_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment14_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment14_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment14_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment14_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment14_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment14_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment14_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment14_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment14_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment14_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment14_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment14_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment14_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment14_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment14_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment14_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment14_CreateContextMenuItem(This,Label,iconStream,Kind,value) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,Label,iconStream,Kind,value) ) + + +#define ICoreWebView2Environment14_CreateCoreWebView2ControllerOptions(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerOptions(This,value) ) + +#define ICoreWebView2Environment14_CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) ) + +#define ICoreWebView2Environment14_CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) ) + + +#define ICoreWebView2Environment14_get_FailureReportFolderPath(This,value) \ + ( (This)->lpVtbl -> get_FailureReportFolderPath(This,value) ) + + +#define ICoreWebView2Environment14_CreateSharedBuffer(This,Size,value) \ + ( (This)->lpVtbl -> CreateSharedBuffer(This,Size,value) ) + + +#define ICoreWebView2Environment14_GetProcessExtendedInfos(This,handler) \ + ( (This)->lpVtbl -> GetProcessExtendedInfos(This,handler) ) + + +#define ICoreWebView2Environment14_CreateWebFileSystemFileHandle(This,path,permission,value) \ + ( (This)->lpVtbl -> CreateWebFileSystemFileHandle(This,path,permission,value) ) + +#define ICoreWebView2Environment14_CreateWebFileSystemDirectoryHandle(This,path,permission,value) \ + ( (This)->lpVtbl -> CreateWebFileSystemDirectoryHandle(This,path,permission,value) ) + +#define ICoreWebView2Environment14_CreateObjectCollection(This,length,items,objectCollection) \ + ( (This)->lpVtbl -> CreateObjectCollection(This,length,items,objectCollection) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment14_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment15_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment15_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment15 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment15 = {0x2ac5ebfb,0xe654,0x5961,{0xa6,0x67,0x79,0x71,0x88,0x5c,0x7b,0x27}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2ac5ebfb-e654-5961-a667-7971885c7b27") + ICoreWebView2Environment15 : public ICoreWebView2Environment14 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateFindOptions( + /* [retval][out] */ ICoreWebView2FindOptions **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment15Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment15 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment15 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment15 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment15 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment15 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment15 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR Method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR Headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment15 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment15 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment15 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment15 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment15 * This, + /* [in] */ LPCWSTR Label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND Kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerOptions )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ ICoreWebView2ControllerOptions **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerWithOptions )( + ICoreWebView2Environment15 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2CompositionControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionControllerWithOptions )( + ICoreWebView2Environment15 * This, + /* [in] */ HWND ParentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment11, get_FailureReportFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FailureReportFolderPath )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment12, CreateSharedBuffer) + HRESULT ( STDMETHODCALLTYPE *CreateSharedBuffer )( + ICoreWebView2Environment15 * This, + /* [in] */ UINT64 Size, + /* [retval][out] */ ICoreWebView2SharedBuffer **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment13, GetProcessExtendedInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessExtendedInfos )( + ICoreWebView2Environment15 * This, + /* [in] */ ICoreWebView2GetProcessExtendedInfosCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment14, CreateWebFileSystemFileHandle) + HRESULT ( STDMETHODCALLTYPE *CreateWebFileSystemFileHandle )( + ICoreWebView2Environment15 * This, + /* [in] */ LPCWSTR path, + /* [in] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION permission, + /* [retval][out] */ ICoreWebView2FileSystemHandle **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment14, CreateWebFileSystemDirectoryHandle) + HRESULT ( STDMETHODCALLTYPE *CreateWebFileSystemDirectoryHandle )( + ICoreWebView2Environment15 * This, + /* [in] */ LPCWSTR path, + /* [in] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION permission, + /* [retval][out] */ ICoreWebView2FileSystemHandle **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment14, CreateObjectCollection) + HRESULT ( STDMETHODCALLTYPE *CreateObjectCollection )( + ICoreWebView2Environment15 * This, + /* [in] */ UINT32 length, + /* [size_is][in] */ IUnknown **items, + /* [retval][out] */ ICoreWebView2ObjectCollection **objectCollection); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment15, CreateFindOptions) + HRESULT ( STDMETHODCALLTYPE *CreateFindOptions )( + ICoreWebView2Environment15 * This, + /* [retval][out] */ ICoreWebView2FindOptions **value); + + END_INTERFACE + } ICoreWebView2Environment15Vtbl; + + interface ICoreWebView2Environment15 + { + CONST_VTBL struct ICoreWebView2Environment15Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment15_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment15_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment15_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment15_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment15_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment15_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment15_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment15_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment15_CreateWebResourceRequest(This,uri,Method,postData,Headers,value) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,Method,postData,Headers,value) ) + + +#define ICoreWebView2Environment15_CreateCoreWebView2CompositionController(This,ParentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,ParentWindow,handler) ) + +#define ICoreWebView2Environment15_CreateCoreWebView2PointerInfo(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,value) ) + + +#define ICoreWebView2Environment15_GetAutomationProviderForWindow(This,hwnd,value) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,value) ) + + +#define ICoreWebView2Environment15_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment15_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment15_CreatePrintSettings(This,value) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,value) ) + + +#define ICoreWebView2Environment15_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment15_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment15_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment15_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment15_CreateContextMenuItem(This,Label,iconStream,Kind,value) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,Label,iconStream,Kind,value) ) + + +#define ICoreWebView2Environment15_CreateCoreWebView2ControllerOptions(This,value) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerOptions(This,value) ) + +#define ICoreWebView2Environment15_CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerWithOptions(This,ParentWindow,options,handler) ) + +#define ICoreWebView2Environment15_CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionControllerWithOptions(This,ParentWindow,options,handler) ) + + +#define ICoreWebView2Environment15_get_FailureReportFolderPath(This,value) \ + ( (This)->lpVtbl -> get_FailureReportFolderPath(This,value) ) + + +#define ICoreWebView2Environment15_CreateSharedBuffer(This,Size,value) \ + ( (This)->lpVtbl -> CreateSharedBuffer(This,Size,value) ) + + +#define ICoreWebView2Environment15_GetProcessExtendedInfos(This,handler) \ + ( (This)->lpVtbl -> GetProcessExtendedInfos(This,handler) ) + + +#define ICoreWebView2Environment15_CreateWebFileSystemFileHandle(This,path,permission,value) \ + ( (This)->lpVtbl -> CreateWebFileSystemFileHandle(This,path,permission,value) ) + +#define ICoreWebView2Environment15_CreateWebFileSystemDirectoryHandle(This,path,permission,value) \ + ( (This)->lpVtbl -> CreateWebFileSystemDirectoryHandle(This,path,permission,value) ) + +#define ICoreWebView2Environment15_CreateObjectCollection(This,length,items,objectCollection) \ + ( (This)->lpVtbl -> CreateObjectCollection(This,length,items,objectCollection) ) + + +#define ICoreWebView2Environment15_CreateFindOptions(This,value) \ + ( (This)->lpVtbl -> CreateFindOptions(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment15_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions = {0x2fde08a8,0x1e9a,0x4766,{0x8c,0x05,0x95,0xa9,0xce,0xb9,0xd1,0xc5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2fde08a8-1e9a-4766-8c05-95a9ceb9d1c5") + ICoreWebView2EnvironmentOptions : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AdditionalBrowserArguments( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AdditionalBrowserArguments( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Language( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Language( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TargetCompatibleBrowserVersion( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TargetCompatibleBrowserVersion( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AllowSingleSignOnUsingOSPrimaryAccount( + /* [retval][out] */ BOOL *allow) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AllowSingleSignOnUsingOSPrimaryAccount( + /* [in] */ BOOL allow) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptionsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_AdditionalBrowserArguments) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AdditionalBrowserArguments )( + ICoreWebView2EnvironmentOptions * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_AdditionalBrowserArguments) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AdditionalBrowserArguments )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_Language) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Language )( + ICoreWebView2EnvironmentOptions * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_Language) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Language )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_TargetCompatibleBrowserVersion) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TargetCompatibleBrowserVersion )( + ICoreWebView2EnvironmentOptions * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_TargetCompatibleBrowserVersion) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TargetCompatibleBrowserVersion )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_AllowSingleSignOnUsingOSPrimaryAccount) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSingleSignOnUsingOSPrimaryAccount )( + ICoreWebView2EnvironmentOptions * This, + /* [retval][out] */ BOOL *allow); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_AllowSingleSignOnUsingOSPrimaryAccount) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSingleSignOnUsingOSPrimaryAccount )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ BOOL allow); + + END_INTERFACE + } ICoreWebView2EnvironmentOptionsVtbl; + + interface ICoreWebView2EnvironmentOptions + { + CONST_VTBL struct ICoreWebView2EnvironmentOptionsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions_get_AdditionalBrowserArguments(This,value) \ + ( (This)->lpVtbl -> get_AdditionalBrowserArguments(This,value) ) + +#define ICoreWebView2EnvironmentOptions_put_AdditionalBrowserArguments(This,value) \ + ( (This)->lpVtbl -> put_AdditionalBrowserArguments(This,value) ) + +#define ICoreWebView2EnvironmentOptions_get_Language(This,value) \ + ( (This)->lpVtbl -> get_Language(This,value) ) + +#define ICoreWebView2EnvironmentOptions_put_Language(This,value) \ + ( (This)->lpVtbl -> put_Language(This,value) ) + +#define ICoreWebView2EnvironmentOptions_get_TargetCompatibleBrowserVersion(This,value) \ + ( (This)->lpVtbl -> get_TargetCompatibleBrowserVersion(This,value) ) + +#define ICoreWebView2EnvironmentOptions_put_TargetCompatibleBrowserVersion(This,value) \ + ( (This)->lpVtbl -> put_TargetCompatibleBrowserVersion(This,value) ) + +#define ICoreWebView2EnvironmentOptions_get_AllowSingleSignOnUsingOSPrimaryAccount(This,allow) \ + ( (This)->lpVtbl -> get_AllowSingleSignOnUsingOSPrimaryAccount(This,allow) ) + +#define ICoreWebView2EnvironmentOptions_put_AllowSingleSignOnUsingOSPrimaryAccount(This,allow) \ + ( (This)->lpVtbl -> put_AllowSingleSignOnUsingOSPrimaryAccount(This,allow) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions2_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions2 = {0xff85c98a,0x1ba7,0x4a6b,{0x90,0xc8,0x2b,0x75,0x2c,0x89,0xe9,0xe2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ff85c98a-1ba7-4a6b-90c8-2b752c89e9e2") + ICoreWebView2EnvironmentOptions2 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ExclusiveUserDataFolderAccess( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ExclusiveUserDataFolderAccess( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions2, get_ExclusiveUserDataFolderAccess) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ExclusiveUserDataFolderAccess )( + ICoreWebView2EnvironmentOptions2 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions2, put_ExclusiveUserDataFolderAccess) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ExclusiveUserDataFolderAccess )( + ICoreWebView2EnvironmentOptions2 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions2Vtbl; + + interface ICoreWebView2EnvironmentOptions2 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions2_get_ExclusiveUserDataFolderAccess(This,value) \ + ( (This)->lpVtbl -> get_ExclusiveUserDataFolderAccess(This,value) ) + +#define ICoreWebView2EnvironmentOptions2_put_ExclusiveUserDataFolderAccess(This,value) \ + ( (This)->lpVtbl -> put_ExclusiveUserDataFolderAccess(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions3_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions3 = {0x4a5c436e,0xa9e3,0x4a2e,{0x89,0xc3,0x91,0x0d,0x35,0x13,0xf5,0xcc}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4a5c436e-a9e3-4a2e-89c3-910d3513f5cc") + ICoreWebView2EnvironmentOptions3 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsCustomCrashReportingEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsCustomCrashReportingEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions3, get_IsCustomCrashReportingEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsCustomCrashReportingEnabled )( + ICoreWebView2EnvironmentOptions3 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions3, put_IsCustomCrashReportingEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsCustomCrashReportingEnabled )( + ICoreWebView2EnvironmentOptions3 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions3Vtbl; + + interface ICoreWebView2EnvironmentOptions3 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions3_get_IsCustomCrashReportingEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsCustomCrashReportingEnabled(This,value) ) + +#define ICoreWebView2EnvironmentOptions3_put_IsCustomCrashReportingEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsCustomCrashReportingEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions4_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions4 = {0xac52d13f,0x0d38,0x475a,{0x9d,0xca,0x87,0x65,0x80,0xd6,0x79,0x3e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ac52d13f-0d38-475a-9dca-876580d6793e") + ICoreWebView2EnvironmentOptions4 : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCustomSchemeRegistrations( + /* [out] */ UINT32 *count, + /* [out] */ ICoreWebView2CustomSchemeRegistration ***schemeRegistrations) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetCustomSchemeRegistrations( + /* [in] */ UINT32 count, + /* [in] */ ICoreWebView2CustomSchemeRegistration **schemeRegistrations) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions4, GetCustomSchemeRegistrations) + HRESULT ( STDMETHODCALLTYPE *GetCustomSchemeRegistrations )( + ICoreWebView2EnvironmentOptions4 * This, + /* [out] */ UINT32 *count, + /* [out] */ ICoreWebView2CustomSchemeRegistration ***schemeRegistrations); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions4, SetCustomSchemeRegistrations) + HRESULT ( STDMETHODCALLTYPE *SetCustomSchemeRegistrations )( + ICoreWebView2EnvironmentOptions4 * This, + /* [in] */ UINT32 count, + /* [in] */ ICoreWebView2CustomSchemeRegistration **schemeRegistrations); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions4Vtbl; + + interface ICoreWebView2EnvironmentOptions4 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions4_GetCustomSchemeRegistrations(This,count,schemeRegistrations) \ + ( (This)->lpVtbl -> GetCustomSchemeRegistrations(This,count,schemeRegistrations) ) + +#define ICoreWebView2EnvironmentOptions4_SetCustomSchemeRegistrations(This,count,schemeRegistrations) \ + ( (This)->lpVtbl -> SetCustomSchemeRegistrations(This,count,schemeRegistrations) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions5_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions5_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions5 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions5 = {0x0ae35d64,0xc47f,0x4464,{0x81,0x4e,0x25,0x9c,0x34,0x5d,0x15,0x01}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0ae35d64-c47f-4464-814e-259c345d1501") + ICoreWebView2EnvironmentOptions5 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_EnableTrackingPrevention( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_EnableTrackingPrevention( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions5Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions5 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions5 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions5, get_EnableTrackingPrevention) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_EnableTrackingPrevention )( + ICoreWebView2EnvironmentOptions5 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions5, put_EnableTrackingPrevention) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_EnableTrackingPrevention )( + ICoreWebView2EnvironmentOptions5 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions5Vtbl; + + interface ICoreWebView2EnvironmentOptions5 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions5_get_EnableTrackingPrevention(This,value) \ + ( (This)->lpVtbl -> get_EnableTrackingPrevention(This,value) ) + +#define ICoreWebView2EnvironmentOptions5_put_EnableTrackingPrevention(This,value) \ + ( (This)->lpVtbl -> put_EnableTrackingPrevention(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions5_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions6_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions6_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions6 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions6 = {0x57d29cc3,0xc84f,0x42a0,{0xb0,0xe2,0xef,0xfb,0xd5,0xe1,0x79,0xde}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("57d29cc3-c84f-42a0-b0e2-effbd5e179de") + ICoreWebView2EnvironmentOptions6 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreBrowserExtensionsEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreBrowserExtensionsEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions6Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions6 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions6 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions6, get_AreBrowserExtensionsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserExtensionsEnabled )( + ICoreWebView2EnvironmentOptions6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions6, put_AreBrowserExtensionsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserExtensionsEnabled )( + ICoreWebView2EnvironmentOptions6 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions6Vtbl; + + interface ICoreWebView2EnvironmentOptions6 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions6Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions6_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions6_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions6_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions6_get_AreBrowserExtensionsEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserExtensionsEnabled(This,value) ) + +#define ICoreWebView2EnvironmentOptions6_put_AreBrowserExtensionsEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserExtensionsEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions6_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions7_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions7 = {0xc48d539f,0xe39f,0x441c,{0xae,0x68,0x1f,0x66,0xe5,0x70,0xbd,0xc5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c48d539f-e39f-441c-ae68-1f66e570bdc5") + ICoreWebView2EnvironmentOptions7 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ChannelSearchKind( + /* [retval][out] */ COREWEBVIEW2_CHANNEL_SEARCH_KIND *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ChannelSearchKind( + /* [in] */ COREWEBVIEW2_CHANNEL_SEARCH_KIND value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ReleaseChannels( + /* [retval][out] */ COREWEBVIEW2_RELEASE_CHANNELS *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ReleaseChannels( + /* [in] */ COREWEBVIEW2_RELEASE_CHANNELS value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions7, get_ChannelSearchKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ChannelSearchKind )( + ICoreWebView2EnvironmentOptions7 * This, + /* [retval][out] */ COREWEBVIEW2_CHANNEL_SEARCH_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions7, put_ChannelSearchKind) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ChannelSearchKind )( + ICoreWebView2EnvironmentOptions7 * This, + /* [in] */ COREWEBVIEW2_CHANNEL_SEARCH_KIND value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions7, get_ReleaseChannels) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseChannels )( + ICoreWebView2EnvironmentOptions7 * This, + /* [retval][out] */ COREWEBVIEW2_RELEASE_CHANNELS *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions7, put_ReleaseChannels) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ReleaseChannels )( + ICoreWebView2EnvironmentOptions7 * This, + /* [in] */ COREWEBVIEW2_RELEASE_CHANNELS value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions7Vtbl; + + interface ICoreWebView2EnvironmentOptions7 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions7_get_ChannelSearchKind(This,value) \ + ( (This)->lpVtbl -> get_ChannelSearchKind(This,value) ) + +#define ICoreWebView2EnvironmentOptions7_put_ChannelSearchKind(This,value) \ + ( (This)->lpVtbl -> put_ChannelSearchKind(This,value) ) + +#define ICoreWebView2EnvironmentOptions7_get_ReleaseChannels(This,value) \ + ( (This)->lpVtbl -> get_ReleaseChannels(This,value) ) + +#define ICoreWebView2EnvironmentOptions7_put_ReleaseChannels(This,value) \ + ( (This)->lpVtbl -> put_ReleaseChannels(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions7_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions8_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions8 = {0x7c7ecf51,0xe918,0x5caf,{0x85,0x3c,0xe9,0xa2,0xbc,0xc2,0x77,0x75}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7c7ecf51-e918-5caf-853c-e9a2bcc27775") + ICoreWebView2EnvironmentOptions8 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ScrollBarStyle( + /* [retval][out] */ COREWEBVIEW2_SCROLLBAR_STYLE *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ScrollBarStyle( + /* [in] */ COREWEBVIEW2_SCROLLBAR_STYLE value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions8, get_ScrollBarStyle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScrollBarStyle )( + ICoreWebView2EnvironmentOptions8 * This, + /* [retval][out] */ COREWEBVIEW2_SCROLLBAR_STYLE *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions8, put_ScrollBarStyle) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ScrollBarStyle )( + ICoreWebView2EnvironmentOptions8 * This, + /* [in] */ COREWEBVIEW2_SCROLLBAR_STYLE value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions8Vtbl; + + interface ICoreWebView2EnvironmentOptions8 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions8_get_ScrollBarStyle(This,value) \ + ( (This)->lpVtbl -> get_ScrollBarStyle(This,value) ) + +#define ICoreWebView2EnvironmentOptions8_put_ScrollBarStyle(This,value) \ + ( (This)->lpVtbl -> put_ScrollBarStyle(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptResult_INTERFACE_DEFINED__ +#define __ICoreWebView2ExecuteScriptResult_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ExecuteScriptResult */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ExecuteScriptResult = {0x0CE15963,0x3698,0x4DF7,{0x93,0x99,0x71,0xED,0x6C,0xDD,0x8C,0x9F}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0CE15963-3698-4DF7-9399-71ED6CDD8C9F") + ICoreWebView2ExecuteScriptResult : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Succeeded( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ResultAsJson( + /* [retval][out] */ LPWSTR *jsonResult) = 0; + + virtual HRESULT STDMETHODCALLTYPE TryGetResultAsString( + /* [out] */ LPWSTR *stringResult, + /* [out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Exception( + /* [retval][out] */ ICoreWebView2ScriptException **exception) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ExecuteScriptResultVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ExecuteScriptResult * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ExecuteScriptResult * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ExecuteScriptResult * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ExecuteScriptResult, get_Succeeded) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Succeeded )( + ICoreWebView2ExecuteScriptResult * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ExecuteScriptResult, get_ResultAsJson) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultAsJson )( + ICoreWebView2ExecuteScriptResult * This, + /* [retval][out] */ LPWSTR *jsonResult); + + DECLSPEC_XFGVIRT(ICoreWebView2ExecuteScriptResult, TryGetResultAsString) + HRESULT ( STDMETHODCALLTYPE *TryGetResultAsString )( + ICoreWebView2ExecuteScriptResult * This, + /* [out] */ LPWSTR *stringResult, + /* [out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ExecuteScriptResult, get_Exception) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Exception )( + ICoreWebView2ExecuteScriptResult * This, + /* [retval][out] */ ICoreWebView2ScriptException **exception); + + END_INTERFACE + } ICoreWebView2ExecuteScriptResultVtbl; + + interface ICoreWebView2ExecuteScriptResult + { + CONST_VTBL struct ICoreWebView2ExecuteScriptResultVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ExecuteScriptResult_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ExecuteScriptResult_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ExecuteScriptResult_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ExecuteScriptResult_get_Succeeded(This,value) \ + ( (This)->lpVtbl -> get_Succeeded(This,value) ) + +#define ICoreWebView2ExecuteScriptResult_get_ResultAsJson(This,jsonResult) \ + ( (This)->lpVtbl -> get_ResultAsJson(This,jsonResult) ) + +#define ICoreWebView2ExecuteScriptResult_TryGetResultAsString(This,stringResult,value) \ + ( (This)->lpVtbl -> TryGetResultAsString(This,stringResult,value) ) + +#define ICoreWebView2ExecuteScriptResult_get_Exception(This,exception) \ + ( (This)->lpVtbl -> get_Exception(This,exception) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ExecuteScriptResult_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2File_INTERFACE_DEFINED__ +#define __ICoreWebView2File_INTERFACE_DEFINED__ + +/* interface ICoreWebView2File */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2File = {0xf2c19559,0x6bc1,0x4583,{0xa7,0x57,0x90,0x02,0x1b,0xe9,0xaf,0xec}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f2c19559-6bc1-4583-a757-90021be9afec") + ICoreWebView2File : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Path( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FileVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2File * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2File * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2File * This); + + DECLSPEC_XFGVIRT(ICoreWebView2File, get_Path) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )( + ICoreWebView2File * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2FileVtbl; + + interface ICoreWebView2File + { + CONST_VTBL struct ICoreWebView2FileVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2File_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2File_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2File_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2File_get_Path(This,value) \ + ( (This)->lpVtbl -> get_Path(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2File_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FileSystemHandle_INTERFACE_DEFINED__ +#define __ICoreWebView2FileSystemHandle_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FileSystemHandle */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FileSystemHandle = {0xc65100ac,0x0de2,0x5551,{0xa3,0x62,0x23,0xd9,0xbd,0x1d,0x0e,0x1f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c65100ac-0de2-5551-a362-23d9bd1d0e1f") + ICoreWebView2FileSystemHandle : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_KIND *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Path( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Permission( + /* [retval][out] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FileSystemHandleVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FileSystemHandle * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FileSystemHandle * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FileSystemHandle * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FileSystemHandle, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2FileSystemHandle * This, + /* [retval][out] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FileSystemHandle, get_Path) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )( + ICoreWebView2FileSystemHandle * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FileSystemHandle, get_Permission) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Permission )( + ICoreWebView2FileSystemHandle * This, + /* [retval][out] */ COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION *value); + + END_INTERFACE + } ICoreWebView2FileSystemHandleVtbl; + + interface ICoreWebView2FileSystemHandle + { + CONST_VTBL struct ICoreWebView2FileSystemHandleVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FileSystemHandle_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FileSystemHandle_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FileSystemHandle_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FileSystemHandle_get_Kind(This,value) \ + ( (This)->lpVtbl -> get_Kind(This,value) ) + +#define ICoreWebView2FileSystemHandle_get_Path(This,value) \ + ( (This)->lpVtbl -> get_Path(This,value) ) + +#define ICoreWebView2FileSystemHandle_get_Permission(This,value) \ + ( (This)->lpVtbl -> get_Permission(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FileSystemHandle_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Find_INTERFACE_DEFINED__ +#define __ICoreWebView2Find_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Find */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Find = {0xa3ec0f5f,0xddbc,0x54ed,{0x85,0x46,0xaf,0x75,0xa7,0x85,0xb9,0xa6}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a3ec0f5f-ddbc-54ed-8546-af75a785b9a6") + ICoreWebView2Find : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ActiveMatchIndex( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MatchCount( + /* [retval][out] */ INT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ActiveMatchIndexChanged( + /* [in] */ ICoreWebView2FindActiveMatchIndexChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ActiveMatchIndexChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_MatchCountChanged( + /* [in] */ ICoreWebView2FindMatchCountChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_MatchCountChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE Start( + /* [in] */ ICoreWebView2FindOptions *options, + /* [in] */ ICoreWebView2FindStartCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindNext( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindPrevious( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Stop( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FindVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Find * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Find * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Find * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, get_ActiveMatchIndex) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ActiveMatchIndex )( + ICoreWebView2Find * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, get_MatchCount) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MatchCount )( + ICoreWebView2Find * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, add_ActiveMatchIndexChanged) + HRESULT ( STDMETHODCALLTYPE *add_ActiveMatchIndexChanged )( + ICoreWebView2Find * This, + /* [in] */ ICoreWebView2FindActiveMatchIndexChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, remove_ActiveMatchIndexChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ActiveMatchIndexChanged )( + ICoreWebView2Find * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, add_MatchCountChanged) + HRESULT ( STDMETHODCALLTYPE *add_MatchCountChanged )( + ICoreWebView2Find * This, + /* [in] */ ICoreWebView2FindMatchCountChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, remove_MatchCountChanged) + HRESULT ( STDMETHODCALLTYPE *remove_MatchCountChanged )( + ICoreWebView2Find * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, Start) + HRESULT ( STDMETHODCALLTYPE *Start )( + ICoreWebView2Find * This, + /* [in] */ ICoreWebView2FindOptions *options, + /* [in] */ ICoreWebView2FindStartCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, FindNext) + HRESULT ( STDMETHODCALLTYPE *FindNext )( + ICoreWebView2Find * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, FindPrevious) + HRESULT ( STDMETHODCALLTYPE *FindPrevious )( + ICoreWebView2Find * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Find, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2Find * This); + + END_INTERFACE + } ICoreWebView2FindVtbl; + + interface ICoreWebView2Find + { + CONST_VTBL struct ICoreWebView2FindVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Find_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Find_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Find_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Find_get_ActiveMatchIndex(This,value) \ + ( (This)->lpVtbl -> get_ActiveMatchIndex(This,value) ) + +#define ICoreWebView2Find_get_MatchCount(This,value) \ + ( (This)->lpVtbl -> get_MatchCount(This,value) ) + +#define ICoreWebView2Find_add_ActiveMatchIndexChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ActiveMatchIndexChanged(This,eventHandler,token) ) + +#define ICoreWebView2Find_remove_ActiveMatchIndexChanged(This,token) \ + ( (This)->lpVtbl -> remove_ActiveMatchIndexChanged(This,token) ) + +#define ICoreWebView2Find_add_MatchCountChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_MatchCountChanged(This,eventHandler,token) ) + +#define ICoreWebView2Find_remove_MatchCountChanged(This,token) \ + ( (This)->lpVtbl -> remove_MatchCountChanged(This,token) ) + +#define ICoreWebView2Find_Start(This,options,handler) \ + ( (This)->lpVtbl -> Start(This,options,handler) ) + +#define ICoreWebView2Find_FindNext(This) \ + ( (This)->lpVtbl -> FindNext(This) ) + +#define ICoreWebView2Find_FindPrevious(This) \ + ( (This)->lpVtbl -> FindPrevious(This) ) + +#define ICoreWebView2Find_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Find_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FindActiveMatchIndexChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FindActiveMatchIndexChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FindActiveMatchIndexChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FindActiveMatchIndexChangedEventHandler = {0x0054f514,0x9a8e,0x5876,{0xae,0xd5,0x30,0xb3,0x7f,0x8c,0x86,0xa5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0054f514-9a8e-5876-aed5-30b37f8c86a5") + ICoreWebView2FindActiveMatchIndexChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Find *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FindActiveMatchIndexChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FindActiveMatchIndexChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FindActiveMatchIndexChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FindActiveMatchIndexChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FindActiveMatchIndexChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FindActiveMatchIndexChangedEventHandler * This, + /* [in] */ ICoreWebView2Find *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FindActiveMatchIndexChangedEventHandlerVtbl; + + interface ICoreWebView2FindActiveMatchIndexChangedEventHandler + { + CONST_VTBL struct ICoreWebView2FindActiveMatchIndexChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FindActiveMatchIndexChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FindActiveMatchIndexChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FindActiveMatchIndexChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FindActiveMatchIndexChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FindActiveMatchIndexChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FindMatchCountChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FindMatchCountChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FindMatchCountChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FindMatchCountChangedEventHandler = {0xda0d6827,0x4254,0x5b10,{0xa6,0xd9,0x41,0x20,0x76,0xaf,0xc9,0xf3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("da0d6827-4254-5b10-a6d9-412076afc9f3") + ICoreWebView2FindMatchCountChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Find *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FindMatchCountChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FindMatchCountChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FindMatchCountChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FindMatchCountChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FindMatchCountChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FindMatchCountChangedEventHandler * This, + /* [in] */ ICoreWebView2Find *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FindMatchCountChangedEventHandlerVtbl; + + interface ICoreWebView2FindMatchCountChangedEventHandler + { + CONST_VTBL struct ICoreWebView2FindMatchCountChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FindMatchCountChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FindMatchCountChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FindMatchCountChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FindMatchCountChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FindMatchCountChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FindStartCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FindStartCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FindStartCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FindStartCompletedHandler = {0x6a90ecaf,0x44b0,0x5bd9,{0x8f,0x07,0x19,0x67,0xe1,0x7b,0xe9,0xfb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6a90ecaf-44b0-5bd9-8f07-1967e17be9fb") + ICoreWebView2FindStartCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FindStartCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FindStartCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FindStartCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FindStartCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FindStartCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FindStartCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2FindStartCompletedHandlerVtbl; + + interface ICoreWebView2FindStartCompletedHandler + { + CONST_VTBL struct ICoreWebView2FindStartCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FindStartCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FindStartCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FindStartCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FindStartCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FindStartCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FindOptions_INTERFACE_DEFINED__ +#define __ICoreWebView2FindOptions_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FindOptions */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FindOptions = {0xe82e3b2b,0xa4af,0x5bc6,{0x94,0xc6,0x18,0xb4,0x41,0x57,0xa1,0x6c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e82e3b2b-a4af-5bc6-94c6-18b44157a16c") + ICoreWebView2FindOptions : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FindTerm( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_FindTerm( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsCaseSensitive( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsCaseSensitive( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldHighlightAllMatches( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ShouldHighlightAllMatches( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldMatchWord( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ShouldMatchWord( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SuppressDefaultFindDialog( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SuppressDefaultFindDialog( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FindOptionsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FindOptions * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FindOptions * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FindOptions * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, get_FindTerm) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FindTerm )( + ICoreWebView2FindOptions * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, put_FindTerm) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_FindTerm )( + ICoreWebView2FindOptions * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, get_IsCaseSensitive) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsCaseSensitive )( + ICoreWebView2FindOptions * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, put_IsCaseSensitive) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsCaseSensitive )( + ICoreWebView2FindOptions * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, get_ShouldHighlightAllMatches) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldHighlightAllMatches )( + ICoreWebView2FindOptions * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, put_ShouldHighlightAllMatches) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldHighlightAllMatches )( + ICoreWebView2FindOptions * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, get_ShouldMatchWord) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldMatchWord )( + ICoreWebView2FindOptions * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, put_ShouldMatchWord) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldMatchWord )( + ICoreWebView2FindOptions * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, get_SuppressDefaultFindDialog) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SuppressDefaultFindDialog )( + ICoreWebView2FindOptions * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FindOptions, put_SuppressDefaultFindDialog) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SuppressDefaultFindDialog )( + ICoreWebView2FindOptions * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2FindOptionsVtbl; + + interface ICoreWebView2FindOptions + { + CONST_VTBL struct ICoreWebView2FindOptionsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FindOptions_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FindOptions_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FindOptions_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FindOptions_get_FindTerm(This,value) \ + ( (This)->lpVtbl -> get_FindTerm(This,value) ) + +#define ICoreWebView2FindOptions_put_FindTerm(This,value) \ + ( (This)->lpVtbl -> put_FindTerm(This,value) ) + +#define ICoreWebView2FindOptions_get_IsCaseSensitive(This,value) \ + ( (This)->lpVtbl -> get_IsCaseSensitive(This,value) ) + +#define ICoreWebView2FindOptions_put_IsCaseSensitive(This,value) \ + ( (This)->lpVtbl -> put_IsCaseSensitive(This,value) ) + +#define ICoreWebView2FindOptions_get_ShouldHighlightAllMatches(This,value) \ + ( (This)->lpVtbl -> get_ShouldHighlightAllMatches(This,value) ) + +#define ICoreWebView2FindOptions_put_ShouldHighlightAllMatches(This,value) \ + ( (This)->lpVtbl -> put_ShouldHighlightAllMatches(This,value) ) + +#define ICoreWebView2FindOptions_get_ShouldMatchWord(This,value) \ + ( (This)->lpVtbl -> get_ShouldMatchWord(This,value) ) + +#define ICoreWebView2FindOptions_put_ShouldMatchWord(This,value) \ + ( (This)->lpVtbl -> put_ShouldMatchWord(This,value) ) + +#define ICoreWebView2FindOptions_get_SuppressDefaultFindDialog(This,value) \ + ( (This)->lpVtbl -> get_SuppressDefaultFindDialog(This,value) ) + +#define ICoreWebView2FindOptions_put_SuppressDefaultFindDialog(This,value) \ + ( (This)->lpVtbl -> put_SuppressDefaultFindDialog(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FindOptions_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame = {0xf1131a5e,0x9ba9,0x11eb,{0xa8,0xb3,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f1131a5e-9ba9-11eb-a8b3-0242ac130003") + ICoreWebView2Frame : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *name) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NameChanged( + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NameChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddHostObjectToScriptWithOrigins( + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveHostObjectFromScript( + /* [in] */ LPCWSTR name) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_Destroyed( + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_Destroyed( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsDestroyed( + /* [retval][out] */ BOOL *destroyed) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame * This, + /* [retval][out] */ BOOL *destroyed); + + END_INTERFACE + } ICoreWebView2FrameVtbl; + + interface ICoreWebView2Frame + { + CONST_VTBL struct ICoreWebView2FrameVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameDestroyedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameDestroyedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameDestroyedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameDestroyedEventHandler = {0x59dd7b4c,0x9baa,0x11eb,{0xa8,0xb3,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("59dd7b4c-9baa-11eb-a8b3-0242ac130003") + ICoreWebView2FrameDestroyedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameDestroyedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameDestroyedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameDestroyedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameDestroyedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameDestroyedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameDestroyedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FrameDestroyedEventHandlerVtbl; + + interface ICoreWebView2FrameDestroyedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameDestroyedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameDestroyedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameDestroyedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameDestroyedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameDestroyedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameDestroyedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNameChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameNameChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameNameChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameNameChangedEventHandler = {0x435c7dc8,0x9baa,0x11eb,{0xa8,0xb3,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("435c7dc8-9baa-11eb-a8b3-0242ac130003") + ICoreWebView2FrameNameChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameNameChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameNameChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameNameChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameNameChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameNameChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameNameChangedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FrameNameChangedEventHandlerVtbl; + + interface ICoreWebView2FrameNameChangedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameNameChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameNameChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameNameChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameNameChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameNameChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameNameChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame2_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame2 = {0x7a6a5834,0xd185,0x4dbf,{0xb6,0x3f,0x4a,0x9b,0xc4,0x31,0x07,0xd4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7a6a5834-d185-4dbf-b63f-4a9bc43107d4") + ICoreWebView2Frame2 : public ICoreWebView2Frame + { + public: + virtual HRESULT STDMETHODCALLTYPE add_NavigationStarting( + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationStarting( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContentLoading( + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContentLoading( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NavigationCompleted( + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationCompleted( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_DOMContentLoaded( + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DOMContentLoaded( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE ExecuteScript( + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsJson( + /* [in] */ LPCWSTR webMessageAsJson) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsString( + /* [in] */ LPCWSTR webMessageAsString) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebMessageReceived( + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebMessageReceived( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame2 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame2 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Frame2Vtbl; + + interface ICoreWebView2Frame2 + { + CONST_VTBL struct ICoreWebView2Frame2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame2_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame2_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame2_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame2_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame2_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame2_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame2_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame2_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame2_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame2_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame2_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame2_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame2_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame2_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame2_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameContentLoadingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameContentLoadingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameContentLoadingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameContentLoadingEventHandler = {0x0d6156f2,0xd332,0x49a7,{0x9e,0x03,0x7d,0x8f,0x2f,0xee,0xee,0x54}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0d6156f2-d332-49a7-9e03-7d8f2feeee54") + ICoreWebView2FrameContentLoadingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameContentLoadingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameContentLoadingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameContentLoadingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameContentLoadingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameContentLoadingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameContentLoadingEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameContentLoadingEventHandlerVtbl; + + interface ICoreWebView2FrameContentLoadingEventHandler + { + CONST_VTBL struct ICoreWebView2FrameContentLoadingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameContentLoadingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameContentLoadingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameContentLoadingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameContentLoadingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameContentLoadingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameDOMContentLoadedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameDOMContentLoadedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameDOMContentLoadedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameDOMContentLoadedEventHandler = {0x38d9520d,0x340f,0x4d1e,{0xa7,0x75,0x43,0xfc,0xe9,0x75,0x36,0x83}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("38d9520d-340f-4d1e-a775-43fce9753683") + ICoreWebView2FrameDOMContentLoadedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2DOMContentLoadedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameDOMContentLoadedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameDOMContentLoadedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2DOMContentLoadedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameDOMContentLoadedEventHandlerVtbl; + + interface ICoreWebView2FrameDOMContentLoadedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameDOMContentLoadedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameDOMContentLoadedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNavigationCompletedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameNavigationCompletedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameNavigationCompletedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameNavigationCompletedEventHandler = {0x609302ad,0x0e36,0x4f9a,{0xa2,0x10,0x6a,0x45,0x27,0x28,0x42,0xa9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("609302ad-0e36-4f9a-a210-6a45272842a9") + ICoreWebView2FrameNavigationCompletedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameNavigationCompletedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameNavigationCompletedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameNavigationCompletedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameNavigationCompletedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameNavigationCompletedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameNavigationCompletedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameNavigationCompletedEventHandlerVtbl; + + interface ICoreWebView2FrameNavigationCompletedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameNavigationCompletedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameNavigationCompletedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameNavigationCompletedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameNavigationCompletedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameNavigationCompletedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameNavigationCompletedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNavigationStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameNavigationStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameNavigationStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameNavigationStartingEventHandler = {0xe79908bf,0x2d5d,0x4968,{0x83,0xdb,0x26,0x3f,0xea,0x2c,0x1d,0xa3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e79908bf-2d5d-4968-83db-263fea2c1da3") + ICoreWebView2FrameNavigationStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameNavigationStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameNavigationStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameNavigationStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameNavigationStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameNavigationStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameNavigationStartingEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameNavigationStartingEventHandlerVtbl; + + interface ICoreWebView2FrameNavigationStartingEventHandler + { + CONST_VTBL struct ICoreWebView2FrameNavigationStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameNavigationStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameNavigationStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameNavigationStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameNavigationStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameNavigationStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameWebMessageReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameWebMessageReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameWebMessageReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameWebMessageReceivedEventHandler = {0xe371e005,0x6d1d,0x4517,{0x93,0x4b,0xa8,0xf1,0x62,0x9c,0x62,0xa5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e371e005-6d1d-4517-934b-a8f1629c62a5") + ICoreWebView2FrameWebMessageReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameWebMessageReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameWebMessageReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameWebMessageReceivedEventHandlerVtbl; + + interface ICoreWebView2FrameWebMessageReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameWebMessageReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameWebMessageReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame3_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame3 = {0xb50d82cc,0xcc28,0x481d,{0x96,0x14,0xcb,0x04,0x88,0x95,0xe6,0xa0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b50d82cc-cc28-481d-9614-cb048895e6a0") + ICoreWebView2Frame3 : public ICoreWebView2Frame2 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_PermissionRequested( + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_PermissionRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame3 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame3 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Frame3Vtbl; + + interface ICoreWebView2Frame3 + { + CONST_VTBL struct ICoreWebView2Frame3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame3_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame3_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame3_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame3_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame3_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame3_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame3_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame3_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame3_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame3_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame3_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame3_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame3_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame3_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame3_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + + +#define ICoreWebView2Frame3_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FramePermissionRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FramePermissionRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FramePermissionRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FramePermissionRequestedEventHandler = {0x845d0edd,0x8bd8,0x429b,{0x99,0x15,0x48,0x21,0x78,0x9f,0x23,0xe9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("845d0edd-8bd8-429b-9915-4821789f23e9") + ICoreWebView2FramePermissionRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs2 *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FramePermissionRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FramePermissionRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FramePermissionRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FramePermissionRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FramePermissionRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FramePermissionRequestedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs2 *args); + + END_INTERFACE + } ICoreWebView2FramePermissionRequestedEventHandlerVtbl; + + interface ICoreWebView2FramePermissionRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2FramePermissionRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FramePermissionRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FramePermissionRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FramePermissionRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FramePermissionRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FramePermissionRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame4_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame4 = {0x188782dc,0x92aa,0x4732,{0xab,0x3c,0xfc,0xc5,0x9f,0x6f,0x68,0xb9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("188782dc-92aa-4732-ab3c-fcc59f6f68b9") + ICoreWebView2Frame4 : public ICoreWebView2Frame3 + { + public: + virtual HRESULT STDMETHODCALLTYPE PostSharedBufferToScript( + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame4 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame4 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame4 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame4 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame4 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame4 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame4 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2Frame4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame4, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2Frame4 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + END_INTERFACE + } ICoreWebView2Frame4Vtbl; + + interface ICoreWebView2Frame4 + { + CONST_VTBL struct ICoreWebView2Frame4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame4_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame4_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame4_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame4_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame4_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame4_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame4_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame4_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame4_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame4_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame4_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame4_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame4_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame4_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame4_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame4_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame4_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame4_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame4_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame4_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame4_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + + +#define ICoreWebView2Frame4_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2Frame4_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + + +#define ICoreWebView2Frame4_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame5_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame5_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame5 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame5 = {0x99d199c4,0x7305,0x11ee,{0xb9,0x62,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("99d199c4-7305-11ee-b962-0242ac120002") + ICoreWebView2Frame5 : public ICoreWebView2Frame4 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameId( + /* [retval][out] */ UINT32 *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame5Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame5 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame5 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame5 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame5 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame5 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame5 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame5 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame5 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame5 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2Frame5 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame4, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2Frame5 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame5, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2Frame5 * This, + /* [retval][out] */ UINT32 *value); + + END_INTERFACE + } ICoreWebView2Frame5Vtbl; + + interface ICoreWebView2Frame5 + { + CONST_VTBL struct ICoreWebView2Frame5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame5_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame5_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame5_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame5_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame5_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame5_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame5_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame5_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame5_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame5_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame5_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame5_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame5_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame5_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame5_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame5_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame5_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame5_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame5_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame5_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame5_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + + +#define ICoreWebView2Frame5_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2Frame5_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + + +#define ICoreWebView2Frame5_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2Frame5_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame5_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame6_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame6_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame6 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame6 = {0x0de611fd,0x31e9,0x5ddc,{0x9d,0x71,0x95,0xed,0xa2,0x6e,0xff,0x32}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0de611fd-31e9-5ddc-9d71-95eda26eff32") + ICoreWebView2Frame6 : public ICoreWebView2Frame5 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ScreenCaptureStarting( + /* [in] */ ICoreWebView2FrameScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ScreenCaptureStarting( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame6Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame6 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame6 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame6 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame6 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame6 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame6 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame6 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame6 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame6 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame4, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame5, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2Frame6 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame6, add_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *add_ScreenCaptureStarting )( + ICoreWebView2Frame6 * This, + /* [in] */ ICoreWebView2FrameScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame6, remove_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *remove_ScreenCaptureStarting )( + ICoreWebView2Frame6 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Frame6Vtbl; + + interface ICoreWebView2Frame6 + { + CONST_VTBL struct ICoreWebView2Frame6Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame6_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame6_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame6_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame6_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame6_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame6_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame6_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame6_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame6_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame6_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame6_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame6_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame6_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame6_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame6_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame6_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame6_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame6_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + + +#define ICoreWebView2Frame6_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + + +#define ICoreWebView2Frame6_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2Frame6_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2Frame6_add_ScreenCaptureStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScreenCaptureStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame6_remove_ScreenCaptureStarting(This,token) \ + ( (This)->lpVtbl -> remove_ScreenCaptureStarting(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame6_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameScreenCaptureStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameScreenCaptureStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameScreenCaptureStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameScreenCaptureStartingEventHandler = {0xa6c1d8ad,0xbb80,0x59c5,{0x89,0x5b,0xfb,0xa1,0x69,0x8b,0x93,0x09}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a6c1d8ad-bb80-59c5-895b-fba1698b9309") + ICoreWebView2FrameScreenCaptureStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameScreenCaptureStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameScreenCaptureStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameScreenCaptureStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameScreenCaptureStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameScreenCaptureStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameScreenCaptureStartingEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2ScreenCaptureStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameScreenCaptureStartingEventHandlerVtbl; + + interface ICoreWebView2FrameScreenCaptureStartingEventHandler + { + CONST_VTBL struct ICoreWebView2FrameScreenCaptureStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameScreenCaptureStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameScreenCaptureStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameScreenCaptureStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameScreenCaptureStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameScreenCaptureStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame7_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame7 = {0x3598cfa2,0xd85d,0x5a9f,{0x92,0x28,0x4d,0xde,0x1f,0x59,0xec,0x64}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3598cfa2-d85d-5a9f-9228-4dde1f59ec64") + ICoreWebView2Frame7 : public ICoreWebView2Frame6 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_FrameCreated( + /* [in] */ ICoreWebView2FrameChildFrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FrameCreated( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame7 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame7 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame7 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame7 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame7 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame7 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame7 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame4, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame5, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2Frame7 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame6, add_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *add_ScreenCaptureStarting )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame6, remove_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *remove_ScreenCaptureStarting )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame7, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2Frame7 * This, + /* [in] */ ICoreWebView2FrameChildFrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame7, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2Frame7 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Frame7Vtbl; + + interface ICoreWebView2Frame7 + { + CONST_VTBL struct ICoreWebView2Frame7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame7_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame7_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame7_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame7_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame7_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame7_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame7_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame7_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame7_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame7_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame7_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame7_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame7_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame7_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame7_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + + +#define ICoreWebView2Frame7_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + + +#define ICoreWebView2Frame7_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2Frame7_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2Frame7_add_ScreenCaptureStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScreenCaptureStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_ScreenCaptureStarting(This,token) \ + ( (This)->lpVtbl -> remove_ScreenCaptureStarting(This,token) ) + + +#define ICoreWebView2Frame7_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2Frame7_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame7_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameChildFrameCreatedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameChildFrameCreatedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameChildFrameCreatedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameChildFrameCreatedEventHandler = {0x569e40e7,0x46b7,0x563d,{0x83,0xae,0x10,0x73,0x15,0x56,0x64,0xd7}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("569e40e7-46b7-563d-83ae-1073155664d7") + ICoreWebView2FrameChildFrameCreatedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2FrameCreatedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameChildFrameCreatedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameChildFrameCreatedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameChildFrameCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameChildFrameCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameChildFrameCreatedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameChildFrameCreatedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2FrameCreatedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameChildFrameCreatedEventHandlerVtbl; + + interface ICoreWebView2FrameChildFrameCreatedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameChildFrameCreatedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameChildFrameCreatedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameChildFrameCreatedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameChildFrameCreatedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameChildFrameCreatedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameChildFrameCreatedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame8_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame8 = {0x9deff655,0xe3d5,0x5b8f,{0x91,0x07,0x52,0xe6,0x6b,0x3e,0xc3,0xfc}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9deff655-e3d5-5b8f-9107-52e66b3ec3fc") + ICoreWebView2Frame8 : public ICoreWebView2Frame7 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_DedicatedWorkerCreated( + /* [in] */ ICoreWebView2FrameDedicatedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DedicatedWorkerCreated( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame8 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame8 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame8 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame8 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame8 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame8 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame8 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame4, PostSharedBufferToScript) + HRESULT ( STDMETHODCALLTYPE *PostSharedBufferToScript )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2SharedBuffer *sharedBuffer, + /* [in] */ COREWEBVIEW2_SHARED_BUFFER_ACCESS access, + /* [in] */ LPCWSTR additionalDataAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame5, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2Frame8 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame6, add_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *add_ScreenCaptureStarting )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameScreenCaptureStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame6, remove_ScreenCaptureStarting) + HRESULT ( STDMETHODCALLTYPE *remove_ScreenCaptureStarting )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame7, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameChildFrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame7, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame8, add_DedicatedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *add_DedicatedWorkerCreated )( + ICoreWebView2Frame8 * This, + /* [in] */ ICoreWebView2FrameDedicatedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame8, remove_DedicatedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *remove_DedicatedWorkerCreated )( + ICoreWebView2Frame8 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Frame8Vtbl; + + interface ICoreWebView2Frame8 + { + CONST_VTBL struct ICoreWebView2Frame8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame8_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame8_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame8_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame8_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame8_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame8_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame8_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame8_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame8_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame8_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame8_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame8_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame8_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame8_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame8_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + + +#define ICoreWebView2Frame8_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + + +#define ICoreWebView2Frame8_PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) \ + ( (This)->lpVtbl -> PostSharedBufferToScript(This,sharedBuffer,access,additionalDataAsJson) ) + + +#define ICoreWebView2Frame8_get_FrameId(This,value) \ + ( (This)->lpVtbl -> get_FrameId(This,value) ) + + +#define ICoreWebView2Frame8_add_ScreenCaptureStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScreenCaptureStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_ScreenCaptureStarting(This,token) \ + ( (This)->lpVtbl -> remove_ScreenCaptureStarting(This,token) ) + + +#define ICoreWebView2Frame8_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + + +#define ICoreWebView2Frame8_add_DedicatedWorkerCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DedicatedWorkerCreated(This,eventHandler,token) ) + +#define ICoreWebView2Frame8_remove_DedicatedWorkerCreated(This,token) \ + ( (This)->lpVtbl -> remove_DedicatedWorkerCreated(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameDedicatedWorkerCreatedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameDedicatedWorkerCreatedEventHandler = {0x3e28d307,0x9d58,0x5306,{0x80,0x97,0xa7,0x93,0x01,0xde,0x4f,0x05}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3e28d307-9d58-5306-8097-a79301de4f05") + ICoreWebView2FrameDedicatedWorkerCreatedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameDedicatedWorkerCreatedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameDedicatedWorkerCreatedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameDedicatedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameDedicatedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameDedicatedWorkerCreatedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameDedicatedWorkerCreatedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2DedicatedWorkerCreatedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameDedicatedWorkerCreatedEventHandlerVtbl; + + interface ICoreWebView2FrameDedicatedWorkerCreatedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameDedicatedWorkerCreatedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameDedicatedWorkerCreatedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameCreatedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameCreatedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameCreatedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameCreatedEventArgs = {0x4d6e7b5e,0x9baa,0x11eb,{0xa8,0xb3,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4d6e7b5e-9baa-11eb-a8b3-0242ac130003") + ICoreWebView2FrameCreatedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Frame( + /* [retval][out] */ ICoreWebView2Frame **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameCreatedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameCreatedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameCreatedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameCreatedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameCreatedEventArgs, get_Frame) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Frame )( + ICoreWebView2FrameCreatedEventArgs * This, + /* [retval][out] */ ICoreWebView2Frame **value); + + END_INTERFACE + } ICoreWebView2FrameCreatedEventArgsVtbl; + + interface ICoreWebView2FrameCreatedEventArgs + { + CONST_VTBL struct ICoreWebView2FrameCreatedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameCreatedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameCreatedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameCreatedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameCreatedEventArgs_get_Frame(This,value) \ + ( (This)->lpVtbl -> get_Frame(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameCreatedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfo_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameInfo_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameInfo */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameInfo = {0xda86b8a1,0xbdf3,0x4f11,{0x99,0x55,0x52,0x8c,0xef,0xa5,0x97,0x27}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("da86b8a1-bdf3-4f11-9955-528cefa59727") + ICoreWebView2FrameInfo : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Source( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameInfoVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameInfo * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameInfo * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameInfo * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2FrameInfo * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2FrameInfo * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2FrameInfoVtbl; + + interface ICoreWebView2FrameInfo + { + CONST_VTBL struct ICoreWebView2FrameInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameInfo_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameInfo_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameInfo_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameInfo_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + +#define ICoreWebView2FrameInfo_get_Source(This,value) \ + ( (This)->lpVtbl -> get_Source(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameInfo_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfo2_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameInfo2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameInfo2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameInfo2 = {0x56f85cfa,0x72c4,0x11ee,{0xb9,0x62,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("56f85cfa-72c4-11ee-b962-0242ac120002") + ICoreWebView2FrameInfo2 : public ICoreWebView2FrameInfo + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ParentFrameInfo( + /* [retval][out] */ ICoreWebView2FrameInfo **frameInfo) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameId( + /* [retval][out] */ UINT32 *id) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameKind( + /* [retval][out] */ COREWEBVIEW2_FRAME_KIND *kind) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameInfo2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameInfo2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameInfo2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameInfo2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2FrameInfo2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2FrameInfo2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo2, get_ParentFrameInfo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentFrameInfo )( + ICoreWebView2FrameInfo2 * This, + /* [retval][out] */ ICoreWebView2FrameInfo **frameInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo2, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2FrameInfo2 * This, + /* [retval][out] */ UINT32 *id); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo2, get_FrameKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameKind )( + ICoreWebView2FrameInfo2 * This, + /* [retval][out] */ COREWEBVIEW2_FRAME_KIND *kind); + + END_INTERFACE + } ICoreWebView2FrameInfo2Vtbl; + + interface ICoreWebView2FrameInfo2 + { + CONST_VTBL struct ICoreWebView2FrameInfo2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameInfo2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameInfo2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameInfo2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameInfo2_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + +#define ICoreWebView2FrameInfo2_get_Source(This,value) \ + ( (This)->lpVtbl -> get_Source(This,value) ) + + +#define ICoreWebView2FrameInfo2_get_ParentFrameInfo(This,frameInfo) \ + ( (This)->lpVtbl -> get_ParentFrameInfo(This,frameInfo) ) + +#define ICoreWebView2FrameInfo2_get_FrameId(This,id) \ + ( (This)->lpVtbl -> get_FrameId(This,id) ) + +#define ICoreWebView2FrameInfo2_get_FrameKind(This,kind) \ + ( (This)->lpVtbl -> get_FrameKind(This,kind) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameInfo2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfoCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameInfoCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameInfoCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameInfoCollection = {0x8f834154,0xd38e,0x4d90,{0xaf,0xfb,0x68,0x00,0xa7,0x27,0x28,0x39}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8f834154-d38e-4d90-affb-6800a7272839") + ICoreWebView2FrameInfoCollection : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetIterator( + /* [retval][out] */ ICoreWebView2FrameInfoCollectionIterator **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameInfoCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameInfoCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameInfoCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameInfoCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollection, GetIterator) + HRESULT ( STDMETHODCALLTYPE *GetIterator )( + ICoreWebView2FrameInfoCollection * This, + /* [retval][out] */ ICoreWebView2FrameInfoCollectionIterator **value); + + END_INTERFACE + } ICoreWebView2FrameInfoCollectionVtbl; + + interface ICoreWebView2FrameInfoCollection + { + CONST_VTBL struct ICoreWebView2FrameInfoCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameInfoCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameInfoCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameInfoCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameInfoCollection_GetIterator(This,value) \ + ( (This)->lpVtbl -> GetIterator(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameInfoCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameInfoCollectionIterator_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameInfoCollectionIterator_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameInfoCollectionIterator */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameInfoCollectionIterator = {0x1bf89e2d,0x1b2b,0x4629,{0xb2,0x8f,0x05,0x09,0x9b,0x41,0xbb,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1bf89e2d-1b2b-4629-b28f-05099b41bb03") + ICoreWebView2FrameInfoCollectionIterator : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasCurrent( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCurrent( + /* [retval][out] */ ICoreWebView2FrameInfo **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveNext( + /* [retval][out] */ BOOL *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameInfoCollectionIteratorVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameInfoCollectionIterator * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameInfoCollectionIterator * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameInfoCollectionIterator * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollectionIterator, get_HasCurrent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasCurrent )( + ICoreWebView2FrameInfoCollectionIterator * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollectionIterator, GetCurrent) + HRESULT ( STDMETHODCALLTYPE *GetCurrent )( + ICoreWebView2FrameInfoCollectionIterator * This, + /* [retval][out] */ ICoreWebView2FrameInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollectionIterator, MoveNext) + HRESULT ( STDMETHODCALLTYPE *MoveNext )( + ICoreWebView2FrameInfoCollectionIterator * This, + /* [retval][out] */ BOOL *value); + + END_INTERFACE + } ICoreWebView2FrameInfoCollectionIteratorVtbl; + + interface ICoreWebView2FrameInfoCollectionIterator + { + CONST_VTBL struct ICoreWebView2FrameInfoCollectionIteratorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameInfoCollectionIterator_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameInfoCollectionIterator_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameInfoCollectionIterator_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameInfoCollectionIterator_get_HasCurrent(This,value) \ + ( (This)->lpVtbl -> get_HasCurrent(This,value) ) + +#define ICoreWebView2FrameInfoCollectionIterator_GetCurrent(This,value) \ + ( (This)->lpVtbl -> GetCurrent(This,value) ) + +#define ICoreWebView2FrameInfoCollectionIterator_MoveNext(This,value) \ + ( (This)->lpVtbl -> MoveNext(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameInfoCollectionIterator_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpHeadersCollectionIterator_INTERFACE_DEFINED__ +#define __ICoreWebView2HttpHeadersCollectionIterator_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HttpHeadersCollectionIterator */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HttpHeadersCollectionIterator = {0x0702fc30,0xf43b,0x47bb,{0xab,0x52,0xa4,0x2c,0xb5,0x52,0xad,0x9f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0702fc30-f43b-47bb-ab52-a42cb552ad9f") + ICoreWebView2HttpHeadersCollectionIterator : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCurrentHeader( + /* [out] */ LPWSTR *name, + /* [out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasCurrentHeader( + /* [retval][out] */ BOOL *hasCurrent) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveNext( + /* [retval][out] */ BOOL *hasNext) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HttpHeadersCollectionIteratorVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HttpHeadersCollectionIterator * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HttpHeadersCollectionIterator * This); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpHeadersCollectionIterator, GetCurrentHeader) + HRESULT ( STDMETHODCALLTYPE *GetCurrentHeader )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [out] */ LPWSTR *name, + /* [out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpHeadersCollectionIterator, get_HasCurrentHeader) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasCurrentHeader )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [retval][out] */ BOOL *hasCurrent); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpHeadersCollectionIterator, MoveNext) + HRESULT ( STDMETHODCALLTYPE *MoveNext )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [retval][out] */ BOOL *hasNext); + + END_INTERFACE + } ICoreWebView2HttpHeadersCollectionIteratorVtbl; + + interface ICoreWebView2HttpHeadersCollectionIterator + { + CONST_VTBL struct ICoreWebView2HttpHeadersCollectionIteratorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HttpHeadersCollectionIterator_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HttpHeadersCollectionIterator_GetCurrentHeader(This,name,value) \ + ( (This)->lpVtbl -> GetCurrentHeader(This,name,value) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_get_HasCurrentHeader(This,hasCurrent) \ + ( (This)->lpVtbl -> get_HasCurrentHeader(This,hasCurrent) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_MoveNext(This,hasNext) \ + ( (This)->lpVtbl -> MoveNext(This,hasNext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HttpHeadersCollectionIterator_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpRequestHeaders_INTERFACE_DEFINED__ +#define __ICoreWebView2HttpRequestHeaders_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HttpRequestHeaders */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HttpRequestHeaders = {0xe86cac0e,0x5523,0x465c,{0xb5,0x36,0x8f,0xb9,0xfc,0x8c,0x8c,0x60}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e86cac0e-5523-465c-b536-8fb9fc8c8c60") + ICoreWebView2HttpRequestHeaders : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetHeader( + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHeaders( + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE Contains( + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetHeader( + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveHeader( + /* [in] */ LPCWSTR name) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetIterator( + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HttpRequestHeadersVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HttpRequestHeaders * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HttpRequestHeaders * This); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, GetHeader) + HRESULT ( STDMETHODCALLTYPE *GetHeader )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, GetHeaders) + HRESULT ( STDMETHODCALLTYPE *GetHeaders )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, Contains) + HRESULT ( STDMETHODCALLTYPE *Contains )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, SetHeader) + HRESULT ( STDMETHODCALLTYPE *SetHeader )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, RemoveHeader) + HRESULT ( STDMETHODCALLTYPE *RemoveHeader )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, GetIterator) + HRESULT ( STDMETHODCALLTYPE *GetIterator )( + ICoreWebView2HttpRequestHeaders * This, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value); + + END_INTERFACE + } ICoreWebView2HttpRequestHeadersVtbl; + + interface ICoreWebView2HttpRequestHeaders + { + CONST_VTBL struct ICoreWebView2HttpRequestHeadersVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HttpRequestHeaders_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HttpRequestHeaders_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HttpRequestHeaders_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HttpRequestHeaders_GetHeader(This,name,value) \ + ( (This)->lpVtbl -> GetHeader(This,name,value) ) + +#define ICoreWebView2HttpRequestHeaders_GetHeaders(This,name,value) \ + ( (This)->lpVtbl -> GetHeaders(This,name,value) ) + +#define ICoreWebView2HttpRequestHeaders_Contains(This,name,value) \ + ( (This)->lpVtbl -> Contains(This,name,value) ) + +#define ICoreWebView2HttpRequestHeaders_SetHeader(This,name,value) \ + ( (This)->lpVtbl -> SetHeader(This,name,value) ) + +#define ICoreWebView2HttpRequestHeaders_RemoveHeader(This,name) \ + ( (This)->lpVtbl -> RemoveHeader(This,name) ) + +#define ICoreWebView2HttpRequestHeaders_GetIterator(This,value) \ + ( (This)->lpVtbl -> GetIterator(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HttpRequestHeaders_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpResponseHeaders_INTERFACE_DEFINED__ +#define __ICoreWebView2HttpResponseHeaders_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HttpResponseHeaders */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HttpResponseHeaders = {0x03c5ff5a,0x9b45,0x4a88,{0x88,0x1c,0x89,0xa9,0xf3,0x28,0x61,0x9c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("03c5ff5a-9b45-4a88-881c-89a9f328619c") + ICoreWebView2HttpResponseHeaders : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE AppendHeader( + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value) = 0; + + virtual HRESULT STDMETHODCALLTYPE Contains( + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHeader( + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHeaders( + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetIterator( + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HttpResponseHeadersVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HttpResponseHeaders * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HttpResponseHeaders * This); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, AppendHeader) + HRESULT ( STDMETHODCALLTYPE *AppendHeader )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, Contains) + HRESULT ( STDMETHODCALLTYPE *Contains )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, GetHeader) + HRESULT ( STDMETHODCALLTYPE *GetHeader )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, GetHeaders) + HRESULT ( STDMETHODCALLTYPE *GetHeaders )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value); + + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, GetIterator) + HRESULT ( STDMETHODCALLTYPE *GetIterator )( + ICoreWebView2HttpResponseHeaders * This, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **value); + + END_INTERFACE + } ICoreWebView2HttpResponseHeadersVtbl; + + interface ICoreWebView2HttpResponseHeaders + { + CONST_VTBL struct ICoreWebView2HttpResponseHeadersVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HttpResponseHeaders_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HttpResponseHeaders_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HttpResponseHeaders_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HttpResponseHeaders_AppendHeader(This,name,value) \ + ( (This)->lpVtbl -> AppendHeader(This,name,value) ) + +#define ICoreWebView2HttpResponseHeaders_Contains(This,name,value) \ + ( (This)->lpVtbl -> Contains(This,name,value) ) + +#define ICoreWebView2HttpResponseHeaders_GetHeader(This,name,value) \ + ( (This)->lpVtbl -> GetHeader(This,name,value) ) + +#define ICoreWebView2HttpResponseHeaders_GetHeaders(This,name,value) \ + ( (This)->lpVtbl -> GetHeaders(This,name,value) ) + +#define ICoreWebView2HttpResponseHeaders_GetIterator(This,value) \ + ( (This)->lpVtbl -> GetIterator(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HttpResponseHeaders_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2LaunchingExternalUriSchemeEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2LaunchingExternalUriSchemeEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2LaunchingExternalUriSchemeEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2LaunchingExternalUriSchemeEventArgs = {0x07D1A6C3,0x7175,0x4BA1,{0x93,0x06,0xE5,0x93,0xCA,0x07,0xE4,0x6C}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("07D1A6C3-7175-4BA1-9306-E593CA07E46C") + ICoreWebView2LaunchingExternalUriSchemeEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_InitiatingOrigin( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsUserInitiated( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2LaunchingExternalUriSchemeEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2LaunchingExternalUriSchemeEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2LaunchingExternalUriSchemeEventArgs, get_InitiatingOrigin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_InitiatingOrigin )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2LaunchingExternalUriSchemeEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2LaunchingExternalUriSchemeEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2LaunchingExternalUriSchemeEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2LaunchingExternalUriSchemeEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2LaunchingExternalUriSchemeEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **value); + + END_INTERFACE + } ICoreWebView2LaunchingExternalUriSchemeEventArgsVtbl; + + interface ICoreWebView2LaunchingExternalUriSchemeEventArgs + { + CONST_VTBL struct ICoreWebView2LaunchingExternalUriSchemeEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_get_Uri(This,value) \ + ( (This)->lpVtbl -> get_Uri(This,value) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_get_InitiatingOrigin(This,value) \ + ( (This)->lpVtbl -> get_InitiatingOrigin(This,value) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_get_IsUserInitiated(This,value) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,value) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_get_Cancel(This,value) \ + ( (This)->lpVtbl -> get_Cancel(This,value) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_put_Cancel(This,value) \ + ( (This)->lpVtbl -> put_Cancel(This,value) ) + +#define ICoreWebView2LaunchingExternalUriSchemeEventArgs_GetDeferral(This,value) \ + ( (This)->lpVtbl -> GetDeferral(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2LaunchingExternalUriSchemeEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2MoveFocusRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2MoveFocusRequestedEventArgs = {0x2d6aa13b,0x3839,0x4a15,{0x92,0xfc,0xd8,0x8b,0x3c,0x0d,0x9c,0x9d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2d6aa13b-3839-4a15-92fc-d88b3c0d9c9d") + ICoreWebView2MoveFocusRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Reason( + /* [retval][out] */ COREWEBVIEW2_MOVE_FOCUS_REASON *reason) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2MoveFocusRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2MoveFocusRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2MoveFocusRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventArgs, get_Reason) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Reason )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_MOVE_FOCUS_REASON *reason); + + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2MoveFocusRequestedEventArgsVtbl; + + interface ICoreWebView2MoveFocusRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2MoveFocusRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2MoveFocusRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2MoveFocusRequestedEventArgs_get_Reason(This,reason) \ + ( (This)->lpVtbl -> get_Reason(This,reason) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationCompletedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationCompletedEventArgs = {0x30d68b7d,0x20d9,0x4752,{0xa9,0xca,0xec,0x84,0x48,0xfb,0xb5,0xc1}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("30d68b7d-20d9-4752-a9ca-ec8448fbb5c1") + ICoreWebView2NavigationCompletedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsSuccess( + /* [retval][out] */ BOOL *isSuccess) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_WebErrorStatus( + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *webErrorStatus) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationId( + /* [retval][out] */ UINT64 *navigationId) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationCompletedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationCompletedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationCompletedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_IsSuccess) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuccess )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [retval][out] */ BOOL *isSuccess); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_WebErrorStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebErrorStatus )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *webErrorStatus); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [retval][out] */ UINT64 *navigationId); + + END_INTERFACE + } ICoreWebView2NavigationCompletedEventArgsVtbl; + + interface ICoreWebView2NavigationCompletedEventArgs + { + CONST_VTBL struct ICoreWebView2NavigationCompletedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationCompletedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationCompletedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationCompletedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationCompletedEventArgs_get_IsSuccess(This,isSuccess) \ + ( (This)->lpVtbl -> get_IsSuccess(This,isSuccess) ) + +#define ICoreWebView2NavigationCompletedEventArgs_get_WebErrorStatus(This,webErrorStatus) \ + ( (This)->lpVtbl -> get_WebErrorStatus(This,webErrorStatus) ) + +#define ICoreWebView2NavigationCompletedEventArgs_get_NavigationId(This,navigationId) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigationId) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationCompletedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationCompletedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationCompletedEventArgs2 = {0xfdf8b738,0xee1e,0x4db2,{0xa3,0x29,0x8d,0x7d,0x7b,0x74,0xd7,0x92}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fdf8b738-ee1e-4db2-a329-8d7d7b74d792") + ICoreWebView2NavigationCompletedEventArgs2 : public ICoreWebView2NavigationCompletedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HttpStatusCode( + /* [retval][out] */ int *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationCompletedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationCompletedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationCompletedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_IsSuccess) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuccess )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ BOOL *isSuccess); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_WebErrorStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebErrorStatus )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *webErrorStatus); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ UINT64 *navigationId); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs2, get_HttpStatusCode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HttpStatusCode )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ int *value); + + END_INTERFACE + } ICoreWebView2NavigationCompletedEventArgs2Vtbl; + + interface ICoreWebView2NavigationCompletedEventArgs2 + { + CONST_VTBL struct ICoreWebView2NavigationCompletedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationCompletedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationCompletedEventArgs2_get_IsSuccess(This,isSuccess) \ + ( (This)->lpVtbl -> get_IsSuccess(This,isSuccess) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_get_WebErrorStatus(This,webErrorStatus) \ + ( (This)->lpVtbl -> get_WebErrorStatus(This,webErrorStatus) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_get_NavigationId(This,navigationId) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigationId) ) + + +#define ICoreWebView2NavigationCompletedEventArgs2_get_HttpStatusCode(This,value) \ + ( (This)->lpVtbl -> get_HttpStatusCode(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationCompletedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationStartingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEventArgs = {0x5b495469,0xe119,0x438a,{0x9b,0x18,0x76,0x04,0xf2,0x5f,0x2e,0x49}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5b495469-e119-438a-9b18-7604f25f2e49") + ICoreWebView2NavigationStartingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsUserInitiated( + /* [retval][out] */ BOOL *isUserInitiated) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsRedirected( + /* [retval][out] */ BOOL *isRedirected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RequestHeaders( + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *cancel) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL cancel) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationId( + /* [retval][out] */ UINT64 *navigationId) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationStartingEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationStartingEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationStartingEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsRedirected) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRedirected )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ BOOL *isRedirected); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_RequestHeaders) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestHeaders )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ BOOL *cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [in] */ BOOL cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ UINT64 *navigationId); + + END_INTERFACE + } ICoreWebView2NavigationStartingEventArgsVtbl; + + interface ICoreWebView2NavigationStartingEventArgs + { + CONST_VTBL struct ICoreWebView2NavigationStartingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationStartingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationStartingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationStartingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationStartingEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_IsRedirected(This,isRedirected) \ + ( (This)->lpVtbl -> get_IsRedirected(This,isRedirected) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_RequestHeaders(This,requestHeaders) \ + ( (This)->lpVtbl -> get_RequestHeaders(This,requestHeaders) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_NavigationId(This,navigationId) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigationId) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationStartingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationStartingEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEventArgs2 = {0x9086be93,0x91aa,0x472d,{0xa7,0xe0,0x57,0x9f,0x2b,0xa0,0x06,0xad}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9086be93-91aa-472d-a7e0-579f2ba006ad") + ICoreWebView2NavigationStartingEventArgs2 : public ICoreWebView2NavigationStartingEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AdditionalAllowedFrameAncestors( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AdditionalAllowedFrameAncestors( + /* [in] */ LPCWSTR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationStartingEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationStartingEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationStartingEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsRedirected) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRedirected )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ BOOL *isRedirected); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_RequestHeaders) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestHeaders )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ BOOL *cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [in] */ BOOL cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ UINT64 *navigationId); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs2, get_AdditionalAllowedFrameAncestors) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AdditionalAllowedFrameAncestors )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs2, put_AdditionalAllowedFrameAncestors) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AdditionalAllowedFrameAncestors )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [in] */ LPCWSTR value); + + END_INTERFACE + } ICoreWebView2NavigationStartingEventArgs2Vtbl; + + interface ICoreWebView2NavigationStartingEventArgs2 + { + CONST_VTBL struct ICoreWebView2NavigationStartingEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationStartingEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationStartingEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationStartingEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationStartingEventArgs2_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_IsRedirected(This,isRedirected) \ + ( (This)->lpVtbl -> get_IsRedirected(This,isRedirected) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_RequestHeaders(This,requestHeaders) \ + ( (This)->lpVtbl -> get_RequestHeaders(This,requestHeaders) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs2_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_NavigationId(This,navigationId) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigationId) ) + + +#define ICoreWebView2NavigationStartingEventArgs2_get_AdditionalAllowedFrameAncestors(This,value) \ + ( (This)->lpVtbl -> get_AdditionalAllowedFrameAncestors(This,value) ) + +#define ICoreWebView2NavigationStartingEventArgs2_put_AdditionalAllowedFrameAncestors(This,value) \ + ( (This)->lpVtbl -> put_AdditionalAllowedFrameAncestors(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationStartingEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs3_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationStartingEventArgs3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEventArgs3 = {0xddffe494,0x4942,0x4bd2,{0xab,0x73,0x35,0xb8,0xff,0x40,0xe1,0x9f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ddffe494-4942-4bd2-ab73-35b8ff40e19f") + ICoreWebView2NavigationStartingEventArgs3 : public ICoreWebView2NavigationStartingEventArgs2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationKind( + /* [retval][out] */ COREWEBVIEW2_NAVIGATION_KIND *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationStartingEventArgs3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationStartingEventArgs3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationStartingEventArgs3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsRedirected) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRedirected )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ BOOL *isRedirected); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_RequestHeaders) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestHeaders )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ BOOL *cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [in] */ BOOL cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ UINT64 *navigationId); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs2, get_AdditionalAllowedFrameAncestors) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AdditionalAllowedFrameAncestors )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs2, put_AdditionalAllowedFrameAncestors) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AdditionalAllowedFrameAncestors )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs3, get_NavigationKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationKind )( + ICoreWebView2NavigationStartingEventArgs3 * This, + /* [retval][out] */ COREWEBVIEW2_NAVIGATION_KIND *value); + + END_INTERFACE + } ICoreWebView2NavigationStartingEventArgs3Vtbl; + + interface ICoreWebView2NavigationStartingEventArgs3 + { + CONST_VTBL struct ICoreWebView2NavigationStartingEventArgs3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationStartingEventArgs3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationStartingEventArgs3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationStartingEventArgs3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationStartingEventArgs3_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NavigationStartingEventArgs3_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NavigationStartingEventArgs3_get_IsRedirected(This,isRedirected) \ + ( (This)->lpVtbl -> get_IsRedirected(This,isRedirected) ) + +#define ICoreWebView2NavigationStartingEventArgs3_get_RequestHeaders(This,requestHeaders) \ + ( (This)->lpVtbl -> get_RequestHeaders(This,requestHeaders) ) + +#define ICoreWebView2NavigationStartingEventArgs3_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs3_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs3_get_NavigationId(This,navigationId) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigationId) ) + + +#define ICoreWebView2NavigationStartingEventArgs3_get_AdditionalAllowedFrameAncestors(This,value) \ + ( (This)->lpVtbl -> get_AdditionalAllowedFrameAncestors(This,value) ) + +#define ICoreWebView2NavigationStartingEventArgs3_put_AdditionalAllowedFrameAncestors(This,value) \ + ( (This)->lpVtbl -> put_AdditionalAllowedFrameAncestors(This,value) ) + + +#define ICoreWebView2NavigationStartingEventArgs3_get_NavigationKind(This,value) \ + ( (This)->lpVtbl -> get_NavigationKind(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationStartingEventArgs3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewWindowRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewWindowRequestedEventArgs = {0x34acb11c,0xfc37,0x4418,{0x91,0x32,0xf9,0xc2,0x1d,0x1e,0xaf,0xb9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("34acb11c-fc37-4418-9132-f9c21d1eafb9") + ICoreWebView2NewWindowRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_NewWindow( + /* [in] */ ICoreWebView2 *newWindow) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NewWindow( + /* [retval][out] */ ICoreWebView2 **newWindow) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL handled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *handled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsUserInitiated( + /* [retval][out] */ BOOL *isUserInitiated) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_WindowFeatures( + /* [retval][out] */ ICoreWebView2WindowFeatures **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewWindowRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewWindowRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewWindowRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_NewWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [in] */ ICoreWebView2 *newWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_NewWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2 **newWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [in] */ BOOL handled); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ BOOL *handled); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_WindowFeatures) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WindowFeatures )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2WindowFeatures **value); + + END_INTERFACE + } ICoreWebView2NewWindowRequestedEventArgsVtbl; + + interface ICoreWebView2NewWindowRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2NewWindowRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewWindowRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewWindowRequestedEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_put_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> put_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_get_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> get_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_get_WindowFeatures(This,value) \ + ( (This)->lpVtbl -> get_WindowFeatures(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewWindowRequestedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewWindowRequestedEventArgs2 = {0xbbc7baed,0x74c6,0x4c92,{0xb6,0x3a,0x7f,0x5a,0xea,0xe0,0x3d,0xe3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bbc7baed-74c6-4c92-b63a-7f5aeae03de3") + ICoreWebView2NewWindowRequestedEventArgs2 : public ICoreWebView2NewWindowRequestedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewWindowRequestedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewWindowRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewWindowRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_NewWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [in] */ ICoreWebView2 *newWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_NewWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2 **newWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [in] */ BOOL handled); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [retval][out] */ BOOL *handled); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_WindowFeatures) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WindowFeatures )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2WindowFeatures **value); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs2, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2NewWindowRequestedEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2NewWindowRequestedEventArgs2Vtbl; + + interface ICoreWebView2NewWindowRequestedEventArgs2 + { + CONST_VTBL struct ICoreWebView2NewWindowRequestedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewWindowRequestedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewWindowRequestedEventArgs2_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_put_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> put_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_get_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> get_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#define ICoreWebView2NewWindowRequestedEventArgs2_get_WindowFeatures(This,value) \ + ( (This)->lpVtbl -> get_WindowFeatures(This,value) ) + + +#define ICoreWebView2NewWindowRequestedEventArgs2_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs3_INTERFACE_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewWindowRequestedEventArgs3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewWindowRequestedEventArgs3 = {0x842bed3c,0x6ad6,0x4dd9,{0xb9,0x38,0x28,0xc9,0x66,0x67,0xad,0x66}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("842bed3c-6ad6-4dd9-b938-28c96667ad66") + ICoreWebView2NewWindowRequestedEventArgs3 : public ICoreWebView2NewWindowRequestedEventArgs2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_OriginalSourceFrameInfo( + /* [retval][out] */ ICoreWebView2FrameInfo **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewWindowRequestedEventArgs3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewWindowRequestedEventArgs3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewWindowRequestedEventArgs3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_NewWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [in] */ ICoreWebView2 *newWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_NewWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ ICoreWebView2 **newWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [in] */ BOOL handled); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ BOOL *handled); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_WindowFeatures) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WindowFeatures )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ ICoreWebView2WindowFeatures **value); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs2, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs3, get_OriginalSourceFrameInfo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_OriginalSourceFrameInfo )( + ICoreWebView2NewWindowRequestedEventArgs3 * This, + /* [retval][out] */ ICoreWebView2FrameInfo **value); + + END_INTERFACE + } ICoreWebView2NewWindowRequestedEventArgs3Vtbl; + + interface ICoreWebView2NewWindowRequestedEventArgs3 + { + CONST_VTBL struct ICoreWebView2NewWindowRequestedEventArgs3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewWindowRequestedEventArgs3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewWindowRequestedEventArgs3_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_put_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> put_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_get_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> get_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#define ICoreWebView2NewWindowRequestedEventArgs3_get_WindowFeatures(This,value) \ + ( (This)->lpVtbl -> get_WindowFeatures(This,value) ) + + +#define ICoreWebView2NewWindowRequestedEventArgs3_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + + +#define ICoreWebView2NewWindowRequestedEventArgs3_get_OriginalSourceFrameInfo(This,value) \ + ( (This)->lpVtbl -> get_OriginalSourceFrameInfo(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NonClientRegionChangedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NonClientRegionChangedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NonClientRegionChangedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NonClientRegionChangedEventArgs = {0xab71d500,0x0820,0x4a52,{0x80,0x9c,0x48,0xdb,0x04,0xff,0x93,0xbf}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ab71d500-0820-4a52-809c-48db04ff93bf") + ICoreWebView2NonClientRegionChangedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RegionKind( + /* [retval][out] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NonClientRegionChangedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NonClientRegionChangedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NonClientRegionChangedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NonClientRegionChangedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NonClientRegionChangedEventArgs, get_RegionKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RegionKind )( + ICoreWebView2NonClientRegionChangedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_NON_CLIENT_REGION_KIND *value); + + END_INTERFACE + } ICoreWebView2NonClientRegionChangedEventArgsVtbl; + + interface ICoreWebView2NonClientRegionChangedEventArgs + { + CONST_VTBL struct ICoreWebView2NonClientRegionChangedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NonClientRegionChangedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NonClientRegionChangedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NonClientRegionChangedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NonClientRegionChangedEventArgs_get_RegionKind(This,value) \ + ( (This)->lpVtbl -> get_RegionKind(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NonClientRegionChangedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Notification_INTERFACE_DEFINED__ +#define __ICoreWebView2Notification_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Notification */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Notification = {0xB7434D98,0x6BC8,0x419D,{0x9D,0xA5,0xFB,0x5A,0x96,0xD4,0xDA,0xCD}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("B7434D98-6BC8-419D-9DA5-FB5A96D4DACD") + ICoreWebView2Notification : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE add_CloseRequested( + /* [in] */ ICoreWebView2NotificationCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_CloseRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReportShown( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReportClicked( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReportClosed( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Body( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Direction( + /* [retval][out] */ COREWEBVIEW2_TEXT_DIRECTION_KIND *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Language( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Tag( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IconUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Title( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BadgeUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BodyImageUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldRenotify( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RequiresInteraction( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsSilent( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Timestamp( + /* [retval][out] */ double *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetVibrationPattern( + /* [out] */ UINT32 *count, + /* [out] */ UINT64 **vibrationPattern) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NotificationVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Notification * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Notification * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Notification * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, add_CloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_CloseRequested )( + ICoreWebView2Notification * This, + /* [in] */ ICoreWebView2NotificationCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, remove_CloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_CloseRequested )( + ICoreWebView2Notification * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, ReportShown) + HRESULT ( STDMETHODCALLTYPE *ReportShown )( + ICoreWebView2Notification * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, ReportClicked) + HRESULT ( STDMETHODCALLTYPE *ReportClicked )( + ICoreWebView2Notification * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, ReportClosed) + HRESULT ( STDMETHODCALLTYPE *ReportClosed )( + ICoreWebView2Notification * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_Body) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Body )( + ICoreWebView2Notification * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_Direction) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Direction )( + ICoreWebView2Notification * This, + /* [retval][out] */ COREWEBVIEW2_TEXT_DIRECTION_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_Language) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Language )( + ICoreWebView2Notification * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_Tag) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Tag )( + ICoreWebView2Notification * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_IconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IconUri )( + ICoreWebView2Notification * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_Title) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Title )( + ICoreWebView2Notification * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_BadgeUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BadgeUri )( + ICoreWebView2Notification * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_BodyImageUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BodyImageUri )( + ICoreWebView2Notification * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_ShouldRenotify) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldRenotify )( + ICoreWebView2Notification * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_RequiresInteraction) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequiresInteraction )( + ICoreWebView2Notification * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_IsSilent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSilent )( + ICoreWebView2Notification * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, get_Timestamp) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Timestamp )( + ICoreWebView2Notification * This, + /* [retval][out] */ double *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Notification, GetVibrationPattern) + HRESULT ( STDMETHODCALLTYPE *GetVibrationPattern )( + ICoreWebView2Notification * This, + /* [out] */ UINT32 *count, + /* [out] */ UINT64 **vibrationPattern); + + END_INTERFACE + } ICoreWebView2NotificationVtbl; + + interface ICoreWebView2Notification + { + CONST_VTBL struct ICoreWebView2NotificationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Notification_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Notification_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Notification_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Notification_add_CloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2Notification_remove_CloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_CloseRequested(This,token) ) + +#define ICoreWebView2Notification_ReportShown(This) \ + ( (This)->lpVtbl -> ReportShown(This) ) + +#define ICoreWebView2Notification_ReportClicked(This) \ + ( (This)->lpVtbl -> ReportClicked(This) ) + +#define ICoreWebView2Notification_ReportClosed(This) \ + ( (This)->lpVtbl -> ReportClosed(This) ) + +#define ICoreWebView2Notification_get_Body(This,value) \ + ( (This)->lpVtbl -> get_Body(This,value) ) + +#define ICoreWebView2Notification_get_Direction(This,value) \ + ( (This)->lpVtbl -> get_Direction(This,value) ) + +#define ICoreWebView2Notification_get_Language(This,value) \ + ( (This)->lpVtbl -> get_Language(This,value) ) + +#define ICoreWebView2Notification_get_Tag(This,value) \ + ( (This)->lpVtbl -> get_Tag(This,value) ) + +#define ICoreWebView2Notification_get_IconUri(This,value) \ + ( (This)->lpVtbl -> get_IconUri(This,value) ) + +#define ICoreWebView2Notification_get_Title(This,value) \ + ( (This)->lpVtbl -> get_Title(This,value) ) + +#define ICoreWebView2Notification_get_BadgeUri(This,value) \ + ( (This)->lpVtbl -> get_BadgeUri(This,value) ) + +#define ICoreWebView2Notification_get_BodyImageUri(This,value) \ + ( (This)->lpVtbl -> get_BodyImageUri(This,value) ) + +#define ICoreWebView2Notification_get_ShouldRenotify(This,value) \ + ( (This)->lpVtbl -> get_ShouldRenotify(This,value) ) + +#define ICoreWebView2Notification_get_RequiresInteraction(This,value) \ + ( (This)->lpVtbl -> get_RequiresInteraction(This,value) ) + +#define ICoreWebView2Notification_get_IsSilent(This,value) \ + ( (This)->lpVtbl -> get_IsSilent(This,value) ) + +#define ICoreWebView2Notification_get_Timestamp(This,value) \ + ( (This)->lpVtbl -> get_Timestamp(This,value) ) + +#define ICoreWebView2Notification_GetVibrationPattern(This,count,vibrationPattern) \ + ( (This)->lpVtbl -> GetVibrationPattern(This,count,vibrationPattern) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Notification_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NotificationCloseRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NotificationCloseRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NotificationCloseRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NotificationCloseRequestedEventHandler = {0x47c32d23,0x1e94,0x4733,{0x85,0xf1,0xd9,0xbf,0x4a,0xcd,0x09,0x74}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("47c32d23-1e94-4733-85f1-d9bf4acd0974") + ICoreWebView2NotificationCloseRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Notification *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NotificationCloseRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NotificationCloseRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NotificationCloseRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NotificationCloseRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NotificationCloseRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NotificationCloseRequestedEventHandler * This, + /* [in] */ ICoreWebView2Notification *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2NotificationCloseRequestedEventHandlerVtbl; + + interface ICoreWebView2NotificationCloseRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2NotificationCloseRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NotificationCloseRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NotificationCloseRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NotificationCloseRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NotificationCloseRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NotificationCloseRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NotificationReceivedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NotificationReceivedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NotificationReceivedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NotificationReceivedEventArgs = {0x1512DD5B,0x5514,0x4F85,{0x88,0x6E,0x21,0xC3,0xA4,0xC9,0xCF,0xE6}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1512DD5B-5514-4F85-886E-21C3A4C9CFE6") + ICoreWebView2NotificationReceivedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SenderOrigin( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Notification( + /* [retval][out] */ ICoreWebView2Notification **value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NotificationReceivedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NotificationReceivedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NotificationReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NotificationReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NotificationReceivedEventArgs, get_SenderOrigin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SenderOrigin )( + ICoreWebView2NotificationReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2NotificationReceivedEventArgs, get_Notification) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Notification )( + ICoreWebView2NotificationReceivedEventArgs * This, + /* [retval][out] */ ICoreWebView2Notification **value); + + DECLSPEC_XFGVIRT(ICoreWebView2NotificationReceivedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2NotificationReceivedEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2NotificationReceivedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2NotificationReceivedEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2NotificationReceivedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2NotificationReceivedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2NotificationReceivedEventArgsVtbl; + + interface ICoreWebView2NotificationReceivedEventArgs + { + CONST_VTBL struct ICoreWebView2NotificationReceivedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NotificationReceivedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NotificationReceivedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NotificationReceivedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NotificationReceivedEventArgs_get_SenderOrigin(This,value) \ + ( (This)->lpVtbl -> get_SenderOrigin(This,value) ) + +#define ICoreWebView2NotificationReceivedEventArgs_get_Notification(This,value) \ + ( (This)->lpVtbl -> get_Notification(This,value) ) + +#define ICoreWebView2NotificationReceivedEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#define ICoreWebView2NotificationReceivedEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2NotificationReceivedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NotificationReceivedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ObjectCollectionView_INTERFACE_DEFINED__ +#define __ICoreWebView2ObjectCollectionView_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ObjectCollectionView */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ObjectCollectionView = {0x0f36fd87,0x4f69,0x4415,{0x98,0xda,0x88,0x8f,0x89,0xfb,0x9a,0x33}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0f36fd87-4f69-4415-98da-888f89fb9a33") + ICoreWebView2ObjectCollectionView : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ IUnknown **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ObjectCollectionViewVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ObjectCollectionView * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ObjectCollectionView * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ObjectCollectionView * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ObjectCollectionView, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ObjectCollectionView * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ObjectCollectionView, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ObjectCollectionView * This, + /* [in] */ UINT32 index, + /* [retval][out] */ IUnknown **value); + + END_INTERFACE + } ICoreWebView2ObjectCollectionViewVtbl; + + interface ICoreWebView2ObjectCollectionView + { + CONST_VTBL struct ICoreWebView2ObjectCollectionViewVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ObjectCollectionView_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ObjectCollectionView_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ObjectCollectionView_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ObjectCollectionView_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ObjectCollectionView_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ObjectCollectionView_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ObjectCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2ObjectCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ObjectCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ObjectCollection = {0x5cfec11c,0x25bd,0x4e8d,{0x9e,0x1a,0x7a,0xcd,0xae,0xee,0xc0,0x47}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5cfec11c-25bd-4e8d-9e1a-7acdaeeec047") + ICoreWebView2ObjectCollection : public ICoreWebView2ObjectCollectionView + { + public: + virtual HRESULT STDMETHODCALLTYPE RemoveValueAtIndex( + /* [in] */ UINT32 index) = 0; + + virtual HRESULT STDMETHODCALLTYPE InsertValueAtIndex( + /* [in] */ UINT32 index, + /* [in] */ IUnknown *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ObjectCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ObjectCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ObjectCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ObjectCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ObjectCollectionView, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ObjectCollection * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ObjectCollectionView, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ObjectCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ IUnknown **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ObjectCollection, RemoveValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *RemoveValueAtIndex )( + ICoreWebView2ObjectCollection * This, + /* [in] */ UINT32 index); + + DECLSPEC_XFGVIRT(ICoreWebView2ObjectCollection, InsertValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *InsertValueAtIndex )( + ICoreWebView2ObjectCollection * This, + /* [in] */ UINT32 index, + /* [in] */ IUnknown *value); + + END_INTERFACE + } ICoreWebView2ObjectCollectionVtbl; + + interface ICoreWebView2ObjectCollection + { + CONST_VTBL struct ICoreWebView2ObjectCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ObjectCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ObjectCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ObjectCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ObjectCollection_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ObjectCollection_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + + +#define ICoreWebView2ObjectCollection_RemoveValueAtIndex(This,index) \ + ( (This)->lpVtbl -> RemoveValueAtIndex(This,index) ) + +#define ICoreWebView2ObjectCollection_InsertValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> InsertValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ObjectCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEventArgs = {0x973ae2ef,0xff18,0x4894,{0x8f,0xb2,0x3c,0x75,0x8f,0x04,0x68,0x10}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("973ae2ef-ff18-4894-8fb2-3c758f046810") + ICoreWebView2PermissionRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PermissionKind( + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *permissionKind) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsUserInitiated( + /* [retval][out] */ BOOL *isUserInitiated) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_State( + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *state) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_State( + /* [in] */ COREWEBVIEW2_PERMISSION_STATE state) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_PermissionKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionKind )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *permissionKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_State) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, put_State) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_State )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2PermissionRequestedEventArgsVtbl; + + interface ICoreWebView2PermissionRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2PermissionRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionRequestedEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2PermissionRequestedEventArgs_get_PermissionKind(This,permissionKind) \ + ( (This)->lpVtbl -> get_PermissionKind(This,permissionKind) ) + +#define ICoreWebView2PermissionRequestedEventArgs_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2PermissionRequestedEventArgs_get_State(This,state) \ + ( (This)->lpVtbl -> get_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs_put_State(This,state) \ + ( (This)->lpVtbl -> put_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionRequestedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEventArgs2 = {0x74d7127f,0x9de6,0x4200,{0x87,0x34,0x42,0xd6,0xfb,0x4f,0xf7,0x41}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("74d7127f-9de6-4200-8734-42d6fb4ff741") + ICoreWebView2PermissionRequestedEventArgs2 : public ICoreWebView2PermissionRequestedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionRequestedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_PermissionKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionKind )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *permissionKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_State) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, put_State) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_State )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs2, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs2, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2PermissionRequestedEventArgs2Vtbl; + + interface ICoreWebView2PermissionRequestedEventArgs2 + { + CONST_VTBL struct ICoreWebView2PermissionRequestedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionRequestedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionRequestedEventArgs2_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_get_PermissionKind(This,permissionKind) \ + ( (This)->lpVtbl -> get_PermissionKind(This,permissionKind) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_get_State(This,state) \ + ( (This)->lpVtbl -> get_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_put_State(This,state) \ + ( (This)->lpVtbl -> put_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + + +#define ICoreWebView2PermissionRequestedEventArgs2_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionRequestedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs3_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionRequestedEventArgs3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEventArgs3 = {0xe61670bc,0x3dce,0x4177,{0x86,0xd2,0xc6,0x29,0xae,0x3c,0xb6,0xac}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e61670bc-3dce-4177-86d2-c629ae3cb6ac") + ICoreWebView2PermissionRequestedEventArgs3 : public ICoreWebView2PermissionRequestedEventArgs2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SavesInProfile( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SavesInProfile( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionRequestedEventArgs3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionRequestedEventArgs3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionRequestedEventArgs3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_PermissionKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionKind )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *permissionKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_State) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, put_State) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_State )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs2, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs2, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs3, get_SavesInProfile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SavesInProfile )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs3, put_SavesInProfile) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SavesInProfile )( + ICoreWebView2PermissionRequestedEventArgs3 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2PermissionRequestedEventArgs3Vtbl; + + interface ICoreWebView2PermissionRequestedEventArgs3 + { + CONST_VTBL struct ICoreWebView2PermissionRequestedEventArgs3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionRequestedEventArgs3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionRequestedEventArgs3_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_get_PermissionKind(This,permissionKind) \ + ( (This)->lpVtbl -> get_PermissionKind(This,permissionKind) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_get_State(This,state) \ + ( (This)->lpVtbl -> get_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_put_State(This,state) \ + ( (This)->lpVtbl -> put_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + + +#define ICoreWebView2PermissionRequestedEventArgs3_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + + +#define ICoreWebView2PermissionRequestedEventArgs3_get_SavesInProfile(This,value) \ + ( (This)->lpVtbl -> get_SavesInProfile(This,value) ) + +#define ICoreWebView2PermissionRequestedEventArgs3_put_SavesInProfile(This,value) \ + ( (This)->lpVtbl -> put_SavesInProfile(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionRequestedEventArgs3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionSetting_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionSetting_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionSetting */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionSetting = {0x792b6eca,0x5576,0x421c,{0x91,0x19,0x74,0xeb,0xb3,0xa4,0xff,0xb3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("792b6eca-5576-421c-9119-74ebb3a4ffb3") + ICoreWebView2PermissionSetting : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PermissionKind( + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PermissionOrigin( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PermissionState( + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionSettingVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionSetting * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionSetting * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionSetting * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionSetting, get_PermissionKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionKind )( + ICoreWebView2PermissionSetting * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionSetting, get_PermissionOrigin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionOrigin )( + ICoreWebView2PermissionSetting * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionSetting, get_PermissionState) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionState )( + ICoreWebView2PermissionSetting * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *value); + + END_INTERFACE + } ICoreWebView2PermissionSettingVtbl; + + interface ICoreWebView2PermissionSetting + { + CONST_VTBL struct ICoreWebView2PermissionSettingVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionSetting_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionSetting_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionSetting_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionSetting_get_PermissionKind(This,value) \ + ( (This)->lpVtbl -> get_PermissionKind(This,value) ) + +#define ICoreWebView2PermissionSetting_get_PermissionOrigin(This,value) \ + ( (This)->lpVtbl -> get_PermissionOrigin(This,value) ) + +#define ICoreWebView2PermissionSetting_get_PermissionState(This,value) \ + ( (This)->lpVtbl -> get_PermissionState(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionSetting_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PointerInfo_INTERFACE_DEFINED__ +#define __ICoreWebView2PointerInfo_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PointerInfo */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PointerInfo = {0xe6995887,0xd10d,0x4f5d,{0x93,0x59,0x4c,0xe4,0x6e,0x4f,0x96,0xb9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e6995887-d10d-4f5d-9359-4ce46e4f96b9") + ICoreWebView2PointerInfo : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PointerKind( + /* [retval][out] */ DWORD *pointerKind) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PointerKind( + /* [in] */ DWORD pointerKind) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PointerId( + /* [retval][out] */ UINT32 *pointerId) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PointerId( + /* [in] */ UINT32 pointerId) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameId( + /* [retval][out] */ UINT32 *frameId) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_FrameId( + /* [in] */ UINT32 frameId) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PointerFlags( + /* [retval][out] */ UINT32 *pointerFlags) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PointerFlags( + /* [in] */ UINT32 pointerFlags) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PointerDeviceRect( + /* [retval][out] */ RECT *pointerDeviceRect) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PointerDeviceRect( + /* [in] */ RECT pointerDeviceRect) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DisplayRect( + /* [retval][out] */ RECT *displayRect) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DisplayRect( + /* [in] */ RECT displayRect) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PixelLocation( + /* [retval][out] */ POINT *pixelLocation) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PixelLocation( + /* [in] */ POINT pixelLocation) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HimetricLocation( + /* [retval][out] */ POINT *himetricLocation) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_HimetricLocation( + /* [in] */ POINT himetricLocation) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PixelLocationRaw( + /* [retval][out] */ POINT *pixelLocationRaw) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PixelLocationRaw( + /* [in] */ POINT pixelLocationRaw) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HimetricLocationRaw( + /* [retval][out] */ POINT *himetricLocationRaw) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_HimetricLocationRaw( + /* [in] */ POINT himetricLocationRaw) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Time( + /* [retval][out] */ DWORD *time) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Time( + /* [in] */ DWORD time) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HistoryCount( + /* [retval][out] */ UINT32 *historyCount) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_HistoryCount( + /* [in] */ UINT32 historyCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_InputData( + /* [retval][out] */ INT32 *inputData) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_InputData( + /* [in] */ INT32 inputData) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_KeyStates( + /* [retval][out] */ DWORD *keyStates) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_KeyStates( + /* [in] */ DWORD keyStates) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PerformanceCount( + /* [retval][out] */ UINT64 *performanceCount) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PerformanceCount( + /* [in] */ UINT64 performanceCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ButtonChangeKind( + /* [retval][out] */ INT32 *buttonChangeKind) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ButtonChangeKind( + /* [in] */ INT32 buttonChangeKind) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PenFlags( + /* [retval][out] */ UINT32 *penFLags) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PenFlags( + /* [in] */ UINT32 penFLags) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PenMask( + /* [retval][out] */ UINT32 *penMask) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PenMask( + /* [in] */ UINT32 penMask) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PenPressure( + /* [retval][out] */ UINT32 *penPressure) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PenPressure( + /* [in] */ UINT32 penPressure) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PenRotation( + /* [retval][out] */ UINT32 *penRotation) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PenRotation( + /* [in] */ UINT32 penRotation) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PenTiltX( + /* [retval][out] */ INT32 *penTiltX) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PenTiltX( + /* [in] */ INT32 penTiltX) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PenTiltY( + /* [retval][out] */ INT32 *penTiltY) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PenTiltY( + /* [in] */ INT32 penTiltY) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TouchFlags( + /* [retval][out] */ UINT32 *touchFlags) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TouchFlags( + /* [in] */ UINT32 touchFlags) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TouchMask( + /* [retval][out] */ UINT32 *touchMask) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TouchMask( + /* [in] */ UINT32 touchMask) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TouchContact( + /* [retval][out] */ RECT *touchContact) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TouchContact( + /* [in] */ RECT touchContact) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TouchContactRaw( + /* [retval][out] */ RECT *touchContactRaw) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TouchContactRaw( + /* [in] */ RECT touchContactRaw) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TouchOrientation( + /* [retval][out] */ UINT32 *touchOrientation) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TouchOrientation( + /* [in] */ UINT32 touchOrientation) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TouchPressure( + /* [retval][out] */ UINT32 *touchPressure) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TouchPressure( + /* [in] */ UINT32 touchPressure) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PointerInfoVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PointerInfo * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PointerInfo * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PointerInfo * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerKind )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ DWORD *pointerKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerKind) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerKind )( + ICoreWebView2PointerInfo * This, + /* [in] */ DWORD pointerKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerId )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *pointerId); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerId) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerId )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 pointerId); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_FrameId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *frameId); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_FrameId) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_FrameId )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 frameId); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerFlags) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerFlags )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *pointerFlags); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerFlags) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerFlags )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 pointerFlags); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerDeviceRect) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerDeviceRect )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ RECT *pointerDeviceRect); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerDeviceRect) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerDeviceRect )( + ICoreWebView2PointerInfo * This, + /* [in] */ RECT pointerDeviceRect); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_DisplayRect) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DisplayRect )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ RECT *displayRect); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_DisplayRect) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DisplayRect )( + ICoreWebView2PointerInfo * This, + /* [in] */ RECT displayRect); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PixelLocation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PixelLocation )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ POINT *pixelLocation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PixelLocation) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PixelLocation )( + ICoreWebView2PointerInfo * This, + /* [in] */ POINT pixelLocation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_HimetricLocation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HimetricLocation )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ POINT *himetricLocation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_HimetricLocation) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HimetricLocation )( + ICoreWebView2PointerInfo * This, + /* [in] */ POINT himetricLocation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PixelLocationRaw) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PixelLocationRaw )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ POINT *pixelLocationRaw); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PixelLocationRaw) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PixelLocationRaw )( + ICoreWebView2PointerInfo * This, + /* [in] */ POINT pixelLocationRaw); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_HimetricLocationRaw) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HimetricLocationRaw )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ POINT *himetricLocationRaw); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_HimetricLocationRaw) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HimetricLocationRaw )( + ICoreWebView2PointerInfo * This, + /* [in] */ POINT himetricLocationRaw); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_Time) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Time )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ DWORD *time); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_Time) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Time )( + ICoreWebView2PointerInfo * This, + /* [in] */ DWORD time); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_HistoryCount) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HistoryCount )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *historyCount); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_HistoryCount) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HistoryCount )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 historyCount); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_InputData) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_InputData )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ INT32 *inputData); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_InputData) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_InputData )( + ICoreWebView2PointerInfo * This, + /* [in] */ INT32 inputData); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_KeyStates) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyStates )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ DWORD *keyStates); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_KeyStates) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_KeyStates )( + ICoreWebView2PointerInfo * This, + /* [in] */ DWORD keyStates); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PerformanceCount) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PerformanceCount )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT64 *performanceCount); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PerformanceCount) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PerformanceCount )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT64 performanceCount); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_ButtonChangeKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ButtonChangeKind )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ INT32 *buttonChangeKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_ButtonChangeKind) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ButtonChangeKind )( + ICoreWebView2PointerInfo * This, + /* [in] */ INT32 buttonChangeKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenFlags) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenFlags )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *penFLags); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenFlags) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenFlags )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 penFLags); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenMask) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenMask )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *penMask); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenMask) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenMask )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 penMask); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenPressure) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenPressure )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *penPressure); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenPressure) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenPressure )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 penPressure); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenRotation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenRotation )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *penRotation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenRotation) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenRotation )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 penRotation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenTiltX) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenTiltX )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ INT32 *penTiltX); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenTiltX) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenTiltX )( + ICoreWebView2PointerInfo * This, + /* [in] */ INT32 penTiltX); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenTiltY) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenTiltY )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ INT32 *penTiltY); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenTiltY) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenTiltY )( + ICoreWebView2PointerInfo * This, + /* [in] */ INT32 penTiltY); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchFlags) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchFlags )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *touchFlags); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchFlags) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchFlags )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 touchFlags); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchMask) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchMask )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *touchMask); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchMask) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchMask )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 touchMask); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchContact) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchContact )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ RECT *touchContact); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchContact) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchContact )( + ICoreWebView2PointerInfo * This, + /* [in] */ RECT touchContact); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchContactRaw) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchContactRaw )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ RECT *touchContactRaw); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchContactRaw) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchContactRaw )( + ICoreWebView2PointerInfo * This, + /* [in] */ RECT touchContactRaw); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchOrientation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchOrientation )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *touchOrientation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchOrientation) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchOrientation )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 touchOrientation); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchPressure) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchPressure )( + ICoreWebView2PointerInfo * This, + /* [retval][out] */ UINT32 *touchPressure); + + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchPressure) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchPressure )( + ICoreWebView2PointerInfo * This, + /* [in] */ UINT32 touchPressure); + + END_INTERFACE + } ICoreWebView2PointerInfoVtbl; + + interface ICoreWebView2PointerInfo + { + CONST_VTBL struct ICoreWebView2PointerInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PointerInfo_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PointerInfo_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PointerInfo_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PointerInfo_get_PointerKind(This,pointerKind) \ + ( (This)->lpVtbl -> get_PointerKind(This,pointerKind) ) + +#define ICoreWebView2PointerInfo_put_PointerKind(This,pointerKind) \ + ( (This)->lpVtbl -> put_PointerKind(This,pointerKind) ) + +#define ICoreWebView2PointerInfo_get_PointerId(This,pointerId) \ + ( (This)->lpVtbl -> get_PointerId(This,pointerId) ) + +#define ICoreWebView2PointerInfo_put_PointerId(This,pointerId) \ + ( (This)->lpVtbl -> put_PointerId(This,pointerId) ) + +#define ICoreWebView2PointerInfo_get_FrameId(This,frameId) \ + ( (This)->lpVtbl -> get_FrameId(This,frameId) ) + +#define ICoreWebView2PointerInfo_put_FrameId(This,frameId) \ + ( (This)->lpVtbl -> put_FrameId(This,frameId) ) + +#define ICoreWebView2PointerInfo_get_PointerFlags(This,pointerFlags) \ + ( (This)->lpVtbl -> get_PointerFlags(This,pointerFlags) ) + +#define ICoreWebView2PointerInfo_put_PointerFlags(This,pointerFlags) \ + ( (This)->lpVtbl -> put_PointerFlags(This,pointerFlags) ) + +#define ICoreWebView2PointerInfo_get_PointerDeviceRect(This,pointerDeviceRect) \ + ( (This)->lpVtbl -> get_PointerDeviceRect(This,pointerDeviceRect) ) + +#define ICoreWebView2PointerInfo_put_PointerDeviceRect(This,pointerDeviceRect) \ + ( (This)->lpVtbl -> put_PointerDeviceRect(This,pointerDeviceRect) ) + +#define ICoreWebView2PointerInfo_get_DisplayRect(This,displayRect) \ + ( (This)->lpVtbl -> get_DisplayRect(This,displayRect) ) + +#define ICoreWebView2PointerInfo_put_DisplayRect(This,displayRect) \ + ( (This)->lpVtbl -> put_DisplayRect(This,displayRect) ) + +#define ICoreWebView2PointerInfo_get_PixelLocation(This,pixelLocation) \ + ( (This)->lpVtbl -> get_PixelLocation(This,pixelLocation) ) + +#define ICoreWebView2PointerInfo_put_PixelLocation(This,pixelLocation) \ + ( (This)->lpVtbl -> put_PixelLocation(This,pixelLocation) ) + +#define ICoreWebView2PointerInfo_get_HimetricLocation(This,himetricLocation) \ + ( (This)->lpVtbl -> get_HimetricLocation(This,himetricLocation) ) + +#define ICoreWebView2PointerInfo_put_HimetricLocation(This,himetricLocation) \ + ( (This)->lpVtbl -> put_HimetricLocation(This,himetricLocation) ) + +#define ICoreWebView2PointerInfo_get_PixelLocationRaw(This,pixelLocationRaw) \ + ( (This)->lpVtbl -> get_PixelLocationRaw(This,pixelLocationRaw) ) + +#define ICoreWebView2PointerInfo_put_PixelLocationRaw(This,pixelLocationRaw) \ + ( (This)->lpVtbl -> put_PixelLocationRaw(This,pixelLocationRaw) ) + +#define ICoreWebView2PointerInfo_get_HimetricLocationRaw(This,himetricLocationRaw) \ + ( (This)->lpVtbl -> get_HimetricLocationRaw(This,himetricLocationRaw) ) + +#define ICoreWebView2PointerInfo_put_HimetricLocationRaw(This,himetricLocationRaw) \ + ( (This)->lpVtbl -> put_HimetricLocationRaw(This,himetricLocationRaw) ) + +#define ICoreWebView2PointerInfo_get_Time(This,time) \ + ( (This)->lpVtbl -> get_Time(This,time) ) + +#define ICoreWebView2PointerInfo_put_Time(This,time) \ + ( (This)->lpVtbl -> put_Time(This,time) ) + +#define ICoreWebView2PointerInfo_get_HistoryCount(This,historyCount) \ + ( (This)->lpVtbl -> get_HistoryCount(This,historyCount) ) + +#define ICoreWebView2PointerInfo_put_HistoryCount(This,historyCount) \ + ( (This)->lpVtbl -> put_HistoryCount(This,historyCount) ) + +#define ICoreWebView2PointerInfo_get_InputData(This,inputData) \ + ( (This)->lpVtbl -> get_InputData(This,inputData) ) + +#define ICoreWebView2PointerInfo_put_InputData(This,inputData) \ + ( (This)->lpVtbl -> put_InputData(This,inputData) ) + +#define ICoreWebView2PointerInfo_get_KeyStates(This,keyStates) \ + ( (This)->lpVtbl -> get_KeyStates(This,keyStates) ) + +#define ICoreWebView2PointerInfo_put_KeyStates(This,keyStates) \ + ( (This)->lpVtbl -> put_KeyStates(This,keyStates) ) + +#define ICoreWebView2PointerInfo_get_PerformanceCount(This,performanceCount) \ + ( (This)->lpVtbl -> get_PerformanceCount(This,performanceCount) ) + +#define ICoreWebView2PointerInfo_put_PerformanceCount(This,performanceCount) \ + ( (This)->lpVtbl -> put_PerformanceCount(This,performanceCount) ) + +#define ICoreWebView2PointerInfo_get_ButtonChangeKind(This,buttonChangeKind) \ + ( (This)->lpVtbl -> get_ButtonChangeKind(This,buttonChangeKind) ) + +#define ICoreWebView2PointerInfo_put_ButtonChangeKind(This,buttonChangeKind) \ + ( (This)->lpVtbl -> put_ButtonChangeKind(This,buttonChangeKind) ) + +#define ICoreWebView2PointerInfo_get_PenFlags(This,penFLags) \ + ( (This)->lpVtbl -> get_PenFlags(This,penFLags) ) + +#define ICoreWebView2PointerInfo_put_PenFlags(This,penFLags) \ + ( (This)->lpVtbl -> put_PenFlags(This,penFLags) ) + +#define ICoreWebView2PointerInfo_get_PenMask(This,penMask) \ + ( (This)->lpVtbl -> get_PenMask(This,penMask) ) + +#define ICoreWebView2PointerInfo_put_PenMask(This,penMask) \ + ( (This)->lpVtbl -> put_PenMask(This,penMask) ) + +#define ICoreWebView2PointerInfo_get_PenPressure(This,penPressure) \ + ( (This)->lpVtbl -> get_PenPressure(This,penPressure) ) + +#define ICoreWebView2PointerInfo_put_PenPressure(This,penPressure) \ + ( (This)->lpVtbl -> put_PenPressure(This,penPressure) ) + +#define ICoreWebView2PointerInfo_get_PenRotation(This,penRotation) \ + ( (This)->lpVtbl -> get_PenRotation(This,penRotation) ) + +#define ICoreWebView2PointerInfo_put_PenRotation(This,penRotation) \ + ( (This)->lpVtbl -> put_PenRotation(This,penRotation) ) + +#define ICoreWebView2PointerInfo_get_PenTiltX(This,penTiltX) \ + ( (This)->lpVtbl -> get_PenTiltX(This,penTiltX) ) + +#define ICoreWebView2PointerInfo_put_PenTiltX(This,penTiltX) \ + ( (This)->lpVtbl -> put_PenTiltX(This,penTiltX) ) + +#define ICoreWebView2PointerInfo_get_PenTiltY(This,penTiltY) \ + ( (This)->lpVtbl -> get_PenTiltY(This,penTiltY) ) + +#define ICoreWebView2PointerInfo_put_PenTiltY(This,penTiltY) \ + ( (This)->lpVtbl -> put_PenTiltY(This,penTiltY) ) + +#define ICoreWebView2PointerInfo_get_TouchFlags(This,touchFlags) \ + ( (This)->lpVtbl -> get_TouchFlags(This,touchFlags) ) + +#define ICoreWebView2PointerInfo_put_TouchFlags(This,touchFlags) \ + ( (This)->lpVtbl -> put_TouchFlags(This,touchFlags) ) + +#define ICoreWebView2PointerInfo_get_TouchMask(This,touchMask) \ + ( (This)->lpVtbl -> get_TouchMask(This,touchMask) ) + +#define ICoreWebView2PointerInfo_put_TouchMask(This,touchMask) \ + ( (This)->lpVtbl -> put_TouchMask(This,touchMask) ) + +#define ICoreWebView2PointerInfo_get_TouchContact(This,touchContact) \ + ( (This)->lpVtbl -> get_TouchContact(This,touchContact) ) + +#define ICoreWebView2PointerInfo_put_TouchContact(This,touchContact) \ + ( (This)->lpVtbl -> put_TouchContact(This,touchContact) ) + +#define ICoreWebView2PointerInfo_get_TouchContactRaw(This,touchContactRaw) \ + ( (This)->lpVtbl -> get_TouchContactRaw(This,touchContactRaw) ) + +#define ICoreWebView2PointerInfo_put_TouchContactRaw(This,touchContactRaw) \ + ( (This)->lpVtbl -> put_TouchContactRaw(This,touchContactRaw) ) + +#define ICoreWebView2PointerInfo_get_TouchOrientation(This,touchOrientation) \ + ( (This)->lpVtbl -> get_TouchOrientation(This,touchOrientation) ) + +#define ICoreWebView2PointerInfo_put_TouchOrientation(This,touchOrientation) \ + ( (This)->lpVtbl -> put_TouchOrientation(This,touchOrientation) ) + +#define ICoreWebView2PointerInfo_get_TouchPressure(This,touchPressure) \ + ( (This)->lpVtbl -> get_TouchPressure(This,touchPressure) ) + +#define ICoreWebView2PointerInfo_put_TouchPressure(This,touchPressure) \ + ( (This)->lpVtbl -> put_TouchPressure(This,touchPressure) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PointerInfo_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintSettings_INTERFACE_DEFINED__ +#define __ICoreWebView2PrintSettings_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PrintSettings */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PrintSettings = {0x377f3721,0xc74e,0x48ca,{0x8d,0xb1,0xdf,0x68,0xe5,0x1d,0x60,0xe2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("377f3721-c74e-48ca-8db1-df68e51d60e2") + ICoreWebView2PrintSettings : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Orientation( + /* [retval][out] */ COREWEBVIEW2_PRINT_ORIENTATION *orientation) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Orientation( + /* [in] */ COREWEBVIEW2_PRINT_ORIENTATION orientation) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ScaleFactor( + /* [retval][out] */ double *scaleFactor) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ScaleFactor( + /* [in] */ double scaleFactor) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PageWidth( + /* [retval][out] */ double *pageWidth) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PageWidth( + /* [in] */ double pageWidth) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PageHeight( + /* [retval][out] */ double *pageHeight) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PageHeight( + /* [in] */ double pageHeight) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MarginTop( + /* [retval][out] */ double *marginTop) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_MarginTop( + /* [in] */ double marginTop) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MarginBottom( + /* [retval][out] */ double *marginBottom) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_MarginBottom( + /* [in] */ double marginBottom) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MarginLeft( + /* [retval][out] */ double *marginLeft) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_MarginLeft( + /* [in] */ double marginLeft) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MarginRight( + /* [retval][out] */ double *marginRight) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_MarginRight( + /* [in] */ double marginRight) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldPrintBackgrounds( + /* [retval][out] */ BOOL *shouldPrintBackgrounds) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ShouldPrintBackgrounds( + /* [in] */ BOOL shouldPrintBackgrounds) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldPrintSelectionOnly( + /* [retval][out] */ BOOL *shouldPrintSelectionOnly) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ShouldPrintSelectionOnly( + /* [in] */ BOOL shouldPrintSelectionOnly) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldPrintHeaderAndFooter( + /* [retval][out] */ BOOL *shouldPrintHeaderAndFooter) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ShouldPrintHeaderAndFooter( + /* [in] */ BOOL shouldPrintHeaderAndFooter) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HeaderTitle( + /* [retval][out] */ LPWSTR *headerTitle) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_HeaderTitle( + /* [in] */ LPCWSTR headerTitle) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FooterUri( + /* [retval][out] */ LPWSTR *footerUri) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_FooterUri( + /* [in] */ LPCWSTR footerUri) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PrintSettingsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PrintSettings * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PrintSettings * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PrintSettings * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_Orientation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Orientation )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ COREWEBVIEW2_PRINT_ORIENTATION *orientation); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_Orientation) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Orientation )( + ICoreWebView2PrintSettings * This, + /* [in] */ COREWEBVIEW2_PRINT_ORIENTATION orientation); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ScaleFactor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScaleFactor )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ double *scaleFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ScaleFactor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ScaleFactor )( + ICoreWebView2PrintSettings * This, + /* [in] */ double scaleFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_PageWidth) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageWidth )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ double *pageWidth); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_PageWidth) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PageWidth )( + ICoreWebView2PrintSettings * This, + /* [in] */ double pageWidth); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_PageHeight) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageHeight )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ double *pageHeight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_PageHeight) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PageHeight )( + ICoreWebView2PrintSettings * This, + /* [in] */ double pageHeight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginTop) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginTop )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ double *marginTop); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginTop) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginTop )( + ICoreWebView2PrintSettings * This, + /* [in] */ double marginTop); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginBottom) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginBottom )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ double *marginBottom); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginBottom) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginBottom )( + ICoreWebView2PrintSettings * This, + /* [in] */ double marginBottom); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginLeft) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginLeft )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ double *marginLeft); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginLeft) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginLeft )( + ICoreWebView2PrintSettings * This, + /* [in] */ double marginLeft); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginRight) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginRight )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ double *marginRight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginRight) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginRight )( + ICoreWebView2PrintSettings * This, + /* [in] */ double marginRight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintBackgrounds) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintBackgrounds )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ BOOL *shouldPrintBackgrounds); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintBackgrounds) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintBackgrounds )( + ICoreWebView2PrintSettings * This, + /* [in] */ BOOL shouldPrintBackgrounds); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintSelectionOnly) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintSelectionOnly )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ BOOL *shouldPrintSelectionOnly); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintSelectionOnly) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintSelectionOnly )( + ICoreWebView2PrintSettings * This, + /* [in] */ BOOL shouldPrintSelectionOnly); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintHeaderAndFooter) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintHeaderAndFooter )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ BOOL *shouldPrintHeaderAndFooter); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintHeaderAndFooter) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintHeaderAndFooter )( + ICoreWebView2PrintSettings * This, + /* [in] */ BOOL shouldPrintHeaderAndFooter); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_HeaderTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HeaderTitle )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ LPWSTR *headerTitle); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_HeaderTitle) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HeaderTitle )( + ICoreWebView2PrintSettings * This, + /* [in] */ LPCWSTR headerTitle); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_FooterUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FooterUri )( + ICoreWebView2PrintSettings * This, + /* [retval][out] */ LPWSTR *footerUri); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_FooterUri) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_FooterUri )( + ICoreWebView2PrintSettings * This, + /* [in] */ LPCWSTR footerUri); + + END_INTERFACE + } ICoreWebView2PrintSettingsVtbl; + + interface ICoreWebView2PrintSettings + { + CONST_VTBL struct ICoreWebView2PrintSettingsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PrintSettings_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PrintSettings_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PrintSettings_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PrintSettings_get_Orientation(This,orientation) \ + ( (This)->lpVtbl -> get_Orientation(This,orientation) ) + +#define ICoreWebView2PrintSettings_put_Orientation(This,orientation) \ + ( (This)->lpVtbl -> put_Orientation(This,orientation) ) + +#define ICoreWebView2PrintSettings_get_ScaleFactor(This,scaleFactor) \ + ( (This)->lpVtbl -> get_ScaleFactor(This,scaleFactor) ) + +#define ICoreWebView2PrintSettings_put_ScaleFactor(This,scaleFactor) \ + ( (This)->lpVtbl -> put_ScaleFactor(This,scaleFactor) ) + +#define ICoreWebView2PrintSettings_get_PageWidth(This,pageWidth) \ + ( (This)->lpVtbl -> get_PageWidth(This,pageWidth) ) + +#define ICoreWebView2PrintSettings_put_PageWidth(This,pageWidth) \ + ( (This)->lpVtbl -> put_PageWidth(This,pageWidth) ) + +#define ICoreWebView2PrintSettings_get_PageHeight(This,pageHeight) \ + ( (This)->lpVtbl -> get_PageHeight(This,pageHeight) ) + +#define ICoreWebView2PrintSettings_put_PageHeight(This,pageHeight) \ + ( (This)->lpVtbl -> put_PageHeight(This,pageHeight) ) + +#define ICoreWebView2PrintSettings_get_MarginTop(This,marginTop) \ + ( (This)->lpVtbl -> get_MarginTop(This,marginTop) ) + +#define ICoreWebView2PrintSettings_put_MarginTop(This,marginTop) \ + ( (This)->lpVtbl -> put_MarginTop(This,marginTop) ) + +#define ICoreWebView2PrintSettings_get_MarginBottom(This,marginBottom) \ + ( (This)->lpVtbl -> get_MarginBottom(This,marginBottom) ) + +#define ICoreWebView2PrintSettings_put_MarginBottom(This,marginBottom) \ + ( (This)->lpVtbl -> put_MarginBottom(This,marginBottom) ) + +#define ICoreWebView2PrintSettings_get_MarginLeft(This,marginLeft) \ + ( (This)->lpVtbl -> get_MarginLeft(This,marginLeft) ) + +#define ICoreWebView2PrintSettings_put_MarginLeft(This,marginLeft) \ + ( (This)->lpVtbl -> put_MarginLeft(This,marginLeft) ) + +#define ICoreWebView2PrintSettings_get_MarginRight(This,marginRight) \ + ( (This)->lpVtbl -> get_MarginRight(This,marginRight) ) + +#define ICoreWebView2PrintSettings_put_MarginRight(This,marginRight) \ + ( (This)->lpVtbl -> put_MarginRight(This,marginRight) ) + +#define ICoreWebView2PrintSettings_get_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) \ + ( (This)->lpVtbl -> get_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) ) + +#define ICoreWebView2PrintSettings_put_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) \ + ( (This)->lpVtbl -> put_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) ) + +#define ICoreWebView2PrintSettings_get_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) \ + ( (This)->lpVtbl -> get_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) ) + +#define ICoreWebView2PrintSettings_put_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) \ + ( (This)->lpVtbl -> put_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) ) + +#define ICoreWebView2PrintSettings_get_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) \ + ( (This)->lpVtbl -> get_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) ) + +#define ICoreWebView2PrintSettings_put_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) \ + ( (This)->lpVtbl -> put_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) ) + +#define ICoreWebView2PrintSettings_get_HeaderTitle(This,headerTitle) \ + ( (This)->lpVtbl -> get_HeaderTitle(This,headerTitle) ) + +#define ICoreWebView2PrintSettings_put_HeaderTitle(This,headerTitle) \ + ( (This)->lpVtbl -> put_HeaderTitle(This,headerTitle) ) + +#define ICoreWebView2PrintSettings_get_FooterUri(This,footerUri) \ + ( (This)->lpVtbl -> get_FooterUri(This,footerUri) ) + +#define ICoreWebView2PrintSettings_put_FooterUri(This,footerUri) \ + ( (This)->lpVtbl -> put_FooterUri(This,footerUri) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PrintSettings_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PrintSettings2_INTERFACE_DEFINED__ +#define __ICoreWebView2PrintSettings2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PrintSettings2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PrintSettings2 = {0xCA7F0E1F,0x3484,0x41D1,{0x8C,0x1A,0x65,0xCD,0x44,0xA6,0x3F,0x8D}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("CA7F0E1F-3484-41D1-8C1A-65CD44A63F8D") + ICoreWebView2PrintSettings2 : public ICoreWebView2PrintSettings + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PageRanges( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PageRanges( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PagesPerSide( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PagesPerSide( + /* [in] */ INT32 value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Copies( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Copies( + /* [in] */ INT32 value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Collation( + /* [retval][out] */ COREWEBVIEW2_PRINT_COLLATION *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Collation( + /* [in] */ COREWEBVIEW2_PRINT_COLLATION value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ColorMode( + /* [retval][out] */ COREWEBVIEW2_PRINT_COLOR_MODE *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ColorMode( + /* [in] */ COREWEBVIEW2_PRINT_COLOR_MODE value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Duplex( + /* [retval][out] */ COREWEBVIEW2_PRINT_DUPLEX *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Duplex( + /* [in] */ COREWEBVIEW2_PRINT_DUPLEX value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MediaSize( + /* [retval][out] */ COREWEBVIEW2_PRINT_MEDIA_SIZE *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_MediaSize( + /* [in] */ COREWEBVIEW2_PRINT_MEDIA_SIZE value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PrinterName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PrinterName( + /* [in] */ LPCWSTR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PrintSettings2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PrintSettings2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PrintSettings2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_Orientation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Orientation )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ COREWEBVIEW2_PRINT_ORIENTATION *orientation); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_Orientation) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Orientation )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ COREWEBVIEW2_PRINT_ORIENTATION orientation); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ScaleFactor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScaleFactor )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ double *scaleFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ScaleFactor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ScaleFactor )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ double scaleFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_PageWidth) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageWidth )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ double *pageWidth); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_PageWidth) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PageWidth )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ double pageWidth); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_PageHeight) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageHeight )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ double *pageHeight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_PageHeight) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PageHeight )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ double pageHeight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginTop) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginTop )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ double *marginTop); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginTop) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginTop )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ double marginTop); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginBottom) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginBottom )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ double *marginBottom); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginBottom) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginBottom )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ double marginBottom); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginLeft) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginLeft )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ double *marginLeft); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginLeft) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginLeft )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ double marginLeft); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginRight) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginRight )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ double *marginRight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginRight) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginRight )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ double marginRight); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintBackgrounds) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintBackgrounds )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ BOOL *shouldPrintBackgrounds); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintBackgrounds) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintBackgrounds )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ BOOL shouldPrintBackgrounds); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintSelectionOnly) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintSelectionOnly )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ BOOL *shouldPrintSelectionOnly); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintSelectionOnly) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintSelectionOnly )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ BOOL shouldPrintSelectionOnly); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintHeaderAndFooter) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintHeaderAndFooter )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ BOOL *shouldPrintHeaderAndFooter); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintHeaderAndFooter) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintHeaderAndFooter )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ BOOL shouldPrintHeaderAndFooter); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_HeaderTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HeaderTitle )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ LPWSTR *headerTitle); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_HeaderTitle) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HeaderTitle )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ LPCWSTR headerTitle); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_FooterUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FooterUri )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ LPWSTR *footerUri); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_FooterUri) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_FooterUri )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ LPCWSTR footerUri); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_PageRanges) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageRanges )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_PageRanges) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PageRanges )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_PagesPerSide) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PagesPerSide )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_PagesPerSide) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PagesPerSide )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ INT32 value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_Copies) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Copies )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_Copies) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Copies )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ INT32 value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_Collation) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Collation )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ COREWEBVIEW2_PRINT_COLLATION *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_Collation) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Collation )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ COREWEBVIEW2_PRINT_COLLATION value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_ColorMode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ColorMode )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ COREWEBVIEW2_PRINT_COLOR_MODE *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_ColorMode) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ColorMode )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ COREWEBVIEW2_PRINT_COLOR_MODE value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_Duplex) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Duplex )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ COREWEBVIEW2_PRINT_DUPLEX *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_Duplex) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Duplex )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ COREWEBVIEW2_PRINT_DUPLEX value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_MediaSize) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MediaSize )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ COREWEBVIEW2_PRINT_MEDIA_SIZE *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_MediaSize) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MediaSize )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ COREWEBVIEW2_PRINT_MEDIA_SIZE value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, get_PrinterName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PrinterName )( + ICoreWebView2PrintSettings2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings2, put_PrinterName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PrinterName )( + ICoreWebView2PrintSettings2 * This, + /* [in] */ LPCWSTR value); + + END_INTERFACE + } ICoreWebView2PrintSettings2Vtbl; + + interface ICoreWebView2PrintSettings2 + { + CONST_VTBL struct ICoreWebView2PrintSettings2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PrintSettings2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PrintSettings2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PrintSettings2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PrintSettings2_get_Orientation(This,orientation) \ + ( (This)->lpVtbl -> get_Orientation(This,orientation) ) + +#define ICoreWebView2PrintSettings2_put_Orientation(This,orientation) \ + ( (This)->lpVtbl -> put_Orientation(This,orientation) ) + +#define ICoreWebView2PrintSettings2_get_ScaleFactor(This,scaleFactor) \ + ( (This)->lpVtbl -> get_ScaleFactor(This,scaleFactor) ) + +#define ICoreWebView2PrintSettings2_put_ScaleFactor(This,scaleFactor) \ + ( (This)->lpVtbl -> put_ScaleFactor(This,scaleFactor) ) + +#define ICoreWebView2PrintSettings2_get_PageWidth(This,pageWidth) \ + ( (This)->lpVtbl -> get_PageWidth(This,pageWidth) ) + +#define ICoreWebView2PrintSettings2_put_PageWidth(This,pageWidth) \ + ( (This)->lpVtbl -> put_PageWidth(This,pageWidth) ) + +#define ICoreWebView2PrintSettings2_get_PageHeight(This,pageHeight) \ + ( (This)->lpVtbl -> get_PageHeight(This,pageHeight) ) + +#define ICoreWebView2PrintSettings2_put_PageHeight(This,pageHeight) \ + ( (This)->lpVtbl -> put_PageHeight(This,pageHeight) ) + +#define ICoreWebView2PrintSettings2_get_MarginTop(This,marginTop) \ + ( (This)->lpVtbl -> get_MarginTop(This,marginTop) ) + +#define ICoreWebView2PrintSettings2_put_MarginTop(This,marginTop) \ + ( (This)->lpVtbl -> put_MarginTop(This,marginTop) ) + +#define ICoreWebView2PrintSettings2_get_MarginBottom(This,marginBottom) \ + ( (This)->lpVtbl -> get_MarginBottom(This,marginBottom) ) + +#define ICoreWebView2PrintSettings2_put_MarginBottom(This,marginBottom) \ + ( (This)->lpVtbl -> put_MarginBottom(This,marginBottom) ) + +#define ICoreWebView2PrintSettings2_get_MarginLeft(This,marginLeft) \ + ( (This)->lpVtbl -> get_MarginLeft(This,marginLeft) ) + +#define ICoreWebView2PrintSettings2_put_MarginLeft(This,marginLeft) \ + ( (This)->lpVtbl -> put_MarginLeft(This,marginLeft) ) + +#define ICoreWebView2PrintSettings2_get_MarginRight(This,marginRight) \ + ( (This)->lpVtbl -> get_MarginRight(This,marginRight) ) + +#define ICoreWebView2PrintSettings2_put_MarginRight(This,marginRight) \ + ( (This)->lpVtbl -> put_MarginRight(This,marginRight) ) + +#define ICoreWebView2PrintSettings2_get_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) \ + ( (This)->lpVtbl -> get_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) ) + +#define ICoreWebView2PrintSettings2_put_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) \ + ( (This)->lpVtbl -> put_ShouldPrintBackgrounds(This,shouldPrintBackgrounds) ) + +#define ICoreWebView2PrintSettings2_get_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) \ + ( (This)->lpVtbl -> get_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) ) + +#define ICoreWebView2PrintSettings2_put_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) \ + ( (This)->lpVtbl -> put_ShouldPrintSelectionOnly(This,shouldPrintSelectionOnly) ) + +#define ICoreWebView2PrintSettings2_get_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) \ + ( (This)->lpVtbl -> get_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) ) + +#define ICoreWebView2PrintSettings2_put_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) \ + ( (This)->lpVtbl -> put_ShouldPrintHeaderAndFooter(This,shouldPrintHeaderAndFooter) ) + +#define ICoreWebView2PrintSettings2_get_HeaderTitle(This,headerTitle) \ + ( (This)->lpVtbl -> get_HeaderTitle(This,headerTitle) ) + +#define ICoreWebView2PrintSettings2_put_HeaderTitle(This,headerTitle) \ + ( (This)->lpVtbl -> put_HeaderTitle(This,headerTitle) ) + +#define ICoreWebView2PrintSettings2_get_FooterUri(This,footerUri) \ + ( (This)->lpVtbl -> get_FooterUri(This,footerUri) ) + +#define ICoreWebView2PrintSettings2_put_FooterUri(This,footerUri) \ + ( (This)->lpVtbl -> put_FooterUri(This,footerUri) ) + + +#define ICoreWebView2PrintSettings2_get_PageRanges(This,value) \ + ( (This)->lpVtbl -> get_PageRanges(This,value) ) + +#define ICoreWebView2PrintSettings2_put_PageRanges(This,value) \ + ( (This)->lpVtbl -> put_PageRanges(This,value) ) + +#define ICoreWebView2PrintSettings2_get_PagesPerSide(This,value) \ + ( (This)->lpVtbl -> get_PagesPerSide(This,value) ) + +#define ICoreWebView2PrintSettings2_put_PagesPerSide(This,value) \ + ( (This)->lpVtbl -> put_PagesPerSide(This,value) ) + +#define ICoreWebView2PrintSettings2_get_Copies(This,value) \ + ( (This)->lpVtbl -> get_Copies(This,value) ) + +#define ICoreWebView2PrintSettings2_put_Copies(This,value) \ + ( (This)->lpVtbl -> put_Copies(This,value) ) + +#define ICoreWebView2PrintSettings2_get_Collation(This,value) \ + ( (This)->lpVtbl -> get_Collation(This,value) ) + +#define ICoreWebView2PrintSettings2_put_Collation(This,value) \ + ( (This)->lpVtbl -> put_Collation(This,value) ) + +#define ICoreWebView2PrintSettings2_get_ColorMode(This,value) \ + ( (This)->lpVtbl -> get_ColorMode(This,value) ) + +#define ICoreWebView2PrintSettings2_put_ColorMode(This,value) \ + ( (This)->lpVtbl -> put_ColorMode(This,value) ) + +#define ICoreWebView2PrintSettings2_get_Duplex(This,value) \ + ( (This)->lpVtbl -> get_Duplex(This,value) ) + +#define ICoreWebView2PrintSettings2_put_Duplex(This,value) \ + ( (This)->lpVtbl -> put_Duplex(This,value) ) + +#define ICoreWebView2PrintSettings2_get_MediaSize(This,value) \ + ( (This)->lpVtbl -> get_MediaSize(This,value) ) + +#define ICoreWebView2PrintSettings2_put_MediaSize(This,value) \ + ( (This)->lpVtbl -> put_MediaSize(This,value) ) + +#define ICoreWebView2PrintSettings2_get_PrinterName(This,value) \ + ( (This)->lpVtbl -> get_PrinterName(This,value) ) + +#define ICoreWebView2PrintSettings2_put_PrinterName(This,value) \ + ( (This)->lpVtbl -> put_PrinterName(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PrintSettings2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessExtendedInfo_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessExtendedInfo_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessExtendedInfo */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessExtendedInfo = {0xaf4c4c2e,0x45db,0x11ee,{0xbe,0x56,0x02,0x42,0xac,0x12,0x00,0x02}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("af4c4c2e-45db-11ee-be56-0242ac120002") + ICoreWebView2ProcessExtendedInfo : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProcessInfo( + /* [retval][out] */ ICoreWebView2ProcessInfo **processInfo) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AssociatedFrameInfos( + /* [retval][out] */ ICoreWebView2FrameInfoCollection **frames) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessExtendedInfoVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessExtendedInfo * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessExtendedInfo * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessExtendedInfo * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessExtendedInfo, get_ProcessInfo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessInfo )( + ICoreWebView2ProcessExtendedInfo * This, + /* [retval][out] */ ICoreWebView2ProcessInfo **processInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessExtendedInfo, get_AssociatedFrameInfos) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AssociatedFrameInfos )( + ICoreWebView2ProcessExtendedInfo * This, + /* [retval][out] */ ICoreWebView2FrameInfoCollection **frames); + + END_INTERFACE + } ICoreWebView2ProcessExtendedInfoVtbl; + + interface ICoreWebView2ProcessExtendedInfo + { + CONST_VTBL struct ICoreWebView2ProcessExtendedInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessExtendedInfo_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessExtendedInfo_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessExtendedInfo_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessExtendedInfo_get_ProcessInfo(This,processInfo) \ + ( (This)->lpVtbl -> get_ProcessInfo(This,processInfo) ) + +#define ICoreWebView2ProcessExtendedInfo_get_AssociatedFrameInfos(This,frames) \ + ( (This)->lpVtbl -> get_AssociatedFrameInfos(This,frames) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessExtendedInfo_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessFailedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventArgs = {0x8155a9a4,0x1474,0x4a86,{0x8c,0xae,0x15,0x1b,0x0f,0xa6,0xb8,0xca}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8155a9a4-1474-4a86-8cae-151b0fa6b8ca") + ICoreWebView2ProcessFailedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProcessFailedKind( + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessFailedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessFailedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessFailedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessFailedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs, get_ProcessFailedKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessFailedKind )( + ICoreWebView2ProcessFailedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *value); + + END_INTERFACE + } ICoreWebView2ProcessFailedEventArgsVtbl; + + interface ICoreWebView2ProcessFailedEventArgs + { + CONST_VTBL struct ICoreWebView2ProcessFailedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessFailedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessFailedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessFailedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessFailedEventArgs_get_ProcessFailedKind(This,value) \ + ( (This)->lpVtbl -> get_ProcessFailedKind(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessFailedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessFailedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventArgs2 = {0x4dab9422,0x46fa,0x4c3e,{0xa5,0xd2,0x41,0xd2,0x07,0x1d,0x36,0x80}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4dab9422-46fa-4c3e-a5d2-41d2071d3680") + ICoreWebView2ProcessFailedEventArgs2 : public ICoreWebView2ProcessFailedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Reason( + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_REASON *reason) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ExitCode( + /* [retval][out] */ int *exitCode) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProcessDescription( + /* [retval][out] */ LPWSTR *processDescription) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameInfosForFailedProcess( + /* [retval][out] */ ICoreWebView2FrameInfoCollection **frames) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessFailedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessFailedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessFailedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessFailedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs, get_ProcessFailedKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessFailedKind )( + ICoreWebView2ProcessFailedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_Reason) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Reason )( + ICoreWebView2ProcessFailedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_REASON *reason); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_ExitCode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ExitCode )( + ICoreWebView2ProcessFailedEventArgs2 * This, + /* [retval][out] */ int *exitCode); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_ProcessDescription) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessDescription )( + ICoreWebView2ProcessFailedEventArgs2 * This, + /* [retval][out] */ LPWSTR *processDescription); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_FrameInfosForFailedProcess) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameInfosForFailedProcess )( + ICoreWebView2ProcessFailedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2FrameInfoCollection **frames); + + END_INTERFACE + } ICoreWebView2ProcessFailedEventArgs2Vtbl; + + interface ICoreWebView2ProcessFailedEventArgs2 + { + CONST_VTBL struct ICoreWebView2ProcessFailedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessFailedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessFailedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessFailedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessFailedEventArgs2_get_ProcessFailedKind(This,value) \ + ( (This)->lpVtbl -> get_ProcessFailedKind(This,value) ) + + +#define ICoreWebView2ProcessFailedEventArgs2_get_Reason(This,reason) \ + ( (This)->lpVtbl -> get_Reason(This,reason) ) + +#define ICoreWebView2ProcessFailedEventArgs2_get_ExitCode(This,exitCode) \ + ( (This)->lpVtbl -> get_ExitCode(This,exitCode) ) + +#define ICoreWebView2ProcessFailedEventArgs2_get_ProcessDescription(This,processDescription) \ + ( (This)->lpVtbl -> get_ProcessDescription(This,processDescription) ) + +#define ICoreWebView2ProcessFailedEventArgs2_get_FrameInfosForFailedProcess(This,frames) \ + ( (This)->lpVtbl -> get_FrameInfosForFailedProcess(This,frames) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessFailedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs3_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessFailedEventArgs3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventArgs3 = {0xab667428,0x094d,0x5fd1,{0xb4,0x80,0x8b,0x4c,0x0f,0xdb,0xdf,0x2f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ab667428-094d-5fd1-b480-8b4c0fdbdf2f") + ICoreWebView2ProcessFailedEventArgs3 : public ICoreWebView2ProcessFailedEventArgs2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FailureSourceModulePath( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessFailedEventArgs3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessFailedEventArgs3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessFailedEventArgs3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessFailedEventArgs3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs, get_ProcessFailedKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessFailedKind )( + ICoreWebView2ProcessFailedEventArgs3 * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_Reason) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Reason )( + ICoreWebView2ProcessFailedEventArgs3 * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_REASON *reason); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_ExitCode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ExitCode )( + ICoreWebView2ProcessFailedEventArgs3 * This, + /* [retval][out] */ int *exitCode); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_ProcessDescription) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessDescription )( + ICoreWebView2ProcessFailedEventArgs3 * This, + /* [retval][out] */ LPWSTR *processDescription); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_FrameInfosForFailedProcess) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameInfosForFailedProcess )( + ICoreWebView2ProcessFailedEventArgs3 * This, + /* [retval][out] */ ICoreWebView2FrameInfoCollection **frames); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs3, get_FailureSourceModulePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FailureSourceModulePath )( + ICoreWebView2ProcessFailedEventArgs3 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2ProcessFailedEventArgs3Vtbl; + + interface ICoreWebView2ProcessFailedEventArgs3 + { + CONST_VTBL struct ICoreWebView2ProcessFailedEventArgs3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessFailedEventArgs3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessFailedEventArgs3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessFailedEventArgs3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessFailedEventArgs3_get_ProcessFailedKind(This,value) \ + ( (This)->lpVtbl -> get_ProcessFailedKind(This,value) ) + + +#define ICoreWebView2ProcessFailedEventArgs3_get_Reason(This,reason) \ + ( (This)->lpVtbl -> get_Reason(This,reason) ) + +#define ICoreWebView2ProcessFailedEventArgs3_get_ExitCode(This,exitCode) \ + ( (This)->lpVtbl -> get_ExitCode(This,exitCode) ) + +#define ICoreWebView2ProcessFailedEventArgs3_get_ProcessDescription(This,processDescription) \ + ( (This)->lpVtbl -> get_ProcessDescription(This,processDescription) ) + +#define ICoreWebView2ProcessFailedEventArgs3_get_FrameInfosForFailedProcess(This,frames) \ + ( (This)->lpVtbl -> get_FrameInfosForFailedProcess(This,frames) ) + + +#define ICoreWebView2ProcessFailedEventArgs3_get_FailureSourceModulePath(This,value) \ + ( (This)->lpVtbl -> get_FailureSourceModulePath(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessFailedEventArgs3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfo_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessInfo_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessInfo */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessInfo = {0x84FA7612,0x3F3D,0x4FBF,{0x88,0x9D,0xFA,0xD0,0x00,0x49,0x2D,0x72}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("84FA7612-3F3D-4FBF-889D-FAD000492D72") + ICoreWebView2ProcessInfo : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProcessId( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_PROCESS_KIND *kind) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessInfoVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessInfo * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessInfo * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessInfo * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfo, get_ProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessId )( + ICoreWebView2ProcessInfo * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfo, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ProcessInfo * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_KIND *kind); + + END_INTERFACE + } ICoreWebView2ProcessInfoVtbl; + + interface ICoreWebView2ProcessInfo + { + CONST_VTBL struct ICoreWebView2ProcessInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessInfo_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessInfo_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessInfo_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessInfo_get_ProcessId(This,value) \ + ( (This)->lpVtbl -> get_ProcessId(This,value) ) + +#define ICoreWebView2ProcessInfo_get_Kind(This,kind) \ + ( (This)->lpVtbl -> get_Kind(This,kind) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessInfo_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile = {0x79110ad3,0xcd5d,0x4373,{0x8b,0xc3,0xc6,0x06,0x58,0xf1,0x7a,0x5f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("79110ad3-cd5d-4373-8bc3-c60658f17a5f") + ICoreWebView2Profile : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProfileName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsInPrivateModeEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProfilePath( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultDownloadFolderPath( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultDownloadFolderPath( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PreferredColorScheme( + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PreferredColorScheme( + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProfileVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + END_INTERFACE + } ICoreWebView2ProfileVtbl; + + interface ICoreWebView2Profile + { + CONST_VTBL struct ICoreWebView2ProfileVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile2_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile2 = {0xfa740d4b,0x5eae,0x4344,{0xa8,0xad,0x74,0xbe,0x31,0x92,0x53,0x97}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fa740d4b-5eae-4344-a8ad-74be31925397") + ICoreWebView2Profile2 : public ICoreWebView2Profile + { + public: + virtual HRESULT STDMETHODCALLTYPE ClearBrowsingData( + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearBrowsingDataInTimeRange( + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearBrowsingDataAll( + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile2 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile2 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile2 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile2 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile2 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2Profile2Vtbl; + + interface ICoreWebView2Profile2 + { + CONST_VTBL struct ICoreWebView2Profile2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile2_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile2_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile2_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile2_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile2_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile2_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile2_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile2_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile2_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile2_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ClearBrowsingDataCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ClearBrowsingDataCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClearBrowsingDataCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClearBrowsingDataCompletedHandler = {0xe9710a06,0x1d1d,0x49b2,{0x82,0x34,0x22,0x6f,0x35,0x84,0x6a,0xe5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e9710a06-1d1d-49b2-8234-226f35846ae5") + ICoreWebView2ClearBrowsingDataCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClearBrowsingDataCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClearBrowsingDataCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2ClearBrowsingDataCompletedHandlerVtbl; + + interface ICoreWebView2ClearBrowsingDataCompletedHandler + { + CONST_VTBL struct ICoreWebView2ClearBrowsingDataCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClearBrowsingDataCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile3_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile3 = {0xb188e659,0x5685,0x4e05,{0xbd,0xba,0xfc,0x64,0x0e,0x0f,0x19,0x92}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b188e659-5685-4e05-bdba-fc640e0f1992") + ICoreWebView2Profile3 : public ICoreWebView2Profile2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PreferredTrackingPreventionLevel( + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PreferredTrackingPreventionLevel( + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile3 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile3 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile3 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile3 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile3 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile3 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile3 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, get_PreferredTrackingPreventionLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile3 * This, + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, put_PreferredTrackingPreventionLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile3 * This, + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value); + + END_INTERFACE + } ICoreWebView2Profile3Vtbl; + + interface ICoreWebView2Profile3 + { + CONST_VTBL struct ICoreWebView2Profile3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile3_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile3_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile3_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile3_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile3_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile3_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile3_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile3_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile3_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile3_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + + +#define ICoreWebView2Profile3_get_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> get_PreferredTrackingPreventionLevel(This,value) ) + +#define ICoreWebView2Profile3_put_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> put_PreferredTrackingPreventionLevel(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile4_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile4 = {0x8f4ae680,0x192e,0x4ec8,{0x83,0x3a,0x21,0xcf,0xad,0xae,0xf6,0x28}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8f4ae680-192e-4ec8-833a-21cfadaef628") + ICoreWebView2Profile4 : public ICoreWebView2Profile3 + { + public: + virtual HRESULT STDMETHODCALLTYPE SetPermissionState( + /* [in] */ COREWEBVIEW2_PERMISSION_KIND PermissionKind, + /* [in] */ LPCWSTR origin, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE State, + /* [in] */ ICoreWebView2SetPermissionStateCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetNonDefaultPermissionSettings( + /* [in] */ ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile4 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile4 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile4 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile4 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile4 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile4 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile4 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile4 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile4 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, get_PreferredTrackingPreventionLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile4 * This, + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, put_PreferredTrackingPreventionLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile4 * This, + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, SetPermissionState) + HRESULT ( STDMETHODCALLTYPE *SetPermissionState )( + ICoreWebView2Profile4 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_KIND PermissionKind, + /* [in] */ LPCWSTR origin, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE State, + /* [in] */ ICoreWebView2SetPermissionStateCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, GetNonDefaultPermissionSettings) + HRESULT ( STDMETHODCALLTYPE *GetNonDefaultPermissionSettings )( + ICoreWebView2Profile4 * This, + /* [in] */ ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2Profile4Vtbl; + + interface ICoreWebView2Profile4 + { + CONST_VTBL struct ICoreWebView2Profile4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile4_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile4_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile4_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile4_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile4_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile4_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile4_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile4_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile4_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile4_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + + +#define ICoreWebView2Profile4_get_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> get_PreferredTrackingPreventionLevel(This,value) ) + +#define ICoreWebView2Profile4_put_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> put_PreferredTrackingPreventionLevel(This,value) ) + + +#define ICoreWebView2Profile4_SetPermissionState(This,PermissionKind,origin,State,handler) \ + ( (This)->lpVtbl -> SetPermissionState(This,PermissionKind,origin,State,handler) ) + +#define ICoreWebView2Profile4_GetNonDefaultPermissionSettings(This,handler) \ + ( (This)->lpVtbl -> GetNonDefaultPermissionSettings(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SetPermissionStateCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2SetPermissionStateCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SetPermissionStateCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SetPermissionStateCompletedHandler = {0xfc77fb30,0x9c9e,0x4076,{0xb8,0xc7,0x76,0x44,0xa7,0x03,0xca,0x1b}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fc77fb30-9c9e-4076-b8c7-7644a703ca1b") + ICoreWebView2SetPermissionStateCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SetPermissionStateCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SetPermissionStateCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SetPermissionStateCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SetPermissionStateCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SetPermissionStateCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2SetPermissionStateCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2SetPermissionStateCompletedHandlerVtbl; + + interface ICoreWebView2SetPermissionStateCompletedHandler + { + CONST_VTBL struct ICoreWebView2SetPermissionStateCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SetPermissionStateCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SetPermissionStateCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SetPermissionStateCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SetPermissionStateCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SetPermissionStateCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler = {0x38274481,0xa15c,0x4563,{0x94,0xcf,0x99,0x0e,0xdc,0x9a,0xeb,0x95}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("38274481-a15c-4563-94cf-990edc9aeb95") + ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2PermissionSettingCollectionView *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2PermissionSettingCollectionView *result); + + END_INTERFACE + } ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandlerVtbl; + + interface ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler + { + CONST_VTBL struct ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile5_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile5_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile5 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile5 = {0x2ee5b76e,0x6e80,0x4df2,{0xbc,0xd3,0xd4,0xec,0x33,0x40,0xa0,0x1b}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2ee5b76e-6e80-4df2-bcd3-d4ec3340a01b") + ICoreWebView2Profile5 : public ICoreWebView2Profile4 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CookieManager( + /* [retval][out] */ ICoreWebView2CookieManager **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile5Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile5 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile5 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile5 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile5 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile5 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile5 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile5 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile5 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile5 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile5 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile5 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile5 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, get_PreferredTrackingPreventionLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile5 * This, + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, put_PreferredTrackingPreventionLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile5 * This, + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, SetPermissionState) + HRESULT ( STDMETHODCALLTYPE *SetPermissionState )( + ICoreWebView2Profile5 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_KIND PermissionKind, + /* [in] */ LPCWSTR origin, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE State, + /* [in] */ ICoreWebView2SetPermissionStateCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, GetNonDefaultPermissionSettings) + HRESULT ( STDMETHODCALLTYPE *GetNonDefaultPermissionSettings )( + ICoreWebView2Profile5 * This, + /* [in] */ ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile5, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2Profile5 * This, + /* [retval][out] */ ICoreWebView2CookieManager **value); + + END_INTERFACE + } ICoreWebView2Profile5Vtbl; + + interface ICoreWebView2Profile5 + { + CONST_VTBL struct ICoreWebView2Profile5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile5_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile5_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile5_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile5_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile5_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile5_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile5_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile5_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile5_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile5_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + + +#define ICoreWebView2Profile5_get_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> get_PreferredTrackingPreventionLevel(This,value) ) + +#define ICoreWebView2Profile5_put_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> put_PreferredTrackingPreventionLevel(This,value) ) + + +#define ICoreWebView2Profile5_SetPermissionState(This,PermissionKind,origin,State,handler) \ + ( (This)->lpVtbl -> SetPermissionState(This,PermissionKind,origin,State,handler) ) + +#define ICoreWebView2Profile5_GetNonDefaultPermissionSettings(This,handler) \ + ( (This)->lpVtbl -> GetNonDefaultPermissionSettings(This,handler) ) + + +#define ICoreWebView2Profile5_get_CookieManager(This,value) \ + ( (This)->lpVtbl -> get_CookieManager(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile5_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile6_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile6_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile6 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile6 = {0xBD82FA6A,0x1D65,0x4C33,{0xB2,0xB4,0x03,0x93,0x02,0x0C,0xC6,0x1B}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("BD82FA6A-1D65-4C33-B2B4-0393020CC61B") + ICoreWebView2Profile6 : public ICoreWebView2Profile5 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsPasswordAutosaveEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsPasswordAutosaveEnabled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsGeneralAutofillEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsGeneralAutofillEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile6Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile6 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile6 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile6 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile6 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile6 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile6 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile6 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, get_PreferredTrackingPreventionLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, put_PreferredTrackingPreventionLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile6 * This, + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, SetPermissionState) + HRESULT ( STDMETHODCALLTYPE *SetPermissionState )( + ICoreWebView2Profile6 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_KIND PermissionKind, + /* [in] */ LPCWSTR origin, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE State, + /* [in] */ ICoreWebView2SetPermissionStateCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, GetNonDefaultPermissionSettings) + HRESULT ( STDMETHODCALLTYPE *GetNonDefaultPermissionSettings )( + ICoreWebView2Profile6 * This, + /* [in] */ ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile5, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ ICoreWebView2CookieManager **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile6 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Profile6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Profile6 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Profile6Vtbl; + + interface ICoreWebView2Profile6 + { + CONST_VTBL struct ICoreWebView2Profile6Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile6_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile6_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile6_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile6_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile6_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile6_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile6_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile6_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile6_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile6_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile6_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile6_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile6_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + + +#define ICoreWebView2Profile6_get_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> get_PreferredTrackingPreventionLevel(This,value) ) + +#define ICoreWebView2Profile6_put_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> put_PreferredTrackingPreventionLevel(This,value) ) + + +#define ICoreWebView2Profile6_SetPermissionState(This,PermissionKind,origin,State,handler) \ + ( (This)->lpVtbl -> SetPermissionState(This,PermissionKind,origin,State,handler) ) + +#define ICoreWebView2Profile6_GetNonDefaultPermissionSettings(This,handler) \ + ( (This)->lpVtbl -> GetNonDefaultPermissionSettings(This,handler) ) + + +#define ICoreWebView2Profile6_get_CookieManager(This,value) \ + ( (This)->lpVtbl -> get_CookieManager(This,value) ) + + +#define ICoreWebView2Profile6_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile6_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile6_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Profile6_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile6_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile7_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile7 = {0x7b4c7906,0xa1aa,0x4cb4,{0xb7,0x23,0xdb,0x09,0xf8,0x13,0xd5,0x41}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7b4c7906-a1aa-4cb4-b723-db09f813d541") + ICoreWebView2Profile7 : public ICoreWebView2Profile6 + { + public: + virtual HRESULT STDMETHODCALLTYPE AddBrowserExtension( + /* [in] */ LPCWSTR extensionFolderPath, + /* [in] */ ICoreWebView2ProfileAddBrowserExtensionCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetBrowserExtensions( + /* [in] */ ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile7 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile7 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile7 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile7 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile7 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, get_PreferredTrackingPreventionLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, put_PreferredTrackingPreventionLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile7 * This, + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, SetPermissionState) + HRESULT ( STDMETHODCALLTYPE *SetPermissionState )( + ICoreWebView2Profile7 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_KIND PermissionKind, + /* [in] */ LPCWSTR origin, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE State, + /* [in] */ ICoreWebView2SetPermissionStateCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, GetNonDefaultPermissionSettings) + HRESULT ( STDMETHODCALLTYPE *GetNonDefaultPermissionSettings )( + ICoreWebView2Profile7 * This, + /* [in] */ ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile5, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ ICoreWebView2CookieManager **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Profile7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Profile7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile7, AddBrowserExtension) + HRESULT ( STDMETHODCALLTYPE *AddBrowserExtension )( + ICoreWebView2Profile7 * This, + /* [in] */ LPCWSTR extensionFolderPath, + /* [in] */ ICoreWebView2ProfileAddBrowserExtensionCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile7, GetBrowserExtensions) + HRESULT ( STDMETHODCALLTYPE *GetBrowserExtensions )( + ICoreWebView2Profile7 * This, + /* [in] */ ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2Profile7Vtbl; + + interface ICoreWebView2Profile7 + { + CONST_VTBL struct ICoreWebView2Profile7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile7_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile7_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile7_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile7_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile7_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile7_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile7_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile7_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile7_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile7_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + + +#define ICoreWebView2Profile7_get_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> get_PreferredTrackingPreventionLevel(This,value) ) + +#define ICoreWebView2Profile7_put_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> put_PreferredTrackingPreventionLevel(This,value) ) + + +#define ICoreWebView2Profile7_SetPermissionState(This,PermissionKind,origin,State,handler) \ + ( (This)->lpVtbl -> SetPermissionState(This,PermissionKind,origin,State,handler) ) + +#define ICoreWebView2Profile7_GetNonDefaultPermissionSettings(This,handler) \ + ( (This)->lpVtbl -> GetNonDefaultPermissionSettings(This,handler) ) + + +#define ICoreWebView2Profile7_get_CookieManager(This,value) \ + ( (This)->lpVtbl -> get_CookieManager(This,value) ) + + +#define ICoreWebView2Profile7_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile7_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile7_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Profile7_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Profile7_AddBrowserExtension(This,extensionFolderPath,handler) \ + ( (This)->lpVtbl -> AddBrowserExtension(This,extensionFolderPath,handler) ) + +#define ICoreWebView2Profile7_GetBrowserExtensions(This,handler) \ + ( (This)->lpVtbl -> GetBrowserExtensions(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile7_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProfileAddBrowserExtensionCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProfileAddBrowserExtensionCompletedHandler = {0xdf1aab27,0x82b9,0x4ab6,{0xaa,0xe8,0x01,0x7a,0x49,0x39,0x8c,0x14}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("df1aab27-82b9-4ab6-aae8-017a49398c14") + ICoreWebView2ProfileAddBrowserExtensionCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2BrowserExtension *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProfileAddBrowserExtensionCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProfileAddBrowserExtensionCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProfileAddBrowserExtensionCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProfileAddBrowserExtensionCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProfileAddBrowserExtensionCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ProfileAddBrowserExtensionCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2BrowserExtension *result); + + END_INTERFACE + } ICoreWebView2ProfileAddBrowserExtensionCompletedHandlerVtbl; + + interface ICoreWebView2ProfileAddBrowserExtensionCompletedHandler + { + CONST_VTBL struct ICoreWebView2ProfileAddBrowserExtensionCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProfileAddBrowserExtensionCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler = {0xfce16a1c,0xf107,0x4601,{0x8b,0x75,0xfc,0x49,0x40,0xae,0x25,0xd0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fce16a1c-f107-4601-8b75-fc4940ae25d0") + ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2BrowserExtensionList *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProfileGetBrowserExtensionsCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2BrowserExtensionList *result); + + END_INTERFACE + } ICoreWebView2ProfileGetBrowserExtensionsCompletedHandlerVtbl; + + interface ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler + { + CONST_VTBL struct ICoreWebView2ProfileGetBrowserExtensionsCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BrowserExtensionList_INTERFACE_DEFINED__ +#define __ICoreWebView2BrowserExtensionList_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BrowserExtensionList */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserExtensionList = {0x2ef3d2dc,0xbd5f,0x4f4d,{0x90,0xaf,0xfd,0x67,0x79,0x8f,0x0c,0x2f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2ef3d2dc-bd5f-4f4d-90af-fd67798f0c2f") + ICoreWebView2BrowserExtensionList : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2BrowserExtension **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BrowserExtensionListVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BrowserExtensionList * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BrowserExtensionList * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BrowserExtensionList * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtensionList, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2BrowserExtensionList * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2BrowserExtensionList, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2BrowserExtensionList * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2BrowserExtension **value); + + END_INTERFACE + } ICoreWebView2BrowserExtensionListVtbl; + + interface ICoreWebView2BrowserExtensionList + { + CONST_VTBL struct ICoreWebView2BrowserExtensionListVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BrowserExtensionList_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BrowserExtensionList_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BrowserExtensionList_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BrowserExtensionList_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2BrowserExtensionList_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BrowserExtensionList_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile8_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile8 = {0xfbf70c2f,0xeb1f,0x4383,{0x85,0xa0,0x16,0x3e,0x92,0x04,0x40,0x11}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fbf70c2f-eb1f-4383-85a0-163e92044011") + ICoreWebView2Profile8 : public ICoreWebView2Profile7 + { + public: + virtual HRESULT STDMETHODCALLTYPE Delete( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_Deleted( + /* [in] */ ICoreWebView2ProfileDeletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_Deleted( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile8 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile8 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile8 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile8 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile8 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, get_PreferredTrackingPreventionLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, put_PreferredTrackingPreventionLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile8 * This, + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, SetPermissionState) + HRESULT ( STDMETHODCALLTYPE *SetPermissionState )( + ICoreWebView2Profile8 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_KIND PermissionKind, + /* [in] */ LPCWSTR origin, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE State, + /* [in] */ ICoreWebView2SetPermissionStateCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, GetNonDefaultPermissionSettings) + HRESULT ( STDMETHODCALLTYPE *GetNonDefaultPermissionSettings )( + ICoreWebView2Profile8 * This, + /* [in] */ ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile5, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ ICoreWebView2CookieManager **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Profile8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Profile8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile7, AddBrowserExtension) + HRESULT ( STDMETHODCALLTYPE *AddBrowserExtension )( + ICoreWebView2Profile8 * This, + /* [in] */ LPCWSTR extensionFolderPath, + /* [in] */ ICoreWebView2ProfileAddBrowserExtensionCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile7, GetBrowserExtensions) + HRESULT ( STDMETHODCALLTYPE *GetBrowserExtensions )( + ICoreWebView2Profile8 * This, + /* [in] */ ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile8, Delete) + HRESULT ( STDMETHODCALLTYPE *Delete )( + ICoreWebView2Profile8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile8, add_Deleted) + HRESULT ( STDMETHODCALLTYPE *add_Deleted )( + ICoreWebView2Profile8 * This, + /* [in] */ ICoreWebView2ProfileDeletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile8, remove_Deleted) + HRESULT ( STDMETHODCALLTYPE *remove_Deleted )( + ICoreWebView2Profile8 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Profile8Vtbl; + + interface ICoreWebView2Profile8 + { + CONST_VTBL struct ICoreWebView2Profile8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile8_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile8_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile8_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile8_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile8_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile8_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile8_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile8_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile8_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile8_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + + +#define ICoreWebView2Profile8_get_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> get_PreferredTrackingPreventionLevel(This,value) ) + +#define ICoreWebView2Profile8_put_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> put_PreferredTrackingPreventionLevel(This,value) ) + + +#define ICoreWebView2Profile8_SetPermissionState(This,PermissionKind,origin,State,handler) \ + ( (This)->lpVtbl -> SetPermissionState(This,PermissionKind,origin,State,handler) ) + +#define ICoreWebView2Profile8_GetNonDefaultPermissionSettings(This,handler) \ + ( (This)->lpVtbl -> GetNonDefaultPermissionSettings(This,handler) ) + + +#define ICoreWebView2Profile8_get_CookieManager(This,value) \ + ( (This)->lpVtbl -> get_CookieManager(This,value) ) + + +#define ICoreWebView2Profile8_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile8_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile8_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Profile8_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Profile8_AddBrowserExtension(This,extensionFolderPath,handler) \ + ( (This)->lpVtbl -> AddBrowserExtension(This,extensionFolderPath,handler) ) + +#define ICoreWebView2Profile8_GetBrowserExtensions(This,handler) \ + ( (This)->lpVtbl -> GetBrowserExtensions(This,handler) ) + + +#define ICoreWebView2Profile8_Delete(This) \ + ( (This)->lpVtbl -> Delete(This) ) + +#define ICoreWebView2Profile8_add_Deleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Deleted(This,eventHandler,token) ) + +#define ICoreWebView2Profile8_remove_Deleted(This,token) \ + ( (This)->lpVtbl -> remove_Deleted(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProfileDeletedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ProfileDeletedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProfileDeletedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProfileDeletedEventHandler = {0xdf35055d,0x772e,0x4dbe,{0xb7,0x43,0x5f,0xbf,0x74,0xa2,0xb2,0x58}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("df35055d-772e-4dbe-b743-5fbf74a2b258") + ICoreWebView2ProfileDeletedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Profile *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProfileDeletedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProfileDeletedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProfileDeletedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProfileDeletedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProfileDeletedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ProfileDeletedEventHandler * This, + /* [in] */ ICoreWebView2Profile *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ProfileDeletedEventHandlerVtbl; + + interface ICoreWebView2ProfileDeletedEventHandler + { + CONST_VTBL struct ICoreWebView2ProfileDeletedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProfileDeletedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProfileDeletedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProfileDeletedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProfileDeletedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProfileDeletedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile9_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile9_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile9 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile9 = {0x40c764d0,0x12fc,0x5d23,{0x81,0x6d,0x97,0x1b,0x35,0x31,0x74,0xc1}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("40c764d0-12fc-5d23-816d-971b353174c1") + ICoreWebView2Profile9 : public ICoreWebView2Profile8 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreWebViewScriptApisEnabledForServiceWorkers( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreWebViewScriptApisEnabledForServiceWorkers( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ServiceWorkerManager( + /* [retval][out] */ ICoreWebView2ServiceWorkerManager **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SharedWorkerManager( + /* [retval][out] */ ICoreWebView2SharedWorkerManager **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile9Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile9 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile9 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile9 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile9 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile9 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile9 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile9 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, get_PreferredTrackingPreventionLevel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile3, put_PreferredTrackingPreventionLevel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredTrackingPreventionLevel )( + ICoreWebView2Profile9 * This, + /* [in] */ COREWEBVIEW2_TRACKING_PREVENTION_LEVEL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, SetPermissionState) + HRESULT ( STDMETHODCALLTYPE *SetPermissionState )( + ICoreWebView2Profile9 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_KIND PermissionKind, + /* [in] */ LPCWSTR origin, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE State, + /* [in] */ ICoreWebView2SetPermissionStateCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile4, GetNonDefaultPermissionSettings) + HRESULT ( STDMETHODCALLTYPE *GetNonDefaultPermissionSettings )( + ICoreWebView2Profile9 * This, + /* [in] */ ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile5, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ ICoreWebView2CookieManager **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Profile9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile6, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Profile9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile7, AddBrowserExtension) + HRESULT ( STDMETHODCALLTYPE *AddBrowserExtension )( + ICoreWebView2Profile9 * This, + /* [in] */ LPCWSTR extensionFolderPath, + /* [in] */ ICoreWebView2ProfileAddBrowserExtensionCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile7, GetBrowserExtensions) + HRESULT ( STDMETHODCALLTYPE *GetBrowserExtensions )( + ICoreWebView2Profile9 * This, + /* [in] */ ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile8, Delete) + HRESULT ( STDMETHODCALLTYPE *Delete )( + ICoreWebView2Profile9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile8, add_Deleted) + HRESULT ( STDMETHODCALLTYPE *add_Deleted )( + ICoreWebView2Profile9 * This, + /* [in] */ ICoreWebView2ProfileDeletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile8, remove_Deleted) + HRESULT ( STDMETHODCALLTYPE *remove_Deleted )( + ICoreWebView2Profile9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile9, get_AreWebViewScriptApisEnabledForServiceWorkers) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreWebViewScriptApisEnabledForServiceWorkers )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile9, put_AreWebViewScriptApisEnabledForServiceWorkers) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreWebViewScriptApisEnabledForServiceWorkers )( + ICoreWebView2Profile9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile9, get_ServiceWorkerManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceWorkerManager )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ ICoreWebView2ServiceWorkerManager **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile9, get_SharedWorkerManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SharedWorkerManager )( + ICoreWebView2Profile9 * This, + /* [retval][out] */ ICoreWebView2SharedWorkerManager **value); + + END_INTERFACE + } ICoreWebView2Profile9Vtbl; + + interface ICoreWebView2Profile9 + { + CONST_VTBL struct ICoreWebView2Profile9Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile9_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile9_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile9_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile9_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile9_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile9_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile9_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile9_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile9_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile9_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile9_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile9_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile9_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + + +#define ICoreWebView2Profile9_get_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> get_PreferredTrackingPreventionLevel(This,value) ) + +#define ICoreWebView2Profile9_put_PreferredTrackingPreventionLevel(This,value) \ + ( (This)->lpVtbl -> put_PreferredTrackingPreventionLevel(This,value) ) + + +#define ICoreWebView2Profile9_SetPermissionState(This,PermissionKind,origin,State,handler) \ + ( (This)->lpVtbl -> SetPermissionState(This,PermissionKind,origin,State,handler) ) + +#define ICoreWebView2Profile9_GetNonDefaultPermissionSettings(This,handler) \ + ( (This)->lpVtbl -> GetNonDefaultPermissionSettings(This,handler) ) + + +#define ICoreWebView2Profile9_get_CookieManager(This,value) \ + ( (This)->lpVtbl -> get_CookieManager(This,value) ) + + +#define ICoreWebView2Profile9_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile9_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Profile9_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Profile9_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Profile9_AddBrowserExtension(This,extensionFolderPath,handler) \ + ( (This)->lpVtbl -> AddBrowserExtension(This,extensionFolderPath,handler) ) + +#define ICoreWebView2Profile9_GetBrowserExtensions(This,handler) \ + ( (This)->lpVtbl -> GetBrowserExtensions(This,handler) ) + + +#define ICoreWebView2Profile9_Delete(This) \ + ( (This)->lpVtbl -> Delete(This) ) + +#define ICoreWebView2Profile9_add_Deleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Deleted(This,eventHandler,token) ) + +#define ICoreWebView2Profile9_remove_Deleted(This,token) \ + ( (This)->lpVtbl -> remove_Deleted(This,token) ) + + +#define ICoreWebView2Profile9_get_AreWebViewScriptApisEnabledForServiceWorkers(This,value) \ + ( (This)->lpVtbl -> get_AreWebViewScriptApisEnabledForServiceWorkers(This,value) ) + +#define ICoreWebView2Profile9_put_AreWebViewScriptApisEnabledForServiceWorkers(This,value) \ + ( (This)->lpVtbl -> put_AreWebViewScriptApisEnabledForServiceWorkers(This,value) ) + +#define ICoreWebView2Profile9_get_ServiceWorkerManager(This,value) \ + ( (This)->lpVtbl -> get_ServiceWorkerManager(This,value) ) + +#define ICoreWebView2Profile9_get_SharedWorkerManager(This,value) \ + ( (This)->lpVtbl -> get_SharedWorkerManager(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile9_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveAsUIShowingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2SaveAsUIShowingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SaveAsUIShowingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SaveAsUIShowingEventArgs = {0x55902952,0x0e0d,0x5aaa,{0xa7,0xd0,0xe8,0x33,0xcd,0xb3,0x4f,0x62}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("55902952-0e0d-5aaa-a7d0-e833cdb34f62") + ICoreWebView2SaveAsUIShowingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ContentMimeType( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SuppressDefaultDialog( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SuppressDefaultDialog( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SaveAsFilePath( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SaveAsFilePath( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AllowReplace( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AllowReplace( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Kind( + /* [in] */ COREWEBVIEW2_SAVE_AS_KIND value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_SAVE_AS_KIND *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SaveAsUIShowingEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SaveAsUIShowingEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SaveAsUIShowingEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, get_ContentMimeType) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContentMimeType )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, put_SuppressDefaultDialog) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SuppressDefaultDialog )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, get_SuppressDefaultDialog) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SuppressDefaultDialog )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, put_SaveAsFilePath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SaveAsFilePath )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, get_SaveAsFilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SaveAsFilePath )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, put_AllowReplace) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AllowReplace )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, get_AllowReplace) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowReplace )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, put_Kind) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Kind )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [in] */ COREWEBVIEW2_SAVE_AS_KIND value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveAsUIShowingEventArgs, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2SaveAsUIShowingEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_SAVE_AS_KIND *value); + + END_INTERFACE + } ICoreWebView2SaveAsUIShowingEventArgsVtbl; + + interface ICoreWebView2SaveAsUIShowingEventArgs + { + CONST_VTBL struct ICoreWebView2SaveAsUIShowingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SaveAsUIShowingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SaveAsUIShowingEventArgs_get_ContentMimeType(This,value) \ + ( (This)->lpVtbl -> get_ContentMimeType(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_put_Cancel(This,value) \ + ( (This)->lpVtbl -> put_Cancel(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_get_Cancel(This,value) \ + ( (This)->lpVtbl -> get_Cancel(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_put_SuppressDefaultDialog(This,value) \ + ( (This)->lpVtbl -> put_SuppressDefaultDialog(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_get_SuppressDefaultDialog(This,value) \ + ( (This)->lpVtbl -> get_SuppressDefaultDialog(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_GetDeferral(This,value) \ + ( (This)->lpVtbl -> GetDeferral(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_put_SaveAsFilePath(This,value) \ + ( (This)->lpVtbl -> put_SaveAsFilePath(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_get_SaveAsFilePath(This,value) \ + ( (This)->lpVtbl -> get_SaveAsFilePath(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_put_AllowReplace(This,value) \ + ( (This)->lpVtbl -> put_AllowReplace(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_get_AllowReplace(This,value) \ + ( (This)->lpVtbl -> get_AllowReplace(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_put_Kind(This,value) \ + ( (This)->lpVtbl -> put_Kind(This,value) ) + +#define ICoreWebView2SaveAsUIShowingEventArgs_get_Kind(This,value) \ + ( (This)->lpVtbl -> get_Kind(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SaveAsUIShowingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SaveFileSecurityCheckStartingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2SaveFileSecurityCheckStartingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SaveFileSecurityCheckStartingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SaveFileSecurityCheckStartingEventArgs = {0xcf4ff1d1,0x5a67,0x5660,{0x8d,0x63,0xef,0x69,0x98,0x81,0xea,0x65}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("cf4ff1d1-5a67-5660-8d63-ef699881ea65") + ICoreWebView2SaveFileSecurityCheckStartingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CancelSave( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_CancelSave( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DocumentOriginUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FileExtension( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FilePath( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SuppressDefaultPolicy( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SuppressDefaultPolicy( + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SaveFileSecurityCheckStartingEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, get_CancelSave) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CancelSave )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, put_CancelSave) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_CancelSave )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, get_DocumentOriginUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentOriginUri )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, get_FileExtension) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FileExtension )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, get_FilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FilePath )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, get_SuppressDefaultPolicy) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SuppressDefaultPolicy )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, put_SuppressDefaultPolicy) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SuppressDefaultPolicy )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2SaveFileSecurityCheckStartingEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2SaveFileSecurityCheckStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **value); + + END_INTERFACE + } ICoreWebView2SaveFileSecurityCheckStartingEventArgsVtbl; + + interface ICoreWebView2SaveFileSecurityCheckStartingEventArgs + { + CONST_VTBL struct ICoreWebView2SaveFileSecurityCheckStartingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_get_CancelSave(This,value) \ + ( (This)->lpVtbl -> get_CancelSave(This,value) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_put_CancelSave(This,value) \ + ( (This)->lpVtbl -> put_CancelSave(This,value) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_get_DocumentOriginUri(This,value) \ + ( (This)->lpVtbl -> get_DocumentOriginUri(This,value) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_get_FileExtension(This,value) \ + ( (This)->lpVtbl -> get_FileExtension(This,value) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_get_FilePath(This,value) \ + ( (This)->lpVtbl -> get_FilePath(This,value) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_get_SuppressDefaultPolicy(This,value) \ + ( (This)->lpVtbl -> get_SuppressDefaultPolicy(This,value) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_put_SuppressDefaultPolicy(This,value) \ + ( (This)->lpVtbl -> put_SuppressDefaultPolicy(This,value) ) + +#define ICoreWebView2SaveFileSecurityCheckStartingEventArgs_GetDeferral(This,value) \ + ( (This)->lpVtbl -> GetDeferral(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SaveFileSecurityCheckStartingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ScreenCaptureStartingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ScreenCaptureStartingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ScreenCaptureStartingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ScreenCaptureStartingEventArgs = {0x892c03fd,0xaee3,0x5eba,{0xa1,0xfa,0x6f,0xd2,0xf6,0x48,0x4b,0x2b}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("892c03fd-aee3-5eba-a1fa-6fd2f6484b2b") + ICoreWebView2ScreenCaptureStartingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_OriginalSourceFrameInfo( + /* [retval][out] */ ICoreWebView2FrameInfo **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ScreenCaptureStartingEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ScreenCaptureStartingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ScreenCaptureStartingEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ScreenCaptureStartingEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ScreenCaptureStartingEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2ScreenCaptureStartingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScreenCaptureStartingEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2ScreenCaptureStartingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScreenCaptureStartingEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2ScreenCaptureStartingEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScreenCaptureStartingEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2ScreenCaptureStartingEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScreenCaptureStartingEventArgs, get_OriginalSourceFrameInfo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_OriginalSourceFrameInfo )( + ICoreWebView2ScreenCaptureStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2FrameInfo **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScreenCaptureStartingEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ScreenCaptureStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **value); + + END_INTERFACE + } ICoreWebView2ScreenCaptureStartingEventArgsVtbl; + + interface ICoreWebView2ScreenCaptureStartingEventArgs + { + CONST_VTBL struct ICoreWebView2ScreenCaptureStartingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ScreenCaptureStartingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ScreenCaptureStartingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ScreenCaptureStartingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ScreenCaptureStartingEventArgs_get_Cancel(This,value) \ + ( (This)->lpVtbl -> get_Cancel(This,value) ) + +#define ICoreWebView2ScreenCaptureStartingEventArgs_put_Cancel(This,value) \ + ( (This)->lpVtbl -> put_Cancel(This,value) ) + +#define ICoreWebView2ScreenCaptureStartingEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2ScreenCaptureStartingEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#define ICoreWebView2ScreenCaptureStartingEventArgs_get_OriginalSourceFrameInfo(This,value) \ + ( (This)->lpVtbl -> get_OriginalSourceFrameInfo(This,value) ) + +#define ICoreWebView2ScreenCaptureStartingEventArgs_GetDeferral(This,value) \ + ( (This)->lpVtbl -> GetDeferral(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ScreenCaptureStartingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ScriptDialogOpeningEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ScriptDialogOpeningEventArgs = {0x7390bb70,0xabe0,0x4843,{0x95,0x29,0xf1,0x43,0xb3,0x1b,0x03,0xd6}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7390bb70-abe0-4843-9529-f143b31b03d6") + ICoreWebView2ScriptDialogOpeningEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_SCRIPT_DIALOG_KIND *kind) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Message( + /* [retval][out] */ LPWSTR *message) = 0; + + virtual HRESULT STDMETHODCALLTYPE Accept( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultText( + /* [retval][out] */ LPWSTR *defaultText) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ResultText( + /* [retval][out] */ LPWSTR *resultText) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ResultText( + /* [in] */ LPCWSTR resultText) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ScriptDialogOpeningEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ScriptDialogOpeningEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ScriptDialogOpeningEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_SCRIPT_DIALOG_KIND *kind); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_Message) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Message )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *message); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, Accept) + HRESULT ( STDMETHODCALLTYPE *Accept )( + ICoreWebView2ScriptDialogOpeningEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_DefaultText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultText )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *defaultText); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_ResultText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultText )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *resultText); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, put_ResultText) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ResultText )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [in] */ LPCWSTR resultText); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2ScriptDialogOpeningEventArgsVtbl; + + interface ICoreWebView2ScriptDialogOpeningEventArgs + { + CONST_VTBL struct ICoreWebView2ScriptDialogOpeningEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ScriptDialogOpeningEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_Kind(This,kind) \ + ( (This)->lpVtbl -> get_Kind(This,kind) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_Message(This,message) \ + ( (This)->lpVtbl -> get_Message(This,message) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_Accept(This) \ + ( (This)->lpVtbl -> Accept(This) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_DefaultText(This,defaultText) \ + ( (This)->lpVtbl -> get_DefaultText(This,defaultText) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_ResultText(This,resultText) \ + ( (This)->lpVtbl -> get_ResultText(This,resultText) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_put_ResultText(This,resultText) \ + ( (This)->lpVtbl -> put_ResultText(This,resultText) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptException_INTERFACE_DEFINED__ +#define __ICoreWebView2ScriptException_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ScriptException */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ScriptException = {0x054DAE00,0x84A3,0x49FF,{0xBC,0x17,0x40,0x12,0xA9,0x0B,0xC9,0xFD}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("054DAE00-84A3-49FF-BC17-4012A90BC9FD") + ICoreWebView2ScriptException : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_LineNumber( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ColumnNumber( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Message( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ToJson( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ScriptExceptionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ScriptException * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ScriptException * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ScriptException * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptException, get_LineNumber) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_LineNumber )( + ICoreWebView2ScriptException * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptException, get_ColumnNumber) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ColumnNumber )( + ICoreWebView2ScriptException * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptException, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2ScriptException * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptException, get_Message) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Message )( + ICoreWebView2ScriptException * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ScriptException, get_ToJson) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ToJson )( + ICoreWebView2ScriptException * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2ScriptExceptionVtbl; + + interface ICoreWebView2ScriptException + { + CONST_VTBL struct ICoreWebView2ScriptExceptionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ScriptException_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ScriptException_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ScriptException_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ScriptException_get_LineNumber(This,value) \ + ( (This)->lpVtbl -> get_LineNumber(This,value) ) + +#define ICoreWebView2ScriptException_get_ColumnNumber(This,value) \ + ( (This)->lpVtbl -> get_ColumnNumber(This,value) ) + +#define ICoreWebView2ScriptException_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + +#define ICoreWebView2ScriptException_get_Message(This,value) \ + ( (This)->lpVtbl -> get_Message(This,value) ) + +#define ICoreWebView2ScriptException_get_ToJson(This,value) \ + ( (This)->lpVtbl -> get_ToJson(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ScriptException_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServerCertificateErrorDetectedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServerCertificateErrorDetectedEventArgs = {0x012193ED,0x7C13,0x48FF,{0x96,0x9D,0xA8,0x4C,0x1F,0x43,0x2A,0x14}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("012193ED-7C13-48FF-969D-A84C1F432A14") + ICoreWebView2ServerCertificateErrorDetectedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ErrorStatus( + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RequestUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ServerCertificate( + /* [retval][out] */ ICoreWebView2Certificate **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Action( + /* [retval][out] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Action( + /* [in] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServerCertificateErrorDetectedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_ErrorStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ErrorStatus )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_RequestUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestUri )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_ServerCertificate) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ServerCertificate )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ ICoreWebView2Certificate **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_Action) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Action )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, put_Action) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Action )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [in] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2ServerCertificateErrorDetectedEventArgsVtbl; + + interface ICoreWebView2ServerCertificateErrorDetectedEventArgs + { + CONST_VTBL struct ICoreWebView2ServerCertificateErrorDetectedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_ErrorStatus(This,value) \ + ( (This)->lpVtbl -> get_ErrorStatus(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_RequestUri(This,value) \ + ( (This)->lpVtbl -> get_RequestUri(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_ServerCertificate(This,value) \ + ( (This)->lpVtbl -> get_ServerCertificate(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_Action(This,value) \ + ( (This)->lpVtbl -> get_Action(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_put_Action(This,value) \ + ( (This)->lpVtbl -> put_Action(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorker_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorker_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorker */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorker = {0x245a7bb7,0x7c31,0x582d,{0x95,0xee,0x0f,0x2d,0x99,0xd2,0xf5,0xb0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("245a7bb7-7c31-582d-95ee-0f2d99d2f5b0") + ICoreWebView2ServiceWorker : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ScriptUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_Destroying( + /* [in] */ ICoreWebView2ServiceWorkerDestroyingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_Destroying( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebMessageReceived( + /* [in] */ ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebMessageReceived( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsJson( + /* [in] */ LPCWSTR webMessageAsJson) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsString( + /* [in] */ LPCWSTR webMessageAsString) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorker * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorker * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorker * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorker, get_ScriptUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScriptUri )( + ICoreWebView2ServiceWorker * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorker, add_Destroying) + HRESULT ( STDMETHODCALLTYPE *add_Destroying )( + ICoreWebView2ServiceWorker * This, + /* [in] */ ICoreWebView2ServiceWorkerDestroyingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorker, remove_Destroying) + HRESULT ( STDMETHODCALLTYPE *remove_Destroying )( + ICoreWebView2ServiceWorker * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorker, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2ServiceWorker * This, + /* [in] */ ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorker, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2ServiceWorker * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorker, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2ServiceWorker * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorker, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2ServiceWorker * This, + /* [in] */ LPCWSTR webMessageAsString); + + END_INTERFACE + } ICoreWebView2ServiceWorkerVtbl; + + interface ICoreWebView2ServiceWorker + { + CONST_VTBL struct ICoreWebView2ServiceWorkerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorker_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorker_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorker_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorker_get_ScriptUri(This,value) \ + ( (This)->lpVtbl -> get_ScriptUri(This,value) ) + +#define ICoreWebView2ServiceWorker_add_Destroying(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroying(This,eventHandler,token) ) + +#define ICoreWebView2ServiceWorker_remove_Destroying(This,token) \ + ( (This)->lpVtbl -> remove_Destroying(This,token) ) + +#define ICoreWebView2ServiceWorker_add_WebMessageReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,eventHandler,token) ) + +#define ICoreWebView2ServiceWorker_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2ServiceWorker_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2ServiceWorker_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorker_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerDestroyingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerDestroyingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerDestroyingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerDestroyingEventHandler = {0xc7528449,0x5674,0x5e34,{0xb9,0x90,0xff,0x4c,0xef,0x04,0x62,0x14}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c7528449-5674-5e34-b990-ff4cef046214") + ICoreWebView2ServiceWorkerDestroyingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2ServiceWorker *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerDestroyingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerDestroyingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerDestroyingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerDestroyingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerDestroyingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ServiceWorkerDestroyingEventHandler * This, + /* [in] */ ICoreWebView2ServiceWorker *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ServiceWorkerDestroyingEventHandlerVtbl; + + interface ICoreWebView2ServiceWorkerDestroyingEventHandler + { + CONST_VTBL struct ICoreWebView2ServiceWorkerDestroyingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerDestroyingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerDestroyingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerDestroyingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerDestroyingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerDestroyingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler = {0x65f0a1a6,0xa295,0x5a9f,{0x80,0x41,0x70,0xdb,0x71,0x56,0x6f,0x98}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("65f0a1a6-a295-5a9f-8041-70db71566f98") + ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2ServiceWorker *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerWebMessageReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler * This, + /* [in] */ ICoreWebView2ServiceWorker *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ServiceWorkerWebMessageReceivedEventHandlerVtbl; + + interface ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2ServiceWorkerWebMessageReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerWebMessageReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerActivatedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerActivatedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerActivatedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerActivatedEventArgs = {0x5685c4b6,0xa514,0x58b2,{0x97,0x21,0xb6,0x1e,0xf4,0xcc,0xd9,0xd8}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5685c4b6-a514-58b2-9721-b61ef4ccd9d8") + ICoreWebView2ServiceWorkerActivatedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ActiveServiceWorker( + /* [retval][out] */ ICoreWebView2ServiceWorker **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerActivatedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerActivatedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerActivatedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerActivatedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerActivatedEventArgs, get_ActiveServiceWorker) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ActiveServiceWorker )( + ICoreWebView2ServiceWorkerActivatedEventArgs * This, + /* [retval][out] */ ICoreWebView2ServiceWorker **value); + + END_INTERFACE + } ICoreWebView2ServiceWorkerActivatedEventArgsVtbl; + + interface ICoreWebView2ServiceWorkerActivatedEventArgs + { + CONST_VTBL struct ICoreWebView2ServiceWorkerActivatedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerActivatedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerActivatedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerActivatedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerActivatedEventArgs_get_ActiveServiceWorker(This,value) \ + ( (This)->lpVtbl -> get_ActiveServiceWorker(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerActivatedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerManager_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerManager_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerManager */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerManager = {0xa2d52fd4,0x9b10,0x5971,{0x84,0x99,0xc6,0x7d,0x15,0x60,0xf4,0x7a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a2d52fd4-9b10-5971-8499-c67d1560f47a") + ICoreWebView2ServiceWorkerManager : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ServiceWorkerRegistered( + /* [in] */ ICoreWebView2ServiceWorkerRegisteredEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ServiceWorkerRegistered( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetServiceWorkerRegistrations( + /* [in] */ ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetServiceWorkerRegistrationsForScope( + /* [in] */ LPCWSTR scopeUri, + /* [in] */ ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerManagerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerManager * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerManager * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerManager * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerManager, add_ServiceWorkerRegistered) + HRESULT ( STDMETHODCALLTYPE *add_ServiceWorkerRegistered )( + ICoreWebView2ServiceWorkerManager * This, + /* [in] */ ICoreWebView2ServiceWorkerRegisteredEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerManager, remove_ServiceWorkerRegistered) + HRESULT ( STDMETHODCALLTYPE *remove_ServiceWorkerRegistered )( + ICoreWebView2ServiceWorkerManager * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerManager, GetServiceWorkerRegistrations) + HRESULT ( STDMETHODCALLTYPE *GetServiceWorkerRegistrations )( + ICoreWebView2ServiceWorkerManager * This, + /* [in] */ ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerManager, GetServiceWorkerRegistrationsForScope) + HRESULT ( STDMETHODCALLTYPE *GetServiceWorkerRegistrationsForScope )( + ICoreWebView2ServiceWorkerManager * This, + /* [in] */ LPCWSTR scopeUri, + /* [in] */ ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2ServiceWorkerManagerVtbl; + + interface ICoreWebView2ServiceWorkerManager + { + CONST_VTBL struct ICoreWebView2ServiceWorkerManagerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerManager_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerManager_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerManager_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerManager_add_ServiceWorkerRegistered(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServiceWorkerRegistered(This,eventHandler,token) ) + +#define ICoreWebView2ServiceWorkerManager_remove_ServiceWorkerRegistered(This,token) \ + ( (This)->lpVtbl -> remove_ServiceWorkerRegistered(This,token) ) + +#define ICoreWebView2ServiceWorkerManager_GetServiceWorkerRegistrations(This,handler) \ + ( (This)->lpVtbl -> GetServiceWorkerRegistrations(This,handler) ) + +#define ICoreWebView2ServiceWorkerManager_GetServiceWorkerRegistrationsForScope(This,scopeUri,handler) \ + ( (This)->lpVtbl -> GetServiceWorkerRegistrationsForScope(This,scopeUri,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerManager_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegisteredEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegisteredEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerRegisteredEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerRegisteredEventHandler = {0xc024c910,0x4df2,0x54a3,{0xb5,0xc1,0x61,0x52,0xca,0x0e,0x45,0x77}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c024c910-4df2-54a3-b5c1-6152ca0e4577") + ICoreWebView2ServiceWorkerRegisteredEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2ServiceWorkerManager *sender, + /* [in] */ ICoreWebView2ServiceWorkerRegisteredEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerRegisteredEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerRegisteredEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerRegisteredEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerRegisteredEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegisteredEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ServiceWorkerRegisteredEventHandler * This, + /* [in] */ ICoreWebView2ServiceWorkerManager *sender, + /* [in] */ ICoreWebView2ServiceWorkerRegisteredEventArgs *args); + + END_INTERFACE + } ICoreWebView2ServiceWorkerRegisteredEventHandlerVtbl; + + interface ICoreWebView2ServiceWorkerRegisteredEventHandler + { + CONST_VTBL struct ICoreWebView2ServiceWorkerRegisteredEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerRegisteredEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerRegisteredEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerRegisteredEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerRegisteredEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerRegisteredEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler = {0xea83432f,0x6528,0x592f,{0x90,0x3b,0x09,0x17,0xeb,0x0f,0xd9,0xc7}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ea83432f-6528-592f-903b-0917eb0fd9c7") + ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2ServiceWorkerRegistrationCollectionView *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2GetServiceWorkerRegistrationsCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2ServiceWorkerRegistrationCollectionView *result); + + END_INTERFACE + } ICoreWebView2GetServiceWorkerRegistrationsCompletedHandlerVtbl; + + interface ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler + { + CONST_VTBL struct ICoreWebView2GetServiceWorkerRegistrationsCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegistrationCollectionView_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegistrationCollectionView_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerRegistrationCollectionView */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerRegistrationCollectionView = {0x83d8cfa9,0xef83,0x5447,{0x94,0x31,0x91,0xc2,0x03,0xc4,0xc9,0xd8}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("83d8cfa9-ef83-5447-9431-91c203c4c9d8") + ICoreWebView2ServiceWorkerRegistrationCollectionView : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ServiceWorkerRegistration **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerRegistrationCollectionViewVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerRegistrationCollectionView * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerRegistrationCollectionView * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerRegistrationCollectionView * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistrationCollectionView, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ServiceWorkerRegistrationCollectionView * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistrationCollectionView, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ServiceWorkerRegistrationCollectionView * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ServiceWorkerRegistration **value); + + END_INTERFACE + } ICoreWebView2ServiceWorkerRegistrationCollectionViewVtbl; + + interface ICoreWebView2ServiceWorkerRegistrationCollectionView + { + CONST_VTBL struct ICoreWebView2ServiceWorkerRegistrationCollectionViewVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerRegistrationCollectionView_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerRegistrationCollectionView_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerRegistrationCollectionView_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerRegistrationCollectionView_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ServiceWorkerRegistrationCollectionView_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerRegistrationCollectionView_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegisteredEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegisteredEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerRegisteredEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerRegisteredEventArgs = {0xc6172932,0x407a,0x553b,{0xb4,0xd1,0xcd,0xd1,0x26,0x05,0xeb,0x6a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c6172932-407a-553b-b4d1-cdd12605eb6a") + ICoreWebView2ServiceWorkerRegisteredEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ServiceWorkerRegistration( + /* [retval][out] */ ICoreWebView2ServiceWorkerRegistration **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerRegisteredEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerRegisteredEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerRegisteredEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerRegisteredEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegisteredEventArgs, get_ServiceWorkerRegistration) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceWorkerRegistration )( + ICoreWebView2ServiceWorkerRegisteredEventArgs * This, + /* [retval][out] */ ICoreWebView2ServiceWorkerRegistration **value); + + END_INTERFACE + } ICoreWebView2ServiceWorkerRegisteredEventArgsVtbl; + + interface ICoreWebView2ServiceWorkerRegisteredEventArgs + { + CONST_VTBL struct ICoreWebView2ServiceWorkerRegisteredEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerRegisteredEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerRegisteredEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerRegisteredEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerRegisteredEventArgs_get_ServiceWorkerRegistration(This,value) \ + ( (This)->lpVtbl -> get_ServiceWorkerRegistration(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerRegisteredEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegistration_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegistration_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerRegistration */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerRegistration = {0x06003f5e,0xaf92,0x5e7e,{0xb4,0x97,0x3f,0xa1,0x67,0xdd,0x37,0xc2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("06003f5e-af92-5e7e-b497-3fa167dd37c2") + ICoreWebView2ServiceWorkerRegistration : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ActiveServiceWorker( + /* [retval][out] */ ICoreWebView2ServiceWorker **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Origin( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ScopeUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TopLevelOrigin( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ServiceWorkerActivated( + /* [in] */ ICoreWebView2ServiceWorkerActivatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ServiceWorkerActivated( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_Unregistering( + /* [in] */ ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_Unregistering( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerRegistrationVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerRegistration * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerRegistration * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, get_ActiveServiceWorker) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ActiveServiceWorker )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [retval][out] */ ICoreWebView2ServiceWorker **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, get_Origin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Origin )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, get_ScopeUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScopeUri )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, get_TopLevelOrigin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TopLevelOrigin )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, add_ServiceWorkerActivated) + HRESULT ( STDMETHODCALLTYPE *add_ServiceWorkerActivated )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [in] */ ICoreWebView2ServiceWorkerActivatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, remove_ServiceWorkerActivated) + HRESULT ( STDMETHODCALLTYPE *remove_ServiceWorkerActivated )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, add_Unregistering) + HRESULT ( STDMETHODCALLTYPE *add_Unregistering )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [in] */ ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistration, remove_Unregistering) + HRESULT ( STDMETHODCALLTYPE *remove_Unregistering )( + ICoreWebView2ServiceWorkerRegistration * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2ServiceWorkerRegistrationVtbl; + + interface ICoreWebView2ServiceWorkerRegistration + { + CONST_VTBL struct ICoreWebView2ServiceWorkerRegistrationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerRegistration_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerRegistration_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerRegistration_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerRegistration_get_ActiveServiceWorker(This,value) \ + ( (This)->lpVtbl -> get_ActiveServiceWorker(This,value) ) + +#define ICoreWebView2ServiceWorkerRegistration_get_Origin(This,value) \ + ( (This)->lpVtbl -> get_Origin(This,value) ) + +#define ICoreWebView2ServiceWorkerRegistration_get_ScopeUri(This,value) \ + ( (This)->lpVtbl -> get_ScopeUri(This,value) ) + +#define ICoreWebView2ServiceWorkerRegistration_get_TopLevelOrigin(This,value) \ + ( (This)->lpVtbl -> get_TopLevelOrigin(This,value) ) + +#define ICoreWebView2ServiceWorkerRegistration_add_ServiceWorkerActivated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServiceWorkerActivated(This,eventHandler,token) ) + +#define ICoreWebView2ServiceWorkerRegistration_remove_ServiceWorkerActivated(This,token) \ + ( (This)->lpVtbl -> remove_ServiceWorkerActivated(This,token) ) + +#define ICoreWebView2ServiceWorkerRegistration_add_Unregistering(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Unregistering(This,eventHandler,token) ) + +#define ICoreWebView2ServiceWorkerRegistration_remove_Unregistering(This,token) \ + ( (This)->lpVtbl -> remove_Unregistering(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerRegistration_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerActivatedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerActivatedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerActivatedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerActivatedEventHandler = {0xecaa9897,0x769d,0x5ece,{0xa1,0xe5,0x88,0x59,0x81,0x8c,0xaf,0x86}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ecaa9897-769d-5ece-a1e5-8859818caf86") + ICoreWebView2ServiceWorkerActivatedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2ServiceWorkerRegistration *sender, + /* [in] */ ICoreWebView2ServiceWorkerActivatedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerActivatedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerActivatedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerActivatedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerActivatedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerActivatedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ServiceWorkerActivatedEventHandler * This, + /* [in] */ ICoreWebView2ServiceWorkerRegistration *sender, + /* [in] */ ICoreWebView2ServiceWorkerActivatedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ServiceWorkerActivatedEventHandlerVtbl; + + interface ICoreWebView2ServiceWorkerActivatedEventHandler + { + CONST_VTBL struct ICoreWebView2ServiceWorkerActivatedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerActivatedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerActivatedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerActivatedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerActivatedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerActivatedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler = {0xbec01d14,0x6ad9,0x5257,{0x9f,0xf6,0x84,0xf0,0x1b,0xaa,0x0c,0xca}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bec01d14-6ad9-5257-9ff6-84f01baa0cca") + ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2ServiceWorkerRegistration *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler * This, + /* [in] */ ICoreWebView2ServiceWorkerRegistration *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandlerVtbl; + + interface ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler + { + CONST_VTBL struct ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings = {0xe562e4f0,0xd7fa,0x43ac,{0x8d,0x71,0xc0,0x51,0x50,0x49,0x9f,0x00}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e562e4f0-d7fa-43ac-8d71-c05150499f00") + ICoreWebView2Settings : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsScriptEnabled( + /* [retval][out] */ BOOL *isScriptEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsScriptEnabled( + /* [in] */ BOOL isScriptEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsWebMessageEnabled( + /* [retval][out] */ BOOL *isWebMessageEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsWebMessageEnabled( + /* [in] */ BOOL isWebMessageEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreDefaultScriptDialogsEnabled( + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreDefaultScriptDialogsEnabled( + /* [in] */ BOOL areDefaultScriptDialogsEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsStatusBarEnabled( + /* [retval][out] */ BOOL *isStatusBarEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsStatusBarEnabled( + /* [in] */ BOOL isStatusBarEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreDevToolsEnabled( + /* [retval][out] */ BOOL *areDevToolsEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreDevToolsEnabled( + /* [in] */ BOOL areDevToolsEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreDefaultContextMenusEnabled( + /* [retval][out] */ BOOL *enabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreDefaultContextMenusEnabled( + /* [in] */ BOOL enabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreHostObjectsAllowed( + /* [retval][out] */ BOOL *allowed) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreHostObjectsAllowed( + /* [in] */ BOOL allowed) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsZoomControlEnabled( + /* [retval][out] */ BOOL *enabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsZoomControlEnabled( + /* [in] */ BOOL enabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsBuiltInErrorPageEnabled( + /* [retval][out] */ BOOL *enabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsBuiltInErrorPageEnabled( + /* [in] */ BOOL enabled) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SettingsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL enabled); + + END_INTERFACE + } ICoreWebView2SettingsVtbl; + + interface ICoreWebView2Settings + { + CONST_VTBL struct ICoreWebView2SettingsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings2_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings2 = {0xee9a0f68,0xf46c,0x4e32,{0xac,0x23,0xef,0x8c,0xac,0x22,0x4d,0x2a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ee9a0f68-f46c-4e32-ac23-ef8cac224d2a") + ICoreWebView2Settings2 : public ICoreWebView2Settings + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_UserAgent( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_UserAgent( + /* [in] */ LPCWSTR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings2 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings2 * This, + /* [in] */ LPCWSTR value); + + END_INTERFACE + } ICoreWebView2Settings2Vtbl; + + interface ICoreWebView2Settings2 + { + CONST_VTBL struct ICoreWebView2Settings2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings2_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings2_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings2_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings2_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings2_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings2_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings2_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings2_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings2_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings2_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings2_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings2_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings2_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings2_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings2_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings2_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings2_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings2_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings2_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings2_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings3_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings3 = {0xfdb5ab74,0xaf33,0x4854,{0x84,0xf0,0x0a,0x63,0x1d,0xeb,0x5e,0xba}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fdb5ab74-af33-4854-84f0-0a631deb5eba") + ICoreWebView2Settings3 : public ICoreWebView2Settings2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreBrowserAcceleratorKeysEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreBrowserAcceleratorKeysEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings3 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings3 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings3 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Settings3Vtbl; + + interface ICoreWebView2Settings3 + { + CONST_VTBL struct ICoreWebView2Settings3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings3_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings3_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings3_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings3_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings3_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings3_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings3_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings3_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings3_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings3_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings3_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings3_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings3_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings3_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings3_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings3_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings3_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings3_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings3_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings3_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + + +#define ICoreWebView2Settings3_get_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#define ICoreWebView2Settings3_put_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings4_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings4 = {0xcb56846c,0x4168,0x4d53,{0xb0,0x4f,0x03,0xb6,0xd6,0x79,0x6f,0xf2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("cb56846c-4168-4d53-b04f-03b6d6796ff2") + ICoreWebView2Settings4 : public ICoreWebView2Settings3 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsPasswordAutosaveEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsPasswordAutosaveEnabled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsGeneralAutofillEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsGeneralAutofillEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings4 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Settings4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Settings4 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Settings4Vtbl; + + interface ICoreWebView2Settings4 + { + CONST_VTBL struct ICoreWebView2Settings4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings4_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings4_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings4_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings4_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings4_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings4_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings4_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings4_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings4_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings4_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings4_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings4_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings4_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings4_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings4_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings4_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings4_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings4_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings4_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings4_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + + +#define ICoreWebView2Settings4_get_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#define ICoreWebView2Settings4_put_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,value) ) + + +#define ICoreWebView2Settings4_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings4_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings4_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Settings4_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings5_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings5_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings5 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings5 = {0x183e7052,0x1d03,0x43a0,{0xab,0x99,0x98,0xe0,0x43,0xb6,0x6b,0x39}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("183e7052-1d03-43a0-ab99-98e043b66b39") + ICoreWebView2Settings5 : public ICoreWebView2Settings4 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsPinchZoomEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsPinchZoomEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings5Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings5 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings5 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings5 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings5 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( + ICoreWebView2Settings5 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( + ICoreWebView2Settings5 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Settings5Vtbl; + + interface ICoreWebView2Settings5 + { + CONST_VTBL struct ICoreWebView2Settings5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings5_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings5_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings5_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings5_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings5_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings5_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings5_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings5_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings5_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings5_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings5_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings5_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings5_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings5_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings5_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings5_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings5_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings5_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings5_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings5_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + + +#define ICoreWebView2Settings5_get_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#define ICoreWebView2Settings5_put_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,value) ) + + +#define ICoreWebView2Settings5_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings5_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings5_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Settings5_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Settings5_get_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPinchZoomEnabled(This,value) ) + +#define ICoreWebView2Settings5_put_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPinchZoomEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings5_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings6_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings6_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings6 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings6 = {0x11cb3acd,0x9bc8,0x43b8,{0x83,0xbf,0xf4,0x07,0x53,0x71,0x4f,0x87}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("11cb3acd-9bc8-43b8-83bf-f40753714f87") + ICoreWebView2Settings6 : public ICoreWebView2Settings5 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsSwipeNavigationEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsSwipeNavigationEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings6Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings6 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings6 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings6 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings6 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, get_IsSwipeNavigationEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSwipeNavigationEnabled )( + ICoreWebView2Settings6 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, put_IsSwipeNavigationEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSwipeNavigationEnabled )( + ICoreWebView2Settings6 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Settings6Vtbl; + + interface ICoreWebView2Settings6 + { + CONST_VTBL struct ICoreWebView2Settings6Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings6_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings6_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings6_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings6_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings6_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings6_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings6_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings6_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings6_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings6_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings6_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings6_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings6_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings6_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings6_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings6_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings6_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings6_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings6_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings6_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings6_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings6_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings6_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + + +#define ICoreWebView2Settings6_get_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#define ICoreWebView2Settings6_put_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,value) ) + + +#define ICoreWebView2Settings6_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings6_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings6_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Settings6_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Settings6_get_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPinchZoomEnabled(This,value) ) + +#define ICoreWebView2Settings6_put_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPinchZoomEnabled(This,value) ) + + +#define ICoreWebView2Settings6_get_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsSwipeNavigationEnabled(This,value) ) + +#define ICoreWebView2Settings6_put_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsSwipeNavigationEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings6_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings7_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings7 = {0x488dc902,0x35ef,0x42d2,{0xbc,0x7d,0x94,0xb6,0x5c,0x4b,0xc4,0x9c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("488dc902-35ef-42d2-bc7d-94b65c4bc49c") + ICoreWebView2Settings7 : public ICoreWebView2Settings6 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HiddenPdfToolbarItems( + /* [retval][out] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_HiddenPdfToolbarItems( + /* [in] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings7 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, get_IsSwipeNavigationEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSwipeNavigationEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, put_IsSwipeNavigationEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSwipeNavigationEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, get_HiddenPdfToolbarItems) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HiddenPdfToolbarItems )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, put_HiddenPdfToolbarItems) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HiddenPdfToolbarItems )( + ICoreWebView2Settings7 * This, + /* [in] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS value); + + END_INTERFACE + } ICoreWebView2Settings7Vtbl; + + interface ICoreWebView2Settings7 + { + CONST_VTBL struct ICoreWebView2Settings7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings7_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings7_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings7_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings7_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings7_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings7_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings7_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings7_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings7_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings7_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings7_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings7_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings7_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings7_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings7_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + + +#define ICoreWebView2Settings7_get_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#define ICoreWebView2Settings7_put_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,value) ) + + +#define ICoreWebView2Settings7_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings7_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings7_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Settings7_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Settings7_get_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPinchZoomEnabled(This,value) ) + +#define ICoreWebView2Settings7_put_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPinchZoomEnabled(This,value) ) + + +#define ICoreWebView2Settings7_get_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsSwipeNavigationEnabled(This,value) ) + +#define ICoreWebView2Settings7_put_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsSwipeNavigationEnabled(This,value) ) + + +#define ICoreWebView2Settings7_get_HiddenPdfToolbarItems(This,value) \ + ( (This)->lpVtbl -> get_HiddenPdfToolbarItems(This,value) ) + +#define ICoreWebView2Settings7_put_HiddenPdfToolbarItems(This,value) \ + ( (This)->lpVtbl -> put_HiddenPdfToolbarItems(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings7_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings8_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings8 = {0x9e6b0e8f,0x86ad,0x4e81,{0x81,0x47,0xa9,0xb5,0xed,0xb6,0x86,0x50}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9e6b0e8f-86ad-4e81-8147-a9b5edb68650") + ICoreWebView2Settings8 : public ICoreWebView2Settings7 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsReputationCheckingRequired( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsReputationCheckingRequired( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings8 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, get_IsSwipeNavigationEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSwipeNavigationEnabled )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, put_IsSwipeNavigationEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSwipeNavigationEnabled )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, get_HiddenPdfToolbarItems) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HiddenPdfToolbarItems )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, put_HiddenPdfToolbarItems) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HiddenPdfToolbarItems )( + ICoreWebView2Settings8 * This, + /* [in] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings8, get_IsReputationCheckingRequired) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsReputationCheckingRequired )( + ICoreWebView2Settings8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings8, put_IsReputationCheckingRequired) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsReputationCheckingRequired )( + ICoreWebView2Settings8 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Settings8Vtbl; + + interface ICoreWebView2Settings8 + { + CONST_VTBL struct ICoreWebView2Settings8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings8_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings8_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings8_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings8_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings8_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings8_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings8_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings8_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings8_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings8_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings8_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings8_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings8_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings8_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings8_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings8_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings8_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings8_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings8_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings8_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + + +#define ICoreWebView2Settings8_get_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#define ICoreWebView2Settings8_put_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,value) ) + + +#define ICoreWebView2Settings8_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings8_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings8_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Settings8_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Settings8_get_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPinchZoomEnabled(This,value) ) + +#define ICoreWebView2Settings8_put_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPinchZoomEnabled(This,value) ) + + +#define ICoreWebView2Settings8_get_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsSwipeNavigationEnabled(This,value) ) + +#define ICoreWebView2Settings8_put_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsSwipeNavigationEnabled(This,value) ) + + +#define ICoreWebView2Settings8_get_HiddenPdfToolbarItems(This,value) \ + ( (This)->lpVtbl -> get_HiddenPdfToolbarItems(This,value) ) + +#define ICoreWebView2Settings8_put_HiddenPdfToolbarItems(This,value) \ + ( (This)->lpVtbl -> put_HiddenPdfToolbarItems(This,value) ) + + +#define ICoreWebView2Settings8_get_IsReputationCheckingRequired(This,value) \ + ( (This)->lpVtbl -> get_IsReputationCheckingRequired(This,value) ) + +#define ICoreWebView2Settings8_put_IsReputationCheckingRequired(This,value) \ + ( (This)->lpVtbl -> put_IsReputationCheckingRequired(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings9_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings9_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings9 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings9 = {0x0528a73b,0xe92d,0x49f4,{0x92,0x7a,0xe5,0x47,0xdd,0xda,0xa3,0x7d}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0528a73b-e92d-49f4-927a-e547dddaa37d") + ICoreWebView2Settings9 : public ICoreWebView2Settings8 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsNonClientRegionSupportEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsNonClientRegionSupportEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings9Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings9 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings9 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings9 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, get_IsSwipeNavigationEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSwipeNavigationEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, put_IsSwipeNavigationEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSwipeNavigationEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, get_HiddenPdfToolbarItems) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HiddenPdfToolbarItems )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, put_HiddenPdfToolbarItems) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HiddenPdfToolbarItems )( + ICoreWebView2Settings9 * This, + /* [in] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings8, get_IsReputationCheckingRequired) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsReputationCheckingRequired )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings8, put_IsReputationCheckingRequired) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsReputationCheckingRequired )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings9, get_IsNonClientRegionSupportEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsNonClientRegionSupportEnabled )( + ICoreWebView2Settings9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings9, put_IsNonClientRegionSupportEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsNonClientRegionSupportEnabled )( + ICoreWebView2Settings9 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Settings9Vtbl; + + interface ICoreWebView2Settings9 + { + CONST_VTBL struct ICoreWebView2Settings9Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings9_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings9_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings9_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings9_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings9_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings9_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings9_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings9_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings9_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings9_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings9_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings9_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings9_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings9_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings9_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings9_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings9_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings9_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings9_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings9_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings9_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings9_get_UserAgent(This,value) \ + ( (This)->lpVtbl -> get_UserAgent(This,value) ) + +#define ICoreWebView2Settings9_put_UserAgent(This,value) \ + ( (This)->lpVtbl -> put_UserAgent(This,value) ) + + +#define ICoreWebView2Settings9_get_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,value) ) + +#define ICoreWebView2Settings9_put_AreBrowserAcceleratorKeysEnabled(This,value) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,value) ) + + +#define ICoreWebView2Settings9_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings9_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings9_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Settings9_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Settings9_get_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPinchZoomEnabled(This,value) ) + +#define ICoreWebView2Settings9_put_IsPinchZoomEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPinchZoomEnabled(This,value) ) + + +#define ICoreWebView2Settings9_get_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsSwipeNavigationEnabled(This,value) ) + +#define ICoreWebView2Settings9_put_IsSwipeNavigationEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsSwipeNavigationEnabled(This,value) ) + + +#define ICoreWebView2Settings9_get_HiddenPdfToolbarItems(This,value) \ + ( (This)->lpVtbl -> get_HiddenPdfToolbarItems(This,value) ) + +#define ICoreWebView2Settings9_put_HiddenPdfToolbarItems(This,value) \ + ( (This)->lpVtbl -> put_HiddenPdfToolbarItems(This,value) ) + + +#define ICoreWebView2Settings9_get_IsReputationCheckingRequired(This,value) \ + ( (This)->lpVtbl -> get_IsReputationCheckingRequired(This,value) ) + +#define ICoreWebView2Settings9_put_IsReputationCheckingRequired(This,value) \ + ( (This)->lpVtbl -> put_IsReputationCheckingRequired(This,value) ) + + +#define ICoreWebView2Settings9_get_IsNonClientRegionSupportEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsNonClientRegionSupportEnabled(This,value) ) + +#define ICoreWebView2Settings9_put_IsNonClientRegionSupportEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsNonClientRegionSupportEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings9_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedBuffer_INTERFACE_DEFINED__ +#define __ICoreWebView2SharedBuffer_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SharedBuffer */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SharedBuffer = {0xB747A495,0x0C6F,0x449E,{0x97,0xB8,0x2F,0x81,0xE9,0xD6,0xAB,0x43}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("B747A495-0C6F-449E-97B8-2F81E9D6AB43") + ICoreWebView2SharedBuffer : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Size( + /* [retval][out] */ UINT64 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Buffer( + /* [retval][out] */ BYTE **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE OpenStream( + /* [retval][out] */ IStream **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FileMappingHandle( + /* [retval][out] */ HANDLE *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SharedBufferVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SharedBuffer * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SharedBuffer * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SharedBuffer * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedBuffer, get_Size) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Size )( + ICoreWebView2SharedBuffer * This, + /* [retval][out] */ UINT64 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedBuffer, get_Buffer) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Buffer )( + ICoreWebView2SharedBuffer * This, + /* [retval][out] */ BYTE **value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedBuffer, OpenStream) + HRESULT ( STDMETHODCALLTYPE *OpenStream )( + ICoreWebView2SharedBuffer * This, + /* [retval][out] */ IStream **value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedBuffer, get_FileMappingHandle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FileMappingHandle )( + ICoreWebView2SharedBuffer * This, + /* [retval][out] */ HANDLE *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedBuffer, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ICoreWebView2SharedBuffer * This); + + END_INTERFACE + } ICoreWebView2SharedBufferVtbl; + + interface ICoreWebView2SharedBuffer + { + CONST_VTBL struct ICoreWebView2SharedBufferVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SharedBuffer_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SharedBuffer_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SharedBuffer_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SharedBuffer_get_Size(This,value) \ + ( (This)->lpVtbl -> get_Size(This,value) ) + +#define ICoreWebView2SharedBuffer_get_Buffer(This,value) \ + ( (This)->lpVtbl -> get_Buffer(This,value) ) + +#define ICoreWebView2SharedBuffer_OpenStream(This,value) \ + ( (This)->lpVtbl -> OpenStream(This,value) ) + +#define ICoreWebView2SharedBuffer_get_FileMappingHandle(This,value) \ + ( (This)->lpVtbl -> get_FileMappingHandle(This,value) ) + +#define ICoreWebView2SharedBuffer_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SharedBuffer_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorker_INTERFACE_DEFINED__ +#define __ICoreWebView2SharedWorker_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SharedWorker */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SharedWorker = {0xbcd39c8d,0x48bb,0x5f1b,{0xbe,0x22,0x89,0xf9,0xc0,0xc4,0x48,0x4a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bcd39c8d-48bb-5f1b-be22-89f9c0c4484a") + ICoreWebView2SharedWorker : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Origin( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ScriptUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TopLevelOrigin( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_Destroying( + /* [in] */ ICoreWebView2SharedWorkerDestroyingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_Destroying( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SharedWorkerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SharedWorker * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SharedWorker * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SharedWorker * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorker, get_Origin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Origin )( + ICoreWebView2SharedWorker * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorker, get_ScriptUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScriptUri )( + ICoreWebView2SharedWorker * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorker, get_TopLevelOrigin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TopLevelOrigin )( + ICoreWebView2SharedWorker * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorker, add_Destroying) + HRESULT ( STDMETHODCALLTYPE *add_Destroying )( + ICoreWebView2SharedWorker * This, + /* [in] */ ICoreWebView2SharedWorkerDestroyingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorker, remove_Destroying) + HRESULT ( STDMETHODCALLTYPE *remove_Destroying )( + ICoreWebView2SharedWorker * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2SharedWorkerVtbl; + + interface ICoreWebView2SharedWorker + { + CONST_VTBL struct ICoreWebView2SharedWorkerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SharedWorker_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SharedWorker_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SharedWorker_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SharedWorker_get_Origin(This,value) \ + ( (This)->lpVtbl -> get_Origin(This,value) ) + +#define ICoreWebView2SharedWorker_get_ScriptUri(This,value) \ + ( (This)->lpVtbl -> get_ScriptUri(This,value) ) + +#define ICoreWebView2SharedWorker_get_TopLevelOrigin(This,value) \ + ( (This)->lpVtbl -> get_TopLevelOrigin(This,value) ) + +#define ICoreWebView2SharedWorker_add_Destroying(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroying(This,eventHandler,token) ) + +#define ICoreWebView2SharedWorker_remove_Destroying(This,token) \ + ( (This)->lpVtbl -> remove_Destroying(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SharedWorker_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerDestroyingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2SharedWorkerDestroyingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SharedWorkerDestroyingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SharedWorkerDestroyingEventHandler = {0x5a459f84,0xfd04,0x5cce,{0xa9,0x98,0x6f,0xab,0x56,0xf0,0x9e,0xeb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5a459f84-fd04-5cce-a998-6fab56f09eeb") + ICoreWebView2SharedWorkerDestroyingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2SharedWorker *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SharedWorkerDestroyingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SharedWorkerDestroyingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SharedWorkerDestroyingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SharedWorkerDestroyingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerDestroyingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2SharedWorkerDestroyingEventHandler * This, + /* [in] */ ICoreWebView2SharedWorker *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2SharedWorkerDestroyingEventHandlerVtbl; + + interface ICoreWebView2SharedWorkerDestroyingEventHandler + { + CONST_VTBL struct ICoreWebView2SharedWorkerDestroyingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SharedWorkerDestroyingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SharedWorkerDestroyingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SharedWorkerDestroyingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SharedWorkerDestroyingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SharedWorkerDestroyingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerCreatedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2SharedWorkerCreatedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SharedWorkerCreatedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SharedWorkerCreatedEventArgs = {0x9f6615b0,0x08f1,0x5baa,{0x9c,0x95,0xa0,0x2a,0x1d,0xc5,0x6d,0x3f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9f6615b0-08f1-5baa-9c95-a02a1dc56d3f") + ICoreWebView2SharedWorkerCreatedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Worker( + /* [retval][out] */ ICoreWebView2SharedWorker **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SharedWorkerCreatedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SharedWorkerCreatedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SharedWorkerCreatedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SharedWorkerCreatedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerCreatedEventArgs, get_Worker) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Worker )( + ICoreWebView2SharedWorkerCreatedEventArgs * This, + /* [retval][out] */ ICoreWebView2SharedWorker **value); + + END_INTERFACE + } ICoreWebView2SharedWorkerCreatedEventArgsVtbl; + + interface ICoreWebView2SharedWorkerCreatedEventArgs + { + CONST_VTBL struct ICoreWebView2SharedWorkerCreatedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SharedWorkerCreatedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SharedWorkerCreatedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SharedWorkerCreatedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SharedWorkerCreatedEventArgs_get_Worker(This,value) \ + ( (This)->lpVtbl -> get_Worker(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SharedWorkerCreatedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerManager_INTERFACE_DEFINED__ +#define __ICoreWebView2SharedWorkerManager_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SharedWorkerManager */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SharedWorkerManager = {0x9b897103,0xd035,0x551f,{0x89,0x2e,0x3e,0x8f,0x29,0x16,0xd0,0x3e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9b897103-d035-551f-892e-3e8f2916d03e") + ICoreWebView2SharedWorkerManager : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE add_SharedWorkerCreated( + /* [in] */ ICoreWebView2SharedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_SharedWorkerCreated( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetSharedWorkers( + /* [in] */ ICoreWebView2GetSharedWorkersCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SharedWorkerManagerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SharedWorkerManager * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SharedWorkerManager * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SharedWorkerManager * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerManager, add_SharedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *add_SharedWorkerCreated )( + ICoreWebView2SharedWorkerManager * This, + /* [in] */ ICoreWebView2SharedWorkerCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerManager, remove_SharedWorkerCreated) + HRESULT ( STDMETHODCALLTYPE *remove_SharedWorkerCreated )( + ICoreWebView2SharedWorkerManager * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerManager, GetSharedWorkers) + HRESULT ( STDMETHODCALLTYPE *GetSharedWorkers )( + ICoreWebView2SharedWorkerManager * This, + /* [in] */ ICoreWebView2GetSharedWorkersCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2SharedWorkerManagerVtbl; + + interface ICoreWebView2SharedWorkerManager + { + CONST_VTBL struct ICoreWebView2SharedWorkerManagerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SharedWorkerManager_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SharedWorkerManager_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SharedWorkerManager_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SharedWorkerManager_add_SharedWorkerCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SharedWorkerCreated(This,eventHandler,token) ) + +#define ICoreWebView2SharedWorkerManager_remove_SharedWorkerCreated(This,token) \ + ( (This)->lpVtbl -> remove_SharedWorkerCreated(This,token) ) + +#define ICoreWebView2SharedWorkerManager_GetSharedWorkers(This,handler) \ + ( (This)->lpVtbl -> GetSharedWorkers(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SharedWorkerManager_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerCreatedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2SharedWorkerCreatedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SharedWorkerCreatedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SharedWorkerCreatedEventHandler = {0x79cb8524,0xb842,0x551a,{0x8d,0x31,0x5f,0x82,0x4b,0x69,0x55,0xed}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("79cb8524-b842-551a-8d31-5f824b6955ed") + ICoreWebView2SharedWorkerCreatedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2SharedWorkerManager *sender, + /* [in] */ ICoreWebView2SharedWorkerCreatedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SharedWorkerCreatedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SharedWorkerCreatedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SharedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SharedWorkerCreatedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerCreatedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2SharedWorkerCreatedEventHandler * This, + /* [in] */ ICoreWebView2SharedWorkerManager *sender, + /* [in] */ ICoreWebView2SharedWorkerCreatedEventArgs *args); + + END_INTERFACE + } ICoreWebView2SharedWorkerCreatedEventHandlerVtbl; + + interface ICoreWebView2SharedWorkerCreatedEventHandler + { + CONST_VTBL struct ICoreWebView2SharedWorkerCreatedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SharedWorkerCreatedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SharedWorkerCreatedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SharedWorkerCreatedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SharedWorkerCreatedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SharedWorkerCreatedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2GetSharedWorkersCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2GetSharedWorkersCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2GetSharedWorkersCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetSharedWorkersCompletedHandler = {0x1f3179ae,0x15e5,0x51e4,{0x85,0x83,0xbe,0x0c,0xaf,0x85,0xad,0xc7}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1f3179ae-15e5-51e4-8583-be0caf85adc7") + ICoreWebView2GetSharedWorkersCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2SharedWorkerCollectionView *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2GetSharedWorkersCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2GetSharedWorkersCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2GetSharedWorkersCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2GetSharedWorkersCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2GetSharedWorkersCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2GetSharedWorkersCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ ICoreWebView2SharedWorkerCollectionView *result); + + END_INTERFACE + } ICoreWebView2GetSharedWorkersCompletedHandlerVtbl; + + interface ICoreWebView2GetSharedWorkersCompletedHandler + { + CONST_VTBL struct ICoreWebView2GetSharedWorkersCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2GetSharedWorkersCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2GetSharedWorkersCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2GetSharedWorkersCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2GetSharedWorkersCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2GetSharedWorkersCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SharedWorkerCollectionView_INTERFACE_DEFINED__ +#define __ICoreWebView2SharedWorkerCollectionView_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SharedWorkerCollectionView */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SharedWorkerCollectionView = {0xf8842b09,0x0108,0x5575,{0xa9,0x65,0x3d,0x76,0xfd,0x26,0x70,0x50}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f8842b09-0108-5575-a965-3d76fd267050") + ICoreWebView2SharedWorkerCollectionView : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2SharedWorker **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SharedWorkerCollectionViewVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SharedWorkerCollectionView * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SharedWorkerCollectionView * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SharedWorkerCollectionView * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerCollectionView, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2SharedWorkerCollectionView * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2SharedWorkerCollectionView, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2SharedWorkerCollectionView * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2SharedWorker **value); + + END_INTERFACE + } ICoreWebView2SharedWorkerCollectionViewVtbl; + + interface ICoreWebView2SharedWorkerCollectionView + { + CONST_VTBL struct ICoreWebView2SharedWorkerCollectionViewVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SharedWorkerCollectionView_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SharedWorkerCollectionView_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SharedWorkerCollectionView_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SharedWorkerCollectionView_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2SharedWorkerCollectionView_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SharedWorkerCollectionView_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SourceChangedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SourceChangedEventArgs = {0x31e0e545,0x1dba,0x4266,{0x89,0x14,0xf6,0x38,0x48,0xa1,0xf7,0xd7}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("31e0e545-1dba-4266-8914-f63848a1f7d7") + ICoreWebView2SourceChangedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsNewDocument( + /* [retval][out] */ BOOL *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SourceChangedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SourceChangedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SourceChangedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SourceChangedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2SourceChangedEventArgs, get_IsNewDocument) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsNewDocument )( + ICoreWebView2SourceChangedEventArgs * This, + /* [retval][out] */ BOOL *value); + + END_INTERFACE + } ICoreWebView2SourceChangedEventArgsVtbl; + + interface ICoreWebView2SourceChangedEventArgs + { + CONST_VTBL struct ICoreWebView2SourceChangedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SourceChangedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SourceChangedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SourceChangedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SourceChangedEventArgs_get_IsNewDocument(This,value) \ + ( (This)->lpVtbl -> get_IsNewDocument(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebMessageReceivedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebMessageReceivedEventArgs = {0x0f99a40c,0xe962,0x4207,{0x9e,0x92,0xe3,0xd5,0x42,0xef,0xf8,0x49}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0f99a40c-e962-4207-9e92-e3d542eff849") + ICoreWebView2WebMessageReceivedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Source( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_WebMessageAsJson( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE TryGetWebMessageAsString( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebMessageReceivedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebMessageReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebMessageReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, get_WebMessageAsJson) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebMessageAsJson )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, TryGetWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *TryGetWebMessageAsString )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2WebMessageReceivedEventArgsVtbl; + + interface ICoreWebView2WebMessageReceivedEventArgs + { + CONST_VTBL struct ICoreWebView2WebMessageReceivedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebMessageReceivedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebMessageReceivedEventArgs_get_Source(This,value) \ + ( (This)->lpVtbl -> get_Source(This,value) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_get_WebMessageAsJson(This,value) \ + ( (This)->lpVtbl -> get_WebMessageAsJson(This,value) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_TryGetWebMessageAsString(This,value) \ + ( (This)->lpVtbl -> TryGetWebMessageAsString(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebMessageReceivedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebMessageReceivedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebMessageReceivedEventArgs2 = {0x06fc7ab7,0xc90c,0x4297,{0x93,0x89,0x33,0xca,0x01,0xcf,0x6d,0x5e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("06fc7ab7-c90c-4297-9389-33ca01cf6d5e") + ICoreWebView2WebMessageReceivedEventArgs2 : public ICoreWebView2WebMessageReceivedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AdditionalObjects( + /* [retval][out] */ ICoreWebView2ObjectCollectionView **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebMessageReceivedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebMessageReceivedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebMessageReceivedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebMessageReceivedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2WebMessageReceivedEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, get_WebMessageAsJson) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebMessageAsJson )( + ICoreWebView2WebMessageReceivedEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, TryGetWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *TryGetWebMessageAsString )( + ICoreWebView2WebMessageReceivedEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs2, get_AdditionalObjects) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AdditionalObjects )( + ICoreWebView2WebMessageReceivedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2ObjectCollectionView **value); + + END_INTERFACE + } ICoreWebView2WebMessageReceivedEventArgs2Vtbl; + + interface ICoreWebView2WebMessageReceivedEventArgs2 + { + CONST_VTBL struct ICoreWebView2WebMessageReceivedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebMessageReceivedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebMessageReceivedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebMessageReceivedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebMessageReceivedEventArgs2_get_Source(This,value) \ + ( (This)->lpVtbl -> get_Source(This,value) ) + +#define ICoreWebView2WebMessageReceivedEventArgs2_get_WebMessageAsJson(This,value) \ + ( (This)->lpVtbl -> get_WebMessageAsJson(This,value) ) + +#define ICoreWebView2WebMessageReceivedEventArgs2_TryGetWebMessageAsString(This,value) \ + ( (This)->lpVtbl -> TryGetWebMessageAsString(This,value) ) + + +#define ICoreWebView2WebMessageReceivedEventArgs2_get_AdditionalObjects(This,value) \ + ( (This)->lpVtbl -> get_AdditionalObjects(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebMessageReceivedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequest_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceRequest_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceRequest */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceRequest = {0x97055cd4,0x512c,0x4264,{0x8b,0x5f,0xe3,0xf4,0x46,0xce,0xa6,0xa5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("97055cd4-512c-4264-8b5f-e3f446cea6a5") + ICoreWebView2WebResourceRequest : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Uri( + /* [in] */ LPCWSTR uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Method( + /* [retval][out] */ LPWSTR *method) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Method( + /* [in] */ LPCWSTR method) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Content( + /* [retval][out] */ IStream **content) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Content( + /* [in] */ IStream *content) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Headers( + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **headers) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceRequestVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceRequest * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceRequest * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, put_Uri) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Uri )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Method) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Method )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ LPWSTR *method); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, put_Method) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Method )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ LPCWSTR method); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Content) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Content )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ IStream **content); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, put_Content) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Content )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ IStream *content); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Headers) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **headers); + + END_INTERFACE + } ICoreWebView2WebResourceRequestVtbl; + + interface ICoreWebView2WebResourceRequest + { + CONST_VTBL struct ICoreWebView2WebResourceRequestVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceRequest_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceRequest_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceRequest_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceRequest_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2WebResourceRequest_put_Uri(This,uri) \ + ( (This)->lpVtbl -> put_Uri(This,uri) ) + +#define ICoreWebView2WebResourceRequest_get_Method(This,method) \ + ( (This)->lpVtbl -> get_Method(This,method) ) + +#define ICoreWebView2WebResourceRequest_put_Method(This,method) \ + ( (This)->lpVtbl -> put_Method(This,method) ) + +#define ICoreWebView2WebResourceRequest_get_Content(This,content) \ + ( (This)->lpVtbl -> get_Content(This,content) ) + +#define ICoreWebView2WebResourceRequest_put_Content(This,content) \ + ( (This)->lpVtbl -> put_Content(This,content) ) + +#define ICoreWebView2WebResourceRequest_get_Headers(This,headers) \ + ( (This)->lpVtbl -> get_Headers(This,headers) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceRequest_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceRequestedEventArgs = {0x453e667f,0x12c7,0x49d4,{0xbe,0x6d,0xdd,0xbe,0x79,0x56,0xf5,0x7a}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("453e667f-12c7-49d4-be6d-ddbe7956f57a") + ICoreWebView2WebResourceRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Request( + /* [retval][out] */ ICoreWebView2WebResourceRequest **request) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Response( + /* [retval][out] */ ICoreWebView2WebResourceResponse **response) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Response( + /* [in] */ ICoreWebView2WebResourceResponse *response) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ResourceContext( + /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT *context) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_Request) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Request )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_Response) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, put_Response) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Response )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [in] */ ICoreWebView2WebResourceResponse *response); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_ResourceContext) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResourceContext )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT *context); + + END_INTERFACE + } ICoreWebView2WebResourceRequestedEventArgsVtbl; + + interface ICoreWebView2WebResourceRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2WebResourceRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceRequestedEventArgs_get_Request(This,request) \ + ( (This)->lpVtbl -> get_Request(This,request) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_get_Response(This,response) \ + ( (This)->lpVtbl -> get_Response(This,response) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_put_Response(This,response) \ + ( (This)->lpVtbl -> put_Response(This,response) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_get_ResourceContext(This,context) \ + ( (This)->lpVtbl -> get_ResourceContext(This,context) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceRequestedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceRequestedEventArgs2 = {0x9c562c24,0xb219,0x4d7f,{0x92,0xf6,0xb1,0x87,0xfb,0xba,0xdd,0x56}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9c562c24-b219-4d7f-92f6-b187fbbadd56") + ICoreWebView2WebResourceRequestedEventArgs2 : public ICoreWebView2WebResourceRequestedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RequestedSourceKind( + /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceRequestedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceRequestedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_Request) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Request )( + ICoreWebView2WebResourceRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_Response) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( + ICoreWebView2WebResourceRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, put_Response) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Response )( + ICoreWebView2WebResourceRequestedEventArgs2 * This, + /* [in] */ ICoreWebView2WebResourceResponse *response); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2WebResourceRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_ResourceContext) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResourceContext )( + ICoreWebView2WebResourceRequestedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT *context); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs2, get_RequestedSourceKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestedSourceKind )( + ICoreWebView2WebResourceRequestedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_REQUEST_SOURCE_KINDS *value); + + END_INTERFACE + } ICoreWebView2WebResourceRequestedEventArgs2Vtbl; + + interface ICoreWebView2WebResourceRequestedEventArgs2 + { + CONST_VTBL struct ICoreWebView2WebResourceRequestedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceRequestedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceRequestedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceRequestedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceRequestedEventArgs2_get_Request(This,request) \ + ( (This)->lpVtbl -> get_Request(This,request) ) + +#define ICoreWebView2WebResourceRequestedEventArgs2_get_Response(This,response) \ + ( (This)->lpVtbl -> get_Response(This,response) ) + +#define ICoreWebView2WebResourceRequestedEventArgs2_put_Response(This,response) \ + ( (This)->lpVtbl -> put_Response(This,response) ) + +#define ICoreWebView2WebResourceRequestedEventArgs2_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#define ICoreWebView2WebResourceRequestedEventArgs2_get_ResourceContext(This,context) \ + ( (This)->lpVtbl -> get_ResourceContext(This,context) ) + + +#define ICoreWebView2WebResourceRequestedEventArgs2_get_RequestedSourceKind(This,value) \ + ( (This)->lpVtbl -> get_RequestedSourceKind(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceRequestedEventArgs2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponse_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceResponse_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceResponse */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponse = {0xaafcc94f,0xfa27,0x48fd,{0x97,0xdf,0x83,0x0e,0xf7,0x5a,0xae,0xc9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("aafcc94f-fa27-48fd-97df-830ef75aaec9") + ICoreWebView2WebResourceResponse : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Content( + /* [retval][out] */ IStream **content) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Content( + /* [in] */ IStream *content) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Headers( + /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_StatusCode( + /* [retval][out] */ int *statusCode) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_StatusCode( + /* [in] */ int statusCode) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ReasonPhrase( + /* [retval][out] */ LPWSTR *reasonPhrase) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ReasonPhrase( + /* [in] */ LPCWSTR reasonPhrase) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceResponseVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceResponse * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceResponse * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_Content) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Content )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ IStream **content); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, put_Content) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Content )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ IStream *content); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_Headers) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_StatusCode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusCode )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ int *statusCode); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, put_StatusCode) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_StatusCode )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ int statusCode); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_ReasonPhrase) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ReasonPhrase )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ LPWSTR *reasonPhrase); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, put_ReasonPhrase) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ReasonPhrase )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ LPCWSTR reasonPhrase); + + END_INTERFACE + } ICoreWebView2WebResourceResponseVtbl; + + interface ICoreWebView2WebResourceResponse + { + CONST_VTBL struct ICoreWebView2WebResourceResponseVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceResponse_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceResponse_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceResponse_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceResponse_get_Content(This,content) \ + ( (This)->lpVtbl -> get_Content(This,content) ) + +#define ICoreWebView2WebResourceResponse_put_Content(This,content) \ + ( (This)->lpVtbl -> put_Content(This,content) ) + +#define ICoreWebView2WebResourceResponse_get_Headers(This,headers) \ + ( (This)->lpVtbl -> get_Headers(This,headers) ) + +#define ICoreWebView2WebResourceResponse_get_StatusCode(This,statusCode) \ + ( (This)->lpVtbl -> get_StatusCode(This,statusCode) ) + +#define ICoreWebView2WebResourceResponse_put_StatusCode(This,statusCode) \ + ( (This)->lpVtbl -> put_StatusCode(This,statusCode) ) + +#define ICoreWebView2WebResourceResponse_get_ReasonPhrase(This,reasonPhrase) \ + ( (This)->lpVtbl -> get_ReasonPhrase(This,reasonPhrase) ) + +#define ICoreWebView2WebResourceResponse_put_ReasonPhrase(This,reasonPhrase) \ + ( (This)->lpVtbl -> put_ReasonPhrase(This,reasonPhrase) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceResponse_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseReceivedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceResponseReceivedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceResponseReceivedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseReceivedEventArgs = {0xd1db483d,0x6796,0x4b8b,{0x80,0xfc,0x13,0x71,0x2b,0xb7,0x16,0xf4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("d1db483d-6796-4b8b-80fc-13712bb716f4") + ICoreWebView2WebResourceResponseReceivedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Request( + /* [retval][out] */ ICoreWebView2WebResourceRequest **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Response( + /* [retval][out] */ ICoreWebView2WebResourceResponseView **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceResponseReceivedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceResponseReceivedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceResponseReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceResponseReceivedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseReceivedEventArgs, get_Request) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Request )( + ICoreWebView2WebResourceResponseReceivedEventArgs * This, + /* [retval][out] */ ICoreWebView2WebResourceRequest **value); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseReceivedEventArgs, get_Response) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( + ICoreWebView2WebResourceResponseReceivedEventArgs * This, + /* [retval][out] */ ICoreWebView2WebResourceResponseView **value); + + END_INTERFACE + } ICoreWebView2WebResourceResponseReceivedEventArgsVtbl; + + interface ICoreWebView2WebResourceResponseReceivedEventArgs + { + CONST_VTBL struct ICoreWebView2WebResourceResponseReceivedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceResponseReceivedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceResponseReceivedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceResponseReceivedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceResponseReceivedEventArgs_get_Request(This,value) \ + ( (This)->lpVtbl -> get_Request(This,value) ) + +#define ICoreWebView2WebResourceResponseReceivedEventArgs_get_Response(This,value) \ + ( (This)->lpVtbl -> get_Response(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceResponseReceivedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseView_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceResponseView_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceResponseView */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseView = {0x79701053,0x7759,0x4162,{0x8F,0x7D,0xF1,0xB3,0xF0,0x84,0x92,0x8D}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("79701053-7759-4162-8F7D-F1B3F084928D") + ICoreWebView2WebResourceResponseView : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Headers( + /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_StatusCode( + /* [retval][out] */ int *statusCode) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ReasonPhrase( + /* [retval][out] */ LPWSTR *reasonPhrase) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetContent( + /* [in] */ ICoreWebView2WebResourceResponseViewGetContentCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceResponseViewVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceResponseView * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceResponseView * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceResponseView * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, get_Headers) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( + ICoreWebView2WebResourceResponseView * This, + /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, get_StatusCode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusCode )( + ICoreWebView2WebResourceResponseView * This, + /* [retval][out] */ int *statusCode); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, get_ReasonPhrase) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ReasonPhrase )( + ICoreWebView2WebResourceResponseView * This, + /* [retval][out] */ LPWSTR *reasonPhrase); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, GetContent) + HRESULT ( STDMETHODCALLTYPE *GetContent )( + ICoreWebView2WebResourceResponseView * This, + /* [in] */ ICoreWebView2WebResourceResponseViewGetContentCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2WebResourceResponseViewVtbl; + + interface ICoreWebView2WebResourceResponseView + { + CONST_VTBL struct ICoreWebView2WebResourceResponseViewVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceResponseView_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceResponseView_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceResponseView_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceResponseView_get_Headers(This,headers) \ + ( (This)->lpVtbl -> get_Headers(This,headers) ) + +#define ICoreWebView2WebResourceResponseView_get_StatusCode(This,statusCode) \ + ( (This)->lpVtbl -> get_StatusCode(This,statusCode) ) + +#define ICoreWebView2WebResourceResponseView_get_ReasonPhrase(This,reasonPhrase) \ + ( (This)->lpVtbl -> get_ReasonPhrase(This,reasonPhrase) ) + +#define ICoreWebView2WebResourceResponseView_GetContent(This,handler) \ + ( (This)->lpVtbl -> GetContent(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceResponseView_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceResponseViewGetContentCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseViewGetContentCompletedHandler = {0x875738e1,0x9fa2,0x40e3,{0x8b,0x74,0x2e,0x89,0x72,0xdd,0x6f,0xe7}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("875738e1-9fa2-40e3-8b74-2e8972dd6fe7") + ICoreWebView2WebResourceResponseViewGetContentCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceResponseViewGetContentCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseViewGetContentCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *result); + + END_INTERFACE + } ICoreWebView2WebResourceResponseViewGetContentCompletedHandlerVtbl; + + interface ICoreWebView2WebResourceResponseViewGetContentCompletedHandler + { + CONST_VTBL struct ICoreWebView2WebResourceResponseViewGetContentCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_Invoke(This,errorCode,result) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceResponseViewGetContentCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WindowFeatures_INTERFACE_DEFINED__ +#define __ICoreWebView2WindowFeatures_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WindowFeatures */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WindowFeatures = {0x5eaf559f,0xb46e,0x4397,{0x88,0x60,0xe4,0x22,0xf2,0x87,0xff,0x1e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5eaf559f-b46e-4397-8860-e422f287ff1e") + ICoreWebView2WindowFeatures : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasPosition( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasSize( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Left( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Top( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Height( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Width( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldDisplayMenuBar( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldDisplayStatus( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldDisplayToolbar( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShouldDisplayScrollBars( + /* [retval][out] */ BOOL *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WindowFeaturesVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WindowFeatures * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WindowFeatures * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WindowFeatures * This); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_HasPosition) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasPosition )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_HasSize) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasSize )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Left) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Left )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Top) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Top )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Height) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Height )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Width) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Width )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayMenuBar) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayMenuBar )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayStatus )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayToolbar) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayToolbar )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayScrollBars) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayScrollBars )( + ICoreWebView2WindowFeatures * This, + /* [retval][out] */ BOOL *value); + + END_INTERFACE + } ICoreWebView2WindowFeaturesVtbl; + + interface ICoreWebView2WindowFeatures + { + CONST_VTBL struct ICoreWebView2WindowFeaturesVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WindowFeatures_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WindowFeatures_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WindowFeatures_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WindowFeatures_get_HasPosition(This,value) \ + ( (This)->lpVtbl -> get_HasPosition(This,value) ) + +#define ICoreWebView2WindowFeatures_get_HasSize(This,value) \ + ( (This)->lpVtbl -> get_HasSize(This,value) ) + +#define ICoreWebView2WindowFeatures_get_Left(This,value) \ + ( (This)->lpVtbl -> get_Left(This,value) ) + +#define ICoreWebView2WindowFeatures_get_Top(This,value) \ + ( (This)->lpVtbl -> get_Top(This,value) ) + +#define ICoreWebView2WindowFeatures_get_Height(This,value) \ + ( (This)->lpVtbl -> get_Height(This,value) ) + +#define ICoreWebView2WindowFeatures_get_Width(This,value) \ + ( (This)->lpVtbl -> get_Width(This,value) ) + +#define ICoreWebView2WindowFeatures_get_ShouldDisplayMenuBar(This,value) \ + ( (This)->lpVtbl -> get_ShouldDisplayMenuBar(This,value) ) + +#define ICoreWebView2WindowFeatures_get_ShouldDisplayStatus(This,value) \ + ( (This)->lpVtbl -> get_ShouldDisplayStatus(This,value) ) + +#define ICoreWebView2WindowFeatures_get_ShouldDisplayToolbar(This,value) \ + ( (This)->lpVtbl -> get_ShouldDisplayToolbar(This,value) ) + +#define ICoreWebView2WindowFeatures_get_ShouldDisplayScrollBars(This,value) \ + ( (This)->lpVtbl -> get_ShouldDisplayScrollBars(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WindowFeatures_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionSettingCollectionView_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionSettingCollectionView_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionSettingCollectionView */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionSettingCollectionView = {0xf5596f62,0x3de5,0x47b1,{0x91,0xe8,0xa4,0x10,0x4b,0x59,0x6b,0x96}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f5596f62-3de5-47b1-91e8-a4104b596b96") + ICoreWebView2PermissionSettingCollectionView : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2PermissionSetting **permissionSetting) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionSettingCollectionViewVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionSettingCollectionView * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionSettingCollectionView * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionSettingCollectionView * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionSettingCollectionView, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2PermissionSettingCollectionView * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2PermissionSetting **permissionSetting); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionSettingCollectionView, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2PermissionSettingCollectionView * This, + /* [retval][out] */ UINT32 *value); + + END_INTERFACE + } ICoreWebView2PermissionSettingCollectionViewVtbl; + + interface ICoreWebView2PermissionSettingCollectionView + { + CONST_VTBL struct ICoreWebView2PermissionSettingCollectionViewVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionSettingCollectionView_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionSettingCollectionView_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionSettingCollectionView_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionSettingCollectionView_GetValueAtIndex(This,index,permissionSetting) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,permissionSetting) ) + +#define ICoreWebView2PermissionSettingCollectionView_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionSettingCollectionView_INTERFACE_DEFINED__ */ + +#endif /* __WebView2_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/v2/webui/src/webview/win32_wv2.cpp b/v2/webui/src/webview/win32_wv2.cpp new file mode 100644 index 0000000..6ea2787 --- /dev/null +++ b/v2/webui/src/webview/win32_wv2.cpp @@ -0,0 +1,521 @@ +/* + WebUI Library + Win32 WebView2 C++ Implementation + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. +*/ + +#ifdef _WIN32 + +#include "win32_wv2.hpp" +#include "WebView2.h" +#include + +#ifdef _MSC_VER + // MSVC: Use Windows Runtime Library + #include + using namespace Microsoft::WRL; +#else + // MinGW: Define our own ComPtr template + template + class ComPtr { + T* ptr; + public: + ComPtr() : ptr(nullptr) {} + ~ComPtr() { Reset(); } + ComPtr(const ComPtr&) = delete; + ComPtr& operator=(const ComPtr&) = delete; + + void Reset() { + if (ptr) { + ptr->Release(); + ptr = nullptr; + } + } + + T* Get() const { return ptr; } + T** GetAddressOf() { Reset(); return &ptr; } + T* operator->() const { return ptr; } + operator bool() const { return ptr != nullptr; } + + ComPtr& operator=(T* p) { + Reset(); + ptr = p; + if (ptr) ptr->AddRef(); + return *this; + } + }; +#endif + +class WebView2Instance { +public: + ComPtr webviewEnvironment; + ComPtr webviewController; + ComPtr webviewWindow; + HWND hwnd; + wchar_t* url; + bool navigate, size, position, stop; + int width, height, x, y; + + WebView2Instance() + : hwnd(nullptr), url(nullptr), navigate(false), size(false) + , position(false), stop(false), width(800), height(600), x(0), y(0) {} + + ~WebView2Instance() { + if (url) free(url); + } +}; + +#ifdef _MSC_VER + // MSVC: Use WRL RuntimeClass + class TitleChangedHandler : public RuntimeClass, ICoreWebView2DocumentTitleChangedEventHandler> { + WebView2Instance* instance; + public: + TitleChangedHandler(WebView2Instance* inst) : instance(inst) {} + HRESULT STDMETHODCALLTYPE Invoke(ICoreWebView2* sender, IUnknown* args) override { + (void)args; + if (sender && instance->hwnd) { + LPWSTR newTitle = nullptr; + sender->get_DocumentTitle(&newTitle); + if (newTitle) { + SetWindowTextW(instance->hwnd, newTitle); + CoTaskMemFree(newTitle); + } + } + return S_OK; + } + }; +#else + // MinGW: Manual COM implementation + class TitleChangedHandler : public ICoreWebView2DocumentTitleChangedEventHandler { + ULONG refCount; + WebView2Instance* instance; + public: + TitleChangedHandler(WebView2Instance* inst) : refCount(1), instance(inst) {} + virtual ~TitleChangedHandler() = default; + + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) override { + if (!ppvObject) return E_POINTER; + *ppvObject = nullptr; + if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_ICoreWebView2DocumentTitleChangedEventHandler)) { + *ppvObject = static_cast(this); + AddRef(); + return S_OK; + } + return E_NOINTERFACE; + } + + ULONG STDMETHODCALLTYPE AddRef() override { + return ++refCount; + } + + ULONG STDMETHODCALLTYPE Release() override { + ULONG count = --refCount; + if (count == 0) delete this; + return count; + } + + HRESULT STDMETHODCALLTYPE Invoke(ICoreWebView2* sender, IUnknown* args) override { + (void)args; + if (sender && instance->hwnd) { + LPWSTR newTitle = nullptr; + sender->get_DocumentTitle(&newTitle); + if (newTitle) { + SetWindowTextW(instance->hwnd, newTitle); + CoTaskMemFree(newTitle); + } + } + return S_OK; + } + }; +#endif + +#ifdef _MSC_VER + class ControllerCompletedHandler : public RuntimeClass, ICoreWebView2CreateCoreWebView2ControllerCompletedHandler> { + WebView2Instance* instance; + public: + ControllerCompletedHandler(WebView2Instance* inst) : instance(inst) {} + HRESULT STDMETHODCALLTYPE Invoke(HRESULT result, ICoreWebView2Controller* controller) override { + if (SUCCEEDED(result) && controller) { + instance->webviewController = controller; + controller->get_CoreWebView2(&instance->webviewWindow); + + ComPtr settings; + if (SUCCEEDED(instance->webviewWindow->get_Settings(&settings))) { + settings->put_IsScriptEnabled(TRUE); + settings->put_AreDefaultScriptDialogsEnabled(TRUE); + settings->put_IsWebMessageEnabled(TRUE); + #ifdef WEBUI_LOG + settings->put_AreDevToolsEnabled(TRUE); + #else + settings->put_AreDevToolsEnabled(FALSE); + #endif + } + + RECT bounds = {0, 0, instance->width, instance->height}; + if (instance->hwnd) + GetClientRect(instance->hwnd, &bounds); + controller->put_Bounds(bounds); + + auto titleHandler = Make(instance); + EventRegistrationToken token; + instance->webviewWindow->add_DocumentTitleChanged(titleHandler.Get(), &token); + + if (instance->url) { + instance->webviewWindow->Navigate(instance->url); + } + } + return S_OK; + } + }; +#else + class ControllerCompletedHandler : public ICoreWebView2CreateCoreWebView2ControllerCompletedHandler { + ULONG refCount; + WebView2Instance* instance; + public: + ControllerCompletedHandler(WebView2Instance* inst) : refCount(1), instance(inst) {} + virtual ~ControllerCompletedHandler() = default; + + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) override { + if (!ppvObject) return E_POINTER; + *ppvObject = nullptr; + if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_ICoreWebView2CreateCoreWebView2ControllerCompletedHandler)) { + *ppvObject = static_cast(this); + AddRef(); + return S_OK; + } + return E_NOINTERFACE; + } + + ULONG STDMETHODCALLTYPE AddRef() override { + return ++refCount; + } + + ULONG STDMETHODCALLTYPE Release() override { + ULONG count = --refCount; + if (count == 0) delete this; + return count; + } + + HRESULT STDMETHODCALLTYPE Invoke(HRESULT result, ICoreWebView2Controller* controller) override { + if (SUCCEEDED(result) && controller) { + instance->webviewController = controller; + controller->get_CoreWebView2(instance->webviewWindow.GetAddressOf()); + + ICoreWebView2Settings* settings = nullptr; + if (SUCCEEDED(instance->webviewWindow->get_Settings(&settings)) && settings) { + settings->put_IsScriptEnabled(TRUE); + settings->put_AreDefaultScriptDialogsEnabled(TRUE); + settings->put_IsWebMessageEnabled(TRUE); + #ifdef WEBUI_LOG + settings->put_AreDevToolsEnabled(TRUE); + #else + settings->put_AreDevToolsEnabled(FALSE); + #endif + settings->Release(); + } + + RECT bounds = {0, 0, instance->width, instance->height}; + if (instance->hwnd) + GetClientRect(instance->hwnd, &bounds); + controller->put_Bounds(bounds); + + TitleChangedHandler* titleHandler = new TitleChangedHandler(instance); + EventRegistrationToken token; + instance->webviewWindow->add_DocumentTitleChanged(titleHandler, &token); + + if (instance->url) { + instance->webviewWindow->Navigate(instance->url); + } + } + return S_OK; + } + }; +#endif + +#ifdef _MSC_VER + class EnvironmentCompletedHandler : public RuntimeClass, ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler> { + WebView2Instance* instance; + public: + EnvironmentCompletedHandler(WebView2Instance* inst) : instance(inst) {} + HRESULT STDMETHODCALLTYPE Invoke(HRESULT result, ICoreWebView2Environment* env) override { + if (SUCCEEDED(result) && env) { + instance->webviewEnvironment = env; + auto controllerHandler = Make(instance); + env->CreateCoreWebView2Controller(instance->hwnd, controllerHandler.Get()); + } + return S_OK; + } + }; +#else + class EnvironmentCompletedHandler : public ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler { + ULONG refCount; + WebView2Instance* instance; + public: + EnvironmentCompletedHandler(WebView2Instance* inst) : refCount(1), instance(inst) {} + virtual ~EnvironmentCompletedHandler() = default; + + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) override { + if (!ppvObject) return E_POINTER; + *ppvObject = nullptr; + if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler)) { + *ppvObject = static_cast(this); + AddRef(); + return S_OK; + } + return E_NOINTERFACE; + } + + ULONG STDMETHODCALLTYPE AddRef() override { + return ++refCount; + } + + ULONG STDMETHODCALLTYPE Release() override { + ULONG count = --refCount; + if (count == 0) delete this; + return count; + } + + HRESULT STDMETHODCALLTYPE Invoke(HRESULT result, ICoreWebView2Environment* env) override { + if (SUCCEEDED(result) && env) { + instance->webviewEnvironment = env; + ControllerCompletedHandler* controllerHandler = new ControllerCompletedHandler(instance); + env->CreateCoreWebView2Controller(instance->hwnd, controllerHandler); + } + return S_OK; + } + }; +#endif + +#ifdef WEBUI_WEBVIEW_STATIC +// The WebView2LoaderStatic.lib is linked, no need to load WebView2Loader.dll +#else +// Cached WebView2Loader.dll handle and function pointer +static HMODULE g_webviewLib = NULL; +typedef HRESULT (__stdcall *CreateCoreWebView2EnvironmentWithOptionsFunc)( + PCWSTR, PCWSTR, ICoreWebView2EnvironmentOptions*, + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler*); +static CreateCoreWebView2EnvironmentWithOptionsFunc g_createEnv = NULL; +#endif + +extern "C" { + +bool _webui_win32_wv2_check_loader_dll(void) { + #ifdef WEBUI_WEBVIEW_STATIC + // The WebView2LoaderStatic.lib is linked, no need to load WebView2Loader.dll + return true; + #else + // Already loaded and cached + if (g_webviewLib && g_createEnv) { + return true; + } + // Load and cache WebView2Loader.dll + g_webviewLib = LoadLibraryA("WebView2Loader.dll"); + if (!g_webviewLib) { + return false; + } + g_createEnv = (CreateCoreWebView2EnvironmentWithOptionsFunc) + GetProcAddress(g_webviewLib, "CreateCoreWebView2EnvironmentWithOptions"); + if (!g_createEnv) { + FreeLibrary(g_webviewLib); + g_webviewLib = NULL; + return false; + } + return true; + #endif +} + +bool _webui_win32_wv2_check_runtime(void) { + // Ensure loader DLL (or static lib) is available first + if (!_webui_win32_wv2_check_loader_dll()) { + return false; + } + // Verify the WebView2 Runtime is installed by requesting its version string + typedef HRESULT (__stdcall *GetVersionFunc)(PCWSTR, LPWSTR*); + #ifdef WEBUI_WEBVIEW_STATIC + GetVersionFunc getVersion = GetAvailableCoreWebView2BrowserVersionString; + #else + GetVersionFunc getVersion = (GetVersionFunc)GetProcAddress( + g_webviewLib, "GetAvailableCoreWebView2BrowserVersionString"); + if (!getVersion) { + return false; + } + #endif + LPWSTR versionInfo = NULL; + HRESULT hr = getVersion(NULL, &versionInfo); + if (SUCCEEDED(hr) && versionInfo) { + CoTaskMemFree(versionInfo); + return true; + } + return false; +} + +_webui_win32_wv2_handle _webui_win32_wv2_create(void) { + return static_cast<_webui_win32_wv2_handle>(new WebView2Instance()); +} + +void _webui_win32_wv2_free(_webui_win32_wv2_handle handle) { + if (!handle) return; + WebView2Instance* instance = static_cast(handle); + if (instance->webviewWindow) instance->webviewWindow.Reset(); + if (instance->webviewController) instance->webviewController.Reset(); + if (instance->webviewEnvironment) instance->webviewEnvironment.Reset(); + delete instance; +} + +bool _webui_win32_wv2_navigate(_webui_win32_wv2_handle handle, wchar_t* url) { + if (!handle) return false; + WebView2Instance* instance = static_cast(handle); + if (instance->webviewWindow && url) { + return SUCCEEDED(instance->webviewWindow->Navigate(url)); + } + return false; +} + +bool _webui_win32_wv2_set_position(_webui_win32_wv2_handle handle, int x, int y) { + if (!handle) return false; + WebView2Instance* instance = static_cast(handle); + return instance->hwnd && SetWindowPos(instance->hwnd, NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); +} + +bool _webui_win32_wv2_set_size(_webui_win32_wv2_handle handle, int width, int height) { + if (!handle) return false; + WebView2Instance* instance = static_cast(handle); + return instance->hwnd && SetWindowPos(instance->hwnd, NULL, 0, 0, width, height, SWP_NOMOVE | SWP_NOREPOSITION); +} + +bool _webui_win32_wv2_maximize(_webui_win32_wv2_handle handle) { + if (!handle) return false; + WebView2Instance* instance = static_cast(handle); + if (!instance->hwnd) return false; + return ShowWindow(instance->hwnd, IsZoomed(instance->hwnd) ? SW_RESTORE : SW_MAXIMIZE); +} + +bool _webui_win32_wv2_minimize(_webui_win32_wv2_handle handle) { + if (!handle) return false; + WebView2Instance* instance = static_cast(handle); + return instance->hwnd && ShowWindow(instance->hwnd, SW_MINIMIZE); +} + +HWND _webui_win32_wv2_get_hwnd(_webui_win32_wv2_handle handle) { + return handle ? static_cast(handle)->hwnd : nullptr; +} + +void _webui_win32_wv2_set_hwnd(_webui_win32_wv2_handle handle, HWND hwnd) { + if (handle) static_cast(handle)->hwnd = hwnd; +} + +void _webui_win32_wv2_set_stop(_webui_win32_wv2_handle handle, bool stop) { + if (handle) static_cast(handle)->stop = stop; +} + +bool _webui_win32_wv2_get_stop(_webui_win32_wv2_handle handle) { + return handle ? static_cast(handle)->stop : false; +} + +void _webui_win32_wv2_set_navigate_flag(_webui_win32_wv2_handle handle, bool navigate) { + if (handle) static_cast(handle)->navigate = navigate; +} + +void _webui_win32_wv2_set_size_flag(_webui_win32_wv2_handle handle, bool size) { + if (handle) static_cast(handle)->size = size; +} + +void _webui_win32_wv2_set_position_flag(_webui_win32_wv2_handle handle, bool position) { + if (handle) static_cast(handle)->position = position; +} + +bool _webui_win32_wv2_get_navigate_flag(_webui_win32_wv2_handle handle) { + return handle ? static_cast(handle)->navigate : false; +} + +bool _webui_win32_wv2_get_size_flag(_webui_win32_wv2_handle handle) { + return handle ? static_cast(handle)->size : false; +} + +bool _webui_win32_wv2_get_position_flag(_webui_win32_wv2_handle handle) { + return handle ? static_cast(handle)->position : false; +} + +void _webui_win32_wv2_set_url(_webui_win32_wv2_handle handle, wchar_t* url) { + if (!handle) return; + WebView2Instance* instance = static_cast(handle); + if (instance->url) free(instance->url); + if (url) { + size_t len = wcslen(url) + 1; + instance->url = (wchar_t*)malloc(len * sizeof(wchar_t)); + if (instance->url) wcscpy_s(instance->url, len, url); + } else { + instance->url = nullptr; + } +} + +wchar_t* _webui_win32_wv2_get_url(_webui_win32_wv2_handle handle) { + return handle ? static_cast(handle)->url : nullptr; +} + +void _webui_win32_wv2_set_dimensions(_webui_win32_wv2_handle handle, int x, int y, int width, int height) { + if (!handle) return; + WebView2Instance* instance = static_cast(handle); + instance->x = x; + instance->y = y; + instance->width = width; + instance->height = height; +} + +void _webui_win32_wv2_get_dimensions(_webui_win32_wv2_handle handle, int* x, int* y, int* width, int* height) { + if (!handle) return; + WebView2Instance* instance = static_cast(handle); + if (x) *x = instance->x; + if (y) *y = instance->y; + if (width) *width = instance->width; + if (height) *height = instance->height; +} + +bool _webui_win32_wv2_create_environment(_webui_win32_wv2_handle handle, wchar_t* cacheFolder) { + if (!handle) return false; + WebView2Instance* instance = static_cast(handle); + + // Ensure loader is ready (DLL or static) + if (!_webui_win32_wv2_check_loader_dll()) { + return false; + } + + _wputenv(L"WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--enable-features=msWebView2EnableDraggableRegions"); + + #ifdef _MSC_VER + auto environmentHandler = Make(instance); + if (!environmentHandler) { + return false; + } + #ifdef WEBUI_WEBVIEW_STATIC + HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(NULL, cacheFolder, NULL, environmentHandler.Get()); + #else + HRESULT hr = g_createEnv(NULL, cacheFolder, NULL, environmentHandler.Get()); + #endif + #else + EnvironmentCompletedHandler* environmentHandler = new EnvironmentCompletedHandler(instance); + if (!environmentHandler) { + return false; + } + #ifdef WEBUI_WEBVIEW_STATIC + HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(NULL, cacheFolder, NULL, environmentHandler); + #else + HRESULT hr = g_createEnv(NULL, cacheFolder, NULL, environmentHandler); + #endif + #endif + + return SUCCEEDED(hr); +} + +void* _webui_win32_wv2_get_controller(_webui_win32_wv2_handle handle) { + return handle ? static_cast(handle)->webviewController.Get() : nullptr; +} + +} + +#endif diff --git a/v2/webui/src/webview/win32_wv2.hpp b/v2/webui/src/webview/win32_wv2.hpp new file mode 100644 index 0000000..c21c5a0 --- /dev/null +++ b/v2/webui/src/webview/win32_wv2.hpp @@ -0,0 +1,59 @@ +/* + WebUI Library + Win32 WebView2 C++ Implementation + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. +*/ + +#ifndef WEBUI_WIN32_WV2_HPP +#define WEBUI_WIN32_WV2_HPP + +#ifdef _WIN32 + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _webui_window_t _webui_window_t; +typedef void* _webui_win32_wv2_handle; + +bool _webui_win32_wv2_check_loader_dll(void); +bool _webui_win32_wv2_check_runtime(void); +_webui_win32_wv2_handle _webui_win32_wv2_create(void); +void _webui_win32_wv2_free(_webui_win32_wv2_handle handle); +bool _webui_win32_wv2_navigate(_webui_win32_wv2_handle handle, wchar_t* url); +bool _webui_win32_wv2_set_position(_webui_win32_wv2_handle handle, int x, int y); +bool _webui_win32_wv2_set_size(_webui_win32_wv2_handle handle, int width, int height); +bool _webui_win32_wv2_maximize(_webui_win32_wv2_handle handle); +bool _webui_win32_wv2_minimize(_webui_win32_wv2_handle handle); +HWND _webui_win32_wv2_get_hwnd(_webui_win32_wv2_handle handle); +void _webui_win32_wv2_set_hwnd(_webui_win32_wv2_handle handle, HWND hwnd); +void _webui_win32_wv2_set_stop(_webui_win32_wv2_handle handle, bool stop); +bool _webui_win32_wv2_get_stop(_webui_win32_wv2_handle handle); +void _webui_win32_wv2_set_navigate_flag(_webui_win32_wv2_handle handle, bool navigate); +void _webui_win32_wv2_set_size_flag(_webui_win32_wv2_handle handle, bool size); +void _webui_win32_wv2_set_position_flag(_webui_win32_wv2_handle handle, bool position); +bool _webui_win32_wv2_get_navigate_flag(_webui_win32_wv2_handle handle); +bool _webui_win32_wv2_get_size_flag(_webui_win32_wv2_handle handle); +bool _webui_win32_wv2_get_position_flag(_webui_win32_wv2_handle handle); +void _webui_win32_wv2_set_url(_webui_win32_wv2_handle handle, wchar_t* url); +wchar_t* _webui_win32_wv2_get_url(_webui_win32_wv2_handle handle); +void _webui_win32_wv2_set_dimensions(_webui_win32_wv2_handle handle, int x, int y, int width, int height); +void _webui_win32_wv2_get_dimensions(_webui_win32_wv2_handle handle, int* x, int* y, int* width, int* height); +bool _webui_win32_wv2_create_environment(_webui_win32_wv2_handle handle, wchar_t* cacheFolder); +void* _webui_win32_wv2_get_controller(_webui_win32_wv2_handle handle); + +#ifdef __cplusplus +} +#endif + +#endif // _WIN32 +#endif // WEBUI_WIN32_WV2_HPP diff --git a/v2/webui/src/webview/wkwebview.m b/v2/webui/src/webview/wkwebview.m new file mode 100644 index 0000000..c57e9d8 --- /dev/null +++ b/v2/webui/src/webview/wkwebview.m @@ -0,0 +1,539 @@ +/* + WebUI Library + https://webui.me + https://github.com/webui-dev/webui + Copyright (c) 2020-2026 Hassan Draga. + Licensed under MIT License. + All rights reserved. + Canada. +*/ + +#import +#import + +#define WEBUI_MAX_IDS (256) // Max windows, servers and threads +extern bool webui_interface_is_app_running(void); + +void (*close_callback)(int index) = NULL; +void _webui_macos_wv_check_exit(); + +@interface AppDelegate : NSObject +{ + NSWindow *windows[WEBUI_MAX_IDS]; + WKWebView *webViews[WEBUI_MAX_IDS]; +} +- (NSWindow *)windowAtIndex:(int)index; +- (void)setWindow:(NSWindow *)window atIndex:(int)index; +- (WKWebView *)webViewAtIndex:(int)index; +- (void)setWebView:(WKWebView *)webView atIndex:(int)index; +@end + +@implementation AppDelegate + +- (instancetype)init { + self = [super init]; + if (self) { + for (int i = 0; i < WEBUI_MAX_IDS; i++) { + windows[i] = nil; + webViews[i] = nil; + } + + [NSTimer scheduledTimerWithTimeInterval:1.0 + target:self + selector:@selector(_webui_macos_wv_timer) + userInfo:nil + repeats:YES]; + } + return self; +} + +- (void)_webui_macos_wv_timer { + _webui_macos_wv_check_exit(); +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\tapplicationDidFinishLaunching()\n"); + #endif + [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; + [[NSApplication sharedApplication] setActivationPolicy:NSApplicationActivationPolicyRegular]; + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; +} + +- (void)windowWillClose:(NSNotification *)notification { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\twindowWillClose()\n"); + #endif + for (int i = 0; i < WEBUI_MAX_IDS; i++) { + if (windows[i] == [notification object]) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\twindowWillClose() -> Index [%d]\n", i); + #endif + if (close_callback) { + close_callback(i); + } + windows[i] = nil; + webViews[i] = nil; + break; + } + } + + BOOL anyWindowOpen = NO; + for (int i = 0; i < WEBUI_MAX_IDS; i++) { + if (windows[i] != nil) { + anyWindowOpen = YES; + break; + } + } + + if (!anyWindowOpen) { + [NSApp stop:nil]; + } +} + +#pragma mark - Accessors + +- (NSWindow *)windowAtIndex:(int)index { + return windows[index]; +} + +- (void)setWindow:(NSWindow *)window atIndex:(int)index { + windows[index] = window; +} + +- (WKWebView *)webViewAtIndex:(int)index { + return webViews[index]; +} + +- (void)setWebView:(WKWebView *)webView atIndex:(int)index { + webViews[index] = webView; +} + +#pragma mark - WKNavigationDelegate + +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { + NSString *title = webView.title; + for (int i = 0; i < WEBUI_MAX_IDS; i++) { + if (webViews[i] == webView) { + NSWindow *window = windows[i]; + [window setTitle:title]; + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\tdidFinishNavigation([%d])\n", i); + printf("[ObjC]\t\t\tdidFinishNavigation([%d]) -> Updated title [%s]\n", i, [title UTF8String]); + #endif + break; + } + } +} + +@end + +AppDelegate *delegate; + +void _webui_macos_wv_start() { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_start()\n"); + #endif + + @autoreleasepool { + NSApplication *app = [NSApplication sharedApplication]; + [app setActivationPolicy:NSApplicationActivationPolicyRegular]; + + // Ensure the event loop keeps running + [app finishLaunching]; + + // Run the application event loop + [app run]; + + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_start() -> Exit.\n"); + #endif + } +} + +bool _webui_macos_wv_iteration_do(void) { + @autoreleasepool { + NSEvent *event = [NSApp nextEventMatchingMask:NSEventMaskAny + untilDate:[NSDate distantPast] + inMode:NSDefaultRunLoopMode + dequeue:YES]; + if (event) { + [NSApp sendEvent:event]; + [NSApp updateWindows]; + return true; // One event processed + } + return false; // Event queue is empty + } +} + +bool _webui_macos_wv_new(int index, bool frameless, bool resizable) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_new([%d], [%d], [%d])\n", index, frameless, resizable); + #endif + + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_new([%d]) -> Invalid index\n", index); + #endif + return false; + } + + if (!delegate) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_new([%d]) -> Creating NSApplication and AppDelegate\n", index); + #endif + NSApplication *app = [NSApplication sharedApplication]; + delegate = [[AppDelegate alloc] init]; + [app setDelegate:delegate]; + } + + NSRect frame = NSMakeRect(0, 0, 800, 600); + + // Set window style + NSWindowStyleMask windowStyle; + if (frameless) { + windowStyle = NSWindowStyleMaskBorderless; + if (resizable) { + windowStyle |= NSWindowStyleMaskResizable; // Allows programmatic resizing + } + } else { + windowStyle = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable; + if (resizable) { + windowStyle |= NSWindowStyleMaskResizable; // Allows user resizing + } + } + + NSWindow *window = [[NSWindow alloc] initWithContentRect:frame + styleMask:windowStyle + backing:NSBackingStoreBuffered + defer:NO]; + if (!window) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_new([%d]) -> Failed to create NSWindow\n", index); + #endif + return false; + } + + if (!frameless) { + [window setTitle:@"Loading..."]; + } else { + [window setMovableByWindowBackground:YES]; // Allow moving frameless windows + } + [window setDelegate:delegate]; + + WKWebView *webView = [[WKWebView alloc] initWithFrame:[[window contentView] bounds]]; + if (!webView) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_new([%d]) -> Failed to create WKWebView\n", index); + #endif + return false; + } + [webView setNavigationDelegate:delegate]; + [webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [window.contentView addSubview:webView]; + + [delegate setWindow:window atIndex:index]; + [delegate setWebView:webView atIndex:index]; + + return true; +} + +void _webui_macos_wv_new_thread_safe(int index, bool frameless, bool resizable) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_new_thread_safe([%d])\n", index); + #endif + dispatch_async(dispatch_get_main_queue(), ^{ + _webui_macos_wv_new(index, frameless, resizable); + }); +} + +bool _webui_macos_wv_show(int index, const char* urlString, int x, int y, int width, int height) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d])\n", index); + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> url: [%s]\n", index, urlString); + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> x: [%d]\n", index, x); + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> y: [%d]\n", index, y); + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> width: [%d]\n", index, width); + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> height: [%d]\n", index, height); + #endif + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> Invalid index\n", index); + #endif + return false; + } + + __block bool success = false; + dispatch_async(dispatch_get_main_queue(), ^{ + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> dispatch_async\n", index); + #endif + NSWindow *window = [delegate windowAtIndex:index]; + WKWebView *webView = [delegate webViewAtIndex:index]; + + if (window && webView) { + // Set window position and size + NSRect frame = [window frame]; + frame.origin.x = x; + frame.origin.y = y; + frame.size.width = width; + frame.size.height = height; + [window setFrame:frame display:YES]; + + // Load URL + NSString *nsUrlString = [NSString stringWithUTF8String:urlString]; + if (nsUrlString) { + NSURL *url = [NSURL URLWithString:nsUrlString]; + if (url) { + NSURLRequest *request = [NSURLRequest requestWithURL:url]; + [webView loadRequest:request]; + } + } + + [window makeKeyAndOrderFront:nil]; + success = true; + } + else { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_show([%d]) -> Window or WebView not found.\n", index); + #endif + } + }); + return success; +} + +void _webui_macos_wv_process() { + #ifdef WEBUI_LOG + // printf("[ObjC]\t\t\t_webui_macos_wv_process()\n"); + #endif + NSApplication *app = [NSApplication sharedApplication]; + NSEvent *event; + + // Process all pending events + while ((event = [app nextEventMatchingMask:NSEventMaskAny + untilDate:[NSDate distantPast] + inMode:NSDefaultRunLoopMode + dequeue:YES])) { + [app sendEvent:event]; + } +} + +void _webui_macos_wv_stop() { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_stop()\n"); + #endif + dispatch_async(dispatch_get_main_queue(), ^{ + NSApplication *app = [NSApplication sharedApplication]; + [app stop:nil]; + + // Dummy event to immediately break `[app run]` in `_webui_macos_wv_start` + NSEvent *event = [NSEvent otherEventWithType:NSEventTypeApplicationDefined + location:NSMakePoint(0, 0) + modifierFlags:0 + timestamp:0 + windowNumber:0 + context:nil + subtype:0 + data1:0 + data2:0]; + [app postEvent:event atStart:YES]; + }); +} + +void _webui_macos_wv_check_exit() { + if (!webui_interface_is_app_running()) { + _webui_macos_wv_stop(); + } +} + +bool _webui_macos_wv_close(int index) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_close([%d])\n", index); + #endif + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_close([%d]) -> Invalid index\n", index); + #endif + return false; + } + + __block bool success = false; + dispatch_async(dispatch_get_main_queue(), ^{ + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_close([%d]) -> dispatch_async\n", index); + #endif + NSWindow *window = [delegate windowAtIndex:index]; + if (window) { + [window orderOut:nil]; + success = true; + } + else { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_close([%d]) -> Window not found.\n", index); + #endif + } + }); + return success; +} + +bool _webui_macos_wv_set_position(int index, int x, int y) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_set_position([%d])\n", index); + printf("[ObjC]\t\t\t_webui_macos_wv_set_position([%d]) -> x: [%d]\n", index, x); + printf("[ObjC]\t\t\t_webui_macos_wv_set_position([%d]) -> y: [%d]\n", index, y); + #endif + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_set_position([%d]) -> Invalid index\n", index); + #endif + return false; + } + + __block bool success = false; + dispatch_async(dispatch_get_main_queue(), ^{ + NSWindow *window = [delegate windowAtIndex:index]; + if (window) { + NSRect frame = [window frame]; + frame.origin.x = x; + frame.origin.y = y; + [window setFrame:frame display:YES]; + success = true; + } + else { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_set_position([%d]) -> Window not found.\n", index); + #endif + } + }); + return success; +} + +bool _webui_macos_wv_minimize(int index) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_minimize([%d])\n", index); + #endif + + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_minimize([%d]) -> Invalid index\n", index); + #endif + return false; + } + + __block bool success = false; + dispatch_async(dispatch_get_main_queue(), ^{ + NSWindow *window = [delegate windowAtIndex:index]; + if (window) { + [window miniaturize:nil]; + success = true; + } else { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_minimize([%d]) -> Window not found.\n", index); + #endif + } + }); + + return success; +} + +bool _webui_macos_wv_maximize(int index) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_maximize([%d])\n", index); + #endif + + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_maximize([%d]) -> Invalid index\n", index); + #endif + return false; + } + + __block bool success = false; + dispatch_async(dispatch_get_main_queue(), ^{ + NSWindow *window = [delegate windowAtIndex:index]; + if (window) { + [window zoom:nil]; + success = true; + } else { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_maximize([%d]) -> Window not found.\n", index); + #endif + } + }); + + return success; +} + +bool _webui_macos_wv_set_size(int index, int width, int height) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_set_size([%d])\n", index); + printf("[ObjC]\t\t\t_webui_macos_wv_set_size([%d]) -> width: [%d]\n", index, width); + printf("[ObjC]\t\t\t_webui_macos_wv_set_size([%d]) -> height: [%d]\n", index, height); + #endif + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_set_size([%d]) -> Invalid index\n", index); + #endif + return false; + } + + __block bool success = false; + dispatch_async(dispatch_get_main_queue(), ^{ + NSWindow *window = [delegate windowAtIndex:index]; + if (window) { + NSRect frame = [window frame]; + frame.size.width = width; + frame.size.height = height; + [window setFrame:frame display:YES]; + success = true; + } + else { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_set_size([%d]) -> Window not found.\n", index); + #endif + } + }); + return success; +} + +bool _webui_macos_wv_navigate(int index, const char* urlString) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_navigate([%d])\n", index); + printf("[ObjC]\t\t\t_webui_macos_wv_navigate([%d]) -> url: [%s]\n", index, urlString); + #endif + if (index < 0 || index >= WEBUI_MAX_IDS) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_navigate([%d]) -> Invalid index\n", index); + #endif + return false; + } + + __block bool success = false; + dispatch_async(dispatch_get_main_queue(), ^{ + WKWebView *webView = [delegate webViewAtIndex:index]; + if (webView) { + NSString *nsUrlString = [NSString stringWithUTF8String:urlString]; + if (nsUrlString) { + NSURL *url = [NSURL URLWithString:nsUrlString]; + if (url) { + NSURLRequest *request = [NSURLRequest requestWithURL:url]; + [webView loadRequest:request]; + success = true; + } + } + } + else { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_navigate([%d]) -> WebView not found.\n", index); + #endif + } + }); + return success; +} + +void _webui_macos_wv_set_close_cb(void (*cb)(int index)) { + #ifdef WEBUI_LOG + printf("[ObjC]\t\t\t_webui_macos_wv_set_close_cb()\n"); + #endif + close_callback = cb; +} diff --git a/v2/webui/vcpkg.json b/v2/webui/vcpkg.json new file mode 100644 index 0000000..b1b6066 --- /dev/null +++ b/v2/webui/vcpkg.json @@ -0,0 +1,30 @@ +{ + "name": "webui", + "version": "2.5.0-beta.4", + "description": "Use any web browser or WebView as GUI, with your preferred language in the backend and modern web technologies in the frontend, all in a lightweight portable library.", + "license": "MIT", + "homepage": "https://webui.me", + "dependencies": [ + { + "name": "webview2", + "platform": "windows" + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "features": { + "tls": { + "description": "Enable TLS support", + "dependencies": [{ + "name": "openssl", + "version>=": "3.0.0" + }] + } + } +}