diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index d7e3ac4fb..61feb833f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,7 +13,7 @@ concurrency:
cancel-in-progress: true
env:
- COMPILER_IMAGE: stashapp/compiler:5
+ COMPILER_IMAGE: stashapp/compiler:6
jobs:
build:
@@ -91,12 +91,11 @@ jobs:
- name: Compile for all supported platforms
run: |
docker exec -t build /bin/bash -c "make cross-compile-windows"
- docker exec -t build /bin/bash -c "make cross-compile-osx-intel"
- docker exec -t build /bin/bash -c "make cross-compile-osx-applesilicon"
+ docker exec -t build /bin/bash -c "make cross-compile-macos"
docker exec -t build /bin/bash -c "make cross-compile-linux"
docker exec -t build /bin/bash -c "make cross-compile-linux-arm64v8"
docker exec -t build /bin/bash -c "make cross-compile-linux-arm32v7"
- docker exec -t build /bin/bash -c "make cross-compile-pi"
+ docker exec -t build /bin/bash -c "make cross-compile-linux-arm32v6"
- name: Cleanup build container
run: docker rm -f -v build
@@ -121,8 +120,8 @@ jobs:
if: ${{ github.event_name == 'pull_request' && github.base_ref != 'refs/heads/develop' && github.base_ref != 'refs/heads/master'}}
uses: actions/upload-artifact@v2
with:
- name: stash-osx
- path: dist/stash-osx
+ name: Stash-macos.zip
+ path: dist/Stash-macos.zip
- name: Upload Linux binary
# only upload binaries for pull requests
@@ -145,13 +144,12 @@ jobs:
automatic_release_tag: latest_develop
title: "${{ env.STASH_VERSION }}: Latest development build"
files: |
- dist/stash-osx
- dist/stash-osx-applesilicon
+ dist/Stash-macos.zip
dist/stash-win.exe
dist/stash-linux
dist/stash-linux-arm64v8
dist/stash-linux-arm32v7
- dist/stash-pi
+ dist/stash-linux-arm32v6
CHECKSUMS_SHA1
- name: Master release
@@ -161,13 +159,12 @@ jobs:
token: "${{ secrets.GITHUB_TOKEN }}"
allow_override: true
files: |
- dist/stash-osx
- dist/stash-osx-applesilicon
+ dist/Stash-macos.zip
dist/stash-win.exe
dist/stash-linux
dist/stash-linux-arm64v8
dist/stash-linux-arm32v7
- dist/stash-pi
+ dist/stash-linux-arm32v6
CHECKSUMS_SHA1
gzip: false
diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
index ab5c50010..592b6cf68 100644
--- a/.github/workflows/golangci-lint.yml
+++ b/.github/workflows/golangci-lint.yml
@@ -9,7 +9,7 @@ on:
pull_request:
env:
- COMPILER_IMAGE: stashapp/compiler:5
+ COMPILER_IMAGE: stashapp/compiler:6
jobs:
golangci:
diff --git a/Makefile b/Makefile
index 4e9dea55c..f369b490f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,12 @@
-IS_WIN =
+IS_WIN_SHELL =
ifeq (${SHELL}, sh.exe)
- IS_WIN = true
+ IS_WIN_SHELL = true
endif
ifeq (${SHELL}, cmd)
- IS_WIN = true
+ IS_WIN_SHELL = true
endif
-ifdef IS_WIN
+ifdef IS_WIN_SHELL
SEPARATOR := &&
SET := set
else
@@ -14,6 +14,11 @@ else
SET := export
endif
+IS_WIN_OS =
+ifeq ($(OS),Windows_NT)
+ IS_WIN_OS = true
+endif
+
# set LDFLAGS environment variable to any extra ldflags required
# set OUTPUT to generate a specific binary name
@@ -46,9 +51,13 @@ ifndef OFFICIAL_BUILD
endif
build: pre-build
+ifdef IS_WIN_OS
+PLATFORM_SPECIFIC_LDFLAGS := -H windowsgui
+endif
+build:
$(eval LDFLAGS := $(LDFLAGS) -X 'github.com/stashapp/stash/pkg/api.version=$(STASH_VERSION)' -X 'github.com/stashapp/stash/pkg/api.buildstamp=$(BUILD_DATE)' -X 'github.com/stashapp/stash/pkg/api.githash=$(GITHASH)')
- $(eval LDFLAGS := $(LDFLAGS) -X 'github.com/stashapp/stash/pkg/api.officialBuild=$(OFFICIAL_BUILD)')
- go build $(OUTPUT) -mod=vendor -v -tags "sqlite_omit_load_extension osusergo netgo" $(GO_BUILD_FLAGS) -ldflags "$(LDFLAGS) $(EXTRA_LDFLAGS)"
+ $(eval LDFLAGS := $(LDFLAGS) -X 'github.com/stashapp/stash/pkg/manager/config.officialBuild=$(OFFICIAL_BUILD)')
+ go build $(OUTPUT) -mod=vendor -v -tags "sqlite_omit_load_extension osusergo netgo" $(GO_BUILD_FLAGS) -ldflags "$(LDFLAGS) $(EXTRA_LDFLAGS) $(PLATFORM_SPECIFIC_LDFLAGS)"
# strips debug symbols from the release build
build-release: EXTRA_LDFLAGS := -s -w
@@ -65,23 +74,38 @@ cross-compile-windows: export GOARCH := amd64
cross-compile-windows: export CC := x86_64-w64-mingw32-gcc
cross-compile-windows: export CXX := x86_64-w64-mingw32-g++
cross-compile-windows: OUTPUT := -o dist/stash-win.exe
+cross-compile-windows: PLATFORM_SPECIFIC_LDFLAGS := -H windowsgui
cross-compile-windows: build-release-static
-cross-compile-osx-intel: export GOOS := darwin
-cross-compile-osx-intel: export GOARCH := amd64
-cross-compile-osx-intel: export CC := o64-clang
-cross-compile-osx-intel: export CXX := o64-clang++
-cross-compile-osx-intel: OUTPUT := -o dist/stash-osx
+cross-compile-macos-intel: export GOOS := darwin
+cross-compile-macos-intel: export GOARCH := amd64
+cross-compile-macos-intel: export CC := o64-clang
+cross-compile-macos-intel: export CXX := o64-clang++
+cross-compile-macos-intel: OUTPUT := -o dist/stash-macos-intel
# can't use static build for OSX
-cross-compile-osx-intel: build-release
+cross-compile-macos-intel: build-release
-cross-compile-osx-applesilicon: export GOOS := darwin
-cross-compile-osx-applesilicon: export GOARCH := arm64
-cross-compile-osx-applesilicon: export CC := oa64e-clang
-cross-compile-osx-applesilicon: export CXX := oa64e-clang++
-cross-compile-osx-applesilicon: OUTPUT := -o dist/stash-osx-applesilicon
+cross-compile-macos-applesilicon: export GOOS := darwin
+cross-compile-macos-applesilicon: export GOARCH := arm64
+cross-compile-macos-applesilicon: export CC := oa64e-clang
+cross-compile-macos-applesilicon: export CXX := oa64e-clang++
+cross-compile-macos-applesilicon: OUTPUT := -o dist/stash-macos-applesilicon
# can't use static build for OSX
-cross-compile-osx-applesilicon: build-release
+cross-compile-macos-applesilicon: build-release
+
+cross-compile-macos:
+ rm -rf dist/Stash.app dist/Stash-macos.zip
+ make cross-compile-macos-applesilicon
+ make cross-compile-macos-intel
+ # Combine into one universal binary
+ lipo -create -output dist/stash-macos-universal dist/stash-macos-intel dist/stash-macos-applesilicon
+ rm dist/stash-macos-intel dist/stash-macos-applesilicon
+ # Place into bundle and zip up
+ cp -R scripts/macos-bundle dist/Stash.app
+ mkdir dist/Stash.app/Contents/MacOS
+ mv dist/stash-macos-universal dist/Stash.app/Contents/MacOS/stash
+ cd dist && zip -r Stash-macos.zip Stash.app && cd ..
+ rm -rf dist/Stash.app
cross-compile-linux: export GOOS := linux
cross-compile-linux: export GOARCH := amd64
@@ -101,21 +125,20 @@ cross-compile-linux-arm32v7: export CC := arm-linux-gnueabihf-gcc
cross-compile-linux-arm32v7: OUTPUT := -o dist/stash-linux-arm32v7
cross-compile-linux-arm32v7: build-release-static
-cross-compile-pi: export GOOS := linux
-cross-compile-pi: export GOARCH := arm
-cross-compile-pi: export GOARM := 6
-cross-compile-pi: export CC := arm-linux-gnueabi-gcc
-cross-compile-pi: OUTPUT := -o dist/stash-pi
-cross-compile-pi: build-release-static
+cross-compile-linux-arm32v6: export GOOS := linux
+cross-compile-linux-arm32v6: export GOARCH := arm
+cross-compile-linux-arm32v6: export GOARM := 6
+cross-compile-linux-arm32v6: export CC := arm-linux-gnueabi-gcc
+cross-compile-linux-arm32v6: OUTPUT := -o dist/stash-linux-arm32v6
+cross-compile-linux-arm32v6: build-release-static
cross-compile-all:
make cross-compile-windows
- make cross-compile-osx-intel
- make cross-compile-osx-applesilicon
+ make cross-compile-macos
make cross-compile-linux
make cross-compile-linux-arm64v8
make cross-compile-linux-arm32v7
- make cross-compile-pi
+ make cross-compile-linux-arm32v6
# Regenerates GraphQL files
generate: generate-backend generate-frontend
diff --git a/README.md b/README.md
index 810ba0a18..168c1c582 100644
--- a/README.md
+++ b/README.md
@@ -22,12 +22,14 @@ For further information you can [read the in-app manual](ui/v2.5/src/docs/en).
Windows |
MacOS|
Linux |
Docker
:---:|:---:|:---:|:---:
-[Latest Release](https://github.com/stashapp/stash/releases/latest/download/stash-win.exe)
[Development Preview](https://github.com/stashapp/stash/releases/download/latest_develop/stash-win.exe) | [Latest Release (Apple Silicon)](https://github.com/stashapp/stash/releases/latest/download/stash-osx-applesilicon)
[Development Preview (Apple Silicon)](https://github.com/stashapp/stash/releases/download/latest_develop/stash-osx-applesilicon)
[Latest Release (Intel)](https://github.com/stashapp/stash/releases/latest/download/stash-osx)
[Development Preview (Intel)](https://github.com/stashapp/stash/releases/download/latest_develop/stash-osx) | [Latest Release (amd64)](https://github.com/stashapp/stash/releases/latest/download/stash-linux)
[Development Preview (amd64)](https://github.com/stashapp/stash/releases/download/latest_develop/stash-linux)
[More Architectures...](https://github.com/stashapp/stash/releases/latest) | [Instructions](docker/production/README.md)
[Sample docker-compose.yml](docker/production/docker-compose.yml)
+[Latest Release](https://github.com/stashapp/stash/releases/latest/download/stash-win.exe)
[Development Preview](https://github.com/stashapp/stash/releases/download/latest_develop/stash-win.exe) | [Latest Release](https://github.com/stashapp/stash/releases/latest/download/Stash-macos.app.zip)
[Development Preview](https://github.com/stashapp/stash/releases/download/latest_develop/Stash-macos.app.zip) | [Latest Release (amd64)](https://github.com/stashapp/stash/releases/latest/download/stash-linux)
[Development Preview (amd64)](https://github.com/stashapp/stash/releases/download/latest_develop/stash-linux)
[More Architectures...](https://github.com/stashapp/stash/releases/latest) | [Instructions](docker/production/README.md)
[Sample docker-compose.yml](docker/production/docker-compose.yml)
## Getting Started
-Run the executable (double click the exe on windows or run `./stash-osx` / `./stash-linux` from the terminal on macOS / Linux) to get started.
+Run the executable by double-clicking it.
-*Note for Windows users:* Running the app might present a security prompt since the binary isn't yet signed. Bypass this by clicking "more info" and then the "run anyway" button.
+*Note for Mac users:* Running the app will present a security prompt since the binary isn't yet signed. Bypass this by right (ctrl) clicking on the app and hitting "Open", then "Open" in the next popup.
+
+*Note for Windows users:* Running the app might present a security prompt since the binary isn't yet signed. Bypass this by clicking "more info" and then the "run anyway" button.
#### FFMPEG
Stash requires ffmpeg. If you don't have it installed, Stash will download a copy for you. It is recommended that Linux users install `ffmpeg` from their distro's package manager.
diff --git a/docker/compiler/Dockerfile b/docker/compiler/Dockerfile
index c7f5e789c..d6d54f0cc 100644
--- a/docker/compiler/Dockerfile
+++ b/docker/compiler/Dockerfile
@@ -20,7 +20,7 @@ RUN apt-get update && \
gcc-arm-linux-gnueabi libc-dev-armel-cross linux-libc-dev-armel-cross \
gcc-arm-linux-gnueabihf libc-dev-armhf-cross \
gcc-aarch64-linux-gnu libc-dev-arm64-cross \
- nodejs yarn --no-install-recommends || exit 1; \
+ nodejs yarn zip --no-install-recommends || exit 1; \
rm -rf /var/lib/apt/lists/*;
# Cross compile setup
diff --git a/docker/compiler/Makefile b/docker/compiler/Makefile
index 5c4ed71ba..978059b94 100644
--- a/docker/compiler/Makefile
+++ b/docker/compiler/Makefile
@@ -1,6 +1,6 @@
user=stashapp
repo=compiler
-version=5
+version=6
latest:
docker build -t ${user}/${repo}:latest .
diff --git a/docker/compiler/README.md b/docker/compiler/README.md
index d25b4a6cd..6172d5bd9 100644
--- a/docker/compiler/README.md
+++ b/docker/compiler/README.md
@@ -1,5 +1,3 @@
Modified from https://github.com/bep/dockerfiles/tree/master/ci-goreleaser
-When the dockerfile is changed, the version number should be incremented in the Makefile and the new version tag should be pushed to docker hub. The `scripts/cross-compile.sh` script should also be updated to use the new version number tag, and `.travis.yml` needs to be updated to pull the correct image tag.
-
-A MacOS univeral binary can be created using `lipo -create -output stash-osx-universal stash-osx stash-osx-applesilicon`, available in the image.
\ No newline at end of file
+When the dockerfile is changed, the version number should be incremented in the Makefile and the new version tag should be pushed to docker hub. The `scripts/cross-compile.sh` script should also be updated to use the new version number tag, and the github workflow files need to be updated to pull the correct image tag.
diff --git a/go.mod b/go.mod
index 2a690b116..7d0f109c7 100644
--- a/go.mod
+++ b/go.mod
@@ -38,8 +38,8 @@ require (
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb
golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9
- golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf
- golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
+ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e
+ golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b
golang.org/x/text v0.3.7
golang.org/x/tools v0.1.5 // indirect
gopkg.in/sourcemap.v1 v1.0.5 // indirect
@@ -47,6 +47,11 @@ require (
)
require (
+ github.com/apenwarr/fixconsole v0.0.0-20191012055117-5a9f6489cc29
+ github.com/go-chi/httplog v0.2.1
+ github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4
+ github.com/kermieisinthehouse/gosx-notifier v0.1.1
+ github.com/kermieisinthehouse/systray v1.2.3
github.com/lucasb-eyer/go-colorful v1.2.0
github.com/vearutop/statigz v1.1.6
github.com/vektah/gqlparser/v2 v2.0.1
@@ -55,10 +60,12 @@ require (
require (
github.com/agnivade/levenshtein v1.1.0 // indirect
github.com/antchfx/xpath v1.2.0 // indirect
+ github.com/apenwarr/w32 v0.0.0-20190407065021-aa00fece76ab // indirect
github.com/chromedp/sysutil v1.0.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.5.1 // indirect
+ github.com/go-chi/chi/v5 v5.0.0 // indirect
github.com/gobwas/httphead v0.1.0 // indirect
github.com/gobwas/pool v0.2.1 // indirect
github.com/gobwas/ws v1.1.0-rc.5 // indirect
@@ -77,10 +84,11 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
+ github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect
github.com/pelletier/go-toml v1.9.4 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/rs/zerolog v1.18.0 // indirect
+ github.com/rs/zerolog v1.18.1-0.20200514152719-663cbb4c8469 // indirect
github.com/russross/blackfriday/v2 v2.0.1 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/spf13/cast v1.4.1 // indirect
diff --git a/go.sum b/go.sum
index ec2784346..c799108fc 100644
--- a/go.sum
+++ b/go.sum
@@ -88,6 +88,10 @@ github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwq
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/apache/arrow/go/arrow v0.0.0-20200601151325-b2287a20f230/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0=
github.com/apache/arrow/go/arrow v0.0.0-20210521153258-78c88a9f517b/go.mod h1:R4hW3Ug0s+n4CUsWHKOj00Pu01ZqU4x/hSF5kXUcXKQ=
+github.com/apenwarr/fixconsole v0.0.0-20191012055117-5a9f6489cc29 h1:muXWUcay7DDy1/hEQWrYlBy+g0EuwT70sBHg65SeUc4=
+github.com/apenwarr/fixconsole v0.0.0-20191012055117-5a9f6489cc29/go.mod h1:JYWahgHer+Z2xbsgHPtaDYVWzeHDminu+YIBWkxpCAY=
+github.com/apenwarr/w32 v0.0.0-20190407065021-aa00fece76ab h1:CMGzRRCjnD50RjUFSArBLuCxiDvdp7b8YPAcikBEQ+k=
+github.com/apenwarr/w32 v0.0.0-20190407065021-aa00fece76ab/go.mod h1:nfFtvHn2Hgs9G1u0/J6LHQv//EksNC+7G8vXmd1VTJ8=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
@@ -214,6 +218,10 @@ github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1T
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs=
github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
+github.com/go-chi/chi/v5 v5.0.0 h1:DBPx88FjZJH3FsICfDAfIfnb7XxKIYVGG6lOPlhENAg=
+github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs=
+github.com/go-chi/httplog v0.2.1 h1:KgCtIUkYNlfIsUPzE3utxd1KDKOvCrnAKaqdo0rmrh0=
+github.com/go-chi/httplog v0.2.1/go.mod h1:JyHOFO9twSfGoTin/RoP25Lx2a9Btq10ug+sgxe0+bo=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -224,6 +232,8 @@ github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4 h1:qZNfIGkIANxGv/OqtnntR4DfOY2+BgwR60cAcu/i3SE=
+github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4/go.mod h1:kW3HQ4UdaAyrUCSSDR4xUzBKW6O2iA4uHhk7AtyYp10=
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
@@ -484,6 +494,10 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
+github.com/kermieisinthehouse/gosx-notifier v0.1.1 h1:lVXyKsa1c1RUkckp3KayloNLoI//fUwVYye3RPSPtEw=
+github.com/kermieisinthehouse/gosx-notifier v0.1.1/go.mod h1:xyWT07azFtUOcHl96qMVvKhvKzsMcS7rKTHQyv8WTho=
+github.com/kermieisinthehouse/systray v1.2.3 h1:tawLahcam/Ccs/F2n6EOQo8qJnSTD2hLzOYqTGsUsbA=
+github.com/kermieisinthehouse/systray v1.2.3/go.mod h1:axh6C/jNuSyC0QGtidZJURc9h+h41HNoMySoLVrhVR4=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -576,6 +590,8 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ=
+github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
@@ -633,8 +649,9 @@ github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
-github.com/rs/zerolog v1.18.0 h1:CbAm3kP2Tptby1i9sYy2MGRg0uxIN9cyDb59Ys7W8z8=
github.com/rs/zerolog v1.18.0/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I=
+github.com/rs/zerolog v1.18.1-0.20200514152719-663cbb4c8469 h1:DuXsEWHUTO5lsxxzKM4KUKGDIOi7nawNDs6d+AiulEA=
+github.com/rs/zerolog v1.18.1-0.20200514152719-663cbb4c8469/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
@@ -661,6 +678,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
@@ -917,6 +935,7 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190415145633-3fd5a3612ccd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -984,8 +1003,9 @@ golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k=
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE=
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
diff --git a/graphql/documents/data/config.graphql b/graphql/documents/data/config.graphql
index d801a216b..2003e4650 100644
--- a/graphql/documents/data/config.graphql
+++ b/graphql/documents/data/config.graphql
@@ -53,6 +53,7 @@ fragment ConfigInterfaceData on ConfigInterfaceResult {
wallPlayback
maximumLoopDuration
noBrowser
+ notificationsEnabled
autostartVideo
autostartVideoOnPlaySelected
continuePlaylistDefault
diff --git a/graphql/schema/types/config.graphql b/graphql/schema/types/config.graphql
index ee40fd95d..04450462e 100644
--- a/graphql/schema/types/config.graphql
+++ b/graphql/schema/types/config.graphql
@@ -239,6 +239,8 @@ input ConfigInterfaceInput {
funscriptOffset: Int
"""True if we should not auto-open a browser window on startup"""
noBrowser: Boolean
+ """True if we should send notifications to the desktop"""
+ notificationsEnabled: Boolean
}
type ConfigDisableDropdownCreate {
@@ -261,8 +263,10 @@ type ConfigInterfaceResult {
"""Maximum duration (in seconds) in which a scene video will loop in the scene player"""
maximumLoopDuration: Int
- """"True if we should not auto-open a browser window on startup"""
+ """True if we should not auto-open a browser window on startup"""
noBrowser: Boolean
+ """True if we should send desktop notifications"""
+ notificationsEnabled: Boolean
"""If true, video will autostart on load in the scene player"""
autostartVideo: Boolean
"""If true, video will autostart when loading from play random or play selected"""
diff --git a/main.go b/main.go
index 6d59d8085..393a4f3e3 100644
--- a/main.go
+++ b/main.go
@@ -3,13 +3,14 @@ package main
import (
"embed"
+ "fmt"
"os"
"os/signal"
"runtime/pprof"
"syscall"
+ "github.com/apenwarr/fixconsole"
"github.com/stashapp/stash/pkg/api"
- "github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/manager"
_ "github.com/golang-migrate/migrate/v4/database/sqlite3"
@@ -22,6 +23,14 @@ var uiBox embed.FS
//go:embed ui/login
var loginUIBox embed.FS
+func init() {
+ // On Windows, attach to parent shell
+ err := fixconsole.FixConsoleIfNeeded()
+ if err != nil {
+ fmt.Printf("FixConsoleOutput: %v\n", err)
+ }
+}
+
func main() {
manager.Initialize()
api.Start(uiBox, loginUIBox)
@@ -30,10 +39,7 @@ func main() {
defer pprof.StopCPUProfile()
blockForever()
- err := manager.GetInstance().Shutdown()
- if err != nil {
- logger.Errorf("Error when closing: %s", err)
- }
+ manager.GetInstance().Shutdown(0)
}
func blockForever() {
diff --git a/pkg/api/authentication.go b/pkg/api/authentication.go
index fd638d697..e5358affe 100644
--- a/pkg/api/authentication.go
+++ b/pkg/api/authentication.go
@@ -130,9 +130,4 @@ func securityActivateTripwireAccessedFromInternetWithoutAuth(c *config.Instance,
if err != nil {
logger.Error(err)
}
-
- err = manager.GetInstance().Shutdown()
- if err != nil {
- logger.Error(err)
- }
}
diff --git a/pkg/api/favicon.go b/pkg/api/favicon.go
new file mode 100644
index 000000000..1a760bd3b
--- /dev/null
+++ b/pkg/api/favicon.go
@@ -0,0 +1,28 @@
+package api
+
+import (
+ "embed"
+ "runtime"
+)
+
+const faviconDir = "ui/v2.5/build/"
+
+type FaviconProvider struct {
+ uiBox embed.FS
+}
+
+func (p *FaviconProvider) GetFavicon() []byte {
+ if runtime.GOOS == "windows" {
+ faviconPath := faviconDir + "favicon.ico"
+ ret, _ := p.uiBox.ReadFile(faviconPath)
+ return ret
+ }
+
+ return p.GetFaviconPng()
+}
+
+func (p *FaviconProvider) GetFaviconPng() []byte {
+ faviconPath := faviconDir + "favicon.png"
+ ret, _ := p.uiBox.ReadFile(faviconPath)
+ return ret
+}
diff --git a/pkg/api/resolver_mutation_configure.go b/pkg/api/resolver_mutation_configure.go
index d9fa32225..3c8f58788 100644
--- a/pkg/api/resolver_mutation_configure.go
+++ b/pkg/api/resolver_mutation_configure.go
@@ -294,6 +294,8 @@ func (r *mutationResolver) ConfigureInterface(ctx context.Context, input models.
setBool(config.NoBrowser, input.NoBrowser)
+ setBool(config.NotificationsEnabled, input.NotificationsEnabled)
+
if input.WallPlayback != nil {
c.Set(config.WallPlayback, *input.WallPlayback)
}
diff --git a/pkg/api/resolver_query_configuration.go b/pkg/api/resolver_query_configuration.go
index e79eccc87..7a9d71d94 100644
--- a/pkg/api/resolver_query_configuration.go
+++ b/pkg/api/resolver_query_configuration.go
@@ -111,6 +111,7 @@ func makeConfigInterfaceResult() *models.ConfigInterfaceResult {
wallShowTitle := config.GetWallShowTitle()
wallPlayback := config.GetWallPlayback()
noBrowser := config.GetNoBrowser()
+ notificationsEnabled := config.GetNotificationsEnabled()
maximumLoopDuration := config.GetMaximumLoopDuration()
autostartVideo := config.GetAutostartVideo()
autostartVideoOnPlaySelected := config.GetAutostartVideoOnPlaySelected()
@@ -133,6 +134,7 @@ func makeConfigInterfaceResult() *models.ConfigInterfaceResult {
WallPlayback: &wallPlayback,
MaximumLoopDuration: &maximumLoopDuration,
NoBrowser: &noBrowser,
+ NotificationsEnabled: ¬ificationsEnabled,
AutostartVideo: &autostartVideo,
ShowStudioAsText: &showStudioAsText,
AutostartVideoOnPlaySelected: &autostartVideoOnPlaySelected,
diff --git a/pkg/api/server.go b/pkg/api/server.go
index 625392ff4..cf5f4041a 100644
--- a/pkg/api/server.go
+++ b/pkg/api/server.go
@@ -23,8 +23,10 @@ import (
"github.com/go-chi/chi"
"github.com/go-chi/chi/middleware"
"github.com/gorilla/websocket"
- "github.com/pkg/browser"
+
+ "github.com/go-chi/httplog"
"github.com/rs/cors"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/manager"
"github.com/stashapp/stash/pkg/manager/config"
@@ -36,7 +38,6 @@ import (
var version string
var buildstamp string
var githash string
-var officialBuild string
func Start(uiBox embed.FS, loginUIBox embed.FS) {
initialiseImages()
@@ -52,7 +53,10 @@ func Start(uiBox embed.FS, loginUIBox embed.FS) {
c := config.GetInstance()
if c.GetLogAccess() {
- r.Use(middleware.Logger)
+ httpLogger := httplog.NewLogger("Stash", httplog.Options{
+ Concise: true,
+ })
+ r.Use(httplog.RequestLogger(httpLogger))
}
r.Use(SecurityHeadersMiddleware)
r.Use(middleware.DefaultCompress)
@@ -246,25 +250,16 @@ func Start(uiBox embed.FS, loginUIBox embed.FS) {
TLSConfig: tlsConfig,
}
+ printVersion()
+ go printLatestVersion(context.TODO())
+ logger.Infof("stash is listening on " + address)
+ if tlsConfig != nil {
+ displayAddress = "https://" + displayAddress + "/"
+ } else {
+ displayAddress = "http://" + displayAddress + "/"
+ }
+
go func() {
- printVersion()
- printLatestVersion(context.TODO())
- logger.Infof("stash is listening on " + address)
- if tlsConfig != nil {
- displayAddress = "https://" + displayAddress + "/"
- } else {
- displayAddress = "http://" + displayAddress + "/"
- }
-
- // This can be done before actually starting the server, as modern browsers will
- // automatically reload the page if a local port is closed at page load and then opened.
- if !c.GetNoBrowser() && manager.GetInstance().IsDesktop() {
- err = browser.OpenURL(displayAddress)
- if err != nil {
- logger.Error("Could not open browser: " + err.Error())
- }
- }
-
if tlsConfig != nil {
logger.Infof("stash is running at " + displayAddress)
logger.Error(server.ListenAndServeTLS("", ""))
@@ -272,12 +267,14 @@ func Start(uiBox embed.FS, loginUIBox embed.FS) {
logger.Infof("stash is running at " + displayAddress)
logger.Error(server.ListenAndServe())
}
+ manager.GetInstance().Shutdown(0)
}()
+ desktop.Start(manager.GetInstance(), &FaviconProvider{uiBox: uiBox})
}
func printVersion() {
versionString := githash
- if IsOfficialBuild() {
+ if config.IsOfficialBuild() {
versionString += " - Official Build"
} else {
versionString += " - Unofficial Build"
@@ -288,10 +285,6 @@ func printVersion() {
fmt.Printf("stash version: %s - %s\n", versionString, buildstamp)
}
-func IsOfficialBuild() bool {
- return officialBuild == "true"
-}
-
func GetVersion() (string, string, string) {
return version, githash, buildstamp
}
diff --git a/pkg/desktop/desktop.go b/pkg/desktop/desktop.go
new file mode 100644
index 000000000..cad8ade3c
--- /dev/null
+++ b/pkg/desktop/desktop.go
@@ -0,0 +1,170 @@
+package desktop
+
+import (
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path"
+ "path/filepath"
+ "runtime"
+ "strconv"
+ "strings"
+
+ "github.com/pkg/browser"
+ "github.com/stashapp/stash/pkg/logger"
+ "github.com/stashapp/stash/pkg/manager/config"
+ "github.com/stashapp/stash/pkg/utils"
+ "golang.org/x/term"
+)
+
+type ShutdownHandler interface {
+ Shutdown(code int)
+}
+
+type FaviconProvider interface {
+ GetFavicon() []byte
+ GetFaviconPng() []byte
+}
+
+func Start(shutdownHandler ShutdownHandler, faviconProvider FaviconProvider) {
+ if IsDesktop() {
+ c := config.GetInstance()
+ if !c.GetNoBrowser() {
+ openURLInBrowser("")
+ }
+ writeStashIcon(faviconProvider)
+ startSystray(shutdownHandler, faviconProvider)
+ }
+}
+
+// openURLInBrowser opens a browser to the Stash UI. Path can be an empty string for main page.
+func openURLInBrowser(path string) {
+ // This can be done before actually starting the server, as modern browsers will
+ // automatically reload the page if a local port is closed at page load and then opened.
+ serverAddress := getServerURL(path)
+
+ err := browser.OpenURL(serverAddress)
+ if err != nil {
+ logger.Error("Could not open browser: " + err.Error())
+ }
+}
+
+func SendNotification(title string, text string) {
+ if IsDesktop() {
+ c := config.GetInstance()
+ if c.GetNotificationsEnabled() {
+ sendNotification(title, text)
+ }
+ }
+}
+
+func IsDesktop() bool {
+ // Check if running under root
+ if os.Getuid() == 0 {
+ return false
+ }
+ // Check if stdin is a terminal
+ if term.IsTerminal(int(os.Stdin.Fd())) {
+ return false
+ }
+ if isService() {
+ return false
+ }
+ if IsServerDockerized() {
+ return false
+ }
+
+ return true
+}
+
+func IsServerDockerized() bool {
+ return isServerDockerized()
+}
+
+// Set a command to execute in the background, instead of spawning a shell window
+func HideExecShell(cmd *exec.Cmd) {
+ hideExecShell(cmd)
+}
+
+// writeStashIcon writes the current stash logo to config/icon.png
+func writeStashIcon(faviconProvider FaviconProvider) {
+ c := config.GetInstance()
+ if !c.IsNewSystem() {
+ iconPath := path.Join(c.GetConfigPath(), "icon.png")
+ err := ioutil.WriteFile(iconPath, faviconProvider.GetFaviconPng(), 0644)
+ if err != nil {
+ logger.Errorf("Couldn't write icon file: %s", err.Error())
+ }
+ }
+}
+
+// IsAllowedAutoUpdate tries to determine if the stash binary was installed from a
+// package manager or if touching the executable is otherwise a bad idea
+func IsAllowedAutoUpdate() bool {
+
+ // Only try to update if downloaded from official sources
+ if !config.IsOfficialBuild() {
+ return false
+ }
+
+ // Avoid updating if installed from package manager
+ if runtime.GOOS == "linux" {
+ executablePath, err := os.Executable()
+ if err != nil {
+ logger.Errorf("Cannot get executable path: %s", err)
+ return false
+ }
+ executablePath, err = filepath.EvalSymlinks(executablePath)
+ if err != nil {
+ logger.Errorf("Cannot get executable path: %s", err)
+ return false
+ }
+ if utils.IsPathInDir("/usr", executablePath) || utils.IsPathInDir("/opt", executablePath) {
+ return false
+ }
+
+ if isServerDockerized() {
+ return false
+ }
+ }
+
+ return true
+}
+
+func getIconPath() string {
+ return path.Join(config.GetInstance().GetConfigPath(), "icon.png")
+}
+
+func RevealInFileManager(path string) {
+ exists, err := utils.FileExists(path)
+ if err != nil {
+ logger.Errorf("Error checking file: %s", err)
+ return
+ }
+ if exists && IsDesktop() {
+ revealInFileManager(path)
+ }
+}
+
+func getServerURL(path string) string {
+ c := config.GetInstance()
+ serverAddress := c.GetHost()
+ if serverAddress == "0.0.0.0" {
+ serverAddress = "localhost"
+ }
+ serverAddress = serverAddress + ":" + strconv.Itoa(c.GetPort())
+
+ proto := ""
+ if c.HasTLSConfig() {
+ proto = "https://"
+ } else {
+ proto = "http://"
+ }
+ serverAddress = proto + serverAddress + "/"
+
+ if path != "" {
+ serverAddress += strings.TrimPrefix(path, "/")
+ }
+
+ return serverAddress
+}
diff --git a/pkg/desktop/desktop_platform_darwin.go b/pkg/desktop/desktop_platform_darwin.go
new file mode 100644
index 000000000..53c9776f2
--- /dev/null
+++ b/pkg/desktop/desktop_platform_darwin.go
@@ -0,0 +1,40 @@
+//go:build darwin
+// +build darwin
+
+package desktop
+
+import (
+ "os/exec"
+
+ "github.com/kermieisinthehouse/gosx-notifier"
+ "github.com/stashapp/stash/pkg/logger"
+)
+
+func isService() bool {
+ // MacOS /does/ support services, using launchd, but there is no straightforward way to check if it was used.
+ return false
+}
+
+func isServerDockerized() bool {
+ return false
+}
+
+func hideExecShell(cmd *exec.Cmd) {
+
+}
+
+func sendNotification(notificationTitle string, notificationText string) {
+ notification := gosxnotifier.NewNotification(notificationText)
+ notification.Title = notificationTitle
+ notification.AppIcon = getIconPath()
+ notification.Link = getServerURL("")
+ err := notification.Push()
+
+ if err != nil {
+ logger.Errorf("Could not send MacOS notification: %s", err.Error())
+ }
+}
+
+func revealInFileManager(path string) {
+ exec.Command(`open`, `-R`, path)
+}
diff --git a/pkg/desktop/desktop_platform_linux.go b/pkg/desktop/desktop_platform_linux.go
new file mode 100644
index 000000000..b1893c0e7
--- /dev/null
+++ b/pkg/desktop/desktop_platform_linux.go
@@ -0,0 +1,43 @@
+//go:build linux
+// +build linux
+
+package desktop
+
+import (
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "strings"
+
+ "github.com/stashapp/stash/pkg/logger"
+)
+
+// isService checks if started by init, e.g. stash is a *nix systemd service
+func isService() bool {
+ return os.Getppid() == 1
+}
+
+func isServerDockerized() bool {
+ _, dockerEnvErr := os.Stat("/.dockerenv")
+ cgroups, _ := ioutil.ReadFile("/proc/self/cgroup")
+ if !os.IsNotExist(dockerEnvErr) || strings.Contains(string(cgroups), "docker") {
+ return true
+ }
+
+ return false
+}
+
+func hideExecShell(cmd *exec.Cmd) {
+
+}
+
+func sendNotification(notificationTitle string, notificationText string) {
+ err := exec.Command("notify-send", "-i", getIconPath(), notificationTitle, notificationText, "-a", "Stash").Run()
+ if err != nil {
+ logger.Errorf("Error sending notification on Linux: %s", err.Error())
+ }
+}
+
+func revealInFileManager(path string) {
+
+}
diff --git a/pkg/desktop/desktop_platform_windows.go b/pkg/desktop/desktop_platform_windows.go
new file mode 100644
index 000000000..7a887d508
--- /dev/null
+++ b/pkg/desktop/desktop_platform_windows.go
@@ -0,0 +1,56 @@
+//go:build windows
+// +build windows
+
+package desktop
+
+import (
+ "os/exec"
+ "syscall"
+
+ "golang.org/x/sys/windows"
+
+ "github.com/go-toast/toast"
+ "github.com/stashapp/stash/pkg/logger"
+ "golang.org/x/sys/windows/svc"
+)
+
+func isService() bool {
+ result, err := svc.IsWindowsService()
+ if err != nil {
+ logger.Errorf("Encountered error checking if running as Windows service: %s", err.Error())
+ return false
+ }
+ return result
+}
+
+func isServerDockerized() bool {
+ return false
+}
+
+// On Windows, calling exec.Cmd.Start() will create a cmd window, even if we live in the taskbar.
+// We don't want every ffmpeg / plugin to pop up a window.
+func hideExecShell(cmd *exec.Cmd) {
+ cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: windows.DETACHED_PROCESS}
+}
+
+func sendNotification(notificationTitle string, notificationText string) {
+ notification := toast.Notification{
+ AppID: "Stash",
+ Title: notificationTitle,
+ Message: notificationText,
+ Icon: getIconPath(),
+ Actions: []toast.Action{{
+ Type: "protocol",
+ Label: "Open Stash",
+ Arguments: getServerURL(""),
+ }},
+ }
+ err := notification.Push()
+ if err != nil {
+ logger.Errorf("Error creating Windows notification: %s", err.Error())
+ }
+}
+
+func revealInFileManager(path string) {
+ exec.Command(`explorer`, `\select`, path)
+}
diff --git a/pkg/desktop/icon_windows.syso b/pkg/desktop/icon_windows.syso
new file mode 100644
index 000000000..ac347dda4
Binary files /dev/null and b/pkg/desktop/icon_windows.syso differ
diff --git a/pkg/desktop/systray_linux.go b/pkg/desktop/systray_linux.go
new file mode 100644
index 000000000..193126173
--- /dev/null
+++ b/pkg/desktop/systray_linux.go
@@ -0,0 +1,10 @@
+//go:build linux
+// +build linux
+
+package desktop
+
+func startSystray(shutdownHandler ShutdownHandler, favicon FaviconProvider) {
+ // The systray is not available on linux because the required libraries (libappindicator3 and gtk+3.0)
+ // are not able to be statically compiled. Technically, the systray works perfectly fine when dynamically
+ // linked, but we cannot distribute it for compatibility reasons.
+}
diff --git a/pkg/desktop/systray_nonlinux.go b/pkg/desktop/systray_nonlinux.go
new file mode 100644
index 000000000..34b419aaa
--- /dev/null
+++ b/pkg/desktop/systray_nonlinux.go
@@ -0,0 +1,94 @@
+//go:build windows || darwin || !linux
+// +build windows darwin !linux
+
+package desktop
+
+import (
+ "strings"
+
+ "github.com/kermieisinthehouse/systray"
+ "github.com/stashapp/stash/pkg/logger"
+ "github.com/stashapp/stash/pkg/manager/config"
+)
+
+// MUST be run on the main goroutine or will have no effect on macOS
+func startSystray(shutdownHandler ShutdownHandler, faviconProvider FaviconProvider) {
+
+ // Shows a small notification to inform that Stash will no longer show a terminal window,
+ // and instead will be available in the tray. Will only show the first time a pre-desktop integration
+ // system is started from a non-terminal method, e.g. double-clicking an icon.
+ c := config.GetInstance()
+ if c.GetShowOneTimeMovedNotification() {
+ SendNotification("Stash has moved!", "Stash now runs in your tray, instead of a terminal window.")
+ c.Set(config.ShowOneTimeMovedNotification, false)
+ if err := c.Write(); err != nil {
+ logger.Errorf("Error while writing configuration file: %s", err.Error())
+ }
+ }
+
+ // Listen for changes to rerender systray
+ // TODO: This is disabled for now. The systray package does not clean up all of its resources when Quit() is called.
+ // TODO: This results in this only working once, or changes being ignored. Our fork of systray fixes a crash(!) on macOS here.
+ // go func() {
+ // for {
+ // <-config.GetInstance().GetConfigUpdatesChannel()
+ // systray.Quit()
+ // }
+ // }()
+
+ for {
+ systray.Run(func() {
+ systrayInitialize(shutdownHandler, faviconProvider)
+ }, nil)
+ }
+}
+
+func systrayInitialize(shutdownHandler ShutdownHandler, faviconProvider FaviconProvider) {
+ favicon := faviconProvider.GetFavicon()
+ systray.SetTemplateIcon(favicon, favicon)
+ systray.SetTooltip("🟢 Stash is Running.")
+
+ openStashButton := systray.AddMenuItem("Open Stash", "Open a browser window to Stash")
+ var menuItems []string
+ systray.AddSeparator()
+ c := config.GetInstance()
+ if !c.IsNewSystem() {
+ menuItems = c.GetMenuItems()
+ for _, item := range menuItems {
+ titleCaseItem := strings.Title(strings.ToLower(item))
+ curr := systray.AddMenuItem(titleCaseItem, "Open to "+titleCaseItem)
+ go func(item string) {
+ for {
+ <-curr.ClickedCh
+ if item == "markers" {
+ item = "scenes/markers"
+ }
+ if c.GetNoBrowser() {
+ openURLInBrowser(item)
+ }
+ }
+ }(item)
+ }
+ systray.AddSeparator()
+ // TODO - Some ideas for future expansions
+ // systray.AddMenuItem("Start a Scan", "Scan all libraries with default settings")
+ // systray.AddMenuItem("Start Auto Tagging", "Auto Tag all libraries")
+ // systray.AddMenuItem("Check for updates", "Check for a new Stash release")
+ // systray.AddSeparator()
+ }
+
+ quitStashButton := systray.AddMenuItem("Quit Stash Server", "Quits the Stash server")
+
+ go func() {
+ for {
+ select {
+ case <-openStashButton.ClickedCh:
+ if !c.GetNoBrowser() {
+ openURLInBrowser("")
+ }
+ case <-quitStashButton.ClickedCh:
+ shutdownHandler.Shutdown(0)
+ }
+ }
+ }()
+}
diff --git a/pkg/ffmpeg/downloader.go b/pkg/ffmpeg/downloader.go
index a5f655ace..bea7105c0 100644
--- a/pkg/ffmpeg/downloader.go
+++ b/pkg/ffmpeg/downloader.go
@@ -13,6 +13,7 @@ import (
"runtime"
"strings"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/utils"
)
@@ -202,7 +203,9 @@ func pathBinaryHasCorrectFlags() bool {
if err != nil {
return false
}
- bytes, _ := exec.Command(ffmpegPath).CombinedOutput()
+ cmd := exec.Command(ffmpegPath)
+ desktop.HideExecShell(cmd)
+ bytes, _ := cmd.CombinedOutput()
output := string(bytes)
hasOpus := strings.Contains(output, "--enable-libopus")
hasVpx := strings.Contains(output, "--enable-libvpx")
diff --git a/pkg/ffmpeg/encoder.go b/pkg/ffmpeg/encoder.go
index 2334808ed..f66583912 100644
--- a/pkg/ffmpeg/encoder.go
+++ b/pkg/ffmpeg/encoder.go
@@ -9,6 +9,7 @@ import (
"sync"
"time"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
)
@@ -90,6 +91,7 @@ func (e *Encoder) runTranscode(probeResult VideoFile, args []string) (string, er
logger.Error("FFMPEG stdout not available: " + err.Error())
}
+ desktop.HideExecShell(cmd)
if err = cmd.Start(); err != nil {
return "", err
}
@@ -141,6 +143,7 @@ func (e *Encoder) run(sourcePath string, args []string, stdin io.Reader) (string
cmd.Stderr = &stderr
cmd.Stdin = stdin
+ desktop.HideExecShell(cmd)
if err := cmd.Start(); err != nil {
return "", err
}
diff --git a/pkg/ffmpeg/ffprobe.go b/pkg/ffmpeg/ffprobe.go
index a24d2b39d..acb4c2165 100644
--- a/pkg/ffmpeg/ffprobe.go
+++ b/pkg/ffmpeg/ffprobe.go
@@ -11,6 +11,7 @@ import (
"strings"
"time"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
)
@@ -229,7 +230,9 @@ type FFProbe string
// Execute exec command and bind result to struct.
func (f *FFProbe) NewVideoFile(videoPath string, stripExt bool) (*VideoFile, error) {
args := []string{"-v", "quiet", "-print_format", "json", "-show_format", "-show_streams", "-show_error", videoPath}
- out, err := exec.Command(string(*f), args...).Output()
+ cmd := exec.Command(string(*f), args...)
+ desktop.HideExecShell(cmd)
+ out, err := cmd.Output()
if err != nil {
return nil, fmt.Errorf("FFProbe encountered an error with <%s>.\nError JSON:\n%s\nError: %s", videoPath, string(out), err.Error())
diff --git a/pkg/ffmpeg/stream.go b/pkg/ffmpeg/stream.go
index 1f4d4960e..41832fc89 100644
--- a/pkg/ffmpeg/stream.go
+++ b/pkg/ffmpeg/stream.go
@@ -8,6 +8,7 @@ import (
"strconv"
"strings"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/models"
)
@@ -220,6 +221,7 @@ func (e *Encoder) stream(probeResult VideoFile, options TranscodeStreamOptions)
return nil, err
}
+ desktop.HideExecShell(cmd)
if err = cmd.Start(); err != nil {
return nil, err
}
diff --git a/pkg/image/vips.go b/pkg/image/vips.go
index 061afa5f8..951406848 100644
--- a/pkg/image/vips.go
+++ b/pkg/image/vips.go
@@ -6,6 +6,7 @@ import (
"os/exec"
"strings"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
)
@@ -32,6 +33,7 @@ func (e *vipsEncoder) run(args []string, stdin *bytes.Buffer) (string, error) {
cmd.Stderr = &stderr
cmd.Stdin = stdin
+ desktop.HideExecShell(cmd)
if err := cmd.Start(); err != nil {
return "", err
}
diff --git a/pkg/job/manager.go b/pkg/job/manager.go
index ed4dda133..95837ca2a 100644
--- a/pkg/job/manager.go
+++ b/pkg/job/manager.go
@@ -2,9 +2,13 @@ package job
import (
"context"
+ "fmt"
+ "strconv"
+ "strings"
"sync"
"time"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/utils"
)
@@ -204,9 +208,14 @@ func (m *Manager) onJobFinish(job *Job) {
} else {
job.Status = StatusFinished
}
-
t := time.Now()
job.EndTime = &t
+ cleanDesc := strings.TrimRight(job.Description, ".")
+ timeElapsed := job.EndTime.Sub(*job.StartTime)
+ hours := fmt.Sprintf("%+02s", strconv.FormatFloat(timeElapsed.Hours(), 'f', 0, 64))
+ minutes := fmt.Sprintf("%+02s", strconv.FormatFloat(timeElapsed.Minutes(), 'f', 0, 64))
+ seconds := fmt.Sprintf("%+02s", strconv.FormatFloat(timeElapsed.Seconds(), 'f', 0, 64))
+ desktop.SendNotification("Task Finished", "Task \""+cleanDesc+"\" is finished in "+hours+":"+minutes+":"+seconds+".")
}
func (m *Manager) removeJob(job *Job) {
diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go
index 0b4a4225b..1a4c0d180 100644
--- a/pkg/logger/logger.go
+++ b/pkg/logger/logger.go
@@ -32,6 +32,7 @@ func Init(logFile string, logOut bool, logLevel string) {
customFormatter.TimestampFormat = "2006-01-02 15:04:05"
customFormatter.ForceColors = true
customFormatter.FullTimestamp = true
+ logger.SetOutput(os.Stderr)
logger.SetFormatter(customFormatter)
// #1837 - trigger the console to use color-mode since it won't be
diff --git a/pkg/manager/config/config.go b/pkg/manager/config/config.go
index c95628930..6e02dad4a 100644
--- a/pkg/manager/config/config.go
+++ b/pkg/manager/config/config.go
@@ -21,6 +21,8 @@ import (
"github.com/stashapp/stash/pkg/utils"
)
+var officialBuild string
+
const (
Stash = "stash"
Cache = "cache"
@@ -178,8 +180,12 @@ const (
deleteGeneratedDefaultDefault = true
// Desktop Integration Options
- NoBrowser = "noBrowser"
- NoBrowserDefault = false
+ NoBrowser = "noBrowser"
+ NoBrowserDefault = false
+ NotificationsEnabled = "notifications_enabled"
+ NotificationsEnabledDefault = true
+ ShowOneTimeMovedNotification = "show_one_time_moved_notification"
+ ShowOneTimeMovedNotificationDefault = false
// File upload options
MaxUploadSize = "max_upload_size"
@@ -211,6 +217,10 @@ func (s *StashBoxError) Error() string {
return "Stash-box: " + s.msg
}
+func IsOfficialBuild() bool {
+ return officialBuild == "true"
+}
+
type Instance struct {
// main instance - backed by config file
main *viper.Viper
@@ -221,8 +231,9 @@ type Instance struct {
cpuProfilePath string
isNewSystem bool
- certFile string
- keyFile string
+ // configUpdates chan int
+ certFile string
+ keyFile string
sync.RWMutex
// deadlock.RWMutex // for deadlock testing/issues
}
@@ -270,7 +281,25 @@ func (i *Instance) GetNoBrowser() bool {
return i.getBool(NoBrowser)
}
+func (i *Instance) GetNotificationsEnabled() bool {
+ return i.getBool(NotificationsEnabled)
+}
+
+// func (i *Instance) GetConfigUpdatesChannel() chan int {
+// return i.configUpdates
+// }
+
+// GetShowOneTimeMovedNotification shows whether a small notification to inform the user that Stash
+// will no longer show a terminal window, and instead will be available in the tray, should be shown.
+// It is true when an existing system is started after upgrading, and set to false forever after it is shown.
+func (i *Instance) GetShowOneTimeMovedNotification() bool {
+ return i.getBool(ShowOneTimeMovedNotification)
+}
+
func (i *Instance) Set(key string, value interface{}) {
+ // if key == MenuItems {
+ // i.configUpdates <- 0
+ // }
i.Lock()
defer i.Unlock()
i.main.Set(key, value)
@@ -1184,6 +1213,8 @@ func (i *Instance) setDefaultValues(write bool) error {
i.main.SetDefault(Generated, i.main.GetString(Metadata))
i.main.SetDefault(NoBrowser, NoBrowserDefault)
+ i.main.SetDefault(NotificationsEnabled, NotificationsEnabledDefault)
+ i.main.SetDefault(ShowOneTimeMovedNotification, ShowOneTimeMovedNotificationDefault)
// Set default scrapers and plugins paths
i.main.SetDefault(ScrapersPath, defaultScrapersPath)
@@ -1210,6 +1241,12 @@ func (i *Instance) setExistingSystemDefaults() error {
i.main.Set(NoBrowser, true)
}
+ // Existing systems as of the introduction of the taskbar should inform users.
+ if !i.main.InConfig(ShowOneTimeMovedNotification) {
+ configDirtied = true
+ i.main.Set(ShowOneTimeMovedNotification, true)
+ }
+
if configDirtied {
return i.main.WriteConfig()
}
@@ -1247,4 +1284,5 @@ func (i *Instance) setInitialConfig(write bool) error {
func (i *Instance) FinalizeSetup() {
i.isNewSystem = false
+ // i.configUpdates <- 0
}
diff --git a/pkg/manager/config/init.go b/pkg/manager/config/init.go
index 0b2ddb6b8..02322ec62 100644
--- a/pkg/manager/config/init.go
+++ b/pkg/manager/config/init.go
@@ -45,6 +45,7 @@ func Initialize() (*Instance, error) {
_ = GetInstance()
instance.overrides = overrides
instance.cpuProfilePath = flags.cpuProfilePath
+ // instance.configUpdates = make(chan int)
if err = initConfig(instance, flags); err != nil {
return
diff --git a/pkg/manager/generator.go b/pkg/manager/generator.go
index c7aed9716..68a186fa0 100644
--- a/pkg/manager/generator.go
+++ b/pkg/manager/generator.go
@@ -9,6 +9,7 @@ import (
"strconv"
"strings"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/ffmpeg"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/utils"
@@ -72,6 +73,7 @@ func (g *GeneratorInfo) calculateFrameRate(videoStream *ffmpeg.FFProbeStream) er
}
command := exec.Command(string(instance.FFMPEG), args...)
+ desktop.HideExecShell(command)
var stdErrBuffer bytes.Buffer
command.Stderr = &stdErrBuffer // Frames go to stderr rather than stdout
if err := command.Run(); err == nil {
diff --git a/pkg/manager/manager.go b/pkg/manager/manager.go
index f49711808..b313909b0 100644
--- a/pkg/manager/manager.go
+++ b/pkg/manager/manager.go
@@ -4,12 +4,9 @@ import (
"context"
"errors"
"fmt"
- "io/ioutil"
"os"
"path/filepath"
- "runtime"
"runtime/pprof"
- "strings"
"sync"
"time"
@@ -407,34 +404,6 @@ func (s *singleton) Migrate(ctx context.Context, input models.MigrateInput) erro
return nil
}
-func (s *singleton) IsDesktop() bool {
- // check if running under root
- if os.Getuid() == 0 {
- return false
- }
- // check if started by init, e.g. stash is a *nix systemd service / MacOS launchd service
- if os.Getppid() == 1 {
- return false
- }
- if IsServerDockerized() {
- return false
- }
-
- return true
-}
-
-func IsServerDockerized() bool {
- if runtime.GOOS == "linux" {
- _, dockerEnvErr := os.Stat("/.dockerenv")
- cgroups, _ := ioutil.ReadFile("/proc/self/cgroup")
- if os.IsExist(dockerEnvErr) || strings.Contains(string(cgroups), "docker") {
- return true
- }
- }
-
- return false
-}
-
func (s *singleton) GetSystemStatus() *models.SystemStatus {
status := models.SystemStatusEnumOk
dbSchema := int(database.Version())
@@ -458,8 +427,15 @@ func (s *singleton) GetSystemStatus() *models.SystemStatus {
}
// Shutdown gracefully stops the manager
-func (s *singleton) Shutdown() error {
+func (s *singleton) Shutdown(code int) {
// TODO: Each part of the manager needs to gracefully stop at some point
// for now, we just close the database.
- return database.Close()
+ err := database.Close()
+ if err != nil {
+ logger.Errorf("Error closing database: %s", err)
+ if code == 0 {
+ os.Exit(1)
+ }
+ }
+ os.Exit(code)
}
diff --git a/pkg/plugin/raw.go b/pkg/plugin/raw.go
index 1fcc6ad87..6456cab4c 100644
--- a/pkg/plugin/raw.go
+++ b/pkg/plugin/raw.go
@@ -8,6 +8,7 @@ import (
"os/exec"
"sync"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/plugin/common"
)
@@ -87,6 +88,7 @@ func (t *rawPluginTask) Start() error {
t.waitGroup.Add(1)
t.done = make(chan bool, 1)
+ desktop.HideExecShell(cmd)
if err = cmd.Start(); err != nil {
return fmt.Errorf("error running plugin: %v", err)
}
diff --git a/pkg/scraper/script.go b/pkg/scraper/script.go
index cb6900ace..8212c3deb 100644
--- a/pkg/scraper/script.go
+++ b/pkg/scraper/script.go
@@ -10,6 +10,7 @@ import (
"path/filepath"
"strings"
+ "github.com/stashapp/stash/pkg/desktop"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/models"
)
@@ -66,6 +67,7 @@ func (s *scriptScraper) runScraperScript(inString string, out interface{}) error
logger.Error("Scraper stdout not available: " + err.Error())
}
+ desktop.HideExecShell(cmd)
if err = cmd.Start(); err != nil {
logger.Error("Error running scraper script: " + err.Error())
return errors.New("error running scraper script")
diff --git a/scripts/cross-compile.sh b/scripts/cross-compile.sh
index 2012d9b6b..3640551ae 100755
--- a/scripts/cross-compile.sh
+++ b/scripts/cross-compile.sh
@@ -1,7 +1,6 @@
#!/bin/bash
-# "stashapp/compiler:develop" "stashapp/compiler:4"
-COMPILER_CONTAINER="stashapp/compiler:5"
+COMPILER_CONTAINER="stashapp/compiler:6"
BUILD_DATE=`go run -mod=vendor scripts/getDate.go`
GITHASH=`git rev-parse --short HEAD`
@@ -10,8 +9,8 @@ STASH_VERSION=`git describe --tags --exclude latest_develop`
SETENV="BUILD_DATE=\"$BUILD_DATE\" GITHASH=$GITHASH STASH_VERSION=\"$STASH_VERSION\""
SETUP="export CGO_ENABLED=1;"
WINDOWS="echo '=== Building Windows binary ==='; $SETENV make cross-compile-windows;"
-DARWIN="echo '=== Building OSX binary ==='; $SETENV make cross-compile-osx-intel;"
-DARWIN_ARM64="echo '=== Building OSX (arm64) binary ==='; $SETENV make cross-compile-osx-applesilicon;"
+DARWIN="echo '=== Building OSX binary ==='; $SETENV make cross-compile-macos-intel;"
+DARWIN_ARM64="echo '=== Building OSX (arm64) binary ==='; $SETENV make cross-compile-macos-applesilicon;"
LINUX_AMD64="echo '=== Building Linux (amd64) binary ==='; $SETENV make cross-compile-linux;"
LINUX_ARM64v8="echo '=== Building Linux (armv8/arm64) binary ==='; $SETENV make cross-compile-linux-arm64v8;"
LINUX_ARM32v7="echo '=== Building Linux (armv7/armhf) binary ==='; $SETENV make cross-compile-linux-arm32v7;"
diff --git a/scripts/generate_icons.sh b/scripts/generate_icons.sh
new file mode 100755
index 000000000..0fbd12100
--- /dev/null
+++ b/scripts/generate_icons.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# Update the Stash icon throughout the project from a master stash-logo.png
+
+# Imagemagick, and go packages icns and rsrc are required.
+# Copy a high-resolution stash-logo.png to this stash/scripts folder
+# and run this script from said folder, commit the result.
+
+if [ ! -f "stash-logo.png" ]; then
+ echo "stash-logo.png not found."
+ exit
+fi
+
+if [ -z "$GOPATH" ]; then
+ echo "GOPATH environment variable not set"
+ exit
+fi
+
+if [ ! -e "$GOPATH/bin/rsrc" ]; then
+ echo "Missing Dependency:"
+ echo "Please run the following /outside/ of the stash folder:"
+ echo "go install github.com/akavel/rsrc@latest"
+ exit
+fi
+
+if [ ! -e "$GOPATH/bin/icnsify" ]; then
+ echo "Missing Dependency:"
+ echo "Please run the following /outside/ of the stash folder:"
+ echo "go install github.com/jackmordaunt/icns/v2/cmd/icnsify@latest"
+ exit
+fi
+
+# Favicon, used for web favicon, windows systray icon, windows executable icon
+convert stash-logo.png -define icon:auto-resize=256,64,48,32,16 favicon.ico
+cp favicon.ico ../ui/v2.5/public/
+
+# Build .syso for Windows icon, consumed by linker while building stash-win.exe
+"$GOPATH"/bin/rsrc -ico favicon.ico -o icon_windows.syso
+mv icon_windows.syso ../pkg/desktop/
+
+# *nixes systray icon
+convert stash-logo.png -resize x256 favicon.png
+cp favicon.png ../ui/v2.5/public/
+
+# MacOS, used for bundle icon
+# https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html
+"$GOPATH"/bin/icnsify -i stash-logo.png -o icon.icns
+mv icon.icns macos-bundle/Contents/Resources/icon.icns
+
+# cleanup
+rm favicon.png favicon.ico
\ No newline at end of file
diff --git a/scripts/macos-bundle/Contents/Info.plist b/scripts/macos-bundle/Contents/Info.plist
new file mode 100644
index 000000000..9a02e9cc2
--- /dev/null
+++ b/scripts/macos-bundle/Contents/Info.plist
@@ -0,0 +1,18 @@
+
+
+
+
+ CFBundleExecutable
+ stash
+ CFBundleIconFile
+ icon.icns
+ CFBundleTypeIconFile
+ icon.icns
+ CFBundleIdentifier
+ org.stashapp.stash
+ NSHighResolutionCapable
+ True
+ LSUIElement
+ 1
+
+
\ No newline at end of file
diff --git a/scripts/macos-bundle/Contents/Resources/icon.icns b/scripts/macos-bundle/Contents/Resources/icon.icns
new file mode 100644
index 000000000..d60ac9a2b
Binary files /dev/null and b/scripts/macos-bundle/Contents/Resources/icon.icns differ
diff --git a/scripts/stash-logo.png b/scripts/stash-logo.png
new file mode 100644
index 000000000..d64ef699f
Binary files /dev/null and b/scripts/stash-logo.png differ
diff --git a/ui/v2.5/public/favicon.ico b/ui/v2.5/public/favicon.ico
index 6ff0465ca..028c3ba3b 100644
Binary files a/ui/v2.5/public/favicon.ico and b/ui/v2.5/public/favicon.ico differ
diff --git a/ui/v2.5/public/favicon.png b/ui/v2.5/public/favicon.png
new file mode 100644
index 000000000..ea145b181
Binary files /dev/null and b/ui/v2.5/public/favicon.png differ
diff --git a/ui/v2.5/public/manifest.json b/ui/v2.5/public/manifest.json
index f9321c89e..e3d9e7c3b 100755
--- a/ui/v2.5/public/manifest.json
+++ b/ui/v2.5/public/manifest.json
@@ -8,7 +8,8 @@
"type": "image/x-icon"
}
],
- "start_url": ".",
+ "start_url": "/",
+ "scope": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
diff --git a/ui/v2.5/src/components/Changelog/versions/v0130.md b/ui/v2.5/src/components/Changelog/versions/v0130.md
index 9a9c42a56..e2a369c95 100644
--- a/ui/v2.5/src/components/Changelog/versions/v0130.md
+++ b/ui/v2.5/src/components/Changelog/versions/v0130.md
@@ -1,4 +1,6 @@
### ✨ New Features
+* Open stash in system tray on Windows/MacOS when not running via terminal. ([#2073](https://github.com/stashapp/stash/pull/2073))
+* Optionally send desktop notifications when a task completes. ([#2073](https://github.com/stashapp/stash/pull/2073))
* Added button to image card to view image in Lightbox. ([#2275](https://github.com/stashapp/stash/pull/2275))
* Added support for submitting performer/scene drafts to stash-box. ([#2234](https://github.com/stashapp/stash/pull/2234))
diff --git a/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx b/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
index 6df6059e7..5d8b23cde 100644
--- a/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
+++ b/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
@@ -93,6 +93,13 @@ export const SettingsInterfacePanel: React.FC = () => {
checked={iface.noBrowser ?? undefined}
onChange={(v) => saveInterface({ noBrowser: v })}
/>
+ saveInterface({ notificationsEnabled: v })}
+ />
diff --git a/ui/v2.5/src/locales/en-GB.json b/ui/v2.5/src/locales/en-GB.json
index 0f0486425..ad327313d 100644
--- a/ui/v2.5/src/locales/en-GB.json
+++ b/ui/v2.5/src/locales/en-GB.json
@@ -414,7 +414,9 @@
"desktop_integration": {
"desktop_integration": "Desktop Integration",
"skip_opening_browser": "Skip Opening Browser",
- "skip_opening_browser_on_startup": "Skip auto-opening browser during startup"
+ "skip_opening_browser_on_startup": "Skip auto-opening browser during startup",
+ "notifications_enabled": "Enable Notifications",
+ "send_desktop_notifications_for_events": "Send desktop notifications for events"
},
"editing": {
"disable_dropdown_create": {
diff --git a/vendor/github.com/apenwarr/fixconsole/.gitignore b/vendor/github.com/apenwarr/fixconsole/.gitignore
new file mode 100644
index 000000000..b25c15b81
--- /dev/null
+++ b/vendor/github.com/apenwarr/fixconsole/.gitignore
@@ -0,0 +1 @@
+*~
diff --git a/vendor/github.com/apenwarr/fixconsole/LICENSE b/vendor/github.com/apenwarr/fixconsole/LICENSE
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/vendor/github.com/apenwarr/fixconsole/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/vendor/github.com/apenwarr/fixconsole/fixconsole_default.go b/vendor/github.com/apenwarr/fixconsole/fixconsole_default.go
new file mode 100644
index 000000000..882bd1be8
--- /dev/null
+++ b/vendor/github.com/apenwarr/fixconsole/fixconsole_default.go
@@ -0,0 +1,14 @@
+// +build !windows
+
+package fixconsole
+
+// On non-windows platforms, we don't need to do anything. The console
+// starts off attached already, if it exists.
+
+func AttachConsole() error {
+ return nil
+}
+
+func FixConsoleIfNeeded() error {
+ return nil
+}
diff --git a/vendor/github.com/apenwarr/fixconsole/fixconsole_windows.go b/vendor/github.com/apenwarr/fixconsole/fixconsole_windows.go
new file mode 100644
index 000000000..9abde1a1b
--- /dev/null
+++ b/vendor/github.com/apenwarr/fixconsole/fixconsole_windows.go
@@ -0,0 +1,132 @@
+package fixconsole
+
+import (
+ "fmt"
+ "github.com/apenwarr/w32"
+ "golang.org/x/sys/windows"
+ "os"
+ "syscall"
+)
+
+func AttachConsole() error {
+ const ATTACH_PARENT_PROCESS = ^uintptr(0)
+ proc := syscall.MustLoadDLL("kernel32.dll").MustFindProc("AttachConsole")
+ r1, _, err := proc.Call(ATTACH_PARENT_PROCESS)
+ if r1 == 0 {
+ errno, ok := err.(syscall.Errno)
+ if ok && errno == w32.ERROR_INVALID_HANDLE {
+ // console handle doesn't exist; not a real
+ // error, but the console handle will be
+ // invalid.
+ return nil
+ }
+ return err
+ } else {
+ return nil
+ }
+}
+
+var oldStdin, oldStdout, oldStderr *os.File
+
+// Windows console output is a mess.
+//
+// If you compile as "-H windows", then if you launch your program without
+// a console, Windows forcibly creates one to use as your stdin/stdout, which
+// is silly for a GUI app, so we can't do that.
+//
+// If you compile as "-H windowsgui", then it doesn't create a console for
+// your app... but also doesn't provide a working stdin/stdout/stderr even if
+// you *did* launch from the console. However, you can use AttachConsole()
+// to get a handle to your parent process's console, if any, and then
+// os.NewFile() to turn that handle into a fd usable as stdout/stderr.
+//
+// However, then you have the problem that if you redirect stdout or stderr
+// from the shell, you end up ignoring the redirection by forcing it to the
+// console.
+//
+// To fix *that*, we have to detect whether there was a pre-existing stdout
+// or not. We can check GetStdHandle(), which returns 0 for "should be
+// console" and nonzero for "already pointing at a file."
+//
+// Be careful though! As soon as you run AttachConsole(), it resets *all*
+// the GetStdHandle() handles to point them at the console instead, thus
+// throwing away the original file redirects. So we have to GetStdHandle()
+// *before* AttachConsole().
+//
+// For some reason, powershell redirections provide a valid file handle, but
+// writing to that handle doesn't write to the file. I haven't found a way
+// to work around that. (Windows 10.0.17763.379)
+//
+// Net result is as follows.
+// Before:
+// SHELL NON-REDIRECTED REDIRECTED
+// explorer.exe no console n/a
+// cmd.exe broken works
+// powershell broken broken
+// WSL bash broken works
+// After
+// SHELL NON-REDIRECTED REDIRECTED
+// explorer.exe no console n/a
+// cmd.exe works works
+// powershell works broken
+// WSL bash works works
+//
+// We don't seem to make anything worse, at least.
+func FixConsoleIfNeeded() error {
+ // Retain the original console objects, to prevent Go from automatically
+ // closing their file descriptors when they get garbage collected.
+ // You never want to close file descriptors 0, 1, and 2.
+ oldStdin, oldStdout, oldStderr = os.Stdin, os.Stdout, os.Stderr
+
+ stdin, _ := syscall.GetStdHandle(syscall.STD_INPUT_HANDLE)
+ stdout, _ := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE)
+ stderr, _ := syscall.GetStdHandle(syscall.STD_ERROR_HANDLE)
+
+ var invalid syscall.Handle
+ con := invalid
+
+ if stdin == invalid || stdout == invalid || stderr == invalid {
+ err := AttachConsole()
+ if err != nil {
+ return fmt.Errorf("attachconsole: %v", err)
+ }
+
+ if stdin == invalid {
+ stdin, _ = syscall.GetStdHandle(syscall.STD_INPUT_HANDLE)
+ }
+ if stdout == invalid {
+ stdout, _ = syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE)
+ con = stdout
+ }
+ if stderr == invalid {
+ stderr, _ = syscall.GetStdHandle(syscall.STD_ERROR_HANDLE)
+ con = stderr
+ }
+ }
+
+ if con != invalid {
+ // Make sure the console is configured to convert
+ // \n to \r\n, like Go programs expect.
+ h := windows.Handle(con)
+ var st uint32
+ err := windows.GetConsoleMode(h, &st)
+ if err != nil {
+ return fmt.Errorf("GetConsoleMode: %v", err)
+ }
+ err = windows.SetConsoleMode(h, st&^windows.DISABLE_NEWLINE_AUTO_RETURN)
+ if err != nil {
+ return fmt.Errorf("SetConsoleMode: %v", err)
+ }
+ }
+
+ if stdin != invalid {
+ os.Stdin = os.NewFile(uintptr(stdin), "stdin")
+ }
+ if stdout != invalid {
+ os.Stdout = os.NewFile(uintptr(stdout), "stdout")
+ }
+ if stderr != invalid {
+ os.Stderr = os.NewFile(uintptr(stderr), "stderr")
+ }
+ return nil
+}
diff --git a/vendor/github.com/apenwarr/w32/AUTHORS b/vendor/github.com/apenwarr/w32/AUTHORS
new file mode 100644
index 000000000..93ec5dba5
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/AUTHORS
@@ -0,0 +1,19 @@
+# This is the official list of 'w32' authors for copyright purposes.
+
+# Names should be added to this file as
+# Name or Organization
+# The email address is not required for organizations.
+
+# Please keep the list sorted.
+
+# Contributors
+# ============
+
+Allen Dang
+Benny Siegert
+Bruno Bigras
+Daniel Joos
+Gerald Rosenberg
+Liam Bowen
+Michael Henke
+Paul Maddox
\ No newline at end of file
diff --git a/vendor/github.com/apenwarr/w32/LICENSE b/vendor/github.com/apenwarr/w32/LICENSE
new file mode 100644
index 000000000..9f36608c8
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/LICENSE
@@ -0,0 +1,23 @@
+Copyright (c) 2010-2012 The w32 Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The names of the authors may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/apenwarr/w32/README.md b/vendor/github.com/apenwarr/w32/README.md
new file mode 100644
index 000000000..ed196e766
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/README.md
@@ -0,0 +1,33 @@
+About w32
+==========
+
+w32 is a wrapper of windows apis for the Go Programming Language.
+
+It wraps win32 apis to "Go style" to make them easier to use.
+
+Setup
+=====
+
+1. Make sure you have a working Go installation and build environment,
+ see this go-nuts post for details:
+ http://groups.google.com/group/golang-nuts/msg/5c87630a84f4fd0c
+
+ Updated versions of the Windows Go build are available here:
+ http://code.google.com/p/gomingw/downloads/list
+
+2. Create a "gopath" directory if you do not have one yet and set the
+ GOPATH variable accordingly. For example:
+ mkdir -p go-externals/src
+ export GOPATH=${PWD}/go-externals
+
+3. go get github.com/AllenDang/w32
+
+4. go install github.com/AllenDang/w32...
+
+Contribute
+==========
+
+Contributions in form of design, code, documentation, bug reporting or other
+ways you see fit are very welcome.
+
+Thank You!
diff --git a/vendor/github.com/apenwarr/w32/advapi32.go b/vendor/github.com/apenwarr/w32/advapi32.go
new file mode 100644
index 000000000..10e1416ca
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/advapi32.go
@@ -0,0 +1,389 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "errors"
+ "fmt"
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modadvapi32 = syscall.NewLazyDLL("advapi32.dll")
+
+ // procRegSetKeyValue = modadvapi32.NewProc("RegSetKeyValueW")
+ procCloseEventLog = modadvapi32.NewProc("CloseEventLog")
+ procCloseServiceHandle = modadvapi32.NewProc("CloseServiceHandle")
+ procControlService = modadvapi32.NewProc("ControlService")
+ procControlTrace = modadvapi32.NewProc("ControlTraceW")
+ procInitializeSecurityDescriptor = modadvapi32.NewProc("InitializeSecurityDescriptor")
+ procOpenEventLog = modadvapi32.NewProc("OpenEventLogW")
+ procOpenSCManager = modadvapi32.NewProc("OpenSCManagerW")
+ procOpenService = modadvapi32.NewProc("OpenServiceW")
+ procReadEventLog = modadvapi32.NewProc("ReadEventLogW")
+ procRegCloseKey = modadvapi32.NewProc("RegCloseKey")
+ procRegCreateKeyEx = modadvapi32.NewProc("RegCreateKeyExW")
+ procRegEnumKeyEx = modadvapi32.NewProc("RegEnumKeyExW")
+ procRegGetValue = modadvapi32.NewProc("RegGetValueW")
+ procRegOpenKeyEx = modadvapi32.NewProc("RegOpenKeyExW")
+ procRegSetValueEx = modadvapi32.NewProc("RegSetValueExW")
+ procSetSecurityDescriptorDacl = modadvapi32.NewProc("SetSecurityDescriptorDacl")
+ procStartService = modadvapi32.NewProc("StartServiceW")
+ procStartTrace = modadvapi32.NewProc("StartTraceW")
+)
+
+var (
+ SystemTraceControlGuid = GUID{
+ 0x9e814aad,
+ 0x3204,
+ 0x11d2,
+ [8]byte{0x9a, 0x82, 0x00, 0x60, 0x08, 0xa8, 0x69, 0x39},
+ }
+)
+
+func RegCreateKey(hKey HKEY, subKey string) HKEY {
+ var result HKEY
+ ret, _, _ := procRegCreateKeyEx.Call(
+ uintptr(hKey),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),
+ uintptr(0),
+ uintptr(0),
+ uintptr(0),
+ uintptr(KEY_ALL_ACCESS),
+ uintptr(0),
+ uintptr(unsafe.Pointer(&result)),
+ uintptr(0))
+ _ = ret
+ return result
+}
+
+func RegOpenKeyEx(hKey HKEY, subKey string, samDesired uint32) HKEY {
+ var result HKEY
+ ret, _, _ := procRegOpenKeyEx.Call(
+ uintptr(hKey),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),
+ uintptr(0),
+ uintptr(samDesired),
+ uintptr(unsafe.Pointer(&result)))
+
+ if ret != ERROR_SUCCESS {
+ panic(fmt.Sprintf("RegOpenKeyEx(%d, %s, %d) failed", hKey, subKey, samDesired))
+ }
+ return result
+}
+
+func RegCloseKey(hKey HKEY) error {
+ var err error
+ ret, _, _ := procRegCloseKey.Call(
+ uintptr(hKey))
+
+ if ret != ERROR_SUCCESS {
+ err = errors.New("RegCloseKey failed")
+ }
+ return err
+}
+
+func RegGetRaw(hKey HKEY, subKey string, value string) []byte {
+ var bufLen uint32
+ var valptr unsafe.Pointer
+ if len(value) > 0 {
+ valptr = unsafe.Pointer(syscall.StringToUTF16Ptr(value))
+ }
+ procRegGetValue.Call(
+ uintptr(hKey),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),
+ uintptr(valptr),
+ uintptr(RRF_RT_ANY),
+ 0,
+ 0,
+ uintptr(unsafe.Pointer(&bufLen)))
+
+ if bufLen == 0 {
+ return nil
+ }
+
+ buf := make([]byte, bufLen)
+ ret, _, _ := procRegGetValue.Call(
+ uintptr(hKey),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),
+ uintptr(valptr),
+ uintptr(RRF_RT_ANY),
+ 0,
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(unsafe.Pointer(&bufLen)))
+
+ if ret != ERROR_SUCCESS {
+ return nil
+ }
+
+ return buf
+}
+
+func RegSetBinary(hKey HKEY, subKey string, value []byte) (errno int) {
+ var lptr, vptr unsafe.Pointer
+ if len(subKey) > 0 {
+ lptr = unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))
+ }
+ if len(value) > 0 {
+ vptr = unsafe.Pointer(&value[0])
+ }
+ ret, _, _ := procRegSetValueEx.Call(
+ uintptr(hKey),
+ uintptr(lptr),
+ uintptr(0),
+ uintptr(REG_BINARY),
+ uintptr(vptr),
+ uintptr(len(value)))
+
+ return int(ret)
+}
+
+func RegGetString(hKey HKEY, subKey string, value string) string {
+ var bufLen uint32
+ procRegGetValue.Call(
+ uintptr(hKey),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(value))),
+ uintptr(RRF_RT_REG_SZ),
+ 0,
+ 0,
+ uintptr(unsafe.Pointer(&bufLen)))
+
+ if bufLen == 0 {
+ return ""
+ }
+
+ buf := make([]uint16, bufLen)
+ ret, _, _ := procRegGetValue.Call(
+ uintptr(hKey),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(value))),
+ uintptr(RRF_RT_REG_SZ),
+ 0,
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(unsafe.Pointer(&bufLen)))
+
+ if ret != ERROR_SUCCESS {
+ return ""
+ }
+
+ return syscall.UTF16ToString(buf)
+}
+
+/*
+func RegSetKeyValue(hKey HKEY, subKey string, valueName string, dwType uint32, data uintptr, cbData uint16) (errno int) {
+ ret, _, _ := procRegSetKeyValue.Call(
+ uintptr(hKey),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(valueName))),
+ uintptr(dwType),
+ data,
+ uintptr(cbData))
+
+ return int(ret)
+}
+*/
+
+func RegEnumKeyEx(hKey HKEY, index uint32) string {
+ var bufLen uint32 = 255
+ buf := make([]uint16, bufLen)
+ procRegEnumKeyEx.Call(
+ uintptr(hKey),
+ uintptr(index),
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(unsafe.Pointer(&bufLen)),
+ 0,
+ 0,
+ 0,
+ 0)
+ return syscall.UTF16ToString(buf)
+}
+
+func OpenEventLog(servername string, sourcename string) HANDLE {
+ ret, _, _ := procOpenEventLog.Call(
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(servername))),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(sourcename))))
+
+ return HANDLE(ret)
+}
+
+func ReadEventLog(eventlog HANDLE, readflags, recordoffset uint32, buffer []byte, numberofbytestoread uint32, bytesread, minnumberofbytesneeded *uint32) bool {
+ ret, _, _ := procReadEventLog.Call(
+ uintptr(eventlog),
+ uintptr(readflags),
+ uintptr(recordoffset),
+ uintptr(unsafe.Pointer(&buffer[0])),
+ uintptr(numberofbytestoread),
+ uintptr(unsafe.Pointer(bytesread)),
+ uintptr(unsafe.Pointer(minnumberofbytesneeded)))
+
+ return ret != 0
+}
+
+func CloseEventLog(eventlog HANDLE) bool {
+ ret, _, _ := procCloseEventLog.Call(
+ uintptr(eventlog))
+
+ return ret != 0
+}
+
+func OpenSCManager(lpMachineName, lpDatabaseName string, dwDesiredAccess uint32) (HANDLE, error) {
+ var p1, p2 uintptr
+ if len(lpMachineName) > 0 {
+ p1 = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpMachineName)))
+ }
+ if len(lpDatabaseName) > 0 {
+ p2 = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpDatabaseName)))
+ }
+ ret, _, _ := procOpenSCManager.Call(
+ p1,
+ p2,
+ uintptr(dwDesiredAccess))
+
+ if ret == 0 {
+ return 0, syscall.GetLastError()
+ }
+
+ return HANDLE(ret), nil
+}
+
+func CloseServiceHandle(hSCObject HANDLE) error {
+ ret, _, _ := procCloseServiceHandle.Call(uintptr(hSCObject))
+ if ret == 0 {
+ return syscall.GetLastError()
+ }
+ return nil
+}
+
+func OpenService(hSCManager HANDLE, lpServiceName string, dwDesiredAccess uint32) (HANDLE, error) {
+ ret, _, _ := procOpenService.Call(
+ uintptr(hSCManager),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpServiceName))),
+ uintptr(dwDesiredAccess))
+
+ if ret == 0 {
+ return 0, syscall.GetLastError()
+ }
+
+ return HANDLE(ret), nil
+}
+
+func StartService(hService HANDLE, lpServiceArgVectors []string) error {
+ l := len(lpServiceArgVectors)
+ var ret uintptr
+ if l == 0 {
+ ret, _, _ = procStartService.Call(
+ uintptr(hService),
+ 0,
+ 0)
+ } else {
+ lpArgs := make([]uintptr, l)
+ for i := 0; i < l; i++ {
+ lpArgs[i] = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpServiceArgVectors[i])))
+ }
+
+ ret, _, _ = procStartService.Call(
+ uintptr(hService),
+ uintptr(l),
+ uintptr(unsafe.Pointer(&lpArgs[0])))
+ }
+
+ if ret == 0 {
+ return syscall.GetLastError()
+ }
+
+ return nil
+}
+
+func ControlService(hService HANDLE, dwControl uint32, lpServiceStatus *SERVICE_STATUS) bool {
+ if lpServiceStatus == nil {
+ panic("ControlService:lpServiceStatus cannot be nil")
+ }
+
+ ret, _, _ := procControlService.Call(
+ uintptr(hService),
+ uintptr(dwControl),
+ uintptr(unsafe.Pointer(lpServiceStatus)))
+
+ return ret != 0
+}
+
+func ControlTrace(hTrace TRACEHANDLE, lpSessionName string, props *EVENT_TRACE_PROPERTIES, dwControl uint32) (success bool, e error) {
+
+ ret, _, _ := procControlTrace.Call(
+ uintptr(unsafe.Pointer(hTrace)),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpSessionName))),
+ uintptr(unsafe.Pointer(props)),
+ uintptr(dwControl))
+
+ if ret == ERROR_SUCCESS {
+ return true, nil
+ }
+ e = errors.New(fmt.Sprintf("error: 0x%x", ret))
+ return
+}
+
+func StartTrace(lpSessionName string, props *EVENT_TRACE_PROPERTIES) (hTrace TRACEHANDLE, e error) {
+
+ ret, _, _ := procStartTrace.Call(
+ uintptr(unsafe.Pointer(&hTrace)),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpSessionName))),
+ uintptr(unsafe.Pointer(props)))
+
+ if ret == ERROR_SUCCESS {
+ return
+ }
+ e = errors.New(fmt.Sprintf("error: 0x%x", ret))
+ return
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa378863(v=vs.85).aspx
+func InitializeSecurityDescriptor(rev uint16) (pSecurityDescriptor *SECURITY_DESCRIPTOR, e error) {
+
+ pSecurityDescriptor = &SECURITY_DESCRIPTOR{}
+
+ ret, _, _ := procInitializeSecurityDescriptor.Call(
+ uintptr(unsafe.Pointer(pSecurityDescriptor)),
+ uintptr(rev),
+ )
+
+ if ret != 0 {
+ return
+ }
+ e = syscall.GetLastError()
+ return
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa379583(v=vs.85).aspx
+func SetSecurityDescriptorDacl(pSecurityDescriptor *SECURITY_DESCRIPTOR, pDacl *ACL) (e error) {
+
+ if pSecurityDescriptor == nil {
+ return errors.New("null descriptor")
+ }
+
+ var ret uintptr
+ if pDacl == nil {
+ ret, _, _ = procSetSecurityDescriptorDacl.Call(
+ uintptr(unsafe.Pointer(pSecurityDescriptor)),
+ uintptr(1), // DaclPresent
+ uintptr(0), // pDacl
+ uintptr(0), // DaclDefaulted
+ )
+ } else {
+ ret, _, _ = procSetSecurityDescriptorDacl.Call(
+ uintptr(unsafe.Pointer(pSecurityDescriptor)),
+ uintptr(1), // DaclPresent
+ uintptr(unsafe.Pointer(pDacl)),
+ uintptr(0), //DaclDefaulted
+ )
+ }
+
+ if ret != 0 {
+ return
+ }
+ e = syscall.GetLastError()
+ return
+}
diff --git a/vendor/github.com/apenwarr/w32/advapi32_constants.go b/vendor/github.com/apenwarr/w32/advapi32_constants.go
new file mode 100644
index 000000000..fa3c7674a
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/advapi32_constants.go
@@ -0,0 +1,300 @@
+package w32
+
+// Registry predefined keys
+const (
+ HKEY_CLASSES_ROOT HKEY = 0x80000000
+ HKEY_CURRENT_USER HKEY = 0x80000001
+ HKEY_LOCAL_MACHINE HKEY = 0x80000002
+ HKEY_USERS HKEY = 0x80000003
+ HKEY_PERFORMANCE_DATA HKEY = 0x80000004
+ HKEY_CURRENT_CONFIG HKEY = 0x80000005
+ HKEY_DYN_DATA HKEY = 0x80000006
+)
+
+// Registry Key Security and Access Rights
+const (
+ KEY_ALL_ACCESS = 0xF003F
+ KEY_CREATE_SUB_KEY = 0x0004
+ KEY_ENUMERATE_SUB_KEYS = 0x0008
+ KEY_NOTIFY = 0x0010
+ KEY_QUERY_VALUE = 0x0001
+ KEY_SET_VALUE = 0x0002
+ KEY_READ = 0x20019
+ KEY_WRITE = 0x20006
+)
+
+const (
+ NFR_ANSI = 1
+ NFR_UNICODE = 2
+ NF_QUERY = 3
+ NF_REQUERY = 4
+)
+
+// Registry value types
+const (
+ RRF_RT_REG_NONE = 0x00000001
+ RRF_RT_REG_SZ = 0x00000002
+ RRF_RT_REG_EXPAND_SZ = 0x00000004
+ RRF_RT_REG_BINARY = 0x00000008
+ RRF_RT_REG_DWORD = 0x00000010
+ RRF_RT_REG_MULTI_SZ = 0x00000020
+ RRF_RT_REG_QWORD = 0x00000040
+ RRF_RT_DWORD = (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
+ RRF_RT_QWORD = (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
+ RRF_RT_ANY = 0x0000ffff
+ RRF_NOEXPAND = 0x10000000
+ RRF_ZEROONFAILURE = 0x20000000
+ REG_PROCESS_APPKEY = 0x00000001
+ REG_MUI_STRING_TRUNCATE = 0x00000001
+)
+
+// Service Control Manager object specific access types
+const (
+ SC_MANAGER_CONNECT = 0x0001
+ SC_MANAGER_CREATE_SERVICE = 0x0002
+ SC_MANAGER_ENUMERATE_SERVICE = 0x0004
+ SC_MANAGER_LOCK = 0x0008
+ SC_MANAGER_QUERY_LOCK_STATUS = 0x0010
+ SC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020
+ SC_MANAGER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK | SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG
+)
+
+// Service Types (Bit Mask)
+const (
+ SERVICE_KERNEL_DRIVER = 0x00000001
+ SERVICE_FILE_SYSTEM_DRIVER = 0x00000002
+ SERVICE_ADAPTER = 0x00000004
+ SERVICE_RECOGNIZER_DRIVER = 0x00000008
+ SERVICE_DRIVER = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER
+ SERVICE_WIN32_OWN_PROCESS = 0x00000010
+ SERVICE_WIN32_SHARE_PROCESS = 0x00000020
+ SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS
+ SERVICE_INTERACTIVE_PROCESS = 0x00000100
+ SERVICE_TYPE_ALL = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS
+)
+
+// Service State -- for CurrentState
+const (
+ SERVICE_STOPPED = 0x00000001
+ SERVICE_START_PENDING = 0x00000002
+ SERVICE_STOP_PENDING = 0x00000003
+ SERVICE_RUNNING = 0x00000004
+ SERVICE_CONTINUE_PENDING = 0x00000005
+ SERVICE_PAUSE_PENDING = 0x00000006
+ SERVICE_PAUSED = 0x00000007
+)
+
+// Controls Accepted (Bit Mask)
+const (
+ SERVICE_ACCEPT_STOP = 0x00000001
+ SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002
+ SERVICE_ACCEPT_SHUTDOWN = 0x00000004
+ SERVICE_ACCEPT_PARAMCHANGE = 0x00000008
+ SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010
+ SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020
+ SERVICE_ACCEPT_POWEREVENT = 0x00000040
+ SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080
+ SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100
+ SERVICE_ACCEPT_TIMECHANGE = 0x00000200
+ SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400
+)
+
+// Service object specific access type
+const (
+ SERVICE_QUERY_CONFIG = 0x0001
+ SERVICE_CHANGE_CONFIG = 0x0002
+ SERVICE_QUERY_STATUS = 0x0004
+ SERVICE_ENUMERATE_DEPENDENTS = 0x0008
+ SERVICE_START = 0x0010
+ SERVICE_STOP = 0x0020
+ SERVICE_PAUSE_CONTINUE = 0x0040
+ SERVICE_INTERROGATE = 0x0080
+ SERVICE_USER_DEFINED_CONTROL = 0x0100
+
+ SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED |
+ SERVICE_QUERY_CONFIG |
+ SERVICE_CHANGE_CONFIG |
+ SERVICE_QUERY_STATUS |
+ SERVICE_ENUMERATE_DEPENDENTS |
+ SERVICE_START |
+ SERVICE_STOP |
+ SERVICE_PAUSE_CONTINUE |
+ SERVICE_INTERROGATE |
+ SERVICE_USER_DEFINED_CONTROL
+)
+
+const (
+ KERNEL_LOGGER_NAME = "NT Kernel Logger"
+)
+
+// WNODE flags, for ETW (Event Tracing for Windows) / WMI
+const (
+ WNODE_FLAG_ALL_DATA = 0x00000001
+ WNODE_FLAG_SINGLE_INSTANCE = 0x00000002
+ WNODE_FLAG_SINGLE_ITEM = 0x00000004
+ WNODE_FLAG_EVENT_ITEM = 0x00000008
+ WNODE_FLAG_FIXED_INSTANCE_SIZE = 0x00000010
+ WNODE_FLAG_TOO_SMALL = 0x00000020
+ WNODE_FLAG_INSTANCES_SAME = 0x00000040
+ WNODE_FLAG_STATIC_INSTANCE_NAMES = 0x00000080
+ WNODE_FLAG_INTERNAL = 0x00000100
+ WNODE_FLAG_USE_TIMESTAMP = 0x00000200
+ WNODE_FLAG_PERSIST_EVENT = 0x00000400
+ WNODE_FLAG_EVENT_REFERENCE = 0x00002000
+ WNODE_FLAG_ANSI_INSTANCENAMES = 0x00004000
+ WNODE_FLAG_METHOD_ITEM = 0x00008000
+ WNODE_FLAG_PDO_INSTANCE_NAMES = 0x00010000
+ WNODE_FLAG_TRACED_GUID = 0x00020000
+ WNODE_FLAG_LOG_WNODE = 0x00040000
+ WNODE_FLAG_USE_GUID_PTR = 0x00080000
+ WNODE_FLAG_USE_MOF_PTR = 0x00100000
+ WNODE_FLAG_NO_HEADER = 0x00200000
+ WNODE_FLAG_SEVERITY_MASK = 0xff000000
+)
+
+// ETW flags and types etc
+const (
+ EVENT_TRACE_TYPE_INFO = 0x00
+ EVENT_TRACE_TYPE_START = 0x01
+ EVENT_TRACE_TYPE_END = 0x02
+ EVENT_TRACE_TYPE_STOP = 0x02
+ EVENT_TRACE_TYPE_DC_START = 0x03
+ EVENT_TRACE_TYPE_DC_END = 0x04
+ EVENT_TRACE_TYPE_EXTENSION = 0x05
+ EVENT_TRACE_TYPE_REPLY = 0x06
+ EVENT_TRACE_TYPE_DEQUEUE = 0x07
+ EVENT_TRACE_TYPE_RESUME = 0x07
+ EVENT_TRACE_TYPE_CHECKPOINT = 0x08
+ EVENT_TRACE_TYPE_SUSPEND = 0x08
+ EVENT_TRACE_TYPE_WINEVT_SEND = 0x09
+ EVENT_TRACE_TYPE_WINEVT_RECEIVE = 0XF0
+ TRACE_LEVEL_NONE = 0
+ TRACE_LEVEL_CRITICAL = 1
+ TRACE_LEVEL_FATAL = 1
+ TRACE_LEVEL_ERROR = 2
+ TRACE_LEVEL_WARNING = 3
+ TRACE_LEVEL_INFORMATION = 4
+ TRACE_LEVEL_VERBOSE = 5
+ TRACE_LEVEL_RESERVED6 = 6
+ TRACE_LEVEL_RESERVED7 = 7
+ TRACE_LEVEL_RESERVED8 = 8
+ TRACE_LEVEL_RESERVED9 = 9
+ EVENT_TRACE_TYPE_LOAD = 0x0A
+ EVENT_TRACE_TYPE_IO_READ = 0x0A
+ EVENT_TRACE_TYPE_IO_WRITE = 0x0B
+ EVENT_TRACE_TYPE_IO_READ_INIT = 0x0C
+ EVENT_TRACE_TYPE_IO_WRITE_INIT = 0x0D
+ EVENT_TRACE_TYPE_IO_FLUSH = 0x0E
+ EVENT_TRACE_TYPE_IO_FLUSH_INIT = 0x0F
+ EVENT_TRACE_TYPE_MM_TF = 0x0A
+ EVENT_TRACE_TYPE_MM_DZF = 0x0B
+ EVENT_TRACE_TYPE_MM_COW = 0x0C
+ EVENT_TRACE_TYPE_MM_GPF = 0x0D
+ EVENT_TRACE_TYPE_MM_HPF = 0x0E
+ EVENT_TRACE_TYPE_MM_AV = 0x0F
+ EVENT_TRACE_TYPE_SEND = 0x0A
+ EVENT_TRACE_TYPE_RECEIVE = 0x0B
+ EVENT_TRACE_TYPE_CONNECT = 0x0C
+ EVENT_TRACE_TYPE_DISCONNECT = 0x0D
+ EVENT_TRACE_TYPE_RETRANSMIT = 0x0E
+ EVENT_TRACE_TYPE_ACCEPT = 0x0F
+ EVENT_TRACE_TYPE_RECONNECT = 0x10
+ EVENT_TRACE_TYPE_CONNFAIL = 0x11
+ EVENT_TRACE_TYPE_COPY_TCP = 0x12
+ EVENT_TRACE_TYPE_COPY_ARP = 0x13
+ EVENT_TRACE_TYPE_ACKFULL = 0x14
+ EVENT_TRACE_TYPE_ACKPART = 0x15
+ EVENT_TRACE_TYPE_ACKDUP = 0x16
+ EVENT_TRACE_TYPE_GUIDMAP = 0x0A
+ EVENT_TRACE_TYPE_CONFIG = 0x0B
+ EVENT_TRACE_TYPE_SIDINFO = 0x0C
+ EVENT_TRACE_TYPE_SECURITY = 0x0D
+ EVENT_TRACE_TYPE_REGCREATE = 0x0A
+ EVENT_TRACE_TYPE_REGOPEN = 0x0B
+ EVENT_TRACE_TYPE_REGDELETE = 0x0C
+ EVENT_TRACE_TYPE_REGQUERY = 0x0D
+ EVENT_TRACE_TYPE_REGSETVALUE = 0x0E
+ EVENT_TRACE_TYPE_REGDELETEVALUE = 0x0F
+ EVENT_TRACE_TYPE_REGQUERYVALUE = 0x10
+ EVENT_TRACE_TYPE_REGENUMERATEKEY = 0x11
+ EVENT_TRACE_TYPE_REGENUMERATEVALUEKEY = 0x12
+ EVENT_TRACE_TYPE_REGQUERYMULTIPLEVALUE = 0x13
+ EVENT_TRACE_TYPE_REGSETINFORMATION = 0x14
+ EVENT_TRACE_TYPE_REGFLUSH = 0x15
+ EVENT_TRACE_TYPE_REGKCBCREATE = 0x16
+ EVENT_TRACE_TYPE_REGKCBDELETE = 0x17
+ EVENT_TRACE_TYPE_REGKCBRUNDOWNBEGIN = 0x18
+ EVENT_TRACE_TYPE_REGKCBRUNDOWNEND = 0x19
+ EVENT_TRACE_TYPE_REGVIRTUALIZE = 0x1A
+ EVENT_TRACE_TYPE_REGCLOSE = 0x1B
+ EVENT_TRACE_TYPE_REGSETSECURITY = 0x1C
+ EVENT_TRACE_TYPE_REGQUERYSECURITY = 0x1D
+ EVENT_TRACE_TYPE_REGCOMMIT = 0x1E
+ EVENT_TRACE_TYPE_REGPREPARE = 0x1F
+ EVENT_TRACE_TYPE_REGROLLBACK = 0x20
+ EVENT_TRACE_TYPE_REGMOUNTHIVE = 0x21
+ EVENT_TRACE_TYPE_CONFIG_CPU = 0x0A
+ EVENT_TRACE_TYPE_CONFIG_PHYSICALDISK = 0x0B
+ EVENT_TRACE_TYPE_CONFIG_LOGICALDISK = 0x0C
+ EVENT_TRACE_TYPE_CONFIG_NIC = 0x0D
+ EVENT_TRACE_TYPE_CONFIG_VIDEO = 0x0E
+ EVENT_TRACE_TYPE_CONFIG_SERVICES = 0x0F
+ EVENT_TRACE_TYPE_CONFIG_POWER = 0x10
+ EVENT_TRACE_TYPE_CONFIG_NETINFO = 0x11
+ EVENT_TRACE_TYPE_CONFIG_IRQ = 0x15
+ EVENT_TRACE_TYPE_CONFIG_PNP = 0x16
+ EVENT_TRACE_TYPE_CONFIG_IDECHANNEL = 0x17
+ EVENT_TRACE_TYPE_CONFIG_PLATFORM = 0x19
+ EVENT_TRACE_FLAG_PROCESS = 0x00000001
+ EVENT_TRACE_FLAG_THREAD = 0x00000002
+ EVENT_TRACE_FLAG_IMAGE_LOAD = 0x00000004
+ EVENT_TRACE_FLAG_DISK_IO = 0x00000100
+ EVENT_TRACE_FLAG_DISK_FILE_IO = 0x00000200
+ EVENT_TRACE_FLAG_MEMORY_PAGE_FAULTS = 0x00001000
+ EVENT_TRACE_FLAG_MEMORY_HARD_FAULTS = 0x00002000
+ EVENT_TRACE_FLAG_NETWORK_TCPIP = 0x00010000
+ EVENT_TRACE_FLAG_REGISTRY = 0x00020000
+ EVENT_TRACE_FLAG_DBGPRINT = 0x00040000
+ EVENT_TRACE_FLAG_PROCESS_COUNTERS = 0x00000008
+ EVENT_TRACE_FLAG_CSWITCH = 0x00000010
+ EVENT_TRACE_FLAG_DPC = 0x00000020
+ EVENT_TRACE_FLAG_INTERRUPT = 0x00000040
+ EVENT_TRACE_FLAG_SYSTEMCALL = 0x00000080
+ EVENT_TRACE_FLAG_DISK_IO_INIT = 0x00000400
+ EVENT_TRACE_FLAG_ALPC = 0x00100000
+ EVENT_TRACE_FLAG_SPLIT_IO = 0x00200000
+ EVENT_TRACE_FLAG_DRIVER = 0x00800000
+ EVENT_TRACE_FLAG_PROFILE = 0x01000000
+ EVENT_TRACE_FLAG_FILE_IO = 0x02000000
+ EVENT_TRACE_FLAG_FILE_IO_INIT = 0x04000000
+ EVENT_TRACE_FLAG_DISPATCHER = 0x00000800
+ EVENT_TRACE_FLAG_VIRTUAL_ALLOC = 0x00004000
+ EVENT_TRACE_FLAG_EXTENSION = 0x80000000
+ EVENT_TRACE_FLAG_FORWARD_WMI = 0x40000000
+ EVENT_TRACE_FLAG_ENABLE_RESERVE = 0x20000000
+ EVENT_TRACE_FILE_MODE_NONE = 0x00000000
+ EVENT_TRACE_FILE_MODE_SEQUENTIAL = 0x00000001
+ EVENT_TRACE_FILE_MODE_CIRCULAR = 0x00000002
+ EVENT_TRACE_FILE_MODE_APPEND = 0x00000004
+ EVENT_TRACE_REAL_TIME_MODE = 0x00000100
+ EVENT_TRACE_DELAY_OPEN_FILE_MODE = 0x00000200
+ EVENT_TRACE_BUFFERING_MODE = 0x00000400
+ EVENT_TRACE_PRIVATE_LOGGER_MODE = 0x00000800
+ EVENT_TRACE_ADD_HEADER_MODE = 0x00001000
+ EVENT_TRACE_USE_GLOBAL_SEQUENCE = 0x00004000
+ EVENT_TRACE_USE_LOCAL_SEQUENCE = 0x00008000
+ EVENT_TRACE_RELOG_MODE = 0x00010000
+ EVENT_TRACE_USE_PAGED_MEMORY = 0x01000000
+ EVENT_TRACE_FILE_MODE_NEWFILE = 0x00000008
+ EVENT_TRACE_FILE_MODE_PREALLOCATE = 0x00000020
+ EVENT_TRACE_NONSTOPPABLE_MODE = 0x00000040
+ EVENT_TRACE_SECURE_MODE = 0x00000080
+ EVENT_TRACE_USE_KBYTES_FOR_SIZE = 0x00002000
+ EVENT_TRACE_PRIVATE_IN_PROC = 0x00020000
+ EVENT_TRACE_MODE_RESERVED = 0x00100000
+ EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING = 0x10000000
+ EVENT_TRACE_CONTROL_QUERY = 0
+ EVENT_TRACE_CONTROL_STOP = 1
+ EVENT_TRACE_CONTROL_UPDATE = 2
+ EVENT_TRACE_CONTROL_FLUSH = 3
+)
diff --git a/vendor/github.com/apenwarr/w32/advapi32_typedef.go b/vendor/github.com/apenwarr/w32/advapi32_typedef.go
new file mode 100644
index 000000000..3a4308c4d
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/advapi32_typedef.go
@@ -0,0 +1,122 @@
+package w32
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa374931(v=vs.85).aspx
+type ACL struct {
+ AclRevision byte
+ Sbz1 byte
+ AclSize uint16
+ AceCount uint16
+ Sbz2 uint16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa379561(v=vs.85).aspx
+
+type SECURITY_DESCRIPTOR_CONTROL uint16
+
+type SECURITY_DESCRIPTOR struct {
+ Revision byte
+ Sbz1 byte
+ Control SECURITY_DESCRIPTOR_CONTROL
+ Owner uintptr
+ Group uintptr
+ Sacl *ACL
+ Dacl *ACL
+}
+
+type SID_IDENTIFIER_AUTHORITY struct {
+ Value [6]byte
+}
+
+// typedef struct _SID // 4 elements, 0xC bytes (sizeof)
+// {
+// /*0x000*/ UINT8 Revision;
+// /*0x001*/ UINT8 SubAuthorityCount;
+// /*0x002*/ struct _SID_IDENTIFIER_AUTHORITY IdentifierAuthority; // 1 elements, 0x6 bytes (sizeof)
+// /*0x008*/ ULONG32 SubAuthority[1];
+// }SID, *PSID;
+type SID struct {
+ Revision byte
+ SubAuthorityCount byte
+ IdentifierAuthority SID_IDENTIFIER_AUTHORITY
+ SubAuthority uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa363646.aspx
+type EVENTLOGRECORD struct {
+ Length uint32
+ Reserved uint32
+ RecordNumber uint32
+ TimeGenerated uint32
+ TimeWritten uint32
+ EventID uint32
+ EventType uint16
+ NumStrings uint16
+ EventCategory uint16
+ ReservedFlags uint16
+ ClosingRecordNumber uint32
+ StringOffset uint32
+ UserSidLength uint32
+ UserSidOffset uint32
+ DataLength uint32
+ DataOffset uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms685996.aspx
+type SERVICE_STATUS struct {
+ DwServiceType uint32
+ DwCurrentState uint32
+ DwControlsAccepted uint32
+ DwWin32ExitCode uint32
+ DwServiceSpecificExitCode uint32
+ DwCheckPoint uint32
+ DwWaitHint uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364160(v=vs.85).aspx
+type WNODE_HEADER struct {
+ BufferSize uint32
+ ProviderId uint32
+ HistoricalContext uint64
+ KernelHandle HANDLE
+ Guid GUID
+ ClientContext uint32
+ Flags uint32
+}
+
+// These partially compensate for the anonymous unions we removed, but there
+// are no setters.
+func (w WNODE_HEADER) TimeStamp() uint64 {
+ // TODO: Cast to the stupid LARGE_INTEGER struct which is, itself, nasty
+ // and union-y
+ return uint64(w.KernelHandle)
+}
+
+func (w WNODE_HEADER) Version() uint32 {
+ return uint32(w.HistoricalContext >> 32)
+}
+
+func (w WNODE_HEADER) Linkage() uint32 {
+ return uint32(w.HistoricalContext)
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa363784(v=vs.85).aspx
+type EVENT_TRACE_PROPERTIES struct {
+ Wnode WNODE_HEADER
+ BufferSize uint32
+ MinimumBuffers uint32
+ MaximumBuffers uint32
+ MaximumFileSize uint32
+ LogFileMode uint32
+ FlushTimer uint32
+ EnableFlags uint32
+ AgeLimit int32
+ NumberOfBuffers uint32
+ FreeBuffers uint32
+ EventsLost uint32
+ BuffersWritten uint32
+ LogBuffersLost uint32
+ RealTimeBuffersLost uint32
+ LoggerThreadId HANDLE
+ LogFileNameOffset uint32
+ LoggerNameOffset uint32
+}
diff --git a/vendor/github.com/apenwarr/w32/alpc.go b/vendor/github.com/apenwarr/w32/alpc.go
new file mode 100644
index 000000000..408d47ed8
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/alpc.go
@@ -0,0 +1,304 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "fmt"
+ // "github.com/davecgh/go-spew/spew"
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modntdll = syscall.NewLazyDLL("ntdll.dll")
+
+ procAlpcGetMessageAttribute = modntdll.NewProc("AlpcGetMessageAttribute")
+ procNtAlpcAcceptConnectPort = modntdll.NewProc("NtAlpcAcceptConnectPort")
+ procNtAlpcCancelMessage = modntdll.NewProc("NtAlpcCancelMessage")
+ procNtAlpcConnectPort = modntdll.NewProc("NtAlpcConnectPort")
+ procNtAlpcCreatePort = modntdll.NewProc("NtAlpcCreatePort")
+ procNtAlpcDisconnectPort = modntdll.NewProc("NtAlpcDisconnectPort")
+ procNtAlpcSendWaitReceivePort = modntdll.NewProc("NtAlpcSendWaitReceivePort")
+ procRtlCreateUnicodeStringFromAsciiz = modntdll.NewProc("RtlCreateUnicodeStringFromAsciiz")
+)
+
+//func RtlCreateUnicodeStringFromAsciiz(s string) (us UNICODE_STRING, e error) {
+//
+// cs := C.CString(s)
+// defer C.free(unsafe.Pointer(cs))
+//
+// ret, _, lastErr := procRtlCreateUnicodeStringFromAsciiz.Call(
+// uintptr(unsafe.Pointer(&us)),
+// uintptr(unsafe.Pointer(cs)),
+// )
+//
+// if ret != 1 { // ret is a BOOL ( I think )
+// e = lastErr
+// }
+//
+// return
+//}
+
+//func newUnicodeString(s string) (us UNICODE_STRING, e error) {
+// // TODO probably not the most efficient way to do this, but I couldn't
+// // work out how to manually initialize the UNICODE_STRING struct in a way
+// // that the ALPC subsystem liked.
+// us, e = RtlCreateUnicodeStringFromAsciiz(s)
+// return
+//}
+
+// (this is a macro)
+// VOID InitializeObjectAttributes(
+// [out] POBJECT_ATTRIBUTES InitializedAttributes,
+// [in] PUNICODE_STRING ObjectName,
+// [in] ULONG Attributes,
+// [in] HANDLE RootDirectory,
+// [in, optional] PSECURITY_DESCRIPTOR SecurityDescriptor
+// )
+//func InitializeObjectAttributes(
+// name string,
+// attributes uint32,
+// rootDir HANDLE,
+// pSecurityDescriptor *SECURITY_DESCRIPTOR,
+//) (oa OBJECT_ATTRIBUTES, e error) {
+//
+// oa = OBJECT_ATTRIBUTES{
+// RootDirectory: rootDir,
+// Attributes: attributes,
+// SecurityDescriptor: pSecurityDescriptor,
+// }
+// oa.Length = uint32(unsafe.Sizeof(oa))
+//
+// if len(name) > 0 {
+// us, err := newUnicodeString(name)
+// if err != nil {
+// e = err
+// return
+// }
+// oa.ObjectName = &us
+// }
+//
+// return
+//}
+
+// NTSTATUS
+// NtAlpcCreatePort(
+// __out PHANDLE PortHandle,
+// __in POBJECT_ATTRIBUTES ObjectAttributes,
+// __in_opt PALPC_PORT_ATTRIBUTES PortAttributes
+// );
+func NtAlpcCreatePort(pObjectAttributes *OBJECT_ATTRIBUTES, pPortAttributes *ALPC_PORT_ATTRIBUTES) (hPort HANDLE, e error) {
+
+ ret, _, _ := procNtAlpcCreatePort.Call(
+ uintptr(unsafe.Pointer(&hPort)),
+ uintptr(unsafe.Pointer(pObjectAttributes)),
+ uintptr(unsafe.Pointer(pPortAttributes)),
+ )
+
+ if ret != ERROR_SUCCESS {
+ return hPort, fmt.Errorf("0x%x", ret)
+ }
+
+ return
+}
+
+// NTSTATUS
+// NtAlpcConnectPort(
+// __out PHANDLE PortHandle,
+// __in PUNICODE_STRING PortName,
+// __in POBJECT_ATTRIBUTES ObjectAttributes,
+// __in_opt PALPC_PORT_ATTRIBUTES PortAttributes,
+// __in ULONG Flags,
+// __in_opt PSID RequiredServerSid,
+// __inout PPORT_MESSAGE ConnectionMessage,
+// __inout_opt PULONG BufferLength,
+// __inout_opt PALPC_MESSAGE_ATTRIBUTES OutMessageAttributes,
+// __inout_opt PALPC_MESSAGE_ATTRIBUTES InMessageAttributes,
+// __in_opt PLARGE_INTEGER Timeout
+// );
+//func NtAlpcConnectPort(
+// destPort string,
+// pClientObjAttrs *OBJECT_ATTRIBUTES,
+// pClientAlpcPortAttrs *ALPC_PORT_ATTRIBUTES,
+// flags uint32,
+// pRequiredServerSid *SID,
+// pConnMsg *AlpcShortMessage,
+// pBufLen *uint32,
+// pOutMsgAttrs *ALPC_MESSAGE_ATTRIBUTES,
+// pInMsgAttrs *ALPC_MESSAGE_ATTRIBUTES,
+// timeout *int64,
+//) (hPort HANDLE, e error) {
+//
+// destPortU, e := newUnicodeString(destPort)
+// if e != nil {
+// return
+// }
+//
+// ret, _, _ := procNtAlpcConnectPort.Call(
+// uintptr(unsafe.Pointer(&hPort)),
+// uintptr(unsafe.Pointer(&destPortU)),
+// uintptr(unsafe.Pointer(pClientObjAttrs)),
+// uintptr(unsafe.Pointer(pClientAlpcPortAttrs)),
+// uintptr(flags),
+// uintptr(unsafe.Pointer(pRequiredServerSid)),
+// uintptr(unsafe.Pointer(pConnMsg)),
+// uintptr(unsafe.Pointer(pBufLen)),
+// uintptr(unsafe.Pointer(pOutMsgAttrs)),
+// uintptr(unsafe.Pointer(pInMsgAttrs)),
+// uintptr(unsafe.Pointer(timeout)),
+// )
+//
+// if ret != ERROR_SUCCESS {
+// e = fmt.Errorf("0x%x", ret)
+// }
+// return
+//}
+
+// NTSTATUS
+// NtAlpcAcceptConnectPort(
+// __out PHANDLE PortHandle,
+// __in HANDLE ConnectionPortHandle,
+// __in ULONG Flags,
+// __in POBJECT_ATTRIBUTES ObjectAttributes,
+// __in PALPC_PORT_ATTRIBUTES PortAttributes,
+// __in_opt PVOID PortContext,
+// __in PPORT_MESSAGE ConnectionRequest,
+// __inout_opt PALPC_MESSAGE_ATTRIBUTES ConnectionMessageAttributes,
+// __in BOOLEAN AcceptConnection
+// );
+func NtAlpcAcceptConnectPort(
+ hSrvConnPort HANDLE,
+ flags uint32,
+ pObjAttr *OBJECT_ATTRIBUTES,
+ pPortAttr *ALPC_PORT_ATTRIBUTES,
+ pContext *AlpcPortContext,
+ pConnReq *AlpcShortMessage,
+ pConnMsgAttrs *ALPC_MESSAGE_ATTRIBUTES,
+ accept uintptr,
+) (hPort HANDLE, e error) {
+
+ ret, _, _ := procNtAlpcAcceptConnectPort.Call(
+ uintptr(unsafe.Pointer(&hPort)),
+ uintptr(hSrvConnPort),
+ uintptr(flags),
+ uintptr(unsafe.Pointer(pObjAttr)),
+ uintptr(unsafe.Pointer(pPortAttr)),
+ uintptr(unsafe.Pointer(pContext)),
+ uintptr(unsafe.Pointer(pConnReq)),
+ uintptr(unsafe.Pointer(pConnMsgAttrs)),
+ accept,
+ )
+
+ if ret != ERROR_SUCCESS {
+ e = fmt.Errorf("0x%x", ret)
+ }
+ return
+}
+
+// NTSTATUS
+// NtAlpcSendWaitReceivePort(
+// __in HANDLE PortHandle,
+// __in ULONG Flags,
+// __in_opt PPORT_MESSAGE SendMessage,
+// __in_opt PALPC_MESSAGE_ATTRIBUTES SendMessageAttributes,
+// __inout_opt PPORT_MESSAGE ReceiveMessage,
+// __inout_opt PULONG BufferLength,
+// __inout_opt PALPC_MESSAGE_ATTRIBUTES ReceiveMessageAttributes,
+// __in_opt PLARGE_INTEGER Timeout
+// );
+func NtAlpcSendWaitReceivePort(
+ hPort HANDLE,
+ flags uint32,
+ sendMsg *AlpcShortMessage, // Should actually point to PORT_MESSAGE + payload
+ sendMsgAttrs *ALPC_MESSAGE_ATTRIBUTES,
+ recvMsg *AlpcShortMessage,
+ recvBufLen *uint32,
+ recvMsgAttrs *ALPC_MESSAGE_ATTRIBUTES,
+ timeout *int64, // use native int64
+) (e error) {
+
+ ret, _, _ := procNtAlpcSendWaitReceivePort.Call(
+ uintptr(hPort),
+ uintptr(flags),
+ uintptr(unsafe.Pointer(sendMsg)),
+ uintptr(unsafe.Pointer(sendMsgAttrs)),
+ uintptr(unsafe.Pointer(recvMsg)),
+ uintptr(unsafe.Pointer(recvBufLen)),
+ uintptr(unsafe.Pointer(recvMsgAttrs)),
+ uintptr(unsafe.Pointer(timeout)),
+ )
+
+ if ret != ERROR_SUCCESS {
+ e = fmt.Errorf("0x%x", ret)
+ }
+ return
+}
+
+// NTSYSAPI
+// PVOID
+// NTAPI
+// AlpcGetMessageAttribute(
+// __in PALPC_MESSAGE_ATTRIBUTES Buffer,
+// __in ULONG AttributeFlag
+// );
+
+// This basically returns a pointer to the correct struct for whichever
+// message attribute you asked for. In Go terms, it returns unsafe.Pointer
+// which you should then cast. Example:
+
+// ptr := AlpcGetMessageAttribute(&recvMsgAttrs, ALPC_MESSAGE_CONTEXT_ATTRIBUTE)
+// if ptr != nil {
+// context := (*ALPC_CONTEXT_ATTR)(ptr)
+// }
+func AlpcGetMessageAttribute(buf *ALPC_MESSAGE_ATTRIBUTES, attr uint32) unsafe.Pointer {
+
+ ret, _, _ := procAlpcGetMessageAttribute.Call(
+ uintptr(unsafe.Pointer(buf)),
+ uintptr(attr),
+ )
+ return unsafe.Pointer(ret)
+}
+
+// NTSYSCALLAPI
+// NTSTATUS
+// NTAPI
+// NtAlpcCancelMessage(
+// __in HANDLE PortHandle,
+// __in ULONG Flags,
+// __in PALPC_CONTEXT_ATTR MessageContext
+// );
+func NtAlpcCancelMessage(hPort HANDLE, flags uint32, pMsgContext *ALPC_CONTEXT_ATTR) (e error) {
+
+ ret, _, _ := procNtAlpcCancelMessage.Call(
+ uintptr(hPort),
+ uintptr(flags),
+ uintptr(unsafe.Pointer(pMsgContext)),
+ )
+
+ if ret != ERROR_SUCCESS {
+ e = fmt.Errorf("0x%x", ret)
+ }
+ return
+}
+
+// NTSYSCALLAPI
+// NTSTATUS
+// NTAPI
+// NtAlpcDisconnectPort(
+// __in HANDLE PortHandle,
+// __in ULONG Flags
+// );
+func NtAlpcDisconnectPort(hPort HANDLE, flags uint32) (e error) {
+
+ ret, _, _ := procNtAlpcDisconnectPort.Call(
+ uintptr(hPort),
+ uintptr(flags),
+ )
+
+ if ret != ERROR_SUCCESS {
+ e = fmt.Errorf("0x%x", ret)
+ }
+ return
+}
diff --git a/vendor/github.com/apenwarr/w32/alpc_constants.go b/vendor/github.com/apenwarr/w32/alpc_constants.go
new file mode 100644
index 000000000..82d9d2ed4
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/alpc_constants.go
@@ -0,0 +1,64 @@
+package w32
+
+const (
+ ALPC_PORFLG_ALLOW_LPC_REQUESTS = 0x20000
+ ALPC_PORFLG_SYSTEM_PROCESS = 0x100000
+ ALPC_PORFLG_WAITABLE_PORT = 0x40000
+)
+
+const (
+ ALPC_MSGFLG_REPLY_MESSAGE = 0x1
+ ALPC_MSGFLG_LPC_MODE = 0x2 // ?
+ ALPC_MSGFLG_RELEASE_MESSAGE = 0x10000 // dbg
+ ALPC_MSGFLG_SYNC_REQUEST = 0x20000 // dbg
+ ALPC_MSGFLG_WAIT_USER_MODE = 0x100000
+ ALPC_MSGFLG_WAIT_ALERTABLE = 0x200000
+ ALPC_MSGFLG_WOW64_CALL = 0x80000000 // dbg
+)
+const (
+ ALPC_MESSAGE_SECURITY_ATTRIBUTE = 0x80000000
+ ALPC_MESSAGE_VIEW_ATTRIBUTE = 0x40000000
+ ALPC_MESSAGE_CONTEXT_ATTRIBUTE = 0x20000000
+ ALPC_MESSAGE_HANDLE_ATTRIBUTE = 0x10000000
+)
+
+const (
+ OBJ_INHERIT = 0x00000002
+ OBJ_PERMANENT = 0x00000010
+ OBJ_EXCLUSIVE = 0x00000020
+ OBJ_CASE_INSENSITIVE = 0x00000040
+ OBJ_OPENIF = 0x00000080
+ OBJ_OPENLINK = 0x00000100
+ OBJ_KERNEL_HANDLE = 0x00000200
+)
+
+const (
+ LPC_REQUEST = 1
+ LPC_REPLY = 2
+ LPC_DATAGRAM = 3
+ LPC_LOST_REPLY = 4
+ LPC_PORT_CLOSED = 5
+ LPC_CLIENT_DIED = 6
+ LPC_EXCEPTION = 7
+ LPC_DEBUG_EVENT = 8
+ LPC_ERROR_EVENT = 9
+ LPC_CONNECTION_REQUEST = 10
+ LPC_CONTINUATION_REQUIRED = 0x2000
+)
+
+const (
+ SecurityAnonymous uint32 = 1
+ SecurityIdentification uint32 = 2
+ SecurityImpersonation uint32 = 3
+ SecurityDelegation uint32 = 4
+)
+
+const (
+ SECURITY_DYNAMIC_TRACKING byte = 1
+ SECURITY_STATIC_TRACKING byte = 0
+)
+
+const (
+ ALPC_SYNC_OBJECT_TYPE uint32 = 2
+ ALPC_THREAD_OBJECT_TYPE uint32 = 4
+)
diff --git a/vendor/github.com/apenwarr/w32/alpc_typedef.go b/vendor/github.com/apenwarr/w32/alpc_typedef.go
new file mode 100644
index 000000000..52b35c97d
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/alpc_typedef.go
@@ -0,0 +1,181 @@
+package w32
+
+import (
+ "errors"
+)
+
+// nt!_ALPC_MESSAGE_ATTRIBUTES
+// +0x000 AllocatedAttributes : Uint4B
+// +0x004 ValidAttributes : Uint4B
+type ALPC_MESSAGE_ATTRIBUTES struct {
+ AllocatedAttributes uint32
+ ValidAttributes uint32
+}
+
+type ALPC_CONTEXT_ATTR struct {
+ PortContext *AlpcPortContext
+ MessageContext uintptr
+ Sequence uint32
+ MessageId uint32
+ CallbackId uint32
+}
+
+type ALPC_HANDLE_ATTR struct {
+ Flags uint32
+ Handle HANDLE
+ ObjectType uint32
+ DesiredAccess uint32
+}
+
+// nt!_CLIENT_ID
+// +0x000 UniqueProcess : Ptr64 Void
+// +0x008 UniqueThread : Ptr64 Void
+type CLIENT_ID struct {
+ UniqueProcess uintptr
+ UniqueThread uintptr
+}
+
+// nt!_UNICODE_STRING
+// +0x000 Length : Uint2B
+// +0x002 MaximumLength : Uint2B
+// +0x008 Buffer : Ptr64 Uint2B
+type UNICODE_STRING struct {
+ Length uint16
+ MaximumLength uint16
+ _ [4]byte // align to 0x08
+ Buffer *uint16
+}
+
+// nt!_OBJECT_ATTRIBUTES
+// +0x000 Length : Uint4B
+// +0x008 RootDirectory : Ptr64 Void
+// +0x010 ObjectName : Ptr64 _UNICODE_STRING
+// +0x018 Attributes : Uint4B
+// +0x020 SecurityDescriptor : Ptr64 Void
+// +0x028 SecurityQualityOfService : Ptr64 Void
+type OBJECT_ATTRIBUTES struct {
+ Length uint32
+ _ [4]byte // align to 0x08
+ RootDirectory HANDLE
+ ObjectName *UNICODE_STRING
+ Attributes uint32
+ _ [4]byte // align to 0x20
+ SecurityDescriptor *SECURITY_DESCRIPTOR
+ SecurityQualityOfService *SECURITY_QUALITY_OF_SERVICE
+}
+
+// cf: http://j00ru.vexillium.org/?p=502 for legacy RPC
+// nt!_PORT_MESSAGE
+// +0x000 u1 :
+// +0x004 u2 :
+// +0x008 ClientId : _CLIENT_ID
+// +0x008 DoNotUseThisField : Float
+// +0x018 MessageId : Uint4B
+// +0x020 ClientViewSize : Uint8B
+// +0x020 CallbackId : Uint4B
+type PORT_MESSAGE struct {
+ DataLength uint16 // These are the two unnamed unions
+ TotalLength uint16 // without Length and ZeroInit
+ Type uint16
+ DataInfoOffset uint16
+ ClientId CLIENT_ID
+ MessageId uint32
+ _ [4]byte // align up to 0x20
+ ClientViewSize uint64
+}
+
+func (pm PORT_MESSAGE) CallbackId() uint32 {
+ return uint32(pm.ClientViewSize >> 32)
+}
+
+func (pm PORT_MESSAGE) DoNotUseThisField() float64 {
+ panic("WE TOLD YOU NOT TO USE THIS FIELD")
+}
+
+const PORT_MESSAGE_SIZE = 0x28
+
+// http://www.nirsoft.net/kernel_struct/vista/SECURITY_QUALITY_OF_SERVICE.html
+type SECURITY_QUALITY_OF_SERVICE struct {
+ Length uint32
+ ImpersonationLevel uint32
+ ContextTrackingMode byte
+ EffectiveOnly byte
+ _ [2]byte // align to 12 bytes
+}
+
+const SECURITY_QOS_SIZE = 12
+
+// nt!_ALPC_PORT_ATTRIBUTES
+// +0x000 Flags : Uint4B
+// +0x004 SecurityQos : _SECURITY_QUALITY_OF_SERVICE
+// +0x010 MaxMessageLength : Uint8B
+// +0x018 MemoryBandwidth : Uint8B
+// +0x020 MaxPoolUsage : Uint8B
+// +0x028 MaxSectionSize : Uint8B
+// +0x030 MaxViewSize : Uint8B
+// +0x038 MaxTotalSectionSize : Uint8B
+// +0x040 DupObjectTypes : Uint4B
+// +0x044 Reserved : Uint4B
+type ALPC_PORT_ATTRIBUTES struct {
+ Flags uint32
+ SecurityQos SECURITY_QUALITY_OF_SERVICE
+ MaxMessageLength uint64 // must be filled out
+ MemoryBandwidth uint64
+ MaxPoolUsage uint64
+ MaxSectionSize uint64
+ MaxViewSize uint64
+ MaxTotalSectionSize uint64
+ DupObjectTypes uint32
+ Reserved uint32
+}
+
+const SHORT_MESSAGE_MAX_SIZE uint16 = 65535 // MAX_USHORT
+const SHORT_MESSAGE_MAX_PAYLOAD uint16 = SHORT_MESSAGE_MAX_SIZE - PORT_MESSAGE_SIZE
+
+// LPC uses the first 4 bytes of the payload as an LPC Command, but this is
+// NOT represented here, to allow the use of raw ALPC. For legacy LPC, callers
+// must include the command as part of their payload.
+type AlpcShortMessage struct {
+ PORT_MESSAGE
+ Data [SHORT_MESSAGE_MAX_PAYLOAD]byte
+}
+
+func NewAlpcShortMessage() AlpcShortMessage {
+ sm := AlpcShortMessage{}
+ sm.TotalLength = SHORT_MESSAGE_MAX_SIZE
+ return sm
+}
+
+func (sm *AlpcShortMessage) SetData(d []byte) (e error) {
+
+ copy(sm.Data[:], d)
+ if len(d) > int(SHORT_MESSAGE_MAX_PAYLOAD) {
+ e = errors.New("data too big - truncated")
+ sm.DataLength = SHORT_MESSAGE_MAX_PAYLOAD
+ sm.TotalLength = SHORT_MESSAGE_MAX_SIZE
+ return
+ }
+ sm.TotalLength = uint16(PORT_MESSAGE_SIZE + len(d))
+ sm.DataLength = uint16(len(d))
+ return
+
+}
+
+// TODO - is this still useful?
+func (sm *AlpcShortMessage) GetData() []byte {
+ if int(sm.DataLength) > int(SHORT_MESSAGE_MAX_PAYLOAD) {
+ return sm.Data[:] // truncate
+ }
+ return sm.Data[:sm.DataLength]
+}
+
+func (sm *AlpcShortMessage) Reset() {
+ // zero the PORT_MESSAGE header
+ sm.PORT_MESSAGE = PORT_MESSAGE{}
+ sm.TotalLength = SHORT_MESSAGE_MAX_SIZE
+ sm.DataLength = 0
+}
+
+type AlpcPortContext struct {
+ Handle HANDLE
+}
diff --git a/vendor/github.com/apenwarr/w32/comctl32.go b/vendor/github.com/apenwarr/w32/comctl32.go
new file mode 100644
index 000000000..4f4e6b53a
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/comctl32.go
@@ -0,0 +1,109 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modcomctl32 = syscall.NewLazyDLL("comctl32.dll")
+
+ procInitCommonControlsEx = modcomctl32.NewProc("InitCommonControlsEx")
+ procImageList_Create = modcomctl32.NewProc("ImageList_Create")
+ procImageList_Destroy = modcomctl32.NewProc("ImageList_Destroy")
+ procImageList_GetImageCount = modcomctl32.NewProc("ImageList_GetImageCount")
+ procImageList_SetImageCount = modcomctl32.NewProc("ImageList_SetImageCount")
+ procImageList_Add = modcomctl32.NewProc("ImageList_Add")
+ procImageList_ReplaceIcon = modcomctl32.NewProc("ImageList_ReplaceIcon")
+ procImageList_Remove = modcomctl32.NewProc("ImageList_Remove")
+ procTrackMouseEvent = modcomctl32.NewProc("_TrackMouseEvent")
+)
+
+func InitCommonControlsEx(lpInitCtrls *INITCOMMONCONTROLSEX) bool {
+ ret, _, _ := procInitCommonControlsEx.Call(
+ uintptr(unsafe.Pointer(lpInitCtrls)))
+
+ return ret != 0
+}
+
+func ImageList_Create(cx, cy int, flags uint, cInitial, cGrow int) HIMAGELIST {
+ ret, _, _ := procImageList_Create.Call(
+ uintptr(cx),
+ uintptr(cy),
+ uintptr(flags),
+ uintptr(cInitial),
+ uintptr(cGrow))
+
+ if ret == 0 {
+ panic("Create image list failed")
+ }
+
+ return HIMAGELIST(ret)
+}
+
+func ImageList_Destroy(himl HIMAGELIST) bool {
+ ret, _, _ := procImageList_Destroy.Call(
+ uintptr(himl))
+
+ return ret != 0
+}
+
+func ImageList_GetImageCount(himl HIMAGELIST) int {
+ ret, _, _ := procImageList_GetImageCount.Call(
+ uintptr(himl))
+
+ return int(ret)
+}
+
+func ImageList_SetImageCount(himl HIMAGELIST, uNewCount uint) bool {
+ ret, _, _ := procImageList_SetImageCount.Call(
+ uintptr(himl),
+ uintptr(uNewCount))
+
+ return ret != 0
+}
+
+func ImageList_Add(himl HIMAGELIST, hbmImage, hbmMask HBITMAP) int {
+ ret, _, _ := procImageList_Add.Call(
+ uintptr(himl),
+ uintptr(hbmImage),
+ uintptr(hbmMask))
+
+ return int(ret)
+}
+
+func ImageList_ReplaceIcon(himl HIMAGELIST, i int, hicon HICON) int {
+ ret, _, _ := procImageList_ReplaceIcon.Call(
+ uintptr(himl),
+ uintptr(i),
+ uintptr(hicon))
+
+ return int(ret)
+}
+
+func ImageList_AddIcon(himl HIMAGELIST, hicon HICON) int {
+ return ImageList_ReplaceIcon(himl, -1, hicon)
+}
+
+func ImageList_Remove(himl HIMAGELIST, i int) bool {
+ ret, _, _ := procImageList_Remove.Call(
+ uintptr(himl),
+ uintptr(i))
+
+ return ret != 0
+}
+
+func ImageList_RemoveAll(himl HIMAGELIST) bool {
+ return ImageList_Remove(himl, -1)
+}
+
+func TrackMouseEvent(tme *TRACKMOUSEEVENT) bool {
+ ret, _, _ := procTrackMouseEvent.Call(
+ uintptr(unsafe.Pointer(tme)))
+
+ return ret != 0
+}
diff --git a/vendor/github.com/apenwarr/w32/comdlg32.go b/vendor/github.com/apenwarr/w32/comdlg32.go
new file mode 100644
index 000000000..37bc98581
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/comdlg32.go
@@ -0,0 +1,38 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modcomdlg32 = syscall.NewLazyDLL("comdlg32.dll")
+
+ procGetSaveFileName = modcomdlg32.NewProc("GetSaveFileNameW")
+ procGetOpenFileName = modcomdlg32.NewProc("GetOpenFileNameW")
+ procCommDlgExtendedError = modcomdlg32.NewProc("CommDlgExtendedError")
+)
+
+func GetOpenFileName(ofn *OPENFILENAME) bool {
+ ret, _, _ := procGetOpenFileName.Call(
+ uintptr(unsafe.Pointer(ofn)))
+
+ return ret != 0
+}
+
+func GetSaveFileName(ofn *OPENFILENAME) bool {
+ ret, _, _ := procGetSaveFileName.Call(
+ uintptr(unsafe.Pointer(ofn)))
+
+ return ret != 0
+}
+
+func CommDlgExtendedError() uint {
+ ret, _, _ := procCommDlgExtendedError.Call()
+
+ return uint(ret)
+}
diff --git a/vendor/github.com/apenwarr/w32/constants.go b/vendor/github.com/apenwarr/w32/constants.go
new file mode 100644
index 000000000..1775ca83f
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/constants.go
@@ -0,0 +1,2628 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+const (
+ FALSE = 0
+ TRUE = 1
+)
+
+const (
+ NO_ERROR = 0
+ ERROR_SUCCESS = 0
+ ERROR_FILE_NOT_FOUND = 2
+ ERROR_PATH_NOT_FOUND = 3
+ ERROR_ACCESS_DENIED = 5
+ ERROR_INVALID_HANDLE = 6
+ ERROR_BAD_FORMAT = 11
+ ERROR_INVALID_NAME = 123
+ ERROR_MORE_DATA = 234
+ ERROR_NO_MORE_ITEMS = 259
+ ERROR_INVALID_SERVICE_CONTROL = 1052
+ ERROR_SERVICE_REQUEST_TIMEOUT = 1053
+ ERROR_SERVICE_NO_THREAD = 1054
+ ERROR_SERVICE_DATABASE_LOCKED = 1055
+ ERROR_SERVICE_ALREADY_RUNNING = 1056
+ ERROR_SERVICE_DISABLED = 1058
+ ERROR_SERVICE_DOES_NOT_EXIST = 1060
+ ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061
+ ERROR_SERVICE_NOT_ACTIVE = 1062
+ ERROR_DATABASE_DOES_NOT_EXIST = 1065
+ ERROR_SERVICE_DEPENDENCY_FAIL = 1068
+ ERROR_SERVICE_LOGON_FAILED = 1069
+ ERROR_SERVICE_MARKED_FOR_DELETE = 1072
+ ERROR_SERVICE_DEPENDENCY_DELETED = 1075
+)
+
+const (
+ SE_ERR_FNF = 2
+ SE_ERR_PNF = 3
+ SE_ERR_ACCESSDENIED = 5
+ SE_ERR_OOM = 8
+ SE_ERR_DLLNOTFOUND = 32
+ SE_ERR_SHARE = 26
+ SE_ERR_ASSOCINCOMPLETE = 27
+ SE_ERR_DDETIMEOUT = 28
+ SE_ERR_DDEFAIL = 29
+ SE_ERR_DDEBUSY = 30
+ SE_ERR_NOASSOC = 31
+)
+
+const (
+ CW_USEDEFAULT = ^0x7fffffff
+)
+
+// ShowWindow constants
+const (
+ SW_HIDE = 0
+ SW_NORMAL = 1
+ SW_SHOWNORMAL = 1
+ SW_SHOWMINIMIZED = 2
+ SW_MAXIMIZE = 3
+ SW_SHOWMAXIMIZED = 3
+ SW_SHOWNOACTIVATE = 4
+ SW_SHOW = 5
+ SW_MINIMIZE = 6
+ SW_SHOWMINNOACTIVE = 7
+ SW_SHOWNA = 8
+ SW_RESTORE = 9
+ SW_SHOWDEFAULT = 10
+ SW_FORCEMINIMIZE = 11
+)
+
+// Window class styles
+const (
+ CS_VREDRAW = 0x00000001
+ CS_HREDRAW = 0x00000002
+ CS_KEYCVTWINDOW = 0x00000004
+ CS_DBLCLKS = 0x00000008
+ CS_OWNDC = 0x00000020
+ CS_CLASSDC = 0x00000040
+ CS_PARENTDC = 0x00000080
+ CS_NOKEYCVT = 0x00000100
+ CS_NOCLOSE = 0x00000200
+ CS_SAVEBITS = 0x00000800
+ CS_BYTEALIGNCLIENT = 0x00001000
+ CS_BYTEALIGNWINDOW = 0x00002000
+ CS_GLOBALCLASS = 0x00004000
+ CS_IME = 0x00010000
+ CS_DROPSHADOW = 0x00020000
+)
+
+// Predefined cursor constants
+const (
+ IDC_ARROW = 32512
+ IDC_IBEAM = 32513
+ IDC_WAIT = 32514
+ IDC_CROSS = 32515
+ IDC_UPARROW = 32516
+ IDC_SIZENWSE = 32642
+ IDC_SIZENESW = 32643
+ IDC_SIZEWE = 32644
+ IDC_SIZENS = 32645
+ IDC_SIZEALL = 32646
+ IDC_NO = 32648
+ IDC_HAND = 32649
+ IDC_APPSTARTING = 32650
+ IDC_HELP = 32651
+ IDC_ICON = 32641
+ IDC_SIZE = 32640
+)
+
+// Predefined icon constants
+const (
+ IDI_APPLICATION = 32512
+ IDI_HAND = 32513
+ IDI_QUESTION = 32514
+ IDI_EXCLAMATION = 32515
+ IDI_ASTERISK = 32516
+ IDI_WINLOGO = 32517
+ IDI_WARNING = IDI_EXCLAMATION
+ IDI_ERROR = IDI_HAND
+ IDI_INFORMATION = IDI_ASTERISK
+)
+
+// Button style constants
+const (
+ BS_3STATE = 5
+ BS_AUTO3STATE = 6
+ BS_AUTOCHECKBOX = 3
+ BS_AUTORADIOBUTTON = 9
+ BS_BITMAP = 128
+ BS_BOTTOM = 0X800
+ BS_CENTER = 0X300
+ BS_CHECKBOX = 2
+ BS_DEFPUSHBUTTON = 1
+ BS_GROUPBOX = 7
+ BS_ICON = 64
+ BS_LEFT = 256
+ BS_LEFTTEXT = 32
+ BS_MULTILINE = 0X2000
+ BS_NOTIFY = 0X4000
+ BS_OWNERDRAW = 0XB
+ BS_PUSHBUTTON = 0
+ BS_PUSHLIKE = 4096
+ BS_RADIOBUTTON = 4
+ BS_RIGHT = 512
+ BS_RIGHTBUTTON = 32
+ BS_TEXT = 0
+ BS_TOP = 0X400
+ BS_USERBUTTON = 8
+ BS_VCENTER = 0XC00
+ BS_FLAT = 0X8000
+)
+
+// Button state constants
+const (
+ BST_CHECKED = 1
+ BST_INDETERMINATE = 2
+ BST_UNCHECKED = 0
+ BST_FOCUS = 8
+ BST_PUSHED = 4
+)
+
+// Predefined brushes constants
+const (
+ COLOR_3DDKSHADOW = 21
+ COLOR_3DFACE = 15
+ COLOR_3DHILIGHT = 20
+ COLOR_3DHIGHLIGHT = 20
+ COLOR_3DLIGHT = 22
+ COLOR_BTNHILIGHT = 20
+ COLOR_3DSHADOW = 16
+ COLOR_ACTIVEBORDER = 10
+ COLOR_ACTIVECAPTION = 2
+ COLOR_APPWORKSPACE = 12
+ COLOR_BACKGROUND = 1
+ COLOR_DESKTOP = 1
+ COLOR_BTNFACE = 15
+ COLOR_BTNHIGHLIGHT = 20
+ COLOR_BTNSHADOW = 16
+ COLOR_BTNTEXT = 18
+ COLOR_CAPTIONTEXT = 9
+ COLOR_GRAYTEXT = 17
+ COLOR_HIGHLIGHT = 13
+ COLOR_HIGHLIGHTTEXT = 14
+ COLOR_INACTIVEBORDER = 11
+ COLOR_INACTIVECAPTION = 3
+ COLOR_INACTIVECAPTIONTEXT = 19
+ COLOR_INFOBK = 24
+ COLOR_INFOTEXT = 23
+ COLOR_MENU = 4
+ COLOR_MENUTEXT = 7
+ COLOR_SCROLLBAR = 0
+ COLOR_WINDOW = 5
+ COLOR_WINDOWFRAME = 6
+ COLOR_WINDOWTEXT = 8
+ COLOR_HOTLIGHT = 26
+ COLOR_GRADIENTACTIVECAPTION = 27
+ COLOR_GRADIENTINACTIVECAPTION = 28
+)
+
+// Button message constants
+const (
+ BM_CLICK = 245
+ BM_GETCHECK = 240
+ BM_GETIMAGE = 246
+ BM_GETSTATE = 242
+ BM_SETCHECK = 241
+ BM_SETIMAGE = 247
+ BM_SETSTATE = 243
+ BM_SETSTYLE = 244
+)
+
+// Button notifications
+const (
+ BN_CLICKED = 0
+ BN_PAINT = 1
+ BN_HILITE = 2
+ BN_PUSHED = BN_HILITE
+ BN_UNHILITE = 3
+ BN_UNPUSHED = BN_UNHILITE
+ BN_DISABLE = 4
+ BN_DOUBLECLICKED = 5
+ BN_DBLCLK = BN_DOUBLECLICKED
+ BN_SETFOCUS = 6
+ BN_KILLFOCUS = 7
+)
+
+// GetWindowLong and GetWindowLongPtr constants
+const (
+ GWL_EXSTYLE = -20
+ GWL_STYLE = -16
+ GWL_WNDPROC = -4
+ GWLP_WNDPROC = -4
+ GWL_HINSTANCE = -6
+ GWLP_HINSTANCE = -6
+ GWL_HWNDPARENT = -8
+ GWLP_HWNDPARENT = -8
+ GWL_ID = -12
+ GWLP_ID = -12
+ GWL_USERDATA = -21
+ GWLP_USERDATA = -21
+)
+
+// Window style constants
+const (
+ WS_OVERLAPPED = 0X00000000
+ WS_POPUP = 0X80000000
+ WS_CHILD = 0X40000000
+ WS_MINIMIZE = 0X20000000
+ WS_VISIBLE = 0X10000000
+ WS_DISABLED = 0X08000000
+ WS_CLIPSIBLINGS = 0X04000000
+ WS_CLIPCHILDREN = 0X02000000
+ WS_MAXIMIZE = 0X01000000
+ WS_CAPTION = 0X00C00000
+ WS_BORDER = 0X00800000
+ WS_DLGFRAME = 0X00400000
+ WS_VSCROLL = 0X00200000
+ WS_HSCROLL = 0X00100000
+ WS_SYSMENU = 0X00080000
+ WS_THICKFRAME = 0X00040000
+ WS_GROUP = 0X00020000
+ WS_TABSTOP = 0X00010000
+ WS_MINIMIZEBOX = 0X00020000
+ WS_MAXIMIZEBOX = 0X00010000
+ WS_TILED = 0X00000000
+ WS_ICONIC = 0X20000000
+ WS_SIZEBOX = 0X00040000
+ WS_OVERLAPPEDWINDOW = 0X00000000 | 0X00C00000 | 0X00080000 | 0X00040000 | 0X00020000 | 0X00010000
+ WS_POPUPWINDOW = 0X80000000 | 0X00800000 | 0X00080000
+ WS_CHILDWINDOW = 0X40000000
+)
+
+// Extended window style constants
+const (
+ WS_EX_DLGMODALFRAME = 0X00000001
+ WS_EX_NOPARENTNOTIFY = 0X00000004
+ WS_EX_TOPMOST = 0X00000008
+ WS_EX_ACCEPTFILES = 0X00000010
+ WS_EX_TRANSPARENT = 0X00000020
+ WS_EX_MDICHILD = 0X00000040
+ WS_EX_TOOLWINDOW = 0X00000080
+ WS_EX_WINDOWEDGE = 0X00000100
+ WS_EX_CLIENTEDGE = 0X00000200
+ WS_EX_CONTEXTHELP = 0X00000400
+ WS_EX_RIGHT = 0X00001000
+ WS_EX_LEFT = 0X00000000
+ WS_EX_RTLREADING = 0X00002000
+ WS_EX_LTRREADING = 0X00000000
+ WS_EX_LEFTSCROLLBAR = 0X00004000
+ WS_EX_RIGHTSCROLLBAR = 0X00000000
+ WS_EX_CONTROLPARENT = 0X00010000
+ WS_EX_STATICEDGE = 0X00020000
+ WS_EX_APPWINDOW = 0X00040000
+ WS_EX_OVERLAPPEDWINDOW = 0X00000100 | 0X00000200
+ WS_EX_PALETTEWINDOW = 0X00000100 | 0X00000080 | 0X00000008
+ WS_EX_LAYERED = 0X00080000
+ WS_EX_NOINHERITLAYOUT = 0X00100000
+ WS_EX_LAYOUTRTL = 0X00400000
+ WS_EX_NOACTIVATE = 0X08000000
+)
+
+// Window message constants
+const (
+ WM_APP = 32768
+ WM_ACTIVATE = 6
+ WM_ACTIVATEAPP = 28
+ WM_AFXFIRST = 864
+ WM_AFXLAST = 895
+ WM_ASKCBFORMATNAME = 780
+ WM_CANCELJOURNAL = 75
+ WM_CANCELMODE = 31
+ WM_CAPTURECHANGED = 533
+ WM_CHANGECBCHAIN = 781
+ WM_CHAR = 258
+ WM_CHARTOITEM = 47
+ WM_CHILDACTIVATE = 34
+ WM_CLEAR = 771
+ WM_CLOSE = 16
+ WM_COMMAND = 273
+ WM_COMMNOTIFY = 68 /* OBSOLETE */
+ WM_COMPACTING = 65
+ WM_COMPAREITEM = 57
+ WM_CONTEXTMENU = 123
+ WM_COPY = 769
+ WM_COPYDATA = 74
+ WM_CREATE = 1
+ WM_CTLCOLORBTN = 309
+ WM_CTLCOLORDLG = 310
+ WM_CTLCOLOREDIT = 307
+ WM_CTLCOLORLISTBOX = 308
+ WM_CTLCOLORMSGBOX = 306
+ WM_CTLCOLORSCROLLBAR = 311
+ WM_CTLCOLORSTATIC = 312
+ WM_CUT = 768
+ WM_DEADCHAR = 259
+ WM_DELETEITEM = 45
+ WM_DESTROY = 2
+ WM_DESTROYCLIPBOARD = 775
+ WM_DEVICECHANGE = 537
+ WM_DEVMODECHANGE = 27
+ WM_DISPLAYCHANGE = 126
+ WM_DRAWCLIPBOARD = 776
+ WM_DRAWITEM = 43
+ WM_DROPFILES = 563
+ WM_ENABLE = 10
+ WM_ENDSESSION = 22
+ WM_ENTERIDLE = 289
+ WM_ENTERMENULOOP = 529
+ WM_ENTERSIZEMOVE = 561
+ WM_ERASEBKGND = 20
+ WM_EXITMENULOOP = 530
+ WM_EXITSIZEMOVE = 562
+ WM_FONTCHANGE = 29
+ WM_GETDLGCODE = 135
+ WM_GETFONT = 49
+ WM_GETHOTKEY = 51
+ WM_GETICON = 127
+ WM_GETMINMAXINFO = 36
+ WM_GETTEXT = 13
+ WM_GETTEXTLENGTH = 14
+ WM_HANDHELDFIRST = 856
+ WM_HANDHELDLAST = 863
+ WM_HELP = 83
+ WM_HOTKEY = 786
+ WM_HSCROLL = 276
+ WM_HSCROLLCLIPBOARD = 782
+ WM_ICONERASEBKGND = 39
+ WM_INITDIALOG = 272
+ WM_INITMENU = 278
+ WM_INITMENUPOPUP = 279
+ WM_INPUT = 0X00FF
+ WM_INPUTLANGCHANGE = 81
+ WM_INPUTLANGCHANGEREQUEST = 80
+ WM_KEYDOWN = 256
+ WM_KEYUP = 257
+ WM_KILLFOCUS = 8
+ WM_MDIACTIVATE = 546
+ WM_MDICASCADE = 551
+ WM_MDICREATE = 544
+ WM_MDIDESTROY = 545
+ WM_MDIGETACTIVE = 553
+ WM_MDIICONARRANGE = 552
+ WM_MDIMAXIMIZE = 549
+ WM_MDINEXT = 548
+ WM_MDIREFRESHMENU = 564
+ WM_MDIRESTORE = 547
+ WM_MDISETMENU = 560
+ WM_MDITILE = 550
+ WM_MEASUREITEM = 44
+ WM_GETOBJECT = 0X003D
+ WM_CHANGEUISTATE = 0X0127
+ WM_UPDATEUISTATE = 0X0128
+ WM_QUERYUISTATE = 0X0129
+ WM_UNINITMENUPOPUP = 0X0125
+ WM_MENURBUTTONUP = 290
+ WM_MENUCOMMAND = 0X0126
+ WM_MENUGETOBJECT = 0X0124
+ WM_MENUDRAG = 0X0123
+ WM_APPCOMMAND = 0X0319
+ WM_MENUCHAR = 288
+ WM_MENUSELECT = 287
+ WM_MOVE = 3
+ WM_MOVING = 534
+ WM_NCACTIVATE = 134
+ WM_NCCALCSIZE = 131
+ WM_NCCREATE = 129
+ WM_NCDESTROY = 130
+ WM_NCHITTEST = 132
+ WM_NCLBUTTONDBLCLK = 163
+ WM_NCLBUTTONDOWN = 161
+ WM_NCLBUTTONUP = 162
+ WM_NCMBUTTONDBLCLK = 169
+ WM_NCMBUTTONDOWN = 167
+ WM_NCMBUTTONUP = 168
+ WM_NCXBUTTONDOWN = 171
+ WM_NCXBUTTONUP = 172
+ WM_NCXBUTTONDBLCLK = 173
+ WM_NCMOUSEHOVER = 0X02A0
+ WM_NCMOUSELEAVE = 0X02A2
+ WM_NCMOUSEMOVE = 160
+ WM_NCPAINT = 133
+ WM_NCRBUTTONDBLCLK = 166
+ WM_NCRBUTTONDOWN = 164
+ WM_NCRBUTTONUP = 165
+ WM_NEXTDLGCTL = 40
+ WM_NEXTMENU = 531
+ WM_NOTIFY = 78
+ WM_NOTIFYFORMAT = 85
+ WM_NULL = 0
+ WM_PAINT = 15
+ WM_PAINTCLIPBOARD = 777
+ WM_PAINTICON = 38
+ WM_PALETTECHANGED = 785
+ WM_PALETTEISCHANGING = 784
+ WM_PARENTNOTIFY = 528
+ WM_PASTE = 770
+ WM_PENWINFIRST = 896
+ WM_PENWINLAST = 911
+ WM_POWER = 72
+ WM_POWERBROADCAST = 536
+ WM_PRINT = 791
+ WM_PRINTCLIENT = 792
+ WM_QUERYDRAGICON = 55
+ WM_QUERYENDSESSION = 17
+ WM_QUERYNEWPALETTE = 783
+ WM_QUERYOPEN = 19
+ WM_QUEUESYNC = 35
+ WM_QUIT = 18
+ WM_RENDERALLFORMATS = 774
+ WM_RENDERFORMAT = 773
+ WM_SETCURSOR = 32
+ WM_SETFOCUS = 7
+ WM_SETFONT = 48
+ WM_SETHOTKEY = 50
+ WM_SETICON = 128
+ WM_SETREDRAW = 11
+ WM_SETTEXT = 12
+ WM_SETTINGCHANGE = 26
+ WM_SHOWWINDOW = 24
+ WM_SIZE = 5
+ WM_SIZECLIPBOARD = 779
+ WM_SIZING = 532
+ WM_SPOOLERSTATUS = 42
+ WM_STYLECHANGED = 125
+ WM_STYLECHANGING = 124
+ WM_SYSCHAR = 262
+ WM_SYSCOLORCHANGE = 21
+ WM_SYSCOMMAND = 274
+ WM_SYSDEADCHAR = 263
+ WM_SYSKEYDOWN = 260
+ WM_SYSKEYUP = 261
+ WM_TCARD = 82
+ WM_THEMECHANGED = 794
+ WM_TIMECHANGE = 30
+ WM_TIMER = 275
+ WM_UNDO = 772
+ WM_USER = 1024
+ WM_USERCHANGED = 84
+ WM_VKEYTOITEM = 46
+ WM_VSCROLL = 277
+ WM_VSCROLLCLIPBOARD = 778
+ WM_WINDOWPOSCHANGED = 71
+ WM_WINDOWPOSCHANGING = 70
+ WM_WININICHANGE = 26
+ WM_KEYFIRST = 256
+ WM_KEYLAST = 264
+ WM_SYNCPAINT = 136
+ WM_MOUSEACTIVATE = 33
+ WM_MOUSEMOVE = 512
+ WM_LBUTTONDOWN = 513
+ WM_LBUTTONUP = 514
+ WM_LBUTTONDBLCLK = 515
+ WM_RBUTTONDOWN = 516
+ WM_RBUTTONUP = 517
+ WM_RBUTTONDBLCLK = 518
+ WM_MBUTTONDOWN = 519
+ WM_MBUTTONUP = 520
+ WM_MBUTTONDBLCLK = 521
+ WM_MOUSEWHEEL = 522
+ WM_XBUTTONDOWN = 523
+ WM_XBUTTONUP = 524
+ WM_XBUTTONDBLCLK = 525
+ WM_MOUSEHWHEEL = 526
+ WM_MOUSEFIRST = 512
+ WM_MOUSELAST = 526
+ WM_MOUSEHOVER = 0X2A1
+ WM_MOUSELEAVE = 0X2A3
+ WM_CLIPBOARDUPDATE = 0x031D
+)
+
+// WM_ACTIVATE
+const (
+ WA_INACTIVE = 0
+ WA_ACTIVE = 1
+ WA_CLICKACTIVE = 2
+)
+
+const LF_FACESIZE = 32
+
+// Font weight constants
+const (
+ FW_DONTCARE = 0
+ FW_THIN = 100
+ FW_EXTRALIGHT = 200
+ FW_ULTRALIGHT = FW_EXTRALIGHT
+ FW_LIGHT = 300
+ FW_NORMAL = 400
+ FW_REGULAR = 400
+ FW_MEDIUM = 500
+ FW_SEMIBOLD = 600
+ FW_DEMIBOLD = FW_SEMIBOLD
+ FW_BOLD = 700
+ FW_EXTRABOLD = 800
+ FW_ULTRABOLD = FW_EXTRABOLD
+ FW_HEAVY = 900
+ FW_BLACK = FW_HEAVY
+)
+
+// Charset constants
+const (
+ ANSI_CHARSET = 0
+ DEFAULT_CHARSET = 1
+ SYMBOL_CHARSET = 2
+ SHIFTJIS_CHARSET = 128
+ HANGEUL_CHARSET = 129
+ HANGUL_CHARSET = 129
+ GB2312_CHARSET = 134
+ CHINESEBIG5_CHARSET = 136
+ GREEK_CHARSET = 161
+ TURKISH_CHARSET = 162
+ HEBREW_CHARSET = 177
+ ARABIC_CHARSET = 178
+ BALTIC_CHARSET = 186
+ RUSSIAN_CHARSET = 204
+ THAI_CHARSET = 222
+ EASTEUROPE_CHARSET = 238
+ OEM_CHARSET = 255
+ JOHAB_CHARSET = 130
+ VIETNAMESE_CHARSET = 163
+ MAC_CHARSET = 77
+)
+
+// Font output precision constants
+const (
+ OUT_DEFAULT_PRECIS = 0
+ OUT_STRING_PRECIS = 1
+ OUT_CHARACTER_PRECIS = 2
+ OUT_STROKE_PRECIS = 3
+ OUT_TT_PRECIS = 4
+ OUT_DEVICE_PRECIS = 5
+ OUT_RASTER_PRECIS = 6
+ OUT_TT_ONLY_PRECIS = 7
+ OUT_OUTLINE_PRECIS = 8
+ OUT_PS_ONLY_PRECIS = 10
+)
+
+// Font clipping precision constants
+const (
+ CLIP_DEFAULT_PRECIS = 0
+ CLIP_CHARACTER_PRECIS = 1
+ CLIP_STROKE_PRECIS = 2
+ CLIP_MASK = 15
+ CLIP_LH_ANGLES = 16
+ CLIP_TT_ALWAYS = 32
+ CLIP_EMBEDDED = 128
+)
+
+// Font output quality constants
+const (
+ DEFAULT_QUALITY = 0
+ DRAFT_QUALITY = 1
+ PROOF_QUALITY = 2
+ NONANTIALIASED_QUALITY = 3
+ ANTIALIASED_QUALITY = 4
+ CLEARTYPE_QUALITY = 5
+)
+
+// Font pitch constants
+const (
+ DEFAULT_PITCH = 0
+ FIXED_PITCH = 1
+ VARIABLE_PITCH = 2
+)
+
+// Font family constants
+const (
+ FF_DECORATIVE = 80
+ FF_DONTCARE = 0
+ FF_MODERN = 48
+ FF_ROMAN = 16
+ FF_SCRIPT = 64
+ FF_SWISS = 32
+)
+
+// DeviceCapabilities capabilities
+const (
+ DC_FIELDS = 1
+ DC_PAPERS = 2
+ DC_PAPERSIZE = 3
+ DC_MINEXTENT = 4
+ DC_MAXEXTENT = 5
+ DC_BINS = 6
+ DC_DUPLEX = 7
+ DC_SIZE = 8
+ DC_EXTRA = 9
+ DC_VERSION = 10
+ DC_DRIVER = 11
+ DC_BINNAMES = 12
+ DC_ENUMRESOLUTIONS = 13
+ DC_FILEDEPENDENCIES = 14
+ DC_TRUETYPE = 15
+ DC_PAPERNAMES = 16
+ DC_ORIENTATION = 17
+ DC_COPIES = 18
+ DC_BINADJUST = 19
+ DC_EMF_COMPLIANT = 20
+ DC_DATATYPE_PRODUCED = 21
+ DC_COLLATE = 22
+ DC_MANUFACTURER = 23
+ DC_MODEL = 24
+ DC_PERSONALITY = 25
+ DC_PRINTRATE = 26
+ DC_PRINTRATEUNIT = 27
+ DC_PRINTERMEM = 28
+ DC_MEDIAREADY = 29
+ DC_STAPLE = 30
+ DC_PRINTRATEPPM = 31
+ DC_COLORDEVICE = 32
+ DC_NUP = 33
+ DC_MEDIATYPENAMES = 34
+ DC_MEDIATYPES = 35
+)
+
+// GetDeviceCaps index constants
+const (
+ DRIVERVERSION = 0
+ TECHNOLOGY = 2
+ HORZSIZE = 4
+ VERTSIZE = 6
+ HORZRES = 8
+ VERTRES = 10
+ LOGPIXELSX = 88
+ LOGPIXELSY = 90
+ BITSPIXEL = 12
+ PLANES = 14
+ NUMBRUSHES = 16
+ NUMPENS = 18
+ NUMFONTS = 22
+ NUMCOLORS = 24
+ NUMMARKERS = 20
+ ASPECTX = 40
+ ASPECTY = 42
+ ASPECTXY = 44
+ PDEVICESIZE = 26
+ CLIPCAPS = 36
+ SIZEPALETTE = 104
+ NUMRESERVED = 106
+ COLORRES = 108
+ PHYSICALWIDTH = 110
+ PHYSICALHEIGHT = 111
+ PHYSICALOFFSETX = 112
+ PHYSICALOFFSETY = 113
+ SCALINGFACTORX = 114
+ SCALINGFACTORY = 115
+ VREFRESH = 116
+ DESKTOPHORZRES = 118
+ DESKTOPVERTRES = 117
+ BLTALIGNMENT = 119
+ SHADEBLENDCAPS = 120
+ COLORMGMTCAPS = 121
+ RASTERCAPS = 38
+ CURVECAPS = 28
+ LINECAPS = 30
+ POLYGONALCAPS = 32
+ TEXTCAPS = 34
+)
+
+// GetDeviceCaps TECHNOLOGY constants
+const (
+ DT_PLOTTER = 0
+ DT_RASDISPLAY = 1
+ DT_RASPRINTER = 2
+ DT_RASCAMERA = 3
+ DT_CHARSTREAM = 4
+ DT_METAFILE = 5
+ DT_DISPFILE = 6
+)
+
+// GetDeviceCaps SHADEBLENDCAPS constants
+const (
+ SB_NONE = 0x00
+ SB_CONST_ALPHA = 0x01
+ SB_PIXEL_ALPHA = 0x02
+ SB_PREMULT_ALPHA = 0x04
+ SB_GRAD_RECT = 0x10
+ SB_GRAD_TRI = 0x20
+)
+
+// GetDeviceCaps COLORMGMTCAPS constants
+const (
+ CM_NONE = 0x00
+ CM_DEVICE_ICM = 0x01
+ CM_GAMMA_RAMP = 0x02
+ CM_CMYK_COLOR = 0x04
+)
+
+// GetDeviceCaps RASTERCAPS constants
+const (
+ RC_BANDING = 2
+ RC_BITBLT = 1
+ RC_BITMAP64 = 8
+ RC_DI_BITMAP = 128
+ RC_DIBTODEV = 512
+ RC_FLOODFILL = 4096
+ RC_GDI20_OUTPUT = 16
+ RC_PALETTE = 256
+ RC_SCALING = 4
+ RC_STRETCHBLT = 2048
+ RC_STRETCHDIB = 8192
+ RC_DEVBITS = 0x8000
+ RC_OP_DX_OUTPUT = 0x4000
+)
+
+// GetDeviceCaps CURVECAPS constants
+const (
+ CC_NONE = 0
+ CC_CIRCLES = 1
+ CC_PIE = 2
+ CC_CHORD = 4
+ CC_ELLIPSES = 8
+ CC_WIDE = 16
+ CC_STYLED = 32
+ CC_WIDESTYLED = 64
+ CC_INTERIORS = 128
+ CC_ROUNDRECT = 256
+)
+
+// GetDeviceCaps LINECAPS constants
+const (
+ LC_NONE = 0
+ LC_POLYLINE = 2
+ LC_MARKER = 4
+ LC_POLYMARKER = 8
+ LC_WIDE = 16
+ LC_STYLED = 32
+ LC_WIDESTYLED = 64
+ LC_INTERIORS = 128
+)
+
+// GetDeviceCaps POLYGONALCAPS constants
+const (
+ PC_NONE = 0
+ PC_POLYGON = 1
+ PC_POLYPOLYGON = 256
+ PC_PATHS = 512
+ PC_RECTANGLE = 2
+ PC_WINDPOLYGON = 4
+ PC_SCANLINE = 8
+ PC_TRAPEZOID = 4
+ PC_WIDE = 16
+ PC_STYLED = 32
+ PC_WIDESTYLED = 64
+ PC_INTERIORS = 128
+)
+
+// GetDeviceCaps TEXTCAPS constants
+const (
+ TC_OP_CHARACTER = 1
+ TC_OP_STROKE = 2
+ TC_CP_STROKE = 4
+ TC_CR_90 = 8
+ TC_CR_ANY = 16
+ TC_SF_X_YINDEP = 32
+ TC_SA_DOUBLE = 64
+ TC_SA_INTEGER = 128
+ TC_SA_CONTIN = 256
+ TC_EA_DOUBLE = 512
+ TC_IA_ABLE = 1024
+ TC_UA_ABLE = 2048
+ TC_SO_ABLE = 4096
+ TC_RA_ABLE = 8192
+ TC_VA_ABLE = 16384
+ TC_RESERVED = 32768
+ TC_SCROLLBLT = 65536
+)
+
+// Static control styles
+const (
+ SS_BITMAP = 14
+ SS_BLACKFRAME = 7
+ SS_BLACKRECT = 4
+ SS_CENTER = 1
+ SS_CENTERIMAGE = 512
+ SS_EDITCONTROL = 0x2000
+ SS_ENHMETAFILE = 15
+ SS_ETCHEDFRAME = 18
+ SS_ETCHEDHORZ = 16
+ SS_ETCHEDVERT = 17
+ SS_GRAYFRAME = 8
+ SS_GRAYRECT = 5
+ SS_ICON = 3
+ SS_LEFT = 0
+ SS_LEFTNOWORDWRAP = 0xc
+ SS_NOPREFIX = 128
+ SS_NOTIFY = 256
+ SS_OWNERDRAW = 0xd
+ SS_REALSIZECONTROL = 0x040
+ SS_REALSIZEIMAGE = 0x800
+ SS_RIGHT = 2
+ SS_RIGHTJUST = 0x400
+ SS_SIMPLE = 11
+ SS_SUNKEN = 4096
+ SS_WHITEFRAME = 9
+ SS_WHITERECT = 6
+ SS_USERITEM = 10
+ SS_TYPEMASK = 0x0000001F
+ SS_ENDELLIPSIS = 0x00004000
+ SS_PATHELLIPSIS = 0x00008000
+ SS_WORDELLIPSIS = 0x0000C000
+ SS_ELLIPSISMASK = 0x0000C000
+)
+
+// Edit styles
+const (
+ ES_LEFT = 0x0000
+ ES_CENTER = 0x0001
+ ES_RIGHT = 0x0002
+ ES_MULTILINE = 0x0004
+ ES_UPPERCASE = 0x0008
+ ES_LOWERCASE = 0x0010
+ ES_PASSWORD = 0x0020
+ ES_AUTOVSCROLL = 0x0040
+ ES_AUTOHSCROLL = 0x0080
+ ES_NOHIDESEL = 0x0100
+ ES_OEMCONVERT = 0x0400
+ ES_READONLY = 0x0800
+ ES_WANTRETURN = 0x1000
+ ES_NUMBER = 0x2000
+)
+
+// Edit notifications
+const (
+ EN_SETFOCUS = 0x0100
+ EN_KILLFOCUS = 0x0200
+ EN_CHANGE = 0x0300
+ EN_UPDATE = 0x0400
+ EN_ERRSPACE = 0x0500
+ EN_MAXTEXT = 0x0501
+ EN_HSCROLL = 0x0601
+ EN_VSCROLL = 0x0602
+ EN_ALIGN_LTR_EC = 0x0700
+ EN_ALIGN_RTL_EC = 0x0701
+)
+
+// Edit messages
+const (
+ EM_GETSEL = 0x00B0
+ EM_SETSEL = 0x00B1
+ EM_GETRECT = 0x00B2
+ EM_SETRECT = 0x00B3
+ EM_SETRECTNP = 0x00B4
+ EM_SCROLL = 0x00B5
+ EM_LINESCROLL = 0x00B6
+ EM_SCROLLCARET = 0x00B7
+ EM_GETMODIFY = 0x00B8
+ EM_SETMODIFY = 0x00B9
+ EM_GETLINECOUNT = 0x00BA
+ EM_LINEINDEX = 0x00BB
+ EM_SETHANDLE = 0x00BC
+ EM_GETHANDLE = 0x00BD
+ EM_GETTHUMB = 0x00BE
+ EM_LINELENGTH = 0x00C1
+ EM_REPLACESEL = 0x00C2
+ EM_GETLINE = 0x00C4
+ EM_LIMITTEXT = 0x00C5
+ EM_CANUNDO = 0x00C6
+ EM_UNDO = 0x00C7
+ EM_FMTLINES = 0x00C8
+ EM_LINEFROMCHAR = 0x00C9
+ EM_SETTABSTOPS = 0x00CB
+ EM_SETPASSWORDCHAR = 0x00CC
+ EM_EMPTYUNDOBUFFER = 0x00CD
+ EM_GETFIRSTVISIBLELINE = 0x00CE
+ EM_SETREADONLY = 0x00CF
+ EM_SETWORDBREAKPROC = 0x00D0
+ EM_GETWORDBREAKPROC = 0x00D1
+ EM_GETPASSWORDCHAR = 0x00D2
+ EM_SETMARGINS = 0x00D3
+ EM_GETMARGINS = 0x00D4
+ EM_SETLIMITTEXT = EM_LIMITTEXT
+ EM_GETLIMITTEXT = 0x00D5
+ EM_POSFROMCHAR = 0x00D6
+ EM_CHARFROMPOS = 0x00D7
+ EM_SETIMESTATUS = 0x00D8
+ EM_GETIMESTATUS = 0x00D9
+ EM_SETCUEBANNER = 0x1501
+ EM_GETCUEBANNER = 0x1502
+)
+
+const (
+ CCM_FIRST = 0x2000
+ CCM_LAST = CCM_FIRST + 0x200
+ CCM_SETBKCOLOR = 8193
+ CCM_SETCOLORSCHEME = 8194
+ CCM_GETCOLORSCHEME = 8195
+ CCM_GETDROPTARGET = 8196
+ CCM_SETUNICODEFORMAT = 8197
+ CCM_GETUNICODEFORMAT = 8198
+ CCM_SETVERSION = 0x2007
+ CCM_GETVERSION = 0x2008
+ CCM_SETNOTIFYWINDOW = 0x2009
+ CCM_SETWINDOWTHEME = 0x200b
+ CCM_DPISCALE = 0x200c
+)
+
+// Common controls styles
+const (
+ CCS_TOP = 1
+ CCS_NOMOVEY = 2
+ CCS_BOTTOM = 3
+ CCS_NORESIZE = 4
+ CCS_NOPARENTALIGN = 8
+ CCS_ADJUSTABLE = 32
+ CCS_NODIVIDER = 64
+ CCS_VERT = 128
+ CCS_LEFT = 129
+ CCS_NOMOVEX = 130
+ CCS_RIGHT = 131
+)
+
+// ProgressBar messages
+const (
+ PROGRESS_CLASS = "msctls_progress32"
+ PBM_SETPOS = WM_USER + 2
+ PBM_DELTAPOS = WM_USER + 3
+ PBM_SETSTEP = WM_USER + 4
+ PBM_STEPIT = WM_USER + 5
+ PBM_SETRANGE32 = 1030
+ PBM_GETRANGE = 1031
+ PBM_GETPOS = 1032
+ PBM_SETBARCOLOR = 1033
+ PBM_SETBKCOLOR = CCM_SETBKCOLOR
+ PBS_SMOOTH = 1
+ PBS_VERTICAL = 4
+)
+
+// GetOpenFileName and GetSaveFileName extended flags
+const (
+ OFN_EX_NOPLACESBAR = 0x00000001
+)
+
+// GetOpenFileName and GetSaveFileName flags
+const (
+ OFN_ALLOWMULTISELECT = 0x00000200
+ OFN_CREATEPROMPT = 0x00002000
+ OFN_DONTADDTORECENT = 0x02000000
+ OFN_ENABLEHOOK = 0x00000020
+ OFN_ENABLEINCLUDENOTIFY = 0x00400000
+ OFN_ENABLESIZING = 0x00800000
+ OFN_ENABLETEMPLATE = 0x00000040
+ OFN_ENABLETEMPLATEHANDLE = 0x00000080
+ OFN_EXPLORER = 0x00080000
+ OFN_EXTENSIONDIFFERENT = 0x00000400
+ OFN_FILEMUSTEXIST = 0x00001000
+ OFN_FORCESHOWHIDDEN = 0x10000000
+ OFN_HIDEREADONLY = 0x00000004
+ OFN_LONGNAMES = 0x00200000
+ OFN_NOCHANGEDIR = 0x00000008
+ OFN_NODEREFERENCELINKS = 0x00100000
+ OFN_NOLONGNAMES = 0x00040000
+ OFN_NONETWORKBUTTON = 0x00020000
+ OFN_NOREADONLYRETURN = 0x00008000
+ OFN_NOTESTFILECREATE = 0x00010000
+ OFN_NOVALIDATE = 0x00000100
+ OFN_OVERWRITEPROMPT = 0x00000002
+ OFN_PATHMUSTEXIST = 0x00000800
+ OFN_READONLY = 0x00000001
+ OFN_SHAREAWARE = 0x00004000
+ OFN_SHOWHELP = 0x00000010
+)
+
+//SHBrowseForFolder flags
+const (
+ BIF_RETURNONLYFSDIRS = 0x00000001
+ BIF_DONTGOBELOWDOMAIN = 0x00000002
+ BIF_STATUSTEXT = 0x00000004
+ BIF_RETURNFSANCESTORS = 0x00000008
+ BIF_EDITBOX = 0x00000010
+ BIF_VALIDATE = 0x00000020
+ BIF_NEWDIALOGSTYLE = 0x00000040
+ BIF_BROWSEINCLUDEURLS = 0x00000080
+ BIF_USENEWUI = BIF_EDITBOX | BIF_NEWDIALOGSTYLE
+ BIF_UAHINT = 0x00000100
+ BIF_NONEWFOLDERBUTTON = 0x00000200
+ BIF_NOTRANSLATETARGETS = 0x00000400
+ BIF_BROWSEFORCOMPUTER = 0x00001000
+ BIF_BROWSEFORPRINTER = 0x00002000
+ BIF_BROWSEINCLUDEFILES = 0x00004000
+ BIF_SHAREABLE = 0x00008000
+ BIF_BROWSEFILEJUNCTIONS = 0x00010000
+)
+
+//MessageBox flags
+const (
+ MB_OK = 0x00000000
+ MB_OKCANCEL = 0x00000001
+ MB_ABORTRETRYIGNORE = 0x00000002
+ MB_YESNOCANCEL = 0x00000003
+ MB_YESNO = 0x00000004
+ MB_RETRYCANCEL = 0x00000005
+ MB_CANCELTRYCONTINUE = 0x00000006
+ MB_ICONHAND = 0x00000010
+ MB_ICONQUESTION = 0x00000020
+ MB_ICONEXCLAMATION = 0x00000030
+ MB_ICONASTERISK = 0x00000040
+ MB_USERICON = 0x00000080
+ MB_ICONWARNING = MB_ICONEXCLAMATION
+ MB_ICONERROR = MB_ICONHAND
+ MB_ICONINFORMATION = MB_ICONASTERISK
+ MB_ICONSTOP = MB_ICONHAND
+ MB_DEFBUTTON1 = 0x00000000
+ MB_DEFBUTTON2 = 0x00000100
+ MB_DEFBUTTON3 = 0x00000200
+ MB_DEFBUTTON4 = 0x00000300
+)
+
+//COM
+const (
+ E_INVALIDARG = 0x80070057
+ E_OUTOFMEMORY = 0x8007000E
+ E_UNEXPECTED = 0x8000FFFF
+)
+
+const (
+ S_OK = 0
+ S_FALSE = 0x0001
+ RPC_E_CHANGED_MODE = 0x80010106
+)
+
+// GetSystemMetrics constants
+const (
+ SM_CXSCREEN = 0
+ SM_CYSCREEN = 1
+ SM_CXVSCROLL = 2
+ SM_CYHSCROLL = 3
+ SM_CYCAPTION = 4
+ SM_CXBORDER = 5
+ SM_CYBORDER = 6
+ SM_CXDLGFRAME = 7
+ SM_CYDLGFRAME = 8
+ SM_CYVTHUMB = 9
+ SM_CXHTHUMB = 10
+ SM_CXICON = 11
+ SM_CYICON = 12
+ SM_CXCURSOR = 13
+ SM_CYCURSOR = 14
+ SM_CYMENU = 15
+ SM_CXFULLSCREEN = 16
+ SM_CYFULLSCREEN = 17
+ SM_CYKANJIWINDOW = 18
+ SM_MOUSEPRESENT = 19
+ SM_CYVSCROLL = 20
+ SM_CXHSCROLL = 21
+ SM_DEBUG = 22
+ SM_SWAPBUTTON = 23
+ SM_RESERVED1 = 24
+ SM_RESERVED2 = 25
+ SM_RESERVED3 = 26
+ SM_RESERVED4 = 27
+ SM_CXMIN = 28
+ SM_CYMIN = 29
+ SM_CXSIZE = 30
+ SM_CYSIZE = 31
+ SM_CXFRAME = 32
+ SM_CYFRAME = 33
+ SM_CXMINTRACK = 34
+ SM_CYMINTRACK = 35
+ SM_CXDOUBLECLK = 36
+ SM_CYDOUBLECLK = 37
+ SM_CXICONSPACING = 38
+ SM_CYICONSPACING = 39
+ SM_MENUDROPALIGNMENT = 40
+ SM_PENWINDOWS = 41
+ SM_DBCSENABLED = 42
+ SM_CMOUSEBUTTONS = 43
+ SM_CXFIXEDFRAME = SM_CXDLGFRAME
+ SM_CYFIXEDFRAME = SM_CYDLGFRAME
+ SM_CXSIZEFRAME = SM_CXFRAME
+ SM_CYSIZEFRAME = SM_CYFRAME
+ SM_SECURE = 44
+ SM_CXEDGE = 45
+ SM_CYEDGE = 46
+ SM_CXMINSPACING = 47
+ SM_CYMINSPACING = 48
+ SM_CXSMICON = 49
+ SM_CYSMICON = 50
+ SM_CYSMCAPTION = 51
+ SM_CXSMSIZE = 52
+ SM_CYSMSIZE = 53
+ SM_CXMENUSIZE = 54
+ SM_CYMENUSIZE = 55
+ SM_ARRANGE = 56
+ SM_CXMINIMIZED = 57
+ SM_CYMINIMIZED = 58
+ SM_CXMAXTRACK = 59
+ SM_CYMAXTRACK = 60
+ SM_CXMAXIMIZED = 61
+ SM_CYMAXIMIZED = 62
+ SM_NETWORK = 63
+ SM_CLEANBOOT = 67
+ SM_CXDRAG = 68
+ SM_CYDRAG = 69
+ SM_SHOWSOUNDS = 70
+ SM_CXMENUCHECK = 71
+ SM_CYMENUCHECK = 72
+ SM_SLOWMACHINE = 73
+ SM_MIDEASTENABLED = 74
+ SM_MOUSEWHEELPRESENT = 75
+ SM_XVIRTUALSCREEN = 76
+ SM_YVIRTUALSCREEN = 77
+ SM_CXVIRTUALSCREEN = 78
+ SM_CYVIRTUALSCREEN = 79
+ SM_CMONITORS = 80
+ SM_SAMEDISPLAYFORMAT = 81
+ SM_IMMENABLED = 82
+ SM_CXFOCUSBORDER = 83
+ SM_CYFOCUSBORDER = 84
+ SM_TABLETPC = 86
+ SM_MEDIACENTER = 87
+ SM_STARTER = 88
+ SM_SERVERR2 = 89
+ SM_CMETRICS = 91
+ SM_REMOTESESSION = 0x1000
+ SM_SHUTTINGDOWN = 0x2000
+ SM_REMOTECONTROL = 0x2001
+ SM_CARETBLINKINGENABLED = 0x2002
+)
+
+const (
+ CLSCTX_INPROC_SERVER = 1
+ CLSCTX_INPROC_HANDLER = 2
+ CLSCTX_LOCAL_SERVER = 4
+ CLSCTX_INPROC_SERVER16 = 8
+ CLSCTX_REMOTE_SERVER = 16
+ CLSCTX_ALL = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER
+ CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER
+ CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER
+)
+
+const (
+ COINIT_APARTMENTTHREADED = 0x2
+ COINIT_MULTITHREADED = 0x0
+ COINIT_DISABLE_OLE1DDE = 0x4
+ COINIT_SPEED_OVER_MEMORY = 0x8
+)
+
+const (
+ DISPATCH_METHOD = 1
+ DISPATCH_PROPERTYGET = 2
+ DISPATCH_PROPERTYPUT = 4
+ DISPATCH_PROPERTYPUTREF = 8
+)
+
+const (
+ CC_FASTCALL = iota
+ CC_CDECL
+ CC_MSCPASCAL
+ CC_PASCAL = CC_MSCPASCAL
+ CC_MACPASCAL
+ CC_STDCALL
+ CC_FPFASTCALL
+ CC_SYSCALL
+ CC_MPWCDECL
+ CC_MPWPASCAL
+ CC_MAX = CC_MPWPASCAL
+)
+
+const (
+ VT_EMPTY = 0x0
+ VT_NULL = 0x1
+ VT_I2 = 0x2
+ VT_I4 = 0x3
+ VT_R4 = 0x4
+ VT_R8 = 0x5
+ VT_CY = 0x6
+ VT_DATE = 0x7
+ VT_BSTR = 0x8
+ VT_DISPATCH = 0x9
+ VT_ERROR = 0xa
+ VT_BOOL = 0xb
+ VT_VARIANT = 0xc
+ VT_UNKNOWN = 0xd
+ VT_DECIMAL = 0xe
+ VT_I1 = 0x10
+ VT_UI1 = 0x11
+ VT_UI2 = 0x12
+ VT_UI4 = 0x13
+ VT_I8 = 0x14
+ VT_UI8 = 0x15
+ VT_INT = 0x16
+ VT_UINT = 0x17
+ VT_VOID = 0x18
+ VT_HRESULT = 0x19
+ VT_PTR = 0x1a
+ VT_SAFEARRAY = 0x1b
+ VT_CARRAY = 0x1c
+ VT_USERDEFINED = 0x1d
+ VT_LPSTR = 0x1e
+ VT_LPWSTR = 0x1f
+ VT_RECORD = 0x24
+ VT_INT_PTR = 0x25
+ VT_UINT_PTR = 0x26
+ VT_FILETIME = 0x40
+ VT_BLOB = 0x41
+ VT_STREAM = 0x42
+ VT_STORAGE = 0x43
+ VT_STREAMED_OBJECT = 0x44
+ VT_STORED_OBJECT = 0x45
+ VT_BLOB_OBJECT = 0x46
+ VT_CF = 0x47
+ VT_CLSID = 0x48
+ VT_BSTR_BLOB = 0xfff
+ VT_VECTOR = 0x1000
+ VT_ARRAY = 0x2000
+ VT_BYREF = 0x4000
+ VT_RESERVED = 0x8000
+ VT_ILLEGAL = 0xffff
+ VT_ILLEGALMASKED = 0xfff
+ VT_TYPEMASK = 0xfff
+)
+
+const (
+ DISPID_UNKNOWN = -1
+ DISPID_VALUE = 0
+ DISPID_PROPERTYPUT = -3
+ DISPID_NEWENUM = -4
+ DISPID_EVALUATE = -5
+ DISPID_CONSTRUCTOR = -6
+ DISPID_DESTRUCTOR = -7
+ DISPID_COLLECT = -8
+)
+
+const (
+ MONITOR_DEFAULTTONULL = 0x00000000
+ MONITOR_DEFAULTTOPRIMARY = 0x00000001
+ MONITOR_DEFAULTTONEAREST = 0x00000002
+
+ MONITORINFOF_PRIMARY = 0x00000001
+)
+
+const (
+ CCHDEVICENAME = 32
+ CCHFORMNAME = 32
+)
+
+const (
+ IDOK = 1
+ IDCANCEL = 2
+ IDABORT = 3
+ IDRETRY = 4
+ IDIGNORE = 5
+ IDYES = 6
+ IDNO = 7
+ IDCLOSE = 8
+ IDHELP = 9
+ IDTRYAGAIN = 10
+ IDCONTINUE = 11
+ IDTIMEOUT = 32000
+)
+
+// Generic WM_NOTIFY notification codes
+const (
+ NM_FIRST = 0
+ NM_OUTOFMEMORY = NM_FIRST - 1
+ NM_CLICK = NM_FIRST - 2
+ NM_DBLCLK = NM_FIRST - 3
+ NM_RETURN = NM_FIRST - 4
+ NM_RCLICK = NM_FIRST - 5
+ NM_RDBLCLK = NM_FIRST - 6
+ NM_SETFOCUS = NM_FIRST - 7
+ NM_KILLFOCUS = NM_FIRST - 8
+ NM_CUSTOMDRAW = NM_FIRST - 12
+ NM_HOVER = NM_FIRST - 13
+ NM_NCHITTEST = NM_FIRST - 14
+ NM_KEYDOWN = NM_FIRST - 15
+ NM_RELEASEDCAPTURE = NM_FIRST - 16
+ NM_SETCURSOR = NM_FIRST - 17
+ NM_CHAR = NM_FIRST - 18
+ NM_TOOLTIPSCREATED = NM_FIRST - 19
+ NM_LAST = NM_FIRST - 99
+)
+
+// ListView messages
+const (
+ LVM_FIRST = 0x1000
+ LVM_GETITEMCOUNT = LVM_FIRST + 4
+ LVM_SETIMAGELIST = LVM_FIRST + 3
+ LVM_GETIMAGELIST = LVM_FIRST + 2
+ LVM_GETITEM = LVM_FIRST + 75
+ LVM_SETITEM = LVM_FIRST + 76
+ LVM_INSERTITEM = LVM_FIRST + 77
+ LVM_DELETEITEM = LVM_FIRST + 8
+ LVM_DELETEALLITEMS = LVM_FIRST + 9
+ LVM_GETCALLBACKMASK = LVM_FIRST + 10
+ LVM_SETCALLBACKMASK = LVM_FIRST + 11
+ LVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
+ LVM_GETNEXTITEM = LVM_FIRST + 12
+ LVM_FINDITEM = LVM_FIRST + 83
+ LVM_GETITEMRECT = LVM_FIRST + 14
+ LVM_GETSTRINGWIDTH = LVM_FIRST + 87
+ LVM_HITTEST = LVM_FIRST + 18
+ LVM_ENSUREVISIBLE = LVM_FIRST + 19
+ LVM_SCROLL = LVM_FIRST + 20
+ LVM_REDRAWITEMS = LVM_FIRST + 21
+ LVM_ARRANGE = LVM_FIRST + 22
+ LVM_EDITLABEL = LVM_FIRST + 118
+ LVM_GETEDITCONTROL = LVM_FIRST + 24
+ LVM_GETCOLUMN = LVM_FIRST + 95
+ LVM_SETCOLUMN = LVM_FIRST + 96
+ LVM_INSERTCOLUMN = LVM_FIRST + 97
+ LVM_DELETECOLUMN = LVM_FIRST + 28
+ LVM_GETCOLUMNWIDTH = LVM_FIRST + 29
+ LVM_SETCOLUMNWIDTH = LVM_FIRST + 30
+ LVM_GETHEADER = LVM_FIRST + 31
+ LVM_CREATEDRAGIMAGE = LVM_FIRST + 33
+ LVM_GETVIEWRECT = LVM_FIRST + 34
+ LVM_GETTEXTCOLOR = LVM_FIRST + 35
+ LVM_SETTEXTCOLOR = LVM_FIRST + 36
+ LVM_GETTEXTBKCOLOR = LVM_FIRST + 37
+ LVM_SETTEXTBKCOLOR = LVM_FIRST + 38
+ LVM_GETTOPINDEX = LVM_FIRST + 39
+ LVM_GETCOUNTPERPAGE = LVM_FIRST + 40
+ LVM_GETORIGIN = LVM_FIRST + 41
+ LVM_UPDATE = LVM_FIRST + 42
+ LVM_SETITEMSTATE = LVM_FIRST + 43
+ LVM_GETITEMSTATE = LVM_FIRST + 44
+ LVM_GETITEMTEXT = LVM_FIRST + 115
+ LVM_SETITEMTEXT = LVM_FIRST + 116
+ LVM_SETITEMCOUNT = LVM_FIRST + 47
+ LVM_SORTITEMS = LVM_FIRST + 48
+ LVM_SETITEMPOSITION32 = LVM_FIRST + 49
+ LVM_GETSELECTEDCOUNT = LVM_FIRST + 50
+ LVM_GETITEMSPACING = LVM_FIRST + 51
+ LVM_GETISEARCHSTRING = LVM_FIRST + 117
+ LVM_SETICONSPACING = LVM_FIRST + 53
+ LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54
+ LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55
+ LVM_GETSUBITEMRECT = LVM_FIRST + 56
+ LVM_SUBITEMHITTEST = LVM_FIRST + 57
+ LVM_SETCOLUMNORDERARRAY = LVM_FIRST + 58
+ LVM_GETCOLUMNORDERARRAY = LVM_FIRST + 59
+ LVM_SETHOTITEM = LVM_FIRST + 60
+ LVM_GETHOTITEM = LVM_FIRST + 61
+ LVM_SETHOTCURSOR = LVM_FIRST + 62
+ LVM_GETHOTCURSOR = LVM_FIRST + 63
+ LVM_APPROXIMATEVIEWRECT = LVM_FIRST + 64
+ LVM_SETWORKAREAS = LVM_FIRST + 65
+ LVM_GETWORKAREAS = LVM_FIRST + 70
+ LVM_GETNUMBEROFWORKAREAS = LVM_FIRST + 73
+ LVM_GETSELECTIONMARK = LVM_FIRST + 66
+ LVM_SETSELECTIONMARK = LVM_FIRST + 67
+ LVM_SETHOVERTIME = LVM_FIRST + 71
+ LVM_GETHOVERTIME = LVM_FIRST + 72
+ LVM_SETTOOLTIPS = LVM_FIRST + 74
+ LVM_GETTOOLTIPS = LVM_FIRST + 78
+ LVM_SORTITEMSEX = LVM_FIRST + 81
+ LVM_SETBKIMAGE = LVM_FIRST + 138
+ LVM_GETBKIMAGE = LVM_FIRST + 139
+ LVM_SETSELECTEDCOLUMN = LVM_FIRST + 140
+ LVM_SETVIEW = LVM_FIRST + 142
+ LVM_GETVIEW = LVM_FIRST + 143
+ LVM_INSERTGROUP = LVM_FIRST + 145
+ LVM_SETGROUPINFO = LVM_FIRST + 147
+ LVM_GETGROUPINFO = LVM_FIRST + 149
+ LVM_REMOVEGROUP = LVM_FIRST + 150
+ LVM_MOVEGROUP = LVM_FIRST + 151
+ LVM_GETGROUPCOUNT = LVM_FIRST + 152
+ LVM_GETGROUPINFOBYINDEX = LVM_FIRST + 153
+ LVM_MOVEITEMTOGROUP = LVM_FIRST + 154
+ LVM_GETGROUPRECT = LVM_FIRST + 98
+ LVM_SETGROUPMETRICS = LVM_FIRST + 155
+ LVM_GETGROUPMETRICS = LVM_FIRST + 156
+ LVM_ENABLEGROUPVIEW = LVM_FIRST + 157
+ LVM_SORTGROUPS = LVM_FIRST + 158
+ LVM_INSERTGROUPSORTED = LVM_FIRST + 159
+ LVM_REMOVEALLGROUPS = LVM_FIRST + 160
+ LVM_HASGROUP = LVM_FIRST + 161
+ LVM_GETGROUPSTATE = LVM_FIRST + 92
+ LVM_GETFOCUSEDGROUP = LVM_FIRST + 93
+ LVM_SETTILEVIEWINFO = LVM_FIRST + 162
+ LVM_GETTILEVIEWINFO = LVM_FIRST + 163
+ LVM_SETTILEINFO = LVM_FIRST + 164
+ LVM_GETTILEINFO = LVM_FIRST + 165
+ LVM_SETINSERTMARK = LVM_FIRST + 166
+ LVM_GETINSERTMARK = LVM_FIRST + 167
+ LVM_INSERTMARKHITTEST = LVM_FIRST + 168
+ LVM_GETINSERTMARKRECT = LVM_FIRST + 169
+ LVM_SETINSERTMARKCOLOR = LVM_FIRST + 170
+ LVM_GETINSERTMARKCOLOR = LVM_FIRST + 171
+ LVM_SETINFOTIP = LVM_FIRST + 173
+ LVM_GETSELECTEDCOLUMN = LVM_FIRST + 174
+ LVM_ISGROUPVIEWENABLED = LVM_FIRST + 175
+ LVM_GETOUTLINECOLOR = LVM_FIRST + 176
+ LVM_SETOUTLINECOLOR = LVM_FIRST + 177
+ LVM_CANCELEDITLABEL = LVM_FIRST + 179
+ LVM_MAPINDEXTOID = LVM_FIRST + 180
+ LVM_MAPIDTOINDEX = LVM_FIRST + 181
+ LVM_ISITEMVISIBLE = LVM_FIRST + 182
+ LVM_GETNEXTITEMINDEX = LVM_FIRST + 211
+)
+
+// ListView notifications
+const (
+ LVN_FIRST = -100
+
+ LVN_ITEMCHANGING = LVN_FIRST - 0
+ LVN_ITEMCHANGED = LVN_FIRST - 1
+ LVN_INSERTITEM = LVN_FIRST - 2
+ LVN_DELETEITEM = LVN_FIRST - 3
+ LVN_DELETEALLITEMS = LVN_FIRST - 4
+ LVN_BEGINLABELEDITA = LVN_FIRST - 5
+ LVN_BEGINLABELEDITW = LVN_FIRST - 75
+ LVN_ENDLABELEDITA = LVN_FIRST - 6
+ LVN_ENDLABELEDITW = LVN_FIRST - 76
+ LVN_COLUMNCLICK = LVN_FIRST - 8
+ LVN_BEGINDRAG = LVN_FIRST - 9
+ LVN_BEGINRDRAG = LVN_FIRST - 11
+ LVN_ODCACHEHINT = LVN_FIRST - 13
+ LVN_ODFINDITEMA = LVN_FIRST - 52
+ LVN_ODFINDITEMW = LVN_FIRST - 79
+ LVN_ITEMACTIVATE = LVN_FIRST - 14
+ LVN_ODSTATECHANGED = LVN_FIRST - 15
+ LVN_HOTTRACK = LVN_FIRST - 21
+ LVN_GETDISPINFO = LVN_FIRST - 77
+ LVN_SETDISPINFO = LVN_FIRST - 78
+ LVN_KEYDOWN = LVN_FIRST - 55
+ LVN_MARQUEEBEGIN = LVN_FIRST - 56
+ LVN_GETINFOTIP = LVN_FIRST - 58
+ LVN_INCREMENTALSEARCH = LVN_FIRST - 63
+ LVN_BEGINSCROLL = LVN_FIRST - 80
+ LVN_ENDSCROLL = LVN_FIRST - 81
+)
+
+// ListView LVNI constants
+const (
+ LVNI_ALL = 0
+ LVNI_FOCUSED = 1
+ LVNI_SELECTED = 2
+ LVNI_CUT = 4
+ LVNI_DROPHILITED = 8
+ LVNI_ABOVE = 256
+ LVNI_BELOW = 512
+ LVNI_TOLEFT = 1024
+ LVNI_TORIGHT = 2048
+)
+
+// ListView styles
+const (
+ LVS_ICON = 0x0000
+ LVS_REPORT = 0x0001
+ LVS_SMALLICON = 0x0002
+ LVS_LIST = 0x0003
+ LVS_TYPEMASK = 0x0003
+ LVS_SINGLESEL = 0x0004
+ LVS_SHOWSELALWAYS = 0x0008
+ LVS_SORTASCENDING = 0x0010
+ LVS_SORTDESCENDING = 0x0020
+ LVS_SHAREIMAGELISTS = 0x0040
+ LVS_NOLABELWRAP = 0x0080
+ LVS_AUTOARRANGE = 0x0100
+ LVS_EDITLABELS = 0x0200
+ LVS_OWNERDATA = 0x1000
+ LVS_NOSCROLL = 0x2000
+ LVS_TYPESTYLEMASK = 0xfc00
+ LVS_ALIGNTOP = 0x0000
+ LVS_ALIGNLEFT = 0x0800
+ LVS_ALIGNMASK = 0x0c00
+ LVS_OWNERDRAWFIXED = 0x0400
+ LVS_NOCOLUMNHEADER = 0x4000
+ LVS_NOSORTHEADER = 0x8000
+)
+
+// ListView extended styles
+const (
+ LVS_EX_GRIDLINES = 0x00000001
+ LVS_EX_SUBITEMIMAGES = 0x00000002
+ LVS_EX_CHECKBOXES = 0x00000004
+ LVS_EX_TRACKSELECT = 0x00000008
+ LVS_EX_HEADERDRAGDROP = 0x00000010
+ LVS_EX_FULLROWSELECT = 0x00000020
+ LVS_EX_ONECLICKACTIVATE = 0x00000040
+ LVS_EX_TWOCLICKACTIVATE = 0x00000080
+ LVS_EX_FLATSB = 0x00000100
+ LVS_EX_REGIONAL = 0x00000200
+ LVS_EX_INFOTIP = 0x00000400
+ LVS_EX_UNDERLINEHOT = 0x00000800
+ LVS_EX_UNDERLINECOLD = 0x00001000
+ LVS_EX_MULTIWORKAREAS = 0x00002000
+ LVS_EX_LABELTIP = 0x00004000
+ LVS_EX_BORDERSELECT = 0x00008000
+ LVS_EX_DOUBLEBUFFER = 0x00010000
+ LVS_EX_HIDELABELS = 0x00020000
+ LVS_EX_SINGLEROW = 0x00040000
+ LVS_EX_SNAPTOGRID = 0x00080000
+ LVS_EX_SIMPLESELECT = 0x00100000
+)
+
+// ListView column flags
+const (
+ LVCF_FMT = 0x0001
+ LVCF_WIDTH = 0x0002
+ LVCF_TEXT = 0x0004
+ LVCF_SUBITEM = 0x0008
+ LVCF_IMAGE = 0x0010
+ LVCF_ORDER = 0x0020
+)
+
+// ListView column format constants
+const (
+ LVCFMT_LEFT = 0x0000
+ LVCFMT_RIGHT = 0x0001
+ LVCFMT_CENTER = 0x0002
+ LVCFMT_JUSTIFYMASK = 0x0003
+ LVCFMT_IMAGE = 0x0800
+ LVCFMT_BITMAP_ON_RIGHT = 0x1000
+ LVCFMT_COL_HAS_IMAGES = 0x8000
+)
+
+// ListView item flags
+const (
+ LVIF_TEXT = 0x00000001
+ LVIF_IMAGE = 0x00000002
+ LVIF_PARAM = 0x00000004
+ LVIF_STATE = 0x00000008
+ LVIF_INDENT = 0x00000010
+ LVIF_NORECOMPUTE = 0x00000800
+ LVIF_GROUPID = 0x00000100
+ LVIF_COLUMNS = 0x00000200
+)
+
+// ListView item states
+const (
+ LVIS_FOCUSED = 1
+ LVIS_SELECTED = 2
+ LVIS_CUT = 4
+ LVIS_DROPHILITED = 8
+ LVIS_OVERLAYMASK = 0xF00
+ LVIS_STATEIMAGEMASK = 0xF000
+)
+
+// ListView hit test constants
+const (
+ LVHT_NOWHERE = 0x00000001
+ LVHT_ONITEMICON = 0x00000002
+ LVHT_ONITEMLABEL = 0x00000004
+ LVHT_ONITEMSTATEICON = 0x00000008
+ LVHT_ONITEM = LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON
+
+ LVHT_ABOVE = 0x00000008
+ LVHT_BELOW = 0x00000010
+ LVHT_TORIGHT = 0x00000020
+ LVHT_TOLEFT = 0x00000040
+)
+
+// ListView image list types
+const (
+ LVSIL_NORMAL = 0
+ LVSIL_SMALL = 1
+ LVSIL_STATE = 2
+ LVSIL_GROUPHEADER = 3
+)
+
+// InitCommonControlsEx flags
+const (
+ ICC_LISTVIEW_CLASSES = 1
+ ICC_TREEVIEW_CLASSES = 2
+ ICC_BAR_CLASSES = 4
+ ICC_TAB_CLASSES = 8
+ ICC_UPDOWN_CLASS = 16
+ ICC_PROGRESS_CLASS = 32
+ ICC_HOTKEY_CLASS = 64
+ ICC_ANIMATE_CLASS = 128
+ ICC_WIN95_CLASSES = 255
+ ICC_DATE_CLASSES = 256
+ ICC_USEREX_CLASSES = 512
+ ICC_COOL_CLASSES = 1024
+ ICC_INTERNET_CLASSES = 2048
+ ICC_PAGESCROLLER_CLASS = 4096
+ ICC_NATIVEFNTCTL_CLASS = 8192
+ INFOTIPSIZE = 1024
+ ICC_STANDARD_CLASSES = 0x00004000
+ ICC_LINK_CLASS = 0x00008000
+)
+
+// Dialog Codes
+const (
+ DLGC_WANTARROWS = 0x0001
+ DLGC_WANTTAB = 0x0002
+ DLGC_WANTALLKEYS = 0x0004
+ DLGC_WANTMESSAGE = 0x0004
+ DLGC_HASSETSEL = 0x0008
+ DLGC_DEFPUSHBUTTON = 0x0010
+ DLGC_UNDEFPUSHBUTTON = 0x0020
+ DLGC_RADIOBUTTON = 0x0040
+ DLGC_WANTCHARS = 0x0080
+ DLGC_STATIC = 0x0100
+ DLGC_BUTTON = 0x2000
+)
+
+// Get/SetWindowWord/Long offsets for use with WC_DIALOG windows
+const (
+ DWL_MSGRESULT = 0
+ DWL_DLGPROC = 4
+ DWL_USER = 8
+)
+
+// PeekMessage wRemoveMsg value
+const (
+ PM_NOREMOVE = 0x000
+ PM_REMOVE = 0x001
+ PM_NOYIELD = 0x002
+)
+
+// ImageList flags
+const (
+ ILC_MASK = 0x00000001
+ ILC_COLOR = 0x00000000
+ ILC_COLORDDB = 0x000000FE
+ ILC_COLOR4 = 0x00000004
+ ILC_COLOR8 = 0x00000008
+ ILC_COLOR16 = 0x00000010
+ ILC_COLOR24 = 0x00000018
+ ILC_COLOR32 = 0x00000020
+ ILC_PALETTE = 0x00000800
+ ILC_MIRROR = 0x00002000
+ ILC_PERITEMMIRROR = 0x00008000
+ ILC_ORIGINALSIZE = 0x00010000
+ ILC_HIGHQUALITYSCALE = 0x00020000
+)
+
+// Keystroke Message Flags
+const (
+ KF_EXTENDED = 0x0100
+ KF_DLGMODE = 0x0800
+ KF_MENUMODE = 0x1000
+ KF_ALTDOWN = 0x2000
+ KF_REPEAT = 0x4000
+ KF_UP = 0x8000
+)
+
+// Virtual-Key Codes
+const (
+ VK_LBUTTON = 0x01
+ VK_RBUTTON = 0x02
+ VK_CANCEL = 0x03
+ VK_MBUTTON = 0x04
+ VK_XBUTTON1 = 0x05
+ VK_XBUTTON2 = 0x06
+ VK_BACK = 0x08
+ VK_TAB = 0x09
+ VK_CLEAR = 0x0C
+ VK_RETURN = 0x0D
+ VK_SHIFT = 0x10
+ VK_CONTROL = 0x11
+ VK_MENU = 0x12
+ VK_PAUSE = 0x13
+ VK_CAPITAL = 0x14
+ VK_KANA = 0x15
+ VK_HANGEUL = 0x15
+ VK_HANGUL = 0x15
+ VK_JUNJA = 0x17
+ VK_FINAL = 0x18
+ VK_HANJA = 0x19
+ VK_KANJI = 0x19
+ VK_ESCAPE = 0x1B
+ VK_CONVERT = 0x1C
+ VK_NONCONVERT = 0x1D
+ VK_ACCEPT = 0x1E
+ VK_MODECHANGE = 0x1F
+ VK_SPACE = 0x20
+ VK_PRIOR = 0x21
+ VK_NEXT = 0x22
+ VK_END = 0x23
+ VK_HOME = 0x24
+ VK_LEFT = 0x25
+ VK_UP = 0x26
+ VK_RIGHT = 0x27
+ VK_DOWN = 0x28
+ VK_SELECT = 0x29
+ VK_PRINT = 0x2A
+ VK_EXECUTE = 0x2B
+ VK_SNAPSHOT = 0x2C
+ VK_INSERT = 0x2D
+ VK_DELETE = 0x2E
+ VK_HELP = 0x2F
+ VK_LWIN = 0x5B
+ VK_RWIN = 0x5C
+ VK_APPS = 0x5D
+ VK_SLEEP = 0x5F
+ VK_NUMPAD0 = 0x60
+ VK_NUMPAD1 = 0x61
+ VK_NUMPAD2 = 0x62
+ VK_NUMPAD3 = 0x63
+ VK_NUMPAD4 = 0x64
+ VK_NUMPAD5 = 0x65
+ VK_NUMPAD6 = 0x66
+ VK_NUMPAD7 = 0x67
+ VK_NUMPAD8 = 0x68
+ VK_NUMPAD9 = 0x69
+ VK_MULTIPLY = 0x6A
+ VK_ADD = 0x6B
+ VK_SEPARATOR = 0x6C
+ VK_SUBTRACT = 0x6D
+ VK_DECIMAL = 0x6E
+ VK_DIVIDE = 0x6F
+ VK_F1 = 0x70
+ VK_F2 = 0x71
+ VK_F3 = 0x72
+ VK_F4 = 0x73
+ VK_F5 = 0x74
+ VK_F6 = 0x75
+ VK_F7 = 0x76
+ VK_F8 = 0x77
+ VK_F9 = 0x78
+ VK_F10 = 0x79
+ VK_F11 = 0x7A
+ VK_F12 = 0x7B
+ VK_F13 = 0x7C
+ VK_F14 = 0x7D
+ VK_F15 = 0x7E
+ VK_F16 = 0x7F
+ VK_F17 = 0x80
+ VK_F18 = 0x81
+ VK_F19 = 0x82
+ VK_F20 = 0x83
+ VK_F21 = 0x84
+ VK_F22 = 0x85
+ VK_F23 = 0x86
+ VK_F24 = 0x87
+ VK_NUMLOCK = 0x90
+ VK_SCROLL = 0x91
+ VK_OEM_NEC_EQUAL = 0x92
+ VK_OEM_FJ_JISHO = 0x92
+ VK_OEM_FJ_MASSHOU = 0x93
+ VK_OEM_FJ_TOUROKU = 0x94
+ VK_OEM_FJ_LOYA = 0x95
+ VK_OEM_FJ_ROYA = 0x96
+ VK_LSHIFT = 0xA0
+ VK_RSHIFT = 0xA1
+ VK_LCONTROL = 0xA2
+ VK_RCONTROL = 0xA3
+ VK_LMENU = 0xA4
+ VK_RMENU = 0xA5
+ VK_BROWSER_BACK = 0xA6
+ VK_BROWSER_FORWARD = 0xA7
+ VK_BROWSER_REFRESH = 0xA8
+ VK_BROWSER_STOP = 0xA9
+ VK_BROWSER_SEARCH = 0xAA
+ VK_BROWSER_FAVORITES = 0xAB
+ VK_BROWSER_HOME = 0xAC
+ VK_VOLUME_MUTE = 0xAD
+ VK_VOLUME_DOWN = 0xAE
+ VK_VOLUME_UP = 0xAF
+ VK_MEDIA_NEXT_TRACK = 0xB0
+ VK_MEDIA_PREV_TRACK = 0xB1
+ VK_MEDIA_STOP = 0xB2
+ VK_MEDIA_PLAY_PAUSE = 0xB3
+ VK_LAUNCH_MAIL = 0xB4
+ VK_LAUNCH_MEDIA_SELECT = 0xB5
+ VK_LAUNCH_APP1 = 0xB6
+ VK_LAUNCH_APP2 = 0xB7
+ VK_OEM_1 = 0xBA
+ VK_OEM_PLUS = 0xBB
+ VK_OEM_COMMA = 0xBC
+ VK_OEM_MINUS = 0xBD
+ VK_OEM_PERIOD = 0xBE
+ VK_OEM_2 = 0xBF
+ VK_OEM_3 = 0xC0
+ VK_OEM_4 = 0xDB
+ VK_OEM_5 = 0xDC
+ VK_OEM_6 = 0xDD
+ VK_OEM_7 = 0xDE
+ VK_OEM_8 = 0xDF
+ VK_OEM_AX = 0xE1
+ VK_OEM_102 = 0xE2
+ VK_ICO_HELP = 0xE3
+ VK_ICO_00 = 0xE4
+ VK_PROCESSKEY = 0xE5
+ VK_ICO_CLEAR = 0xE6
+ VK_PACKET = 0xE7
+ VK_OEM_RESET = 0xE9
+ VK_OEM_JUMP = 0xEA
+ VK_OEM_PA1 = 0xEB
+ VK_OEM_PA2 = 0xEC
+ VK_OEM_PA3 = 0xED
+ VK_OEM_WSCTRL = 0xEE
+ VK_OEM_CUSEL = 0xEF
+ VK_OEM_ATTN = 0xF0
+ VK_OEM_FINISH = 0xF1
+ VK_OEM_COPY = 0xF2
+ VK_OEM_AUTO = 0xF3
+ VK_OEM_ENLW = 0xF4
+ VK_OEM_BACKTAB = 0xF5
+ VK_ATTN = 0xF6
+ VK_CRSEL = 0xF7
+ VK_EXSEL = 0xF8
+ VK_EREOF = 0xF9
+ VK_PLAY = 0xFA
+ VK_ZOOM = 0xFB
+ VK_NONAME = 0xFC
+ VK_PA1 = 0xFD
+ VK_OEM_CLEAR = 0xFE
+)
+
+// Registry Value Types
+const (
+ REG_NONE = 0
+ REG_SZ = 1
+ REG_EXPAND_SZ = 2
+ REG_BINARY = 3
+ REG_DWORD = 4
+ REG_DWORD_LITTLE_ENDIAN = 4
+ REG_DWORD_BIG_ENDIAN = 5
+ REG_LINK = 6
+ REG_MULTI_SZ = 7
+ REG_RESOURCE_LIST = 8
+ REG_FULL_RESOURCE_DESCRIPTOR = 9
+ REG_RESOURCE_REQUIREMENTS_LIST = 10
+ REG_QWORD = 11
+ REG_QWORD_LITTLE_ENDIAN = 11
+)
+
+// Tooltip styles
+const (
+ TTS_ALWAYSTIP = 0x01
+ TTS_NOPREFIX = 0x02
+ TTS_NOANIMATE = 0x10
+ TTS_NOFADE = 0x20
+ TTS_BALLOON = 0x40
+ TTS_CLOSE = 0x80
+ TTS_USEVISUALSTYLE = 0x100
+)
+
+// Tooltip messages
+const (
+ TTM_ACTIVATE = (WM_USER + 1)
+ TTM_SETDELAYTIME = (WM_USER + 3)
+ TTM_ADDTOOL = (WM_USER + 50)
+ TTM_DELTOOL = (WM_USER + 51)
+ TTM_NEWTOOLRECT = (WM_USER + 52)
+ TTM_RELAYEVENT = (WM_USER + 7)
+ TTM_GETTOOLINFO = (WM_USER + 53)
+ TTM_SETTOOLINFO = (WM_USER + 54)
+ TTM_HITTEST = (WM_USER + 55)
+ TTM_GETTEXT = (WM_USER + 56)
+ TTM_UPDATETIPTEXT = (WM_USER + 57)
+ TTM_GETTOOLCOUNT = (WM_USER + 13)
+ TTM_ENUMTOOLS = (WM_USER + 58)
+ TTM_GETCURRENTTOOL = (WM_USER + 59)
+ TTM_WINDOWFROMPOINT = (WM_USER + 16)
+ TTM_TRACKACTIVATE = (WM_USER + 17)
+ TTM_TRACKPOSITION = (WM_USER + 18)
+ TTM_SETTIPBKCOLOR = (WM_USER + 19)
+ TTM_SETTIPTEXTCOLOR = (WM_USER + 20)
+ TTM_GETDELAYTIME = (WM_USER + 21)
+ TTM_GETTIPBKCOLOR = (WM_USER + 22)
+ TTM_GETTIPTEXTCOLOR = (WM_USER + 23)
+ TTM_SETMAXTIPWIDTH = (WM_USER + 24)
+ TTM_GETMAXTIPWIDTH = (WM_USER + 25)
+ TTM_SETMARGIN = (WM_USER + 26)
+ TTM_GETMARGIN = (WM_USER + 27)
+ TTM_POP = (WM_USER + 28)
+ TTM_UPDATE = (WM_USER + 29)
+ TTM_GETBUBBLESIZE = (WM_USER + 30)
+ TTM_ADJUSTRECT = (WM_USER + 31)
+ TTM_SETTITLE = (WM_USER + 33)
+ TTM_POPUP = (WM_USER + 34)
+ TTM_GETTITLE = (WM_USER + 35)
+)
+
+// Tooltip icons
+const (
+ TTI_NONE = 0
+ TTI_INFO = 1
+ TTI_WARNING = 2
+ TTI_ERROR = 3
+ TTI_INFO_LARGE = 4
+ TTI_WARNING_LARGE = 5
+ TTI_ERROR_LARGE = 6
+)
+
+// Tooltip notifications
+const (
+ TTN_FIRST = -520
+ TTN_LAST = -549
+ TTN_GETDISPINFO = (TTN_FIRST - 10)
+ TTN_SHOW = (TTN_FIRST - 1)
+ TTN_POP = (TTN_FIRST - 2)
+ TTN_LINKCLICK = (TTN_FIRST - 3)
+ TTN_NEEDTEXT = TTN_GETDISPINFO
+)
+
+const (
+ TTF_IDISHWND = 0x0001
+ TTF_CENTERTIP = 0x0002
+ TTF_RTLREADING = 0x0004
+ TTF_SUBCLASS = 0x0010
+ TTF_TRACK = 0x0020
+ TTF_ABSOLUTE = 0x0080
+ TTF_TRANSPARENT = 0x0100
+ TTF_PARSELINKS = 0x1000
+ TTF_DI_SETITEM = 0x8000
+)
+
+const (
+ SWP_NOSIZE = 0x0001
+ SWP_NOMOVE = 0x0002
+ SWP_NOZORDER = 0x0004
+ SWP_NOREDRAW = 0x0008
+ SWP_NOACTIVATE = 0x0010
+ SWP_FRAMECHANGED = 0x0020
+ SWP_SHOWWINDOW = 0x0040
+ SWP_HIDEWINDOW = 0x0080
+ SWP_NOCOPYBITS = 0x0100
+ SWP_NOOWNERZORDER = 0x0200
+ SWP_NOSENDCHANGING = 0x0400
+ SWP_DRAWFRAME = SWP_FRAMECHANGED
+ SWP_NOREPOSITION = SWP_NOOWNERZORDER
+ SWP_DEFERERASE = 0x2000
+ SWP_ASYNCWINDOWPOS = 0x4000
+)
+
+// Predefined window handles
+const (
+ HWND_BROADCAST = HWND(0xFFFF)
+ HWND_BOTTOM = HWND(1)
+ HWND_NOTOPMOST = ^HWND(1) // -2
+ HWND_TOP = HWND(0)
+ HWND_TOPMOST = ^HWND(0) // -1
+ HWND_DESKTOP = HWND(0)
+ HWND_MESSAGE = ^HWND(2) // -3
+)
+
+// Pen types
+const (
+ PS_COSMETIC = 0x00000000
+ PS_GEOMETRIC = 0x00010000
+ PS_TYPE_MASK = 0x000F0000
+)
+
+// Pen styles
+const (
+ PS_SOLID = 0
+ PS_DASH = 1
+ PS_DOT = 2
+ PS_DASHDOT = 3
+ PS_DASHDOTDOT = 4
+ PS_NULL = 5
+ PS_INSIDEFRAME = 6
+ PS_USERSTYLE = 7
+ PS_ALTERNATE = 8
+ PS_STYLE_MASK = 0x0000000F
+)
+
+// Pen cap types
+const (
+ PS_ENDCAP_ROUND = 0x00000000
+ PS_ENDCAP_SQUARE = 0x00000100
+ PS_ENDCAP_FLAT = 0x00000200
+ PS_ENDCAP_MASK = 0x00000F00
+)
+
+// Pen join types
+const (
+ PS_JOIN_ROUND = 0x00000000
+ PS_JOIN_BEVEL = 0x00001000
+ PS_JOIN_MITER = 0x00002000
+ PS_JOIN_MASK = 0x0000F000
+)
+
+// Hatch styles
+const (
+ HS_HORIZONTAL = 0
+ HS_VERTICAL = 1
+ HS_FDIAGONAL = 2
+ HS_BDIAGONAL = 3
+ HS_CROSS = 4
+ HS_DIAGCROSS = 5
+)
+
+// Stock Logical Objects
+const (
+ WHITE_BRUSH = 0
+ LTGRAY_BRUSH = 1
+ GRAY_BRUSH = 2
+ DKGRAY_BRUSH = 3
+ BLACK_BRUSH = 4
+ NULL_BRUSH = 5
+ HOLLOW_BRUSH = NULL_BRUSH
+ WHITE_PEN = 6
+ BLACK_PEN = 7
+ NULL_PEN = 8
+ OEM_FIXED_FONT = 10
+ ANSI_FIXED_FONT = 11
+ ANSI_VAR_FONT = 12
+ SYSTEM_FONT = 13
+ DEVICE_DEFAULT_FONT = 14
+ DEFAULT_PALETTE = 15
+ SYSTEM_FIXED_FONT = 16
+ DEFAULT_GUI_FONT = 17
+ DC_BRUSH = 18
+ DC_PEN = 19
+)
+
+// Brush styles
+const (
+ BS_SOLID = 0
+ BS_NULL = 1
+ BS_HOLLOW = BS_NULL
+ BS_HATCHED = 2
+ BS_PATTERN = 3
+ BS_INDEXED = 4
+ BS_DIBPATTERN = 5
+ BS_DIBPATTERNPT = 6
+ BS_PATTERN8X8 = 7
+ BS_DIBPATTERN8X8 = 8
+ BS_MONOPATTERN = 9
+)
+
+// TRACKMOUSEEVENT flags
+const (
+ TME_HOVER = 0x00000001
+ TME_LEAVE = 0x00000002
+ TME_NONCLIENT = 0x00000010
+ TME_QUERY = 0x40000000
+ TME_CANCEL = 0x80000000
+
+ HOVER_DEFAULT = 0xFFFFFFFF
+)
+
+// WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes
+const (
+ HTERROR = (-2)
+ HTTRANSPARENT = (-1)
+ HTNOWHERE = 0
+ HTCLIENT = 1
+ HTCAPTION = 2
+ HTSYSMENU = 3
+ HTGROWBOX = 4
+ HTSIZE = HTGROWBOX
+ HTMENU = 5
+ HTHSCROLL = 6
+ HTVSCROLL = 7
+ HTMINBUTTON = 8
+ HTMAXBUTTON = 9
+ HTLEFT = 10
+ HTRIGHT = 11
+ HTTOP = 12
+ HTTOPLEFT = 13
+ HTTOPRIGHT = 14
+ HTBOTTOM = 15
+ HTBOTTOMLEFT = 16
+ HTBOTTOMRIGHT = 17
+ HTBORDER = 18
+ HTREDUCE = HTMINBUTTON
+ HTZOOM = HTMAXBUTTON
+ HTSIZEFIRST = HTLEFT
+ HTSIZELAST = HTBOTTOMRIGHT
+ HTOBJECT = 19
+ HTCLOSE = 20
+ HTHELP = 21
+)
+
+// DrawText[Ex] format flags
+const (
+ DT_TOP = 0x00000000
+ DT_LEFT = 0x00000000
+ DT_CENTER = 0x00000001
+ DT_RIGHT = 0x00000002
+ DT_VCENTER = 0x00000004
+ DT_BOTTOM = 0x00000008
+ DT_WORDBREAK = 0x00000010
+ DT_SINGLELINE = 0x00000020
+ DT_EXPANDTABS = 0x00000040
+ DT_TABSTOP = 0x00000080
+ DT_NOCLIP = 0x00000100
+ DT_EXTERNALLEADING = 0x00000200
+ DT_CALCRECT = 0x00000400
+ DT_NOPREFIX = 0x00000800
+ DT_INTERNAL = 0x00001000
+ DT_EDITCONTROL = 0x00002000
+ DT_PATH_ELLIPSIS = 0x00004000
+ DT_END_ELLIPSIS = 0x00008000
+ DT_MODIFYSTRING = 0x00010000
+ DT_RTLREADING = 0x00020000
+ DT_WORD_ELLIPSIS = 0x00040000
+ DT_NOFULLWIDTHCHARBREAK = 0x00080000
+ DT_HIDEPREFIX = 0x00100000
+ DT_PREFIXONLY = 0x00200000
+)
+
+const CLR_INVALID = 0xFFFFFFFF
+
+// Background Modes
+const (
+ TRANSPARENT = 1
+ OPAQUE = 2
+ BKMODE_LAST = 2
+)
+
+// Global Memory Flags
+const (
+ GMEM_FIXED = 0x0000
+ GMEM_MOVEABLE = 0x0002
+ GMEM_NOCOMPACT = 0x0010
+ GMEM_NODISCARD = 0x0020
+ GMEM_ZEROINIT = 0x0040
+ GMEM_MODIFY = 0x0080
+ GMEM_DISCARDABLE = 0x0100
+ GMEM_NOT_BANKED = 0x1000
+ GMEM_SHARE = 0x2000
+ GMEM_DDESHARE = 0x2000
+ GMEM_NOTIFY = 0x4000
+ GMEM_LOWER = GMEM_NOT_BANKED
+ GMEM_VALID_FLAGS = 0x7F72
+ GMEM_INVALID_HANDLE = 0x8000
+ GHND = (GMEM_MOVEABLE | GMEM_ZEROINIT)
+ GPTR = (GMEM_FIXED | GMEM_ZEROINIT)
+)
+
+// Ternary raster operations
+const (
+ SRCCOPY = 0x00CC0020
+ SRCPAINT = 0x00EE0086
+ SRCAND = 0x008800C6
+ SRCINVERT = 0x00660046
+ SRCERASE = 0x00440328
+ NOTSRCCOPY = 0x00330008
+ NOTSRCERASE = 0x001100A6
+ MERGECOPY = 0x00C000CA
+ MERGEPAINT = 0x00BB0226
+ PATCOPY = 0x00F00021
+ PATPAINT = 0x00FB0A09
+ PATINVERT = 0x005A0049
+ DSTINVERT = 0x00550009
+ BLACKNESS = 0x00000042
+ WHITENESS = 0x00FF0062
+ NOMIRRORBITMAP = 0x80000000
+ CAPTUREBLT = 0x40000000
+)
+
+// Clipboard formats
+const (
+ CF_TEXT = 1
+ CF_BITMAP = 2
+ CF_METAFILEPICT = 3
+ CF_SYLK = 4
+ CF_DIF = 5
+ CF_TIFF = 6
+ CF_OEMTEXT = 7
+ CF_DIB = 8
+ CF_PALETTE = 9
+ CF_PENDATA = 10
+ CF_RIFF = 11
+ CF_WAVE = 12
+ CF_UNICODETEXT = 13
+ CF_ENHMETAFILE = 14
+ CF_HDROP = 15
+ CF_LOCALE = 16
+ CF_DIBV5 = 17
+ CF_MAX = 18
+ CF_OWNERDISPLAY = 0x0080
+ CF_DSPTEXT = 0x0081
+ CF_DSPBITMAP = 0x0082
+ CF_DSPMETAFILEPICT = 0x0083
+ CF_DSPENHMETAFILE = 0x008E
+ CF_PRIVATEFIRST = 0x0200
+ CF_PRIVATELAST = 0x02FF
+ CF_GDIOBJFIRST = 0x0300
+ CF_GDIOBJLAST = 0x03FF
+)
+
+// Bitmap compression formats
+const (
+ BI_RGB = 0
+ BI_RLE8 = 1
+ BI_RLE4 = 2
+ BI_BITFIELDS = 3
+ BI_JPEG = 4
+ BI_PNG = 5
+)
+
+// SetDIBitsToDevice fuColorUse
+const (
+ DIB_PAL_COLORS = 1
+ DIB_RGB_COLORS = 0
+)
+
+const (
+ STANDARD_RIGHTS_REQUIRED = 0x000F
+)
+
+// MapVirtualKey maptypes
+const (
+ MAPVK_VK_TO_CHAR = 2
+ MAPVK_VK_TO_VSC = 0
+ MAPVK_VSC_TO_VK = 1
+ MAPVK_VSC_TO_VK_EX = 3
+)
+
+// ReadEventLog Flags
+const (
+ EVENTLOG_SEEK_READ = 0x0002
+ EVENTLOG_SEQUENTIAL_READ = 0x0001
+ EVENTLOG_FORWARDS_READ = 0x0004
+ EVENTLOG_BACKWARDS_READ = 0x0008
+)
+
+// CreateToolhelp32Snapshot flags
+const (
+ TH32CS_SNAPHEAPLIST = 0x00000001
+ TH32CS_SNAPPROCESS = 0x00000002
+ TH32CS_SNAPTHREAD = 0x00000004
+ TH32CS_SNAPMODULE = 0x00000008
+ TH32CS_SNAPMODULE32 = 0x00000010
+ TH32CS_INHERIT = 0x80000000
+ TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
+)
+
+const (
+ MAX_MODULE_NAME32 = 255
+ MAX_PATH = 260
+)
+
+const (
+ FOREGROUND_BLUE = 0x0001
+ FOREGROUND_GREEN = 0x0002
+ FOREGROUND_RED = 0x0004
+ FOREGROUND_INTENSITY = 0x0008
+ BACKGROUND_BLUE = 0x0010
+ BACKGROUND_GREEN = 0x0020
+ BACKGROUND_RED = 0x0040
+ BACKGROUND_INTENSITY = 0x0080
+ COMMON_LVB_LEADING_BYTE = 0x0100
+ COMMON_LVB_TRAILING_BYTE = 0x0200
+ COMMON_LVB_GRID_HORIZONTAL = 0x0400
+ COMMON_LVB_GRID_LVERTICAL = 0x0800
+ COMMON_LVB_GRID_RVERTICAL = 0x1000
+ COMMON_LVB_REVERSE_VIDEO = 0x4000
+ COMMON_LVB_UNDERSCORE = 0x8000
+)
+
+// Flags used by the DWM_BLURBEHIND structure to indicate
+// which of its members contain valid information.
+const (
+ DWM_BB_ENABLE = 0x00000001 // A value for the fEnable member has been specified.
+ DWM_BB_BLURREGION = 0x00000002 // A value for the hRgnBlur member has been specified.
+ DWM_BB_TRANSITIONONMAXIMIZED = 0x00000004 // A value for the fTransitionOnMaximized member has been specified.
+)
+
+// Flags used by the DwmEnableComposition function
+// to change the state of Desktop Window Manager (DWM) composition.
+const (
+ DWM_EC_DISABLECOMPOSITION = 0 // Disable composition
+ DWM_EC_ENABLECOMPOSITION = 1 // Enable composition
+)
+
+// enum-lite implementation for the following constant structure
+type DWM_SHOWCONTACT int32
+
+const (
+ DWMSC_DOWN = 0x00000001
+ DWMSC_UP = 0x00000002
+ DWMSC_DRAG = 0x00000004
+ DWMSC_HOLD = 0x00000008
+ DWMSC_PENBARREL = 0x00000010
+ DWMSC_NONE = 0x00000000
+ DWMSC_ALL = 0xFFFFFFFF
+)
+
+// enum-lite implementation for the following constant structure
+type DWM_SOURCE_FRAME_SAMPLING int32
+
+// TODO: need to verify this construction
+// Flags used by the DwmSetPresentParameters function
+// to specify the frame sampling type
+const (
+ DWM_SOURCE_FRAME_SAMPLING_POINT = iota + 1
+ DWM_SOURCE_FRAME_SAMPLING_COVERAGE
+ DWM_SOURCE_FRAME_SAMPLING_LAST
+)
+
+// Flags used by the DWM_THUMBNAIL_PROPERTIES structure to
+// indicate which of its members contain valid information.
+const (
+ DWM_TNP_RECTDESTINATION = 0x00000001 // A value for the rcDestination member has been specified
+ DWM_TNP_RECTSOURCE = 0x00000002 // A value for the rcSource member has been specified
+ DWM_TNP_OPACITY = 0x00000004 // A value for the opacity member has been specified
+ DWM_TNP_VISIBLE = 0x00000008 // A value for the fVisible member has been specified
+ DWM_TNP_SOURCECLIENTAREAONLY = 0x00000010 // A value for the fSourceClientAreaOnly member has been specified
+)
+
+// enum-lite implementation for the following constant structure
+type DWMFLIP3DWINDOWPOLICY int32
+
+// TODO: need to verify this construction
+// Flags used by the DwmSetWindowAttribute function
+// to specify the Flip3D window policy
+const (
+ DWMFLIP3D_DEFAULT = iota + 1
+ DWMFLIP3D_EXCLUDEBELOW
+ DWMFLIP3D_EXCLUDEABOVE
+ DWMFLIP3D_LAST
+)
+
+// enum-lite implementation for the following constant structure
+type DWMNCRENDERINGPOLICY int32
+
+// TODO: need to verify this construction
+// Flags used by the DwmSetWindowAttribute function
+// to specify the non-client area rendering policy
+const (
+ DWMNCRP_USEWINDOWSTYLE = iota + 1
+ DWMNCRP_DISABLED
+ DWMNCRP_ENABLED
+ DWMNCRP_LAST
+)
+
+// enum-lite implementation for the following constant structure
+type DWMTRANSITION_OWNEDWINDOW_TARGET int32
+
+const (
+ DWMTRANSITION_OWNEDWINDOW_NULL = -1
+ DWMTRANSITION_OWNEDWINDOW_REPOSITION = 0
+)
+
+// enum-lite implementation for the following constant structure
+type DWMWINDOWATTRIBUTE int32
+
+// TODO: need to verify this construction
+// Flags used by the DwmGetWindowAttribute and DwmSetWindowAttribute functions
+// to specify window attributes for non-client rendering
+const (
+ DWMWA_NCRENDERING_ENABLED = iota + 1
+ DWMWA_NCRENDERING_POLICY
+ DWMWA_TRANSITIONS_FORCEDISABLED
+ DWMWA_ALLOW_NCPAINT
+ DWMWA_CAPTION_BUTTON_BOUNDS
+ DWMWA_NONCLIENT_RTL_LAYOUT
+ DWMWA_FORCE_ICONIC_REPRESENTATION
+ DWMWA_FLIP3D_POLICY
+ DWMWA_EXTENDED_FRAME_BOUNDS
+ DWMWA_HAS_ICONIC_BITMAP
+ DWMWA_DISALLOW_PEEK
+ DWMWA_EXCLUDED_FROM_PEEK
+ DWMWA_CLOAK
+ DWMWA_CLOAKED
+ DWMWA_FREEZE_REPRESENTATION
+ DWMWA_LAST
+)
+
+// enum-lite implementation for the following constant structure
+type GESTURE_TYPE int32
+
+// TODO: use iota?
+// Identifies the gesture type
+const (
+ GT_PEN_TAP = 0
+ GT_PEN_DOUBLETAP = 1
+ GT_PEN_RIGHTTAP = 2
+ GT_PEN_PRESSANDHOLD = 3
+ GT_PEN_PRESSANDHOLDABORT = 4
+ GT_TOUCH_TAP = 5
+ GT_TOUCH_DOUBLETAP = 6
+ GT_TOUCH_RIGHTTAP = 7
+ GT_TOUCH_PRESSANDHOLD = 8
+ GT_TOUCH_PRESSANDHOLDABORT = 9
+ GT_TOUCH_PRESSANDTAP = 10
+)
+
+// Icons
+const (
+ ICON_SMALL = 0
+ ICON_BIG = 1
+ ICON_SMALL2 = 2
+)
+
+const (
+ SIZE_RESTORED = 0
+ SIZE_MINIMIZED = 1
+ SIZE_MAXIMIZED = 2
+ SIZE_MAXSHOW = 3
+ SIZE_MAXHIDE = 4
+)
+
+// XButton values
+const (
+ XBUTTON1 = 1
+ XBUTTON2 = 2
+)
+
+// Devmode
+const (
+ DM_SPECVERSION = 0x0401
+
+ DM_ORIENTATION = 0x00000001
+ DM_PAPERSIZE = 0x00000002
+ DM_PAPERLENGTH = 0x00000004
+ DM_PAPERWIDTH = 0x00000008
+ DM_SCALE = 0x00000010
+ DM_POSITION = 0x00000020
+ DM_NUP = 0x00000040
+ DM_DISPLAYORIENTATION = 0x00000080
+ DM_COPIES = 0x00000100
+ DM_DEFAULTSOURCE = 0x00000200
+ DM_PRINTQUALITY = 0x00000400
+ DM_COLOR = 0x00000800
+ DM_DUPLEX = 0x00001000
+ DM_YRESOLUTION = 0x00002000
+ DM_TTOPTION = 0x00004000
+ DM_COLLATE = 0x00008000
+ DM_FORMNAME = 0x00010000
+ DM_LOGPIXELS = 0x00020000
+ DM_BITSPERPEL = 0x00040000
+ DM_PELSWIDTH = 0x00080000
+ DM_PELSHEIGHT = 0x00100000
+ DM_DISPLAYFLAGS = 0x00200000
+ DM_DISPLAYFREQUENCY = 0x00400000
+ DM_ICMMETHOD = 0x00800000
+ DM_ICMINTENT = 0x01000000
+ DM_MEDIATYPE = 0x02000000
+ DM_DITHERTYPE = 0x04000000
+ DM_PANNINGWIDTH = 0x08000000
+ DM_PANNINGHEIGHT = 0x10000000
+ DM_DISPLAYFIXEDOUTPUT = 0x20000000
+)
+
+// ChangeDisplaySettings
+const (
+ CDS_UPDATEREGISTRY = 0x00000001
+ CDS_TEST = 0x00000002
+ CDS_FULLSCREEN = 0x00000004
+ CDS_GLOBAL = 0x00000008
+ CDS_SET_PRIMARY = 0x00000010
+ CDS_VIDEOPARAMETERS = 0x00000020
+ CDS_RESET = 0x40000000
+ CDS_NORESET = 0x10000000
+
+ DISP_CHANGE_SUCCESSFUL = 0
+ DISP_CHANGE_RESTART = 1
+ DISP_CHANGE_FAILED = -1
+ DISP_CHANGE_BADMODE = -2
+ DISP_CHANGE_NOTUPDATED = -3
+ DISP_CHANGE_BADFLAGS = -4
+ DISP_CHANGE_BADPARAM = -5
+ DISP_CHANGE_BADDUALVIEW = -6
+)
+
+const (
+ ENUM_CURRENT_SETTINGS = 0xFFFFFFFF
+ ENUM_REGISTRY_SETTINGS = 0xFFFFFFFE
+)
+
+// PIXELFORMATDESCRIPTOR
+const (
+ PFD_TYPE_RGBA = 0
+ PFD_TYPE_COLORINDEX = 1
+
+ PFD_MAIN_PLANE = 0
+ PFD_OVERLAY_PLANE = 1
+ PFD_UNDERLAY_PLANE = -1
+
+ PFD_DOUBLEBUFFER = 0x00000001
+ PFD_STEREO = 0x00000002
+ PFD_DRAW_TO_WINDOW = 0x00000004
+ PFD_DRAW_TO_BITMAP = 0x00000008
+ PFD_SUPPORT_GDI = 0x00000010
+ PFD_SUPPORT_OPENGL = 0x00000020
+ PFD_GENERIC_FORMAT = 0x00000040
+ PFD_NEED_PALETTE = 0x00000080
+ PFD_NEED_SYSTEM_PALETTE = 0x00000100
+ PFD_SWAP_EXCHANGE = 0x00000200
+ PFD_SWAP_COPY = 0x00000400
+ PFD_SWAP_LAYER_BUFFERS = 0x00000800
+ PFD_GENERIC_ACCELERATED = 0x00001000
+ PFD_SUPPORT_DIRECTDRAW = 0x00002000
+ PFD_DIRECT3D_ACCELERATED = 0x00004000
+ PFD_SUPPORT_COMPOSITION = 0x00008000
+
+ PFD_DEPTH_DONTCARE = 0x20000000
+ PFD_DOUBLEBUFFER_DONTCARE = 0x40000000
+ PFD_STEREO_DONTCARE = 0x80000000
+)
+
+const (
+ INPUT_MOUSE = 0
+ INPUT_KEYBOARD = 1
+ INPUT_HARDWARE = 2
+)
+
+const (
+ MOUSEEVENTF_ABSOLUTE = 0x8000
+ MOUSEEVENTF_HWHEEL = 0x01000
+ MOUSEEVENTF_MOVE = 0x0001
+ MOUSEEVENTF_MOVE_NOCOALESCE = 0x2000
+ MOUSEEVENTF_LEFTDOWN = 0x0002
+ MOUSEEVENTF_LEFTUP = 0x0004
+ MOUSEEVENTF_RIGHTDOWN = 0x0008
+ MOUSEEVENTF_RIGHTUP = 0x0010
+ MOUSEEVENTF_MIDDLEDOWN = 0x0020
+ MOUSEEVENTF_MIDDLEUP = 0x0040
+ MOUSEEVENTF_VIRTUALDESK = 0x4000
+ MOUSEEVENTF_WHEEL = 0x0800
+ MOUSEEVENTF_XDOWN = 0x0080
+ MOUSEEVENTF_XUP = 0x0100
+)
+
+// Windows Hooks (WH_*)
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
+const (
+ WH_CALLWNDPROC = 4
+ WH_CALLWNDPROCRET = 12
+ WH_CBT = 5
+ WH_DEBUG = 9
+ WH_FOREGROUNDIDLE = 11
+ WH_GETMESSAGE = 3
+ WH_JOURNALPLAYBACK = 1
+ WH_JOURNALRECORD = 0
+ WH_KEYBOARD = 2
+ WH_KEYBOARD_LL = 13
+ WH_MOUSE = 7
+ WH_MOUSE_LL = 14
+ WH_MSGFILTER = -1
+ WH_SHELL = 10
+ WH_SYSMSGFILTER = 6
+)
+
+const (
+ MEM_COMMIT = 0x00001000
+ MEM_RESERVE = 0x00002000
+ MEM_RESET = 0x00080000
+ MEM_RESET_UNDO = 0x1000000
+
+ MEM_LARGE_PAGES = 0x20000000
+ MEM_PHYSICAL = 0x00400000
+ MEM_TOP_DOWN = 0x00100000
+
+ MEM_DECOMMIT = 0x4000
+ MEM_RELEASE = 0x8000
+)
+
+const (
+ PROCESS_CREATE_PROCESS = 0x0080
+ PROCESS_CREATE_THREAD = 0x0002
+ PROCESS_DUP_HANDLE = 0x0040
+ PROCESS_QUERY_INFORMATION = 0x0400
+ PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
+ PROCESS_SET_INFORMATION = 0x0200
+ PROCESS_SET_QUOTA = 0x0100
+ PROCESS_SUSPEND_RESUME = 0x0800
+ PROCESS_TERMINATE = 0x0001
+ PROCESS_VM_OPERATION = 0x0008
+ PROCESS_VM_READ = 0x0010
+ PROCESS_VM_WRITE = 0x0020
+ SYNCHRONIZE = 0x00100000
+)
+
+const (
+ PAGE_EXECUTE = 0x10
+ PAGE_EXECUTE_READ = 0x20
+ PAGE_EXECUTE_READWRITE = 0x40
+ PAGE_EXECUTE_WRITECOPY = 0x80
+ PAGE_NOACCESS = 0x01
+ PAGE_READWRITE = 0x04
+ PAGE_WRITECOPY = 0x08
+ PAGE_TARGETS_INVALID = 0x40000000
+ PAGE_TARGETS_NO_UPDATE = 0x40000000
+)
+
+// SendMessageTimeout Flags
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952(v=vs.85).aspx
+const (
+ SMTO_ABORTIFHUNG = 0x0002
+ SMTO_BLOCK = 0x0001
+ SMTO_NORMAL = 0x0000
+ SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
+ SMTO_ERRORONEXIT = 0x0020
+)
+
+// RedrawWindow Flags
+const (
+ RDW_ERASE = 4
+ RDW_ALLCHILDREN = 0x80
+ RDW_ERASENOW = 0x200
+ RDW_FRAME = 0x400
+ RDW_INTERNALPAINT = 2
+ RDW_INVALIDATE = 1
+ RDW_NOCHILDREN = 0x40
+ RDW_NOERASE = 0x20
+ RDW_NOFRAME = 0x800
+ RDW_NOINTERNALPAINT = 0x10
+ RDW_UPDATENOW = 0x100
+ RDW_VALIDATE = 8
+)
diff --git a/vendor/github.com/apenwarr/w32/create_process.go b/vendor/github.com/apenwarr/w32/create_process.go
new file mode 100644
index 000000000..9caf9ffc0
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/create_process.go
@@ -0,0 +1,152 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ kernel32 = syscall.NewLazyDLL("kernel32.dll")
+
+ procCreateProcessW = kernel32.NewProc("CreateProcessW")
+ procTerminateProcess = kernel32.NewProc("TerminateProcess")
+ procGetExitCodeProcess = kernel32.NewProc("GetExitCodeProcess")
+ procWaitForSingleObject = kernel32.NewProc("WaitForSingleObject")
+)
+
+// WINBASEAPI WINBOOL WINAPI
+// CreateProcessW (
+// LPCWSTR lpApplicationName,
+// LPWSTR lpCommandLine,
+// LPSECURITY_ATTRIBUTES lpProcessAttributes,
+// LPSECURITY_ATTRIBUTES lpThreadAttributes
+// WINBOOL bInheritHandles
+// DWORD dwCreationFlags
+// LPVOID lpEnvironment
+// LPCWSTR lpCurrentDirectory
+// LPSTARTUPINFOW lpStartupInfo
+// LPPROCESS_INFORMATION lpProcessInformation
+//);
+func CreateProcessW(
+ lpApplicationName, lpCommandLine string,
+ lpProcessAttributes, lpThreadAttributes *SECURITY_ATTRIBUTES,
+ bInheritHandles BOOL,
+ dwCreationFlags uint32,
+ lpEnvironment unsafe.Pointer,
+ lpCurrentDirectory string,
+ lpStartupInfo *STARTUPINFOW,
+ lpProcessInformation *PROCESS_INFORMATION,
+) (e error) {
+
+ var lpAN, lpCL, lpCD *uint16
+ if len(lpApplicationName) > 0 {
+ lpAN, e = syscall.UTF16PtrFromString(lpApplicationName)
+ if e != nil {
+ return
+ }
+ }
+ if len(lpCommandLine) > 0 {
+ lpCL, e = syscall.UTF16PtrFromString(lpCommandLine)
+ if e != nil {
+ return
+ }
+ }
+ if len(lpCurrentDirectory) > 0 {
+ lpCD, e = syscall.UTF16PtrFromString(lpCurrentDirectory)
+ if e != nil {
+ return
+ }
+ }
+
+ ret, _, lastErr := procCreateProcessW.Call(
+ uintptr(unsafe.Pointer(lpAN)),
+ uintptr(unsafe.Pointer(lpCL)),
+ uintptr(unsafe.Pointer(lpProcessAttributes)),
+ uintptr(unsafe.Pointer(lpProcessInformation)),
+ uintptr(bInheritHandles),
+ uintptr(dwCreationFlags),
+ uintptr(lpEnvironment),
+ uintptr(unsafe.Pointer(lpCD)),
+ uintptr(unsafe.Pointer(lpStartupInfo)),
+ uintptr(unsafe.Pointer(lpProcessInformation)),
+ )
+
+ if ret == 0 {
+ e = lastErr
+ }
+
+ return
+}
+
+func CreateProcessQuick(cmd string) (pi PROCESS_INFORMATION, e error) {
+ si := &STARTUPINFOW{}
+ e = CreateProcessW(
+ "",
+ cmd,
+ nil,
+ nil,
+ 0,
+ 0,
+ unsafe.Pointer(nil),
+ "",
+ si,
+ &pi,
+ )
+ return
+}
+
+func TerminateProcess(hProcess HANDLE, exitCode uint32) (e error) {
+ ret, _, lastErr := procTerminateProcess.Call(
+ uintptr(hProcess),
+ uintptr(exitCode),
+ )
+
+ if ret == 0 {
+ e = lastErr
+ }
+
+ return
+}
+
+func GetExitCodeProcess(hProcess HANDLE) (code uintptr, e error) {
+ ret, _, lastErr := procGetExitCodeProcess.Call(
+ uintptr(hProcess),
+ uintptr(unsafe.Pointer(&code)),
+ )
+
+ if ret == 0 {
+ e = lastErr
+ }
+
+ return
+}
+
+// DWORD WINAPI WaitForSingleObject(
+// _In_ HANDLE hHandle,
+// _In_ DWORD dwMilliseconds
+// );
+
+func WaitForSingleObject(hHandle HANDLE, msecs uint32) (ok bool, e error) {
+
+ ret, _, lastErr := procWaitForSingleObject.Call(
+ uintptr(hHandle),
+ uintptr(msecs),
+ )
+
+ if ret == WAIT_OBJECT_0 {
+ ok = true
+ return
+ }
+
+ // don't set e for timeouts, or it will be ERROR_SUCCESS which is
+ // confusing
+ if ret != WAIT_TIMEOUT {
+ e = lastErr
+ }
+ return
+
+}
diff --git a/vendor/github.com/apenwarr/w32/create_process_constants.go b/vendor/github.com/apenwarr/w32/create_process_constants.go
new file mode 100644
index 000000000..c37d7e5f3
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/create_process_constants.go
@@ -0,0 +1,9 @@
+package w32
+
+const (
+ WAIT_ABANDONED = 0x00000080
+ WAIT_OBJECT_0 = 0x00000000
+ WAIT_TIMEOUT = 0x00000102
+ WAIT_FAILED = 0xFFFFFFFF
+ INFINITE = 0xFFFFFFFF
+)
diff --git a/vendor/github.com/apenwarr/w32/create_process_typedef.go b/vendor/github.com/apenwarr/w32/create_process_typedef.go
new file mode 100644
index 000000000..df059729f
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/create_process_typedef.go
@@ -0,0 +1,68 @@
+package w32
+
+// typedef struct _PROCESS_INFORMATION {
+// HANDLE hProcess;
+// HANDLE hThread;
+// DWORD dwProcessId;
+// DWORD dwThreadId;
+// } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
+
+type PROCESS_INFORMATION struct {
+ Process HANDLE
+ Thread HANDLE
+ ProcessId uint32
+ ThreadId uint32
+}
+
+// typedef struct _STARTUPINFOW {
+// DWORD cb;
+// LPWSTR lpReserved;
+// LPWSTR lpDesktop;
+// LPWSTR lpTitle;
+// DWORD dwX;
+// DWORD dwY;
+// DWORD dwXSize;
+// DWORD dwYSize;
+// DWORD dwXCountChars;
+// DWORD dwYCountChars;
+// DWORD dwFillAttribute;
+// DWORD dwFlags;
+// WORD wShowWindow;
+// WORD cbReserved2;
+// LPBYTE lpReserved2;
+// HANDLE hStdInput;
+// HANDLE hStdOutput;
+// HANDLE hStdError;
+// } STARTUPINFOW, *LPSTARTUPINFOW;
+
+type STARTUPINFOW struct {
+ cb uint32
+ _ *uint16
+ Desktop *uint16
+ Title *uint16
+ X uint32
+ Y uint32
+ XSize uint32
+ YSize uint32
+ XCountChars uint32
+ YCountChars uint32
+ FillAttribute uint32
+ Flags uint32
+ ShowWindow uint16
+ _ uint16
+ _ *uint8
+ StdInput HANDLE
+ StdOutput HANDLE
+ StdError HANDLE
+}
+
+// combase!_SECURITY_ATTRIBUTES
+// +0x000 nLength : Uint4B
+// +0x008 lpSecurityDescriptor : Ptr64 Void
+// +0x010 bInheritHandle : Int4B
+
+type SECURITY_ATTRIBUTES struct {
+ Length uint32
+ SecurityDescriptor uintptr
+ InheritHandle BOOL
+}
diff --git a/vendor/github.com/apenwarr/w32/dwmapi.go b/vendor/github.com/apenwarr/w32/dwmapi.go
new file mode 100644
index 000000000..eb656d187
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/dwmapi.go
@@ -0,0 +1,254 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "fmt"
+ "syscall"
+ "unsafe"
+)
+
+// DEFINED IN THE DWM API BUT NOT IMPLEMENTED BY MS:
+// DwmAttachMilContent
+// DwmDetachMilContent
+// DwmEnableComposition
+// DwmGetGraphicsStreamClient
+// DwmGetGraphicsStreamTransformHint
+
+var (
+ moddwmapi = syscall.NewLazyDLL("dwmapi.dll")
+
+ procDwmDefWindowProc = moddwmapi.NewProc("DwmDefWindowProc")
+ procDwmEnableBlurBehindWindow = moddwmapi.NewProc("DwmEnableBlurBehindWindow")
+ procDwmEnableMMCSS = moddwmapi.NewProc("DwmEnableMMCSS")
+ procDwmExtendFrameIntoClientArea = moddwmapi.NewProc("DwmExtendFrameIntoClientArea")
+ procDwmFlush = moddwmapi.NewProc("DwmFlush")
+ procDwmGetColorizationColor = moddwmapi.NewProc("DwmGetColorizationColor")
+ procDwmGetCompositionTimingInfo = moddwmapi.NewProc("DwmGetCompositionTimingInfo")
+ procDwmGetTransportAttributes = moddwmapi.NewProc("DwmGetTransportAttributes")
+ procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute")
+ procDwmInvalidateIconicBitmaps = moddwmapi.NewProc("DwmInvalidateIconicBitmaps")
+ procDwmIsCompositionEnabled = moddwmapi.NewProc("DwmIsCompositionEnabled")
+ procDwmModifyPreviousDxFrameDuration = moddwmapi.NewProc("DwmModifyPreviousDxFrameDuration")
+ procDwmQueryThumbnailSourceSize = moddwmapi.NewProc("DwmQueryThumbnailSourceSize")
+ procDwmRegisterThumbnail = moddwmapi.NewProc("DwmRegisterThumbnail")
+ procDwmRenderGesture = moddwmapi.NewProc("DwmRenderGesture")
+ procDwmSetDxFrameDuration = moddwmapi.NewProc("DwmSetDxFrameDuration")
+ procDwmSetIconicLivePreviewBitmap = moddwmapi.NewProc("DwmSetIconicLivePreviewBitmap")
+ procDwmSetIconicThumbnail = moddwmapi.NewProc("DwmSetIconicThumbnail")
+ procDwmSetPresentParameters = moddwmapi.NewProc("DwmSetPresentParameters")
+ procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute")
+ procDwmShowContact = moddwmapi.NewProc("DwmShowContact")
+ procDwmTetherContact = moddwmapi.NewProc("DwmTetherContact")
+ procDwmTransitionOwnedWindow = moddwmapi.NewProc("DwmTransitionOwnedWindow")
+ procDwmUnregisterThumbnail = moddwmapi.NewProc("DwmUnregisterThumbnail")
+ procDwmUpdateThumbnailProperties = moddwmapi.NewProc("DwmUpdateThumbnailProperties")
+)
+
+func DwmDefWindowProc(hWnd HWND, msg uint, wParam, lParam uintptr) (bool, uint) {
+ var result uint
+ ret, _, _ := procDwmDefWindowProc.Call(
+ uintptr(hWnd),
+ uintptr(msg),
+ wParam,
+ lParam,
+ uintptr(unsafe.Pointer(&result)))
+ return ret != 0, result
+}
+
+func DwmEnableBlurBehindWindow(hWnd HWND, pBlurBehind *DWM_BLURBEHIND) HRESULT {
+ ret, _, _ := procDwmEnableBlurBehindWindow.Call(
+ uintptr(hWnd),
+ uintptr(unsafe.Pointer(pBlurBehind)))
+ return HRESULT(ret)
+}
+
+func DwmEnableMMCSS(fEnableMMCSS bool) HRESULT {
+ ret, _, _ := procDwmEnableMMCSS.Call(
+ uintptr(BoolToBOOL(fEnableMMCSS)))
+ return HRESULT(ret)
+}
+
+func DwmExtendFrameIntoClientArea(hWnd HWND, pMarInset *MARGINS) HRESULT {
+ ret, _, _ := procDwmExtendFrameIntoClientArea.Call(
+ uintptr(hWnd),
+ uintptr(unsafe.Pointer(pMarInset)))
+ return HRESULT(ret)
+}
+
+func DwmFlush() HRESULT {
+ ret, _, _ := procDwmFlush.Call()
+ return HRESULT(ret)
+}
+
+func DwmGetColorizationColor(pcrColorization *uint32, pfOpaqueBlend *BOOL) HRESULT {
+ ret, _, _ := procDwmGetColorizationColor.Call(
+ uintptr(unsafe.Pointer(pcrColorization)),
+ uintptr(unsafe.Pointer(pfOpaqueBlend)))
+ return HRESULT(ret)
+}
+
+func DwmGetCompositionTimingInfo(hWnd HWND, pTimingInfo *DWM_TIMING_INFO) HRESULT {
+ ret, _, _ := procDwmGetCompositionTimingInfo.Call(
+ uintptr(hWnd),
+ uintptr(unsafe.Pointer(pTimingInfo)))
+ return HRESULT(ret)
+}
+
+func DwmGetTransportAttributes(pfIsRemoting *BOOL, pfIsConnected *BOOL, pDwGeneration *uint32) HRESULT {
+ ret, _, _ := procDwmGetTransportAttributes.Call(
+ uintptr(unsafe.Pointer(pfIsRemoting)),
+ uintptr(unsafe.Pointer(pfIsConnected)),
+ uintptr(unsafe.Pointer(pDwGeneration)))
+ return HRESULT(ret)
+}
+
+// TODO: verify handling of variable arguments
+func DwmGetWindowAttribute(hWnd HWND, dwAttribute uint32) (pAttribute interface{}, result HRESULT) {
+ var pvAttribute, pvAttrSize uintptr
+ switch dwAttribute {
+ case DWMWA_NCRENDERING_ENABLED:
+ v := new(BOOL)
+ pAttribute = v
+ pvAttribute = uintptr(unsafe.Pointer(v))
+ pvAttrSize = unsafe.Sizeof(*v)
+ case DWMWA_CAPTION_BUTTON_BOUNDS, DWMWA_EXTENDED_FRAME_BOUNDS:
+ v := new(RECT)
+ pAttribute = v
+ pvAttribute = uintptr(unsafe.Pointer(v))
+ pvAttrSize = unsafe.Sizeof(*v)
+ case DWMWA_CLOAKED:
+ panic(fmt.Sprintf("DwmGetWindowAttribute(%d) is not currently supported.", dwAttribute))
+ default:
+ panic(fmt.Sprintf("DwmGetWindowAttribute(%d) is not valid.", dwAttribute))
+ }
+
+ ret, _, _ := procDwmGetWindowAttribute.Call(
+ uintptr(hWnd),
+ uintptr(dwAttribute),
+ pvAttribute,
+ pvAttrSize)
+ result = HRESULT(ret)
+ return
+}
+
+func DwmInvalidateIconicBitmaps(hWnd HWND) HRESULT {
+ ret, _, _ := procDwmInvalidateIconicBitmaps.Call(
+ uintptr(hWnd))
+ return HRESULT(ret)
+}
+
+func DwmIsCompositionEnabled(pfEnabled *BOOL) HRESULT {
+ ret, _, _ := procDwmIsCompositionEnabled.Call(
+ uintptr(unsafe.Pointer(pfEnabled)))
+ return HRESULT(ret)
+}
+
+func DwmModifyPreviousDxFrameDuration(hWnd HWND, cRefreshes int, fRelative bool) HRESULT {
+ ret, _, _ := procDwmModifyPreviousDxFrameDuration.Call(
+ uintptr(hWnd),
+ uintptr(cRefreshes),
+ uintptr(BoolToBOOL(fRelative)))
+ return HRESULT(ret)
+}
+
+func DwmQueryThumbnailSourceSize(hThumbnail HTHUMBNAIL, pSize *SIZE) HRESULT {
+ ret, _, _ := procDwmQueryThumbnailSourceSize.Call(
+ uintptr(hThumbnail),
+ uintptr(unsafe.Pointer(pSize)))
+ return HRESULT(ret)
+}
+
+func DwmRegisterThumbnail(hWndDestination HWND, hWndSource HWND, phThumbnailId *HTHUMBNAIL) HRESULT {
+ ret, _, _ := procDwmRegisterThumbnail.Call(
+ uintptr(hWndDestination),
+ uintptr(hWndSource),
+ uintptr(unsafe.Pointer(phThumbnailId)))
+ return HRESULT(ret)
+}
+
+func DwmRenderGesture(gt GESTURE_TYPE, cContacts uint, pdwPointerID *uint32, pPoints *POINT) {
+ procDwmRenderGesture.Call(
+ uintptr(gt),
+ uintptr(cContacts),
+ uintptr(unsafe.Pointer(pdwPointerID)),
+ uintptr(unsafe.Pointer(pPoints)))
+ return
+}
+
+func DwmSetDxFrameDuration(hWnd HWND, cRefreshes int) HRESULT {
+ ret, _, _ := procDwmSetDxFrameDuration.Call(
+ uintptr(hWnd),
+ uintptr(cRefreshes))
+ return HRESULT(ret)
+}
+
+func DwmSetIconicLivePreviewBitmap(hWnd HWND, hbmp HBITMAP, pptClient *POINT, dwSITFlags uint32) HRESULT {
+ ret, _, _ := procDwmSetIconicLivePreviewBitmap.Call(
+ uintptr(hWnd),
+ uintptr(hbmp),
+ uintptr(unsafe.Pointer(pptClient)),
+ uintptr(dwSITFlags))
+ return HRESULT(ret)
+}
+
+func DwmSetIconicThumbnail(hWnd HWND, hbmp HBITMAP, dwSITFlags uint32) HRESULT {
+ ret, _, _ := procDwmSetIconicThumbnail.Call(
+ uintptr(hWnd),
+ uintptr(hbmp),
+ uintptr(dwSITFlags))
+ return HRESULT(ret)
+}
+
+func DwmSetPresentParameters(hWnd HWND, pPresentParams *DWM_PRESENT_PARAMETERS) HRESULT {
+ ret, _, _ := procDwmSetPresentParameters.Call(
+ uintptr(hWnd),
+ uintptr(unsafe.Pointer(pPresentParams)))
+ return HRESULT(ret)
+}
+
+func DwmSetWindowAttribute(hWnd HWND, dwAttribute uint32, pvAttribute LPCVOID, cbAttribute uint32) HRESULT {
+ ret, _, _ := procDwmSetWindowAttribute.Call(
+ uintptr(hWnd),
+ uintptr(dwAttribute),
+ uintptr(pvAttribute),
+ uintptr(cbAttribute))
+ return HRESULT(ret)
+}
+
+func DwmShowContact(dwPointerID uint32, eShowContact DWM_SHOWCONTACT) {
+ procDwmShowContact.Call(
+ uintptr(dwPointerID),
+ uintptr(eShowContact))
+ return
+}
+
+func DwmTetherContact(dwPointerID uint32, fEnable bool, ptTether POINT) {
+ procDwmTetherContact.Call(
+ uintptr(dwPointerID),
+ uintptr(BoolToBOOL(fEnable)),
+ uintptr(unsafe.Pointer(&ptTether)))
+ return
+}
+
+func DwmTransitionOwnedWindow(hWnd HWND, target DWMTRANSITION_OWNEDWINDOW_TARGET) {
+ procDwmTransitionOwnedWindow.Call(
+ uintptr(hWnd),
+ uintptr(target))
+ return
+}
+
+func DwmUnregisterThumbnail(hThumbnailId HTHUMBNAIL) HRESULT {
+ ret, _, _ := procDwmUnregisterThumbnail.Call(
+ uintptr(hThumbnailId))
+ return HRESULT(ret)
+}
+
+func DwmUpdateThumbnailProperties(hThumbnailId HTHUMBNAIL, ptnProperties *DWM_THUMBNAIL_PROPERTIES) HRESULT {
+ ret, _, _ := procDwmUpdateThumbnailProperties.Call(
+ uintptr(hThumbnailId),
+ uintptr(unsafe.Pointer(ptnProperties)))
+ return HRESULT(ret)
+}
diff --git a/vendor/github.com/apenwarr/w32/fork.go b/vendor/github.com/apenwarr/w32/fork.go
new file mode 100644
index 000000000..b5543b952
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/fork.go
@@ -0,0 +1,174 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+// #include
+//import (
+// "C"
+//)
+
+// Based on C code found here https://gist.github.com/juntalis/4366916
+// Original code license:
+/*
+ * fork.c
+ * Experimental fork() on Windows. Requires NT 6 subsystem or
+ * newer.
+ *
+ * Copyright (c) 2012 William Pitcock
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * This software is provided 'as is' and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising
+ * from the use of this software.
+ */
+
+import (
+ "fmt"
+ "syscall"
+ "unsafe"
+)
+
+var (
+ ntdll = syscall.NewLazyDLL("ntdll.dll")
+
+ procRtlCloneUserProcess = ntdll.NewProc("RtlCloneUserProcess")
+ procAllocConsole = modkernel32.NewProc("AllocConsole")
+ procOpenProcess = modkernel32.NewProc("OpenProcess")
+ procOpenThread = modkernel32.NewProc("OpenThread")
+ procResumeThread = modkernel32.NewProc("ResumeThread")
+)
+
+func OpenProcess(desiredAccess int, inheritHandle bool, processId uintptr) (h HANDLE, e error) {
+ inherit := uintptr(0)
+ if inheritHandle {
+ inherit = 1
+ }
+
+ ret, _, lastErr := procOpenProcess.Call(
+ uintptr(desiredAccess),
+ inherit,
+ uintptr(processId),
+ )
+
+ if ret == 0 {
+ e = lastErr
+ }
+
+ h = HANDLE(ret)
+ return
+}
+
+func OpenThread(desiredAccess int, inheritHandle bool, threadId uintptr) (h HANDLE, e error) {
+ inherit := uintptr(0)
+ if inheritHandle {
+ inherit = 1
+ }
+
+ ret, _, lastErr := procOpenThread.Call(
+ uintptr(desiredAccess),
+ inherit,
+ uintptr(threadId),
+ )
+
+ if ret == 0 {
+ e = lastErr
+ }
+
+ h = HANDLE(ret)
+ return
+}
+
+// DWORD WINAPI ResumeThread(
+// _In_ HANDLE hThread
+// );
+func ResumeThread(ht HANDLE) (e error) {
+
+ ret, _, lastErr := procResumeThread.Call(
+ uintptr(ht),
+ )
+ if ret == ^uintptr(0) { // -1
+ e = lastErr
+ }
+ return
+}
+
+// BOOL WINAPI AllocConsole(void);
+func AllocConsole() (e error) {
+ ret, _, lastErr := procAllocConsole.Call()
+ if ret != ERROR_SUCCESS {
+ e = lastErr
+ }
+ return
+}
+
+// NTSYSAPI
+// NTSTATUS
+// NTAPI RtlCloneUserProcess (
+// _In_ ULONG ProcessFlags,
+// _In_opt_ PSECURITY_DESCRIPTOR ProcessSecurityDescriptor,
+// _In_opt_ PSECURITY_DESCRIPTOR ThreadSecurityDescriptor,
+// _In_opt_ HANDLE DebugPort,
+// _Out_ PRTL_USER_PROCESS_INFORMATION ProcessInformation
+// )
+
+func RtlCloneUserProcess(
+ ProcessFlags uint32,
+ ProcessSecurityDescriptor, ThreadSecurityDescriptor *SECURITY_DESCRIPTOR, // in advapi32_typedef.go
+ DebugPort HANDLE,
+ ProcessInformation *RTL_USER_PROCESS_INFORMATION,
+) (status uintptr) {
+
+ status, _, _ = procRtlCloneUserProcess.Call(
+ uintptr(ProcessFlags),
+ uintptr(unsafe.Pointer(ProcessSecurityDescriptor)),
+ uintptr(unsafe.Pointer(ThreadSecurityDescriptor)),
+ uintptr(DebugPort),
+ uintptr(unsafe.Pointer(ProcessInformation)),
+ )
+
+ return
+}
+
+// Fork creates a clone of the current process using the undocumented
+// RtlCloneUserProcess call in ntdll, similar to unix fork(). The
+// return value in the parent is the child PID. In the child it is 0.
+func Fork() (pid uintptr, e error) {
+
+ pi := &RTL_USER_PROCESS_INFORMATION{}
+
+ ret := RtlCloneUserProcess(
+ RTL_CLONE_PROCESS_FLAGS_CREATE_SUSPENDED|RTL_CLONE_PROCESS_FLAGS_INHERIT_HANDLES,
+ nil,
+ nil,
+ HANDLE(0),
+ pi,
+ )
+
+ switch ret {
+ case RTL_CLONE_PARENT:
+ pid = pi.ClientId.UniqueProcess
+ ht, err := OpenThread(THREAD_ALL_ACCESS, false, pi.ClientId.UniqueThread)
+ if err != nil {
+ e = fmt.Errorf("OpenThread: %s", err)
+ }
+ err = ResumeThread(ht)
+ if err != nil {
+ e = fmt.Errorf("ResumeThread: %s", err)
+ }
+ CloseHandle(ht)
+ case RTL_CLONE_CHILD:
+ pid = 0
+ err := AllocConsole()
+ if err != nil {
+ e = fmt.Errorf("AllocConsole: %s", err)
+ }
+ default:
+ e = fmt.Errorf("0x%x", ret)
+ }
+ return
+}
diff --git a/vendor/github.com/apenwarr/w32/fork_constants.go b/vendor/github.com/apenwarr/w32/fork_constants.go
new file mode 100644
index 000000000..3e9b217ca
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/fork_constants.go
@@ -0,0 +1,26 @@
+package w32
+
+const (
+ RTL_CLONE_PROCESS_FLAGS_CREATE_SUSPENDED = 0x00000001
+ RTL_CLONE_PROCESS_FLAGS_INHERIT_HANDLES = 0x00000002
+ RTL_CLONE_PROCESS_FLAGS_NO_SYNCHRONIZE = 0x00000004
+
+ RTL_CLONE_PARENT = 0
+ RTL_CLONE_CHILD = 297
+
+ THREAD_TERMINATE = 0x0001
+ THREAD_SUSPEND_RESUME = 0x0002
+ THREAD_GET_CONTEXT = 0x0008
+ THREAD_SET_CONTEXT = 0x0010
+ THREAD_SET_INFORMATION = 0x0020
+ THREAD_QUERY_INFORMATION = 0x0040
+ THREAD_SET_THREAD_TOKEN = 0x0080
+ THREAD_IMPERSONATE = 0x0100
+ THREAD_DIRECT_IMPERSONATION = 0x0200
+ THREAD_SET_LIMITED_INFORMATION = 0x0400
+ THREAD_QUERY_LIMITED_INFORMATION = 0x0800
+ THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xffff
+
+ PROCESS_SET_SESSIONID = 0x0004
+ PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xffff
+)
diff --git a/vendor/github.com/apenwarr/w32/fork_typedef.go b/vendor/github.com/apenwarr/w32/fork_typedef.go
new file mode 100644
index 000000000..fcb90497d
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/fork_typedef.go
@@ -0,0 +1,89 @@
+package w32
+
+// combase!_SECTION_IMAGE_INFORMATION
+// +0x000 TransferAddress : Ptr64 Void
+// +0x008 ZeroBits : Uint4B
+// +0x010 MaximumStackSize : Uint8B
+// +0x018 CommittedStackSize : Uint8B
+// +0x020 SubSystemType : Uint4B
+// +0x024 SubSystemMinorVersion : Uint2B
+// +0x026 SubSystemMajorVersion : Uint2B
+// +0x024 SubSystemVersion : Uint4B
+// +0x028 MajorOperatingSystemVersion : Uint2B
+// +0x02a MinorOperatingSystemVersion : Uint2B
+// +0x028 OperatingSystemVersion : Uint4B
+// +0x02c ImageCharacteristics : Uint2B
+// +0x02e DllCharacteristics : Uint2B
+// +0x030 Machine : Uint2B
+// +0x032 ImageContainsCode : UChar
+// +0x033 ImageFlags : UChar
+// +0x033 ComPlusNativeReady : Pos 0, 1 Bit
+// +0x033 ComPlusILOnly : Pos 1, 1 Bit
+// +0x033 ImageDynamicallyRelocated : Pos 2, 1 Bit
+// +0x033 ImageMappedFlat : Pos 3, 1 Bit
+// +0x033 BaseBelow4gb : Pos 4, 1 Bit
+// +0x033 ComPlusPrefer32bit : Pos 5, 1 Bit
+// +0x033 Reserved : Pos 6, 2 Bits
+// +0x034 LoaderFlags : Uint4B
+// +0x038 ImageFileSize : Uint4B
+// +0x03c CheckSum : Uint4B
+type SECTION_IMAGE_INFORMATION struct {
+ TransferAddress uintptr
+ ZeroBits uint32
+ MaximumStackSize uint64
+ CommittedStackSize uint64
+ SubSystemType uint32
+ SubSystemMinorVersion uint16
+ SubSystemMajorVersion uint16
+ SubSystemVersion uint32
+ MajorOperatingSystemVersion uint16
+ MinorOperatingSystemVersion uint16
+ OperatingSystemVersion uint32
+ ImageCharacteristics uint16
+ DllCharacteristics uint16
+ Machine uint16
+ ImageContainsCode uint8
+ ImageFlags uint8
+ ComPlusFlags uint8
+ LoaderFlags uint32
+ ImageFileSize uint32
+ CheckSum uint32
+}
+
+func (si *SECTION_IMAGE_INFORMATION) ComPlusNativeReady() bool {
+ return (si.ComPlusFlags & (1 << 0)) == 1
+}
+
+func (si *SECTION_IMAGE_INFORMATION) ComPlusILOnly() bool {
+ return (si.ComPlusFlags & (1 << 1)) == 1
+}
+
+func (si *SECTION_IMAGE_INFORMATION) ImageDynamicallyRelocated() bool {
+ return (si.ComPlusFlags & (1 << 2)) == 1
+}
+
+func (si *SECTION_IMAGE_INFORMATION) ImageMappedFlat() bool {
+ return (si.ComPlusFlags & (1 << 3)) == 1
+}
+
+func (si *SECTION_IMAGE_INFORMATION) BaseBelow4gb() bool {
+ return (si.ComPlusFlags & (1 << 4)) == 1
+}
+
+func (si *SECTION_IMAGE_INFORMATION) ComPlusPrefer32bit() bool {
+ return (si.ComPlusFlags & (1 << 5)) == 1
+}
+
+// combase!_RTL_USER_PROCESS_INFORMATION
+// +0x000 Length : Uint4B
+// +0x008 Process : Ptr64 Void
+// +0x010 Thread : Ptr64 Void
+// +0x018 ClientId : _CLIENT_ID
+// +0x028 ImageInformation : _SECTION_IMAGE_INFORMATION
+type RTL_USER_PROCESS_INFORMATION struct {
+ Length uint32
+ Process HANDLE
+ Thread HANDLE
+ ClientId CLIENT_ID
+ ImageInformation SECTION_IMAGE_INFORMATION
+}
diff --git a/vendor/github.com/apenwarr/w32/gdi32.go b/vendor/github.com/apenwarr/w32/gdi32.go
new file mode 100644
index 000000000..39a81d6b8
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/gdi32.go
@@ -0,0 +1,543 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modgdi32 = syscall.NewLazyDLL("gdi32.dll")
+
+ procGetDeviceCaps = modgdi32.NewProc("GetDeviceCaps")
+ procGetCurrentObject = modgdi32.NewProc("GetCurrentObject")
+ procDeleteObject = modgdi32.NewProc("DeleteObject")
+ procCreateFontIndirect = modgdi32.NewProc("CreateFontIndirectW")
+ procAbortDoc = modgdi32.NewProc("AbortDoc")
+ procBitBlt = modgdi32.NewProc("BitBlt")
+ procPatBlt = modgdi32.NewProc("PatBlt")
+ procCloseEnhMetaFile = modgdi32.NewProc("CloseEnhMetaFile")
+ procCopyEnhMetaFile = modgdi32.NewProc("CopyEnhMetaFileW")
+ procCreateBrushIndirect = modgdi32.NewProc("CreateBrushIndirect")
+ procCreateCompatibleDC = modgdi32.NewProc("CreateCompatibleDC")
+ procCreateDC = modgdi32.NewProc("CreateDCW")
+ procCreateCompatibleBitmap = modgdi32.NewProc("CreateCompatibleBitmap")
+ procCreateDIBSection = modgdi32.NewProc("CreateDIBSection")
+ procCreateEnhMetaFile = modgdi32.NewProc("CreateEnhMetaFileW")
+ procCreateIC = modgdi32.NewProc("CreateICW")
+ procDeleteDC = modgdi32.NewProc("DeleteDC")
+ procDeleteEnhMetaFile = modgdi32.NewProc("DeleteEnhMetaFile")
+ procEllipse = modgdi32.NewProc("Ellipse")
+ procEndDoc = modgdi32.NewProc("EndDoc")
+ procEndPage = modgdi32.NewProc("EndPage")
+ procExtCreatePen = modgdi32.NewProc("ExtCreatePen")
+ procGetEnhMetaFile = modgdi32.NewProc("GetEnhMetaFileW")
+ procGetEnhMetaFileHeader = modgdi32.NewProc("GetEnhMetaFileHeader")
+ procGetObject = modgdi32.NewProc("GetObjectW")
+ procGetStockObject = modgdi32.NewProc("GetStockObject")
+ procGetTextExtentExPoint = modgdi32.NewProc("GetTextExtentExPointW")
+ procGetTextExtentPoint32 = modgdi32.NewProc("GetTextExtentPoint32W")
+ procGetTextMetrics = modgdi32.NewProc("GetTextMetricsW")
+ procLineTo = modgdi32.NewProc("LineTo")
+ procMoveToEx = modgdi32.NewProc("MoveToEx")
+ procPlayEnhMetaFile = modgdi32.NewProc("PlayEnhMetaFile")
+ procRectangle = modgdi32.NewProc("Rectangle")
+ procResetDC = modgdi32.NewProc("ResetDCW")
+ procSelectObject = modgdi32.NewProc("SelectObject")
+ procSetBkMode = modgdi32.NewProc("SetBkMode")
+ procSetBrushOrgEx = modgdi32.NewProc("SetBrushOrgEx")
+ procSetStretchBltMode = modgdi32.NewProc("SetStretchBltMode")
+ procSetTextColor = modgdi32.NewProc("SetTextColor")
+ procSetBkColor = modgdi32.NewProc("SetBkColor")
+ procStartDoc = modgdi32.NewProc("StartDocW")
+ procStartPage = modgdi32.NewProc("StartPage")
+ procStretchBlt = modgdi32.NewProc("StretchBlt")
+ procSetDIBitsToDevice = modgdi32.NewProc("SetDIBitsToDevice")
+ procChoosePixelFormat = modgdi32.NewProc("ChoosePixelFormat")
+ procDescribePixelFormat = modgdi32.NewProc("DescribePixelFormat")
+ procGetEnhMetaFilePixelFormat = modgdi32.NewProc("GetEnhMetaFilePixelFormat")
+ procGetPixelFormat = modgdi32.NewProc("GetPixelFormat")
+ procSetPixelFormat = modgdi32.NewProc("SetPixelFormat")
+ procSwapBuffers = modgdi32.NewProc("SwapBuffers")
+)
+
+func GetDeviceCaps(hdc HDC, index int) int {
+ ret, _, _ := procGetDeviceCaps.Call(
+ uintptr(hdc),
+ uintptr(index))
+
+ return int(ret)
+}
+
+func GetCurrentObject(hdc HDC, uObjectType uint32) HGDIOBJ {
+ ret, _, _ := procGetCurrentObject.Call(
+ uintptr(hdc),
+ uintptr(uObjectType))
+
+ return HGDIOBJ(ret)
+}
+
+func DeleteObject(hObject HGDIOBJ) bool {
+ ret, _, _ := procDeleteObject.Call(
+ uintptr(hObject))
+
+ return ret != 0
+}
+
+func CreateFontIndirect(logFont *LOGFONT) HFONT {
+ ret, _, _ := procCreateFontIndirect.Call(
+ uintptr(unsafe.Pointer(logFont)))
+
+ return HFONT(ret)
+}
+
+func AbortDoc(hdc HDC) int {
+ ret, _, _ := procAbortDoc.Call(
+ uintptr(hdc))
+
+ return int(ret)
+}
+
+func BitBlt(hdcDest HDC, nXDest, nYDest, nWidth, nHeight int, hdcSrc HDC, nXSrc, nYSrc int, dwRop uint) {
+ ret, _, _ := procBitBlt.Call(
+ uintptr(hdcDest),
+ uintptr(nXDest),
+ uintptr(nYDest),
+ uintptr(nWidth),
+ uintptr(nHeight),
+ uintptr(hdcSrc),
+ uintptr(nXSrc),
+ uintptr(nYSrc),
+ uintptr(dwRop))
+
+ if ret == 0 {
+ panic("BitBlt failed")
+ }
+}
+
+func PatBlt(hdc HDC, nXLeft, nYLeft, nWidth, nHeight int, dwRop uint) {
+ ret, _, _ := procPatBlt.Call(
+ uintptr(hdc),
+ uintptr(nXLeft),
+ uintptr(nYLeft),
+ uintptr(nWidth),
+ uintptr(nHeight),
+ uintptr(dwRop))
+
+ if ret == 0 {
+ panic("PatBlt failed")
+ }
+}
+
+func CloseEnhMetaFile(hdc HDC) HENHMETAFILE {
+ ret, _, _ := procCloseEnhMetaFile.Call(
+ uintptr(hdc))
+
+ return HENHMETAFILE(ret)
+}
+
+func CopyEnhMetaFile(hemfSrc HENHMETAFILE, lpszFile *uint16) HENHMETAFILE {
+ ret, _, _ := procCopyEnhMetaFile.Call(
+ uintptr(hemfSrc),
+ uintptr(unsafe.Pointer(lpszFile)))
+
+ return HENHMETAFILE(ret)
+}
+
+func CreateBrushIndirect(lplb *LOGBRUSH) HBRUSH {
+ ret, _, _ := procCreateBrushIndirect.Call(
+ uintptr(unsafe.Pointer(lplb)))
+
+ return HBRUSH(ret)
+}
+
+func CreateCompatibleDC(hdc HDC) HDC {
+ ret, _, _ := procCreateCompatibleDC.Call(
+ uintptr(hdc))
+
+ if ret == 0 {
+ panic("Create compatible DC failed")
+ }
+
+ return HDC(ret)
+}
+
+func CreateDC(lpszDriver, lpszDevice, lpszOutput *uint16, lpInitData *DEVMODE) HDC {
+ ret, _, _ := procCreateDC.Call(
+ uintptr(unsafe.Pointer(lpszDriver)),
+ uintptr(unsafe.Pointer(lpszDevice)),
+ uintptr(unsafe.Pointer(lpszOutput)),
+ uintptr(unsafe.Pointer(lpInitData)))
+
+ return HDC(ret)
+}
+
+func CreateCompatibleBitmap(hdc HDC, width, height uint) HBITMAP {
+ ret, _, _ := procCreateCompatibleBitmap.Call(
+ uintptr(hdc),
+ uintptr(width),
+ uintptr(height))
+
+ return HBITMAP(ret)
+}
+
+func CreateDIBSection(hdc HDC, pbmi *BITMAPINFO, iUsage uint, ppvBits *unsafe.Pointer, hSection HANDLE, dwOffset uint) HBITMAP {
+ ret, _, _ := procCreateDIBSection.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(pbmi)),
+ uintptr(iUsage),
+ uintptr(unsafe.Pointer(ppvBits)),
+ uintptr(hSection),
+ uintptr(dwOffset))
+
+ return HBITMAP(ret)
+}
+
+func CreateEnhMetaFile(hdcRef HDC, lpFilename *uint16, lpRect *RECT, lpDescription *uint16) HDC {
+ ret, _, _ := procCreateEnhMetaFile.Call(
+ uintptr(hdcRef),
+ uintptr(unsafe.Pointer(lpFilename)),
+ uintptr(unsafe.Pointer(lpRect)),
+ uintptr(unsafe.Pointer(lpDescription)))
+
+ return HDC(ret)
+}
+
+func CreateIC(lpszDriver, lpszDevice, lpszOutput *uint16, lpdvmInit *DEVMODE) HDC {
+ ret, _, _ := procCreateIC.Call(
+ uintptr(unsafe.Pointer(lpszDriver)),
+ uintptr(unsafe.Pointer(lpszDevice)),
+ uintptr(unsafe.Pointer(lpszOutput)),
+ uintptr(unsafe.Pointer(lpdvmInit)))
+
+ return HDC(ret)
+}
+
+func DeleteDC(hdc HDC) bool {
+ ret, _, _ := procDeleteDC.Call(
+ uintptr(hdc))
+
+ return ret != 0
+}
+
+func DeleteEnhMetaFile(hemf HENHMETAFILE) bool {
+ ret, _, _ := procDeleteEnhMetaFile.Call(
+ uintptr(hemf))
+
+ return ret != 0
+}
+
+func Ellipse(hdc HDC, nLeftRect, nTopRect, nRightRect, nBottomRect int) bool {
+ ret, _, _ := procEllipse.Call(
+ uintptr(hdc),
+ uintptr(nLeftRect),
+ uintptr(nTopRect),
+ uintptr(nRightRect),
+ uintptr(nBottomRect))
+
+ return ret != 0
+}
+
+func EndDoc(hdc HDC) int {
+ ret, _, _ := procEndDoc.Call(
+ uintptr(hdc))
+
+ return int(ret)
+}
+
+func EndPage(hdc HDC) int {
+ ret, _, _ := procEndPage.Call(
+ uintptr(hdc))
+
+ return int(ret)
+}
+
+func ExtCreatePen(dwPenStyle, dwWidth uint, lplb *LOGBRUSH, dwStyleCount uint, lpStyle *uint) HPEN {
+ ret, _, _ := procExtCreatePen.Call(
+ uintptr(dwPenStyle),
+ uintptr(dwWidth),
+ uintptr(unsafe.Pointer(lplb)),
+ uintptr(dwStyleCount),
+ uintptr(unsafe.Pointer(lpStyle)))
+
+ return HPEN(ret)
+}
+
+func GetEnhMetaFile(lpszMetaFile *uint16) HENHMETAFILE {
+ ret, _, _ := procGetEnhMetaFile.Call(
+ uintptr(unsafe.Pointer(lpszMetaFile)))
+
+ return HENHMETAFILE(ret)
+}
+
+func GetEnhMetaFileHeader(hemf HENHMETAFILE, cbBuffer uint, lpemh *ENHMETAHEADER) uint {
+ ret, _, _ := procGetEnhMetaFileHeader.Call(
+ uintptr(hemf),
+ uintptr(cbBuffer),
+ uintptr(unsafe.Pointer(lpemh)))
+
+ return uint(ret)
+}
+
+func GetObject(hgdiobj HGDIOBJ, cbBuffer uintptr, lpvObject unsafe.Pointer) int {
+ ret, _, _ := procGetObject.Call(
+ uintptr(hgdiobj),
+ uintptr(cbBuffer),
+ uintptr(lpvObject))
+
+ return int(ret)
+}
+
+func GetStockObject(fnObject int) HGDIOBJ {
+ ret, _, _ := procGetStockObject.Call(
+ uintptr(fnObject))
+
+ return HGDIOBJ(ret)
+}
+
+func GetTextExtentExPoint(hdc HDC, lpszStr *uint16, cchString, nMaxExtent int, lpnFit, alpDx *int, lpSize *SIZE) bool {
+ ret, _, _ := procGetTextExtentExPoint.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(lpszStr)),
+ uintptr(cchString),
+ uintptr(nMaxExtent),
+ uintptr(unsafe.Pointer(lpnFit)),
+ uintptr(unsafe.Pointer(alpDx)),
+ uintptr(unsafe.Pointer(lpSize)))
+
+ return ret != 0
+}
+
+func GetTextExtentPoint32(hdc HDC, lpString *uint16, c int, lpSize *SIZE) bool {
+ ret, _, _ := procGetTextExtentPoint32.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(lpString)),
+ uintptr(c),
+ uintptr(unsafe.Pointer(lpSize)))
+
+ return ret != 0
+}
+
+func GetTextMetrics(hdc HDC, lptm *TEXTMETRIC) bool {
+ ret, _, _ := procGetTextMetrics.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(lptm)))
+
+ return ret != 0
+}
+
+func LineTo(hdc HDC, nXEnd, nYEnd int) bool {
+ ret, _, _ := procLineTo.Call(
+ uintptr(hdc),
+ uintptr(nXEnd),
+ uintptr(nYEnd))
+
+ return ret != 0
+}
+
+func MoveToEx(hdc HDC, x, y int, lpPoint *POINT) bool {
+ ret, _, _ := procMoveToEx.Call(
+ uintptr(hdc),
+ uintptr(x),
+ uintptr(y),
+ uintptr(unsafe.Pointer(lpPoint)))
+
+ return ret != 0
+}
+
+func PlayEnhMetaFile(hdc HDC, hemf HENHMETAFILE, lpRect *RECT) bool {
+ ret, _, _ := procPlayEnhMetaFile.Call(
+ uintptr(hdc),
+ uintptr(hemf),
+ uintptr(unsafe.Pointer(lpRect)))
+
+ return ret != 0
+}
+
+func Rectangle(hdc HDC, nLeftRect, nTopRect, nRightRect, nBottomRect int) bool {
+ ret, _, _ := procRectangle.Call(
+ uintptr(hdc),
+ uintptr(nLeftRect),
+ uintptr(nTopRect),
+ uintptr(nRightRect),
+ uintptr(nBottomRect))
+
+ return ret != 0
+}
+
+func ResetDC(hdc HDC, lpInitData *DEVMODE) HDC {
+ ret, _, _ := procResetDC.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(lpInitData)))
+
+ return HDC(ret)
+}
+
+func SelectObject(hdc HDC, hgdiobj HGDIOBJ) HGDIOBJ {
+ ret, _, _ := procSelectObject.Call(
+ uintptr(hdc),
+ uintptr(hgdiobj))
+
+ if ret == 0 {
+ panic("SelectObject failed")
+ }
+
+ return HGDIOBJ(ret)
+}
+
+func SetBkMode(hdc HDC, iBkMode int) int {
+ ret, _, _ := procSetBkMode.Call(
+ uintptr(hdc),
+ uintptr(iBkMode))
+
+ if ret == 0 {
+ panic("SetBkMode failed")
+ }
+
+ return int(ret)
+}
+
+func SetBrushOrgEx(hdc HDC, nXOrg, nYOrg int, lppt *POINT) bool {
+ ret, _, _ := procSetBrushOrgEx.Call(
+ uintptr(hdc),
+ uintptr(nXOrg),
+ uintptr(nYOrg),
+ uintptr(unsafe.Pointer(lppt)))
+
+ return ret != 0
+}
+
+func SetStretchBltMode(hdc HDC, iStretchMode int) int {
+ ret, _, _ := procSetStretchBltMode.Call(
+ uintptr(hdc),
+ uintptr(iStretchMode))
+
+ return int(ret)
+}
+
+func SetTextColor(hdc HDC, crColor COLORREF) COLORREF {
+ ret, _, _ := procSetTextColor.Call(
+ uintptr(hdc),
+ uintptr(crColor))
+
+ if ret == CLR_INVALID {
+ panic("SetTextColor failed")
+ }
+
+ return COLORREF(ret)
+}
+
+func SetBkColor(hdc HDC, crColor COLORREF) COLORREF {
+ ret, _, _ := procSetBkColor.Call(
+ uintptr(hdc),
+ uintptr(crColor))
+
+ if ret == CLR_INVALID {
+ panic("SetBkColor failed")
+ }
+
+ return COLORREF(ret)
+}
+
+func StartDoc(hdc HDC, lpdi *DOCINFO) int {
+ ret, _, _ := procStartDoc.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(lpdi)))
+
+ return int(ret)
+}
+
+func StartPage(hdc HDC) int {
+ ret, _, _ := procStartPage.Call(
+ uintptr(hdc))
+
+ return int(ret)
+}
+
+func StretchBlt(hdcDest HDC, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest int, hdcSrc HDC, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc int, dwRop uint) {
+ ret, _, _ := procStretchBlt.Call(
+ uintptr(hdcDest),
+ uintptr(nXOriginDest),
+ uintptr(nYOriginDest),
+ uintptr(nWidthDest),
+ uintptr(nHeightDest),
+ uintptr(hdcSrc),
+ uintptr(nXOriginSrc),
+ uintptr(nYOriginSrc),
+ uintptr(nWidthSrc),
+ uintptr(nHeightSrc),
+ uintptr(dwRop))
+
+ if ret == 0 {
+ panic("StretchBlt failed")
+ }
+}
+
+func SetDIBitsToDevice(hdc HDC, xDest, yDest, dwWidth, dwHeight, xSrc, ySrc int, uStartScan, cScanLines uint, lpvBits []byte, lpbmi *BITMAPINFO, fuColorUse uint) int {
+ ret, _, _ := procSetDIBitsToDevice.Call(
+ uintptr(hdc),
+ uintptr(xDest),
+ uintptr(yDest),
+ uintptr(dwWidth),
+ uintptr(dwHeight),
+ uintptr(xSrc),
+ uintptr(ySrc),
+ uintptr(uStartScan),
+ uintptr(cScanLines),
+ uintptr(unsafe.Pointer(&lpvBits[0])),
+ uintptr(unsafe.Pointer(lpbmi)),
+ uintptr(fuColorUse))
+
+ return int(ret)
+}
+
+func ChoosePixelFormat(hdc HDC, pfd *PIXELFORMATDESCRIPTOR) int {
+ ret, _, _ := procChoosePixelFormat.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(pfd)),
+ )
+ return int(ret)
+}
+
+func DescribePixelFormat(hdc HDC, iPixelFormat int, nBytes uint, pfd *PIXELFORMATDESCRIPTOR) int {
+ ret, _, _ := procDescribePixelFormat.Call(
+ uintptr(hdc),
+ uintptr(iPixelFormat),
+ uintptr(nBytes),
+ uintptr(unsafe.Pointer(pfd)),
+ )
+ return int(ret)
+}
+
+func GetEnhMetaFilePixelFormat(hemf HENHMETAFILE, cbBuffer uint32, pfd *PIXELFORMATDESCRIPTOR) uint {
+ ret, _, _ := procGetEnhMetaFilePixelFormat.Call(
+ uintptr(hemf),
+ uintptr(cbBuffer),
+ uintptr(unsafe.Pointer(pfd)),
+ )
+ return uint(ret)
+}
+
+func GetPixelFormat(hdc HDC) int {
+ ret, _, _ := procGetPixelFormat.Call(
+ uintptr(hdc),
+ )
+ return int(ret)
+}
+
+func SetPixelFormat(hdc HDC, iPixelFormat int, pfd *PIXELFORMATDESCRIPTOR) bool {
+ ret, _, _ := procSetPixelFormat.Call(
+ uintptr(hdc),
+ uintptr(iPixelFormat),
+ uintptr(unsafe.Pointer(pfd)),
+ )
+ return ret == TRUE
+}
+
+func SwapBuffers(hdc HDC) bool {
+ ret, _, _ := procSwapBuffers.Call(uintptr(hdc))
+ return ret == TRUE
+}
diff --git a/vendor/github.com/apenwarr/w32/gdiplus.go b/vendor/github.com/apenwarr/w32/gdiplus.go
new file mode 100644
index 000000000..f3a8fca4d
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/gdiplus.go
@@ -0,0 +1,175 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "errors"
+ "fmt"
+ "syscall"
+ "unsafe"
+)
+
+const (
+ Ok = 0
+ GenericError = 1
+ InvalidParameter = 2
+ OutOfMemory = 3
+ ObjectBusy = 4
+ InsufficientBuffer = 5
+ NotImplemented = 6
+ Win32Error = 7
+ WrongState = 8
+ Aborted = 9
+ FileNotFound = 10
+ ValueOverflow = 11
+ AccessDenied = 12
+ UnknownImageFormat = 13
+ FontFamilyNotFound = 14
+ FontStyleNotFound = 15
+ NotTrueTypeFont = 16
+ UnsupportedGdiplusVersion = 17
+ GdiplusNotInitialized = 18
+ PropertyNotFound = 19
+ PropertyNotSupported = 20
+ ProfileNotFound = 21
+)
+
+func GetGpStatus(s int32) string {
+ switch s {
+ case Ok:
+ return "Ok"
+ case GenericError:
+ return "GenericError"
+ case InvalidParameter:
+ return "InvalidParameter"
+ case OutOfMemory:
+ return "OutOfMemory"
+ case ObjectBusy:
+ return "ObjectBusy"
+ case InsufficientBuffer:
+ return "InsufficientBuffer"
+ case NotImplemented:
+ return "NotImplemented"
+ case Win32Error:
+ return "Win32Error"
+ case WrongState:
+ return "WrongState"
+ case Aborted:
+ return "Aborted"
+ case FileNotFound:
+ return "FileNotFound"
+ case ValueOverflow:
+ return "ValueOverflow"
+ case AccessDenied:
+ return "AccessDenied"
+ case UnknownImageFormat:
+ return "UnknownImageFormat"
+ case FontFamilyNotFound:
+ return "FontFamilyNotFound"
+ case FontStyleNotFound:
+ return "FontStyleNotFound"
+ case NotTrueTypeFont:
+ return "NotTrueTypeFont"
+ case UnsupportedGdiplusVersion:
+ return "UnsupportedGdiplusVersion"
+ case GdiplusNotInitialized:
+ return "GdiplusNotInitialized"
+ case PropertyNotFound:
+ return "PropertyNotFound"
+ case PropertyNotSupported:
+ return "PropertyNotSupported"
+ case ProfileNotFound:
+ return "ProfileNotFound"
+ }
+ return "Unknown Status Value"
+}
+
+var (
+ token uintptr
+
+ modgdiplus = syscall.NewLazyDLL("gdiplus.dll")
+
+ procGdipCreateBitmapFromFile = modgdiplus.NewProc("GdipCreateBitmapFromFile")
+ procGdipCreateBitmapFromHBITMAP = modgdiplus.NewProc("GdipCreateBitmapFromHBITMAP")
+ procGdipCreateHBITMAPFromBitmap = modgdiplus.NewProc("GdipCreateHBITMAPFromBitmap")
+ procGdipCreateBitmapFromResource = modgdiplus.NewProc("GdipCreateBitmapFromResource")
+ procGdipCreateBitmapFromStream = modgdiplus.NewProc("GdipCreateBitmapFromStream")
+ procGdipDisposeImage = modgdiplus.NewProc("GdipDisposeImage")
+ procGdiplusShutdown = modgdiplus.NewProc("GdiplusShutdown")
+ procGdiplusStartup = modgdiplus.NewProc("GdiplusStartup")
+)
+
+func GdipCreateBitmapFromFile(filename string) (*uintptr, error) {
+ var bitmap *uintptr
+ ret, _, _ := procGdipCreateBitmapFromFile.Call(
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(filename))),
+ uintptr(unsafe.Pointer(&bitmap)))
+
+ if ret != Ok {
+ return nil, errors.New(fmt.Sprintf("GdipCreateBitmapFromFile failed with status '%s' for file '%s'", GetGpStatus(int32(ret)), filename))
+ }
+
+ return bitmap, nil
+}
+
+func GdipCreateBitmapFromResource(instance HINSTANCE, resId *uint16) (*uintptr, error) {
+ var bitmap *uintptr
+ ret, _, _ := procGdipCreateBitmapFromResource.Call(
+ uintptr(instance),
+ uintptr(unsafe.Pointer(resId)),
+ uintptr(unsafe.Pointer(&bitmap)))
+
+ if ret != Ok {
+ return nil, errors.New(fmt.Sprintf("GdiCreateBitmapFromResource failed with status '%s'", GetGpStatus(int32(ret))))
+ }
+
+ return bitmap, nil
+}
+
+func GdipCreateBitmapFromStream(stream *IStream) (*uintptr, error) {
+ var bitmap *uintptr
+ ret, _, _ := procGdipCreateBitmapFromStream.Call(
+ uintptr(unsafe.Pointer(stream)),
+ uintptr(unsafe.Pointer(&bitmap)))
+
+ if ret != Ok {
+ return nil, errors.New(fmt.Sprintf("GdipCreateBitmapFromStream failed with status '%s'", GetGpStatus(int32(ret))))
+ }
+
+ return bitmap, nil
+}
+
+func GdipCreateHBITMAPFromBitmap(bitmap *uintptr, background uint32) (HBITMAP, error) {
+ var hbitmap HBITMAP
+ ret, _, _ := procGdipCreateHBITMAPFromBitmap.Call(
+ uintptr(unsafe.Pointer(bitmap)),
+ uintptr(unsafe.Pointer(&hbitmap)),
+ uintptr(background))
+
+ if ret != Ok {
+ return 0, errors.New(fmt.Sprintf("GdipCreateHBITMAPFromBitmap failed with status '%s'", GetGpStatus(int32(ret))))
+ }
+
+ return hbitmap, nil
+}
+
+func GdipDisposeImage(image *uintptr) {
+ procGdipDisposeImage.Call(uintptr(unsafe.Pointer(image)))
+}
+
+func GdiplusShutdown() {
+ procGdiplusShutdown.Call(token)
+}
+
+func GdiplusStartup(input *GdiplusStartupInput, output *GdiplusStartupOutput) {
+ ret, _, _ := procGdiplusStartup.Call(
+ uintptr(unsafe.Pointer(&token)),
+ uintptr(unsafe.Pointer(input)),
+ uintptr(unsafe.Pointer(output)))
+
+ if ret != Ok {
+ panic("GdiplusStartup failed with status " + GetGpStatus(int32(ret)))
+ }
+}
diff --git a/vendor/github.com/apenwarr/w32/idispatch.go b/vendor/github.com/apenwarr/w32/idispatch.go
new file mode 100644
index 000000000..41634a648
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/idispatch.go
@@ -0,0 +1,43 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "unsafe"
+)
+
+type pIDispatchVtbl struct {
+ pQueryInterface uintptr
+ pAddRef uintptr
+ pRelease uintptr
+ pGetTypeInfoCount uintptr
+ pGetTypeInfo uintptr
+ pGetIDsOfNames uintptr
+ pInvoke uintptr
+}
+
+type IDispatch struct {
+ lpVtbl *pIDispatchVtbl
+}
+
+func (this *IDispatch) QueryInterface(id *GUID) *IDispatch {
+ return ComQueryInterface((*IUnknown)(unsafe.Pointer(this)), id)
+}
+
+func (this *IDispatch) AddRef() int32 {
+ return ComAddRef((*IUnknown)(unsafe.Pointer(this)))
+}
+
+func (this *IDispatch) Release() int32 {
+ return ComRelease((*IUnknown)(unsafe.Pointer(this)))
+}
+
+func (this *IDispatch) GetIDsOfName(names []string) []int32 {
+ return ComGetIDsOfName(this, names)
+}
+
+func (this *IDispatch) Invoke(dispid int32, dispatch int16, params ...interface{}) *VARIANT {
+ return ComInvoke(this, dispid, dispatch, params...)
+}
diff --git a/vendor/github.com/apenwarr/w32/istream.go b/vendor/github.com/apenwarr/w32/istream.go
new file mode 100644
index 000000000..2b840c3b0
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/istream.go
@@ -0,0 +1,31 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "unsafe"
+)
+
+type pIStreamVtbl struct {
+ pQueryInterface uintptr
+ pAddRef uintptr
+ pRelease uintptr
+}
+
+type IStream struct {
+ lpVtbl *pIStreamVtbl
+}
+
+func (this *IStream) QueryInterface(id *GUID) *IDispatch {
+ return ComQueryInterface((*IUnknown)(unsafe.Pointer(this)), id)
+}
+
+func (this *IStream) AddRef() int32 {
+ return ComAddRef((*IUnknown)(unsafe.Pointer(this)))
+}
+
+func (this *IStream) Release() int32 {
+ return ComRelease((*IUnknown)(unsafe.Pointer(this)))
+}
diff --git a/vendor/github.com/apenwarr/w32/iunknown.go b/vendor/github.com/apenwarr/w32/iunknown.go
new file mode 100644
index 000000000..d63ff1bbc
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/iunknown.go
@@ -0,0 +1,27 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+type pIUnknownVtbl struct {
+ pQueryInterface uintptr
+ pAddRef uintptr
+ pRelease uintptr
+}
+
+type IUnknown struct {
+ lpVtbl *pIUnknownVtbl
+}
+
+func (this *IUnknown) QueryInterface(id *GUID) *IDispatch {
+ return ComQueryInterface(this, id)
+}
+
+func (this *IUnknown) AddRef() int32 {
+ return ComAddRef(this)
+}
+
+func (this *IUnknown) Release() int32 {
+ return ComRelease(this)
+}
diff --git a/vendor/github.com/apenwarr/w32/kernel32.go b/vendor/github.com/apenwarr/w32/kernel32.go
new file mode 100644
index 000000000..28febbeca
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/kernel32.go
@@ -0,0 +1,388 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modkernel32 = syscall.NewLazyDLL("kernel32.dll")
+
+ procGetModuleHandle = modkernel32.NewProc("GetModuleHandleW")
+ procMulDiv = modkernel32.NewProc("MulDiv")
+ procGetConsoleWindow = modkernel32.NewProc("GetConsoleWindow")
+ procGetCurrentThread = modkernel32.NewProc("GetCurrentThread")
+ procGetLogicalDrives = modkernel32.NewProc("GetLogicalDrives")
+ procGetUserDefaultLCID = modkernel32.NewProc("GetUserDefaultLCID")
+ procLstrlen = modkernel32.NewProc("lstrlenW")
+ procLstrcpy = modkernel32.NewProc("lstrcpyW")
+ procGlobalAlloc = modkernel32.NewProc("GlobalAlloc")
+ procGlobalFree = modkernel32.NewProc("GlobalFree")
+ procGlobalLock = modkernel32.NewProc("GlobalLock")
+ procGlobalUnlock = modkernel32.NewProc("GlobalUnlock")
+ procMoveMemory = modkernel32.NewProc("RtlMoveMemory")
+ procFindResource = modkernel32.NewProc("FindResourceW")
+ procSizeofResource = modkernel32.NewProc("SizeofResource")
+ procLockResource = modkernel32.NewProc("LockResource")
+ procLoadResource = modkernel32.NewProc("LoadResource")
+ procGetLastError = modkernel32.NewProc("GetLastError")
+ // procOpenProcess = modkernel32.NewProc("OpenProcess")
+ // procTerminateProcess = modkernel32.NewProc("TerminateProcess")
+ procCloseHandle = modkernel32.NewProc("CloseHandle")
+ procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot")
+ procModule32First = modkernel32.NewProc("Module32FirstW")
+ procModule32Next = modkernel32.NewProc("Module32NextW")
+ procGetSystemTimes = modkernel32.NewProc("GetSystemTimes")
+ procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo")
+ procSetConsoleTextAttribute = modkernel32.NewProc("SetConsoleTextAttribute")
+ procGetDiskFreeSpaceEx = modkernel32.NewProc("GetDiskFreeSpaceExW")
+ procGetProcessTimes = modkernel32.NewProc("GetProcessTimes")
+ procSetSystemTime = modkernel32.NewProc("SetSystemTime")
+ procGetSystemTime = modkernel32.NewProc("GetSystemTime")
+ procVirtualAllocEx = modkernel32.NewProc("VirtualAllocEx")
+ procVirtualFreeEx = modkernel32.NewProc("VirtualFreeEx")
+ procWriteProcessMemory = modkernel32.NewProc("WriteProcessMemory")
+ procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory")
+ procQueryPerformanceCounter = modkernel32.NewProc("QueryPerformanceCounter")
+ procQueryPerformanceFrequency = modkernel32.NewProc("QueryPerformanceFrequency")
+)
+
+func GetModuleHandle(modulename string) HINSTANCE {
+ var mn uintptr
+ if modulename == "" {
+ mn = 0
+ } else {
+ mn = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(modulename)))
+ }
+ ret, _, _ := procGetModuleHandle.Call(mn)
+ return HINSTANCE(ret)
+}
+
+func MulDiv(number, numerator, denominator int) int {
+ ret, _, _ := procMulDiv.Call(
+ uintptr(number),
+ uintptr(numerator),
+ uintptr(denominator))
+
+ return int(ret)
+}
+
+func GetConsoleWindow() HWND {
+ ret, _, _ := procGetConsoleWindow.Call()
+
+ return HWND(ret)
+}
+
+func GetCurrentThread() HANDLE {
+ ret, _, _ := procGetCurrentThread.Call()
+
+ return HANDLE(ret)
+}
+
+func GetLogicalDrives() uint32 {
+ ret, _, _ := procGetLogicalDrives.Call()
+
+ return uint32(ret)
+}
+
+func GetUserDefaultLCID() uint32 {
+ ret, _, _ := procGetUserDefaultLCID.Call()
+
+ return uint32(ret)
+}
+
+func Lstrlen(lpString *uint16) int {
+ ret, _, _ := procLstrlen.Call(uintptr(unsafe.Pointer(lpString)))
+
+ return int(ret)
+}
+
+func Lstrcpy(buf []uint16, lpString *uint16) {
+ procLstrcpy.Call(
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(unsafe.Pointer(lpString)))
+}
+
+func GlobalAlloc(uFlags uint, dwBytes uint32) HGLOBAL {
+ ret, _, _ := procGlobalAlloc.Call(
+ uintptr(uFlags),
+ uintptr(dwBytes))
+
+ if ret == 0 {
+ panic("GlobalAlloc failed")
+ }
+
+ return HGLOBAL(ret)
+}
+
+func GlobalFree(hMem HGLOBAL) {
+ ret, _, _ := procGlobalFree.Call(uintptr(hMem))
+
+ if ret != 0 {
+ panic("GlobalFree failed")
+ }
+}
+
+func GlobalLock(hMem HGLOBAL) unsafe.Pointer {
+ ret, _, _ := procGlobalLock.Call(uintptr(hMem))
+
+ if ret == 0 {
+ panic("GlobalLock failed")
+ }
+
+ return unsafe.Pointer(ret)
+}
+
+func GlobalUnlock(hMem HGLOBAL) bool {
+ ret, _, _ := procGlobalUnlock.Call(uintptr(hMem))
+
+ return ret != 0
+}
+
+func MoveMemory(destination, source unsafe.Pointer, length uint32) {
+ procMoveMemory.Call(
+ uintptr(unsafe.Pointer(destination)),
+ uintptr(source),
+ uintptr(length))
+}
+
+func FindResource(hModule HMODULE, lpName, lpType *uint16) (HRSRC, error) {
+ ret, _, _ := procFindResource.Call(
+ uintptr(hModule),
+ uintptr(unsafe.Pointer(lpName)),
+ uintptr(unsafe.Pointer(lpType)))
+
+ if ret == 0 {
+ return 0, syscall.GetLastError()
+ }
+
+ return HRSRC(ret), nil
+}
+
+func SizeofResource(hModule HMODULE, hResInfo HRSRC) uint32 {
+ ret, _, _ := procSizeofResource.Call(
+ uintptr(hModule),
+ uintptr(hResInfo))
+
+ if ret == 0 {
+ panic("SizeofResource failed")
+ }
+
+ return uint32(ret)
+}
+
+func LockResource(hResData HGLOBAL) unsafe.Pointer {
+ ret, _, _ := procLockResource.Call(uintptr(hResData))
+
+ if ret == 0 {
+ panic("LockResource failed")
+ }
+
+ return unsafe.Pointer(ret)
+}
+
+func LoadResource(hModule HMODULE, hResInfo HRSRC) HGLOBAL {
+ ret, _, _ := procLoadResource.Call(
+ uintptr(hModule),
+ uintptr(hResInfo))
+
+ if ret == 0 {
+ panic("LoadResource failed")
+ }
+
+ return HGLOBAL(ret)
+}
+
+func GetLastError() uint32 {
+ ret, _, _ := procGetLastError.Call()
+ return uint32(ret)
+}
+
+// func OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) HANDLE {
+// inherit := 0
+// if inheritHandle {
+// inherit = 1
+// }
+
+// ret, _, _ := procOpenProcess.Call(
+// uintptr(desiredAccess),
+// uintptr(inherit),
+// uintptr(processId))
+// return HANDLE(ret)
+// }
+
+// func TerminateProcess(hProcess HANDLE, uExitCode uint) bool {
+// ret, _, _ := procTerminateProcess.Call(
+// uintptr(hProcess),
+// uintptr(uExitCode))
+// return ret != 0
+// }
+
+func CloseHandle(object HANDLE) bool {
+ ret, _, _ := procCloseHandle.Call(
+ uintptr(object))
+ return ret != 0
+}
+
+func CreateToolhelp32Snapshot(flags, processId uint32) HANDLE {
+ ret, _, _ := procCreateToolhelp32Snapshot.Call(
+ uintptr(flags),
+ uintptr(processId))
+
+ if ret <= 0 {
+ return HANDLE(0)
+ }
+
+ return HANDLE(ret)
+}
+
+func Module32First(snapshot HANDLE, me *MODULEENTRY32) bool {
+ ret, _, _ := procModule32First.Call(
+ uintptr(snapshot),
+ uintptr(unsafe.Pointer(me)))
+
+ return ret != 0
+}
+
+func Module32Next(snapshot HANDLE, me *MODULEENTRY32) bool {
+ ret, _, _ := procModule32Next.Call(
+ uintptr(snapshot),
+ uintptr(unsafe.Pointer(me)))
+
+ return ret != 0
+}
+
+func GetSystemTimes(lpIdleTime, lpKernelTime, lpUserTime *FILETIME) bool {
+ ret, _, _ := procGetSystemTimes.Call(
+ uintptr(unsafe.Pointer(lpIdleTime)),
+ uintptr(unsafe.Pointer(lpKernelTime)),
+ uintptr(unsafe.Pointer(lpUserTime)))
+
+ return ret != 0
+}
+
+func GetProcessTimes(hProcess HANDLE, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime *FILETIME) bool {
+ ret, _, _ := procGetProcessTimes.Call(
+ uintptr(hProcess),
+ uintptr(unsafe.Pointer(lpCreationTime)),
+ uintptr(unsafe.Pointer(lpExitTime)),
+ uintptr(unsafe.Pointer(lpKernelTime)),
+ uintptr(unsafe.Pointer(lpUserTime)))
+
+ return ret != 0
+}
+
+func GetConsoleScreenBufferInfo(hConsoleOutput HANDLE) *CONSOLE_SCREEN_BUFFER_INFO {
+ var csbi CONSOLE_SCREEN_BUFFER_INFO
+ ret, _, _ := procGetConsoleScreenBufferInfo.Call(
+ uintptr(hConsoleOutput),
+ uintptr(unsafe.Pointer(&csbi)))
+ if ret == 0 {
+ return nil
+ }
+ return &csbi
+}
+
+func SetConsoleTextAttribute(hConsoleOutput HANDLE, wAttributes uint16) bool {
+ ret, _, _ := procSetConsoleTextAttribute.Call(
+ uintptr(hConsoleOutput),
+ uintptr(wAttributes))
+ return ret != 0
+}
+
+func GetDiskFreeSpaceEx(dirName string) (r bool,
+ freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes uint64) {
+ ret, _, _ := procGetDiskFreeSpaceEx.Call(
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(dirName))),
+ uintptr(unsafe.Pointer(&freeBytesAvailable)),
+ uintptr(unsafe.Pointer(&totalNumberOfBytes)),
+ uintptr(unsafe.Pointer(&totalNumberOfFreeBytes)))
+ return ret != 0,
+ freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes
+}
+
+func GetSystemTime() *SYSTEMTIME {
+ var time SYSTEMTIME
+ procGetSystemTime.Call(
+ uintptr(unsafe.Pointer(&time)))
+ return &time
+}
+
+func SetSystemTime(time *SYSTEMTIME) bool {
+ ret, _, _ := procSetSystemTime.Call(
+ uintptr(unsafe.Pointer(time)))
+ return ret != 0
+}
+
+func VirtualAllocEx(hProcess HANDLE, lpAddress, dwSize uintptr, flAllocationType, flProtect uint32) uintptr {
+ ret, _, _ := procVirtualAllocEx.Call(
+ uintptr(hProcess),
+ lpAddress,
+ dwSize,
+ uintptr(flAllocationType),
+ uintptr(flProtect),
+ )
+
+ return ret
+}
+
+func VirtualFreeEx(hProcess HANDLE, lpAddress, dwSize uintptr, dwFreeType uint32) bool {
+ ret, _, _ := procVirtualFreeEx.Call(
+ uintptr(hProcess),
+ lpAddress,
+ dwSize,
+ uintptr(dwFreeType),
+ )
+
+ return ret != 0
+}
+
+func WriteProcessMemory(hProcess HANDLE, lpBaseAddress, lpBuffer, nSize uintptr) (int, bool) {
+ var nBytesWritten int
+ ret, _, _ := procWriteProcessMemory.Call(
+ uintptr(hProcess),
+ lpBaseAddress,
+ lpBuffer,
+ nSize,
+ uintptr(unsafe.Pointer(&nBytesWritten)),
+ )
+
+ return nBytesWritten, ret != 0
+}
+
+func ReadProcessMemory(hProcess HANDLE, lpBaseAddress, nSize uintptr) (lpBuffer []uint16, lpNumberOfBytesRead int, ok bool) {
+
+ var nBytesRead int
+ buf := make([]uint16, nSize)
+ ret, _, _ := procReadProcessMemory.Call(
+ uintptr(hProcess),
+ lpBaseAddress,
+ uintptr(unsafe.Pointer(&buf[0])),
+ nSize,
+ uintptr(unsafe.Pointer(&nBytesRead)),
+ )
+
+ return buf, nBytesRead, ret != 0
+}
+
+func QueryPerformanceCounter() uint64 {
+ result := uint64(0)
+ procQueryPerformanceCounter.Call(
+ uintptr(unsafe.Pointer(&result)),
+ )
+
+ return result
+}
+
+func QueryPerformanceFrequency() uint64 {
+ result := uint64(0)
+ procQueryPerformanceFrequency.Call(
+ uintptr(unsafe.Pointer(&result)),
+ )
+
+ return result
+}
diff --git a/vendor/github.com/apenwarr/w32/ole32.go b/vendor/github.com/apenwarr/w32/ole32.go
new file mode 100644
index 000000000..a7f79b550
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/ole32.go
@@ -0,0 +1,63 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modole32 = syscall.NewLazyDLL("ole32.dll")
+
+ procCoInitializeEx = modole32.NewProc("CoInitializeEx")
+ procCoInitialize = modole32.NewProc("CoInitialize")
+ procCoUninitialize = modole32.NewProc("CoUninitialize")
+ procCreateStreamOnHGlobal = modole32.NewProc("CreateStreamOnHGlobal")
+)
+
+func CoInitializeEx(coInit uintptr) HRESULT {
+ ret, _, _ := procCoInitializeEx.Call(
+ 0,
+ coInit)
+
+ switch uint32(ret) {
+ case E_INVALIDARG:
+ panic("CoInitializeEx failed with E_INVALIDARG")
+ case E_OUTOFMEMORY:
+ panic("CoInitializeEx failed with E_OUTOFMEMORY")
+ case E_UNEXPECTED:
+ panic("CoInitializeEx failed with E_UNEXPECTED")
+ }
+
+ return HRESULT(ret)
+}
+
+func CoInitialize() {
+ procCoInitialize.Call(0)
+}
+
+func CoUninitialize() {
+ procCoUninitialize.Call()
+}
+
+func CreateStreamOnHGlobal(hGlobal HGLOBAL, fDeleteOnRelease bool) *IStream {
+ stream := new(IStream)
+ ret, _, _ := procCreateStreamOnHGlobal.Call(
+ uintptr(hGlobal),
+ uintptr(BoolToBOOL(fDeleteOnRelease)),
+ uintptr(unsafe.Pointer(&stream)))
+
+ switch uint32(ret) {
+ case E_INVALIDARG:
+ panic("CreateStreamOnHGlobal failed with E_INVALIDARG")
+ case E_OUTOFMEMORY:
+ panic("CreateStreamOnHGlobal failed with E_OUTOFMEMORY")
+ case E_UNEXPECTED:
+ panic("CreateStreamOnHGlobal failed with E_UNEXPECTED")
+ }
+
+ return stream
+}
diff --git a/vendor/github.com/apenwarr/w32/oleaut32.go b/vendor/github.com/apenwarr/w32/oleaut32.go
new file mode 100644
index 000000000..0eeeab724
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/oleaut32.go
@@ -0,0 +1,48 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modoleaut32 = syscall.NewLazyDLL("oleaut32")
+
+ procVariantInit = modoleaut32.NewProc("VariantInit")
+ procSysAllocString = modoleaut32.NewProc("SysAllocString")
+ procSysFreeString = modoleaut32.NewProc("SysFreeString")
+ procSysStringLen = modoleaut32.NewProc("SysStringLen")
+ procCreateDispTypeInfo = modoleaut32.NewProc("CreateDispTypeInfo")
+ procCreateStdDispatch = modoleaut32.NewProc("CreateStdDispatch")
+)
+
+func VariantInit(v *VARIANT) {
+ hr, _, _ := procVariantInit.Call(uintptr(unsafe.Pointer(v)))
+ if hr != 0 {
+ panic("Invoke VariantInit error.")
+ }
+ return
+}
+
+func SysAllocString(v string) (ss *int16) {
+ pss, _, _ := procSysAllocString.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(v))))
+ ss = (*int16)(unsafe.Pointer(pss))
+ return
+}
+
+func SysFreeString(v *int16) {
+ hr, _, _ := procSysFreeString.Call(uintptr(unsafe.Pointer(v)))
+ if hr != 0 {
+ panic("Invoke SysFreeString error.")
+ }
+ return
+}
+
+func SysStringLen(v *int16) uint {
+ l, _, _ := procSysStringLen.Call(uintptr(unsafe.Pointer(v)))
+ return uint(l)
+}
diff --git a/vendor/github.com/apenwarr/w32/opengl32.go b/vendor/github.com/apenwarr/w32/opengl32.go
new file mode 100644
index 000000000..7363bb10a
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/opengl32.go
@@ -0,0 +1,72 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modopengl32 = syscall.NewLazyDLL("opengl32.dll")
+
+ procwglCreateContext = modopengl32.NewProc("wglCreateContext")
+ procwglCreateLayerContext = modopengl32.NewProc("wglCreateLayerContext")
+ procwglDeleteContext = modopengl32.NewProc("wglDeleteContext")
+ procwglGetProcAddress = modopengl32.NewProc("wglGetProcAddress")
+ procwglMakeCurrent = modopengl32.NewProc("wglMakeCurrent")
+ procwglShareLists = modopengl32.NewProc("wglShareLists")
+)
+
+func WglCreateContext(hdc HDC) HGLRC {
+ ret, _, _ := procwglCreateContext.Call(
+ uintptr(hdc),
+ )
+
+ return HGLRC(ret)
+}
+
+func WglCreateLayerContext(hdc HDC, iLayerPlane int) HGLRC {
+ ret, _, _ := procwglCreateLayerContext.Call(
+ uintptr(hdc),
+ uintptr(iLayerPlane),
+ )
+
+ return HGLRC(ret)
+}
+
+func WglDeleteContext(hglrc HGLRC) bool {
+ ret, _, _ := procwglDeleteContext.Call(
+ uintptr(hglrc),
+ )
+
+ return ret == TRUE
+}
+
+func WglGetProcAddress(szProc string) uintptr {
+ ret, _, _ := procwglGetProcAddress.Call(
+ uintptr(unsafe.Pointer(syscall.StringBytePtr(szProc))),
+ )
+
+ return ret
+}
+
+func WglMakeCurrent(hdc HDC, hglrc HGLRC) bool {
+ ret, _, _ := procwglMakeCurrent.Call(
+ uintptr(hdc),
+ uintptr(hglrc),
+ )
+
+ return ret == TRUE
+}
+
+func WglShareLists(hglrc1, hglrc2 HGLRC) bool {
+ ret, _, _ := procwglShareLists.Call(
+ uintptr(hglrc1),
+ uintptr(hglrc2),
+ )
+
+ return ret == TRUE
+}
diff --git a/vendor/github.com/apenwarr/w32/psapi.go b/vendor/github.com/apenwarr/w32/psapi.go
new file mode 100644
index 000000000..bd1e12627
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/psapi.go
@@ -0,0 +1,25 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modpsapi = syscall.NewLazyDLL("psapi.dll")
+
+ procEnumProcesses = modpsapi.NewProc("EnumProcesses")
+)
+
+func EnumProcesses(processIds []uint32, cb uint32, bytesReturned *uint32) bool {
+ ret, _, _ := procEnumProcesses.Call(
+ uintptr(unsafe.Pointer(&processIds[0])),
+ uintptr(cb),
+ uintptr(unsafe.Pointer(bytesReturned)))
+
+ return ret != 0
+}
diff --git a/vendor/github.com/apenwarr/w32/shell32.go b/vendor/github.com/apenwarr/w32/shell32.go
new file mode 100644
index 000000000..0923b8b61
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/shell32.go
@@ -0,0 +1,153 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "errors"
+ "fmt"
+ "syscall"
+ "unsafe"
+)
+
+var (
+ modshell32 = syscall.NewLazyDLL("shell32.dll")
+
+ procSHBrowseForFolder = modshell32.NewProc("SHBrowseForFolderW")
+ procSHGetPathFromIDList = modshell32.NewProc("SHGetPathFromIDListW")
+ procDragAcceptFiles = modshell32.NewProc("DragAcceptFiles")
+ procDragQueryFile = modshell32.NewProc("DragQueryFileW")
+ procDragQueryPoint = modshell32.NewProc("DragQueryPoint")
+ procDragFinish = modshell32.NewProc("DragFinish")
+ procShellExecute = modshell32.NewProc("ShellExecuteW")
+ procExtractIcon = modshell32.NewProc("ExtractIconW")
+)
+
+func SHBrowseForFolder(bi *BROWSEINFO) uintptr {
+ ret, _, _ := procSHBrowseForFolder.Call(uintptr(unsafe.Pointer(bi)))
+
+ return ret
+}
+
+func SHGetPathFromIDList(idl uintptr) string {
+ buf := make([]uint16, 1024)
+ procSHGetPathFromIDList.Call(
+ idl,
+ uintptr(unsafe.Pointer(&buf[0])))
+
+ return syscall.UTF16ToString(buf)
+}
+
+func DragAcceptFiles(hwnd HWND, accept bool) {
+ procDragAcceptFiles.Call(
+ uintptr(hwnd),
+ uintptr(BoolToBOOL(accept)))
+}
+
+func DragQueryFile(hDrop HDROP, iFile uint) (fileName string, fileCount uint) {
+ ret, _, _ := procDragQueryFile.Call(
+ uintptr(hDrop),
+ uintptr(iFile),
+ 0,
+ 0)
+
+ fileCount = uint(ret)
+
+ if iFile != 0xFFFFFFFF {
+ buf := make([]uint16, fileCount+1)
+
+ ret, _, _ := procDragQueryFile.Call(
+ uintptr(hDrop),
+ uintptr(iFile),
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(fileCount+1))
+
+ if ret == 0 {
+ panic("Invoke DragQueryFile error.")
+ }
+
+ fileName = syscall.UTF16ToString(buf)
+ }
+
+ return
+}
+
+func DragQueryPoint(hDrop HDROP) (x, y int, isClientArea bool) {
+ var pt POINT
+ ret, _, _ := procDragQueryPoint.Call(
+ uintptr(hDrop),
+ uintptr(unsafe.Pointer(&pt)))
+
+ return int(pt.X), int(pt.Y), (ret == 1)
+}
+
+func DragFinish(hDrop HDROP) {
+ procDragFinish.Call(uintptr(hDrop))
+}
+
+func ShellExecute(hwnd HWND, lpOperation, lpFile, lpParameters, lpDirectory string, nShowCmd int) error {
+ var op, param, directory uintptr
+ if len(lpOperation) != 0 {
+ op = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpOperation)))
+ }
+ if len(lpParameters) != 0 {
+ param = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpParameters)))
+ }
+ if len(lpDirectory) != 0 {
+ directory = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpDirectory)))
+ }
+
+ ret, _, _ := procShellExecute.Call(
+ uintptr(hwnd),
+ op,
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpFile))),
+ param,
+ directory,
+ uintptr(nShowCmd))
+
+ errorMsg := ""
+ if ret != 0 && ret <= 32 {
+ switch int(ret) {
+ case ERROR_FILE_NOT_FOUND:
+ errorMsg = "The specified file was not found."
+ case ERROR_PATH_NOT_FOUND:
+ errorMsg = "The specified path was not found."
+ case ERROR_BAD_FORMAT:
+ errorMsg = "The .exe file is invalid (non-Win32 .exe or error in .exe image)."
+ case SE_ERR_ACCESSDENIED:
+ errorMsg = "The operating system denied access to the specified file."
+ case SE_ERR_ASSOCINCOMPLETE:
+ errorMsg = "The file name association is incomplete or invalid."
+ case SE_ERR_DDEBUSY:
+ errorMsg = "The DDE transaction could not be completed because other DDE transactions were being processed."
+ case SE_ERR_DDEFAIL:
+ errorMsg = "The DDE transaction failed."
+ case SE_ERR_DDETIMEOUT:
+ errorMsg = "The DDE transaction could not be completed because the request timed out."
+ case SE_ERR_DLLNOTFOUND:
+ errorMsg = "The specified DLL was not found."
+ case SE_ERR_NOASSOC:
+ errorMsg = "There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable."
+ case SE_ERR_OOM:
+ errorMsg = "There was not enough memory to complete the operation."
+ case SE_ERR_SHARE:
+ errorMsg = "A sharing violation occurred."
+ default:
+ errorMsg = fmt.Sprintf("Unknown error occurred with error code %v", ret)
+ }
+ } else {
+ return nil
+ }
+
+ return errors.New(errorMsg)
+}
+
+func ExtractIcon(lpszExeFileName string, nIconIndex int) HICON {
+ ret, _, _ := procExtractIcon.Call(
+ 0,
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpszExeFileName))),
+ uintptr(nIconIndex))
+
+ return HICON(ret)
+}
diff --git a/vendor/github.com/apenwarr/w32/typedef.go b/vendor/github.com/apenwarr/w32/typedef.go
new file mode 100644
index 000000000..118f76c63
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/typedef.go
@@ -0,0 +1,891 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "unsafe"
+)
+
+// From MSDN: Windows Data Types
+// http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751.aspx
+// ATOM WORD
+// BOOL int32
+// BOOLEAN byte
+// BYTE byte
+// CCHAR int8
+// CHAR int8
+// COLORREF DWORD
+// DWORD uint32
+// DWORDLONG ULONGLONG
+// DWORD_PTR ULONG_PTR
+// DWORD32 uint32
+// DWORD64 uint64
+// FLOAT float32
+// HACCEL HANDLE
+// HALF_PTR struct{} // ???
+// HANDLE PVOID
+// HBITMAP HANDLE
+// HBRUSH HANDLE
+// HCOLORSPACE HANDLE
+// HCONV HANDLE
+// HCONVLIST HANDLE
+// HCURSOR HANDLE
+// HDC HANDLE
+// HDDEDATA HANDLE
+// HDESK HANDLE
+// HDROP HANDLE
+// HDWP HANDLE
+// HENHMETAFILE HANDLE
+// HFILE HANDLE
+// HFONT HANDLE
+// HGDIOBJ HANDLE
+// HGLOBAL HANDLE
+// HHOOK HANDLE
+// HICON HANDLE
+// HINSTANCE HANDLE
+// HKEY HANDLE
+// HKL HANDLE
+// HLOCAL HANDLE
+// HMENU HANDLE
+// HMETAFILE HANDLE
+// HMODULE HANDLE
+// HPALETTE HANDLE
+// HPEN HANDLE
+// HRESULT int32
+// HRGN HANDLE
+// HSZ HANDLE
+// HWINSTA HANDLE
+// HWND HANDLE
+// INT int32
+// INT_PTR uintptr
+// INT8 int8
+// INT16 int16
+// INT32 int32
+// INT64 int64
+// LANGID WORD
+// LCID DWORD
+// LCTYPE DWORD
+// LGRPID DWORD
+// LONG int32
+// LONGLONG int64
+// LONG_PTR uintptr
+// LONG32 int32
+// LONG64 int64
+// LPARAM LONG_PTR
+// LPBOOL *BOOL
+// LPBYTE *BYTE
+// LPCOLORREF *COLORREF
+// LPCSTR *int8
+// LPCTSTR LPCWSTR
+// LPCVOID unsafe.Pointer
+// LPCWSTR *WCHAR
+// LPDWORD *DWORD
+// LPHANDLE *HANDLE
+// LPINT *INT
+// LPLONG *LONG
+// LPSTR *CHAR
+// LPTSTR LPWSTR
+// LPVOID unsafe.Pointer
+// LPWORD *WORD
+// LPWSTR *WCHAR
+// LRESULT LONG_PTR
+// PBOOL *BOOL
+// PBOOLEAN *BOOLEAN
+// PBYTE *BYTE
+// PCHAR *CHAR
+// PCSTR *CHAR
+// PCTSTR PCWSTR
+// PCWSTR *WCHAR
+// PDWORD *DWORD
+// PDWORDLONG *DWORDLONG
+// PDWORD_PTR *DWORD_PTR
+// PDWORD32 *DWORD32
+// PDWORD64 *DWORD64
+// PFLOAT *FLOAT
+// PHALF_PTR *HALF_PTR
+// PHANDLE *HANDLE
+// PHKEY *HKEY
+// PINT_PTR *INT_PTR
+// PINT8 *INT8
+// PINT16 *INT16
+// PINT32 *INT32
+// PINT64 *INT64
+// PLCID *LCID
+// PLONG *LONG
+// PLONGLONG *LONGLONG
+// PLONG_PTR *LONG_PTR
+// PLONG32 *LONG32
+// PLONG64 *LONG64
+// POINTER_32 struct{} // ???
+// POINTER_64 struct{} // ???
+// POINTER_SIGNED uintptr
+// POINTER_UNSIGNED uintptr
+// PSHORT *SHORT
+// PSIZE_T *SIZE_T
+// PSSIZE_T *SSIZE_T
+// PSTR *CHAR
+// PTBYTE *TBYTE
+// PTCHAR *TCHAR
+// PTSTR PWSTR
+// PUCHAR *UCHAR
+// PUHALF_PTR *UHALF_PTR
+// PUINT *UINT
+// PUINT_PTR *UINT_PTR
+// PUINT8 *UINT8
+// PUINT16 *UINT16
+// PUINT32 *UINT32
+// PUINT64 *UINT64
+// PULONG *ULONG
+// PULONGLONG *ULONGLONG
+// PULONG_PTR *ULONG_PTR
+// PULONG32 *ULONG32
+// PULONG64 *ULONG64
+// PUSHORT *USHORT
+// PVOID unsafe.Pointer
+// PWCHAR *WCHAR
+// PWORD *WORD
+// PWSTR *WCHAR
+// QWORD uint64
+// SC_HANDLE HANDLE
+// SC_LOCK LPVOID
+// SERVICE_STATUS_HANDLE HANDLE
+// SHORT int16
+// SIZE_T ULONG_PTR
+// SSIZE_T LONG_PTR
+// TBYTE WCHAR
+// TCHAR WCHAR
+// UCHAR uint8
+// UHALF_PTR struct{} // ???
+// UINT uint32
+// UINT_PTR uintptr
+// UINT8 uint8
+// UINT16 uint16
+// UINT32 uint32
+// UINT64 uint64
+// ULONG uint32
+// ULONGLONG uint64
+// ULONG_PTR uintptr
+// ULONG32 uint32
+// ULONG64 uint64
+// USHORT uint16
+// USN LONGLONG
+// WCHAR uint16
+// WORD uint16
+// WPARAM UINT_PTR
+type (
+ ATOM uint16
+ BOOL int32
+ COLORREF uint32
+ DWM_FRAME_COUNT uint64
+ DWORD uint32
+ HACCEL HANDLE
+ HANDLE uintptr
+ HBITMAP HANDLE
+ HBRUSH HANDLE
+ HCURSOR HANDLE
+ HDC HANDLE
+ HDROP HANDLE
+ HDWP HANDLE
+ HENHMETAFILE HANDLE
+ HFONT HANDLE
+ HGDIOBJ HANDLE
+ HGLOBAL HANDLE
+ HGLRC HANDLE
+ HHOOK HANDLE
+ HICON HANDLE
+ HIMAGELIST HANDLE
+ HINSTANCE HANDLE
+ HKEY HANDLE
+ HKL HANDLE
+ HMENU HANDLE
+ HMODULE HANDLE
+ HMONITOR HANDLE
+ HPEN HANDLE
+ HRESULT int32
+ HRGN HANDLE
+ HRSRC HANDLE
+ HTHUMBNAIL HANDLE
+ HWND HANDLE
+ LPARAM uintptr
+ LPCVOID unsafe.Pointer
+ LRESULT uintptr
+ PVOID unsafe.Pointer
+ QPC_TIME uint64
+ ULONG_PTR uintptr
+ WPARAM uintptr
+ TRACEHANDLE uintptr
+)
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162805.aspx
+type POINT struct {
+ X, Y int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162897.aspx
+type RECT struct {
+ Left, Top, Right, Bottom int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms633577.aspx
+type WNDCLASSEX struct {
+ Size uint32
+ Style uint32
+ WndProc uintptr
+ ClsExtra int32
+ WndExtra int32
+ Instance HINSTANCE
+ Icon HICON
+ Cursor HCURSOR
+ Background HBRUSH
+ MenuName *uint16
+ ClassName *uint16
+ IconSm HICON
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644958.aspx
+type MSG struct {
+ Hwnd HWND
+ Message uint32
+ WParam uintptr
+ LParam uintptr
+ Time uint32
+ Pt POINT
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037.aspx
+type LOGFONT struct {
+ Height int32
+ Width int32
+ Escapement int32
+ Orientation int32
+ Weight int32
+ Italic byte
+ Underline byte
+ StrikeOut byte
+ CharSet byte
+ OutPrecision byte
+ ClipPrecision byte
+ Quality byte
+ PitchAndFamily byte
+ FaceName [LF_FACESIZE]uint16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646839.aspx
+type OPENFILENAME struct {
+ StructSize uint32
+ Owner HWND
+ Instance HINSTANCE
+ Filter *uint16
+ CustomFilter *uint16
+ MaxCustomFilter uint32
+ FilterIndex uint32
+ File *uint16
+ MaxFile uint32
+ FileTitle *uint16
+ MaxFileTitle uint32
+ InitialDir *uint16
+ Title *uint16
+ Flags uint32
+ FileOffset uint16
+ FileExtension uint16
+ DefExt *uint16
+ CustData uintptr
+ FnHook uintptr
+ TemplateName *uint16
+ PvReserved unsafe.Pointer
+ DwReserved uint32
+ FlagsEx uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb773205.aspx
+type BROWSEINFO struct {
+ Owner HWND
+ Root *uint16
+ DisplayName *uint16
+ Title *uint16
+ Flags uint32
+ CallbackFunc uintptr
+ LParam uintptr
+ Image int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa373931.aspx
+type GUID struct {
+ Data1 uint32
+ Data2 uint16
+ Data3 uint16
+ Data4 [8]byte
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms221627.aspx
+type VARIANT struct {
+ VT uint16 // 2
+ WReserved1 uint16 // 4
+ WReserved2 uint16 // 6
+ WReserved3 uint16 // 8
+ Val int64 // 16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms221416.aspx
+type DISPPARAMS struct {
+ Rgvarg uintptr
+ RgdispidNamedArgs uintptr
+ CArgs uint32
+ CNamedArgs uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms221133.aspx
+type EXCEPINFO struct {
+ WCode uint16
+ WReserved uint16
+ BstrSource *uint16
+ BstrDescription *uint16
+ BstrHelpFile *uint16
+ DwHelpContext uint32
+ PvReserved uintptr
+ PfnDeferredFillIn uintptr
+ Scode int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145035.aspx
+type LOGBRUSH struct {
+ LbStyle uint32
+ LbColor COLORREF
+ LbHatch uintptr
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565.aspx
+type DEVMODE struct {
+ DmDeviceName [CCHDEVICENAME]uint16
+ DmSpecVersion uint16
+ DmDriverVersion uint16
+ DmSize uint16
+ DmDriverExtra uint16
+ DmFields uint32
+ DmOrientation int16
+ DmPaperSize int16
+ DmPaperLength int16
+ DmPaperWidth int16
+ DmScale int16
+ DmCopies int16
+ DmDefaultSource int16
+ DmPrintQuality int16
+ DmColor int16
+ DmDuplex int16
+ DmYResolution int16
+ DmTTOption int16
+ DmCollate int16
+ DmFormName [CCHFORMNAME]uint16
+ DmLogPixels uint16
+ DmBitsPerPel uint32
+ DmPelsWidth uint32
+ DmPelsHeight uint32
+ DmDisplayFlags uint32
+ DmDisplayFrequency uint32
+ DmICMMethod uint32
+ DmICMIntent uint32
+ DmMediaType uint32
+ DmDitherType uint32
+ DmReserved1 uint32
+ DmReserved2 uint32
+ DmPanningWidth uint32
+ DmPanningHeight uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183376.aspx
+type BITMAPINFOHEADER struct {
+ BiSize uint32
+ BiWidth int32
+ BiHeight int32
+ BiPlanes uint16
+ BiBitCount uint16
+ BiCompression uint32
+ BiSizeImage uint32
+ BiXPelsPerMeter int32
+ BiYPelsPerMeter int32
+ BiClrUsed uint32
+ BiClrImportant uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162938.aspx
+type RGBQUAD struct {
+ RgbBlue byte
+ RgbGreen byte
+ RgbRed byte
+ RgbReserved byte
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183375.aspx
+type BITMAPINFO struct {
+ BmiHeader BITMAPINFOHEADER
+ BmiColors *RGBQUAD
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183371.aspx
+type BITMAP struct {
+ BmType int32
+ BmWidth int32
+ BmHeight int32
+ BmWidthBytes int32
+ BmPlanes uint16
+ BmBitsPixel uint16
+ BmBits unsafe.Pointer
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183567.aspx
+type DIBSECTION struct {
+ DsBm BITMAP
+ DsBmih BITMAPINFOHEADER
+ DsBitfields [3]uint32
+ DshSection HANDLE
+ DsOffset uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162607.aspx
+type ENHMETAHEADER struct {
+ IType uint32
+ NSize uint32
+ RclBounds RECT
+ RclFrame RECT
+ DSignature uint32
+ NVersion uint32
+ NBytes uint32
+ NRecords uint32
+ NHandles uint16
+ SReserved uint16
+ NDescription uint32
+ OffDescription uint32
+ NPalEntries uint32
+ SzlDevice SIZE
+ SzlMillimeters SIZE
+ CbPixelFormat uint32
+ OffPixelFormat uint32
+ BOpenGL uint32
+ SzlMicrometers SIZE
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145106.aspx
+type SIZE struct {
+ CX, CY int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145132.aspx
+type TEXTMETRIC struct {
+ TmHeight int32
+ TmAscent int32
+ TmDescent int32
+ TmInternalLeading int32
+ TmExternalLeading int32
+ TmAveCharWidth int32
+ TmMaxCharWidth int32
+ TmWeight int32
+ TmOverhang int32
+ TmDigitizedAspectX int32
+ TmDigitizedAspectY int32
+ TmFirstChar uint16
+ TmLastChar uint16
+ TmDefaultChar uint16
+ TmBreakChar uint16
+ TmItalic byte
+ TmUnderlined byte
+ TmStruckOut byte
+ TmPitchAndFamily byte
+ TmCharSet byte
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183574.aspx
+type DOCINFO struct {
+ CbSize int32
+ LpszDocName *uint16
+ LpszOutput *uint16
+ LpszDatatype *uint16
+ FwType uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb775514.aspx
+type NMHDR struct {
+ HwndFrom HWND
+ IdFrom uintptr
+ Code uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774743.aspx
+type LVCOLUMN struct {
+ Mask uint32
+ Fmt int32
+ Cx int32
+ PszText *uint16
+ CchTextMax int32
+ ISubItem int32
+ IImage int32
+ IOrder int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774760.aspx
+type LVITEM struct {
+ Mask uint32
+ IItem int32
+ ISubItem int32
+ State uint32
+ StateMask uint32
+ PszText *uint16
+ CchTextMax int32
+ IImage int32
+ LParam uintptr
+ IIndent int32
+ IGroupId int32
+ CColumns uint32
+ PuColumns uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774754.aspx
+type LVHITTESTINFO struct {
+ Pt POINT
+ Flags uint32
+ IItem int32
+ ISubItem int32
+ IGroup int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774771.aspx
+type NMITEMACTIVATE struct {
+ Hdr NMHDR
+ IItem int32
+ ISubItem int32
+ UNewState uint32
+ UOldState uint32
+ UChanged uint32
+ PtAction POINT
+ LParam uintptr
+ UKeyFlags uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774773.aspx
+type NMLISTVIEW struct {
+ Hdr NMHDR
+ IItem int32
+ ISubItem int32
+ UNewState uint32
+ UOldState uint32
+ UChanged uint32
+ PtAction POINT
+ LParam uintptr
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774780.aspx
+type NMLVDISPINFO struct {
+ Hdr NMHDR
+ Item LVITEM
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb775507.aspx
+type INITCOMMONCONTROLSEX struct {
+ DwSize uint32
+ DwICC uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb760256.aspx
+type TOOLINFO struct {
+ CbSize uint32
+ UFlags uint32
+ Hwnd HWND
+ UId uintptr
+ Rect RECT
+ Hinst HINSTANCE
+ LpszText *uint16
+ LParam uintptr
+ LpReserved unsafe.Pointer
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms645604.aspx
+type TRACKMOUSEEVENT struct {
+ CbSize uint32
+ DwFlags uint32
+ HwndTrack HWND
+ DwHoverTime uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms534067.aspx
+type GdiplusStartupInput struct {
+ GdiplusVersion uint32
+ DebugEventCallback uintptr
+ SuppressBackgroundThread BOOL
+ SuppressExternalCodecs BOOL
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms534068.aspx
+type GdiplusStartupOutput struct {
+ NotificationHook uintptr
+ NotificationUnhook uintptr
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162768.aspx
+type PAINTSTRUCT struct {
+ Hdc HDC
+ FErase BOOL
+ RcPaint RECT
+ FRestore BOOL
+ FIncUpdate BOOL
+ RgbReserved [32]byte
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms684225.aspx
+type MODULEENTRY32 struct {
+ Size uint32
+ ModuleID uint32
+ ProcessID uint32
+ GlblcntUsage uint32
+ ProccntUsage uint32
+ ModBaseAddr *uint8
+ ModBaseSize uint32
+ HModule HMODULE
+ SzModule [MAX_MODULE_NAME32 + 1]uint16
+ SzExePath [MAX_PATH]uint16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284.aspx
+type FILETIME struct {
+ DwLowDateTime uint32
+ DwHighDateTime uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682119.aspx
+type COORD struct {
+ X, Y int16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms686311.aspx
+type SMALL_RECT struct {
+ Left, Top, Right, Bottom int16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682093.aspx
+type CONSOLE_SCREEN_BUFFER_INFO struct {
+ DwSize COORD
+ DwCursorPosition COORD
+ WAttributes uint16
+ SrWindow SMALL_RECT
+ DwMaximumWindowSize COORD
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/bb773244.aspx
+type MARGINS struct {
+ CxLeftWidth, CxRightWidth, CyTopHeight, CyBottomHeight int32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969500.aspx
+type DWM_BLURBEHIND struct {
+ DwFlags uint32
+ fEnable BOOL
+ hRgnBlur HRGN
+ fTransitionOnMaximized BOOL
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969501.aspx
+type DWM_PRESENT_PARAMETERS struct {
+ cbSize uint32
+ fQueue BOOL
+ cRefreshStart DWM_FRAME_COUNT
+ cBuffer uint32
+ fUseSourceRate BOOL
+ rateSource UNSIGNED_RATIO
+ cRefreshesPerFrame uint32
+ eSampling DWM_SOURCE_FRAME_SAMPLING
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969502.aspx
+type DWM_THUMBNAIL_PROPERTIES struct {
+ dwFlags uint32
+ rcDestination RECT
+ rcSource RECT
+ opacity byte
+ fVisible BOOL
+ fSourceClientAreaOnly BOOL
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969503.aspx
+type DWM_TIMING_INFO struct {
+ cbSize uint32
+ rateRefresh UNSIGNED_RATIO
+ qpcRefreshPeriod QPC_TIME
+ rateCompose UNSIGNED_RATIO
+ qpcVBlank QPC_TIME
+ cRefresh DWM_FRAME_COUNT
+ cDXRefresh uint32
+ qpcCompose QPC_TIME
+ cFrame DWM_FRAME_COUNT
+ cDXPresent uint32
+ cRefreshFrame DWM_FRAME_COUNT
+ cFrameSubmitted DWM_FRAME_COUNT
+ cDXPresentSubmitted uint32
+ cFrameConfirmed DWM_FRAME_COUNT
+ cDXPresentConfirmed uint32
+ cRefreshConfirmed DWM_FRAME_COUNT
+ cDXRefreshConfirmed uint32
+ cFramesLate DWM_FRAME_COUNT
+ cFramesOutstanding uint32
+ cFrameDisplayed DWM_FRAME_COUNT
+ qpcFrameDisplayed QPC_TIME
+ cRefreshFrameDisplayed DWM_FRAME_COUNT
+ cFrameComplete DWM_FRAME_COUNT
+ qpcFrameComplete QPC_TIME
+ cFramePending DWM_FRAME_COUNT
+ qpcFramePending QPC_TIME
+ cFramesDisplayed DWM_FRAME_COUNT
+ cFramesComplete DWM_FRAME_COUNT
+ cFramesPending DWM_FRAME_COUNT
+ cFramesAvailable DWM_FRAME_COUNT
+ cFramesDropped DWM_FRAME_COUNT
+ cFramesMissed DWM_FRAME_COUNT
+ cRefreshNextDisplayed DWM_FRAME_COUNT
+ cRefreshNextPresented DWM_FRAME_COUNT
+ cRefreshesDisplayed DWM_FRAME_COUNT
+ cRefreshesPresented DWM_FRAME_COUNT
+ cRefreshStarted DWM_FRAME_COUNT
+ cPixelsReceived uint64
+ cPixelsDrawn uint64
+ cBuffersEmpty DWM_FRAME_COUNT
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd389402.aspx
+type MilMatrix3x2D struct {
+ S_11, S_12, S_21, S_22 float64
+ DX, DY float64
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969505.aspx
+type UNSIGNED_RATIO struct {
+ uiNumerator uint32
+ uiDenominator uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms632603.aspx
+type CREATESTRUCT struct {
+ CreateParams uintptr
+ Instance HINSTANCE
+ Menu HMENU
+ Parent HWND
+ Cy, Cx int32
+ Y, X int32
+ Style int32
+ Name *uint16
+ Class *uint16
+ dwExStyle uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145065.aspx
+type MONITORINFO struct {
+ CbSize uint32
+ RcMonitor RECT
+ RcWork RECT
+ DwFlags uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145066.aspx
+type MONITORINFOEX struct {
+ MONITORINFO
+ SzDevice [CCHDEVICENAME]uint16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/dd368826.aspx
+type PIXELFORMATDESCRIPTOR struct {
+ Size uint16
+ Version uint16
+ DwFlags uint32
+ IPixelType byte
+ ColorBits byte
+ RedBits, RedShift byte
+ GreenBits, GreenShift byte
+ BlueBits, BlueShift byte
+ AlphaBits, AlphaShift byte
+ AccumBits byte
+ AccumRedBits byte
+ AccumGreenBits byte
+ AccumBlueBits byte
+ AccumAlphaBits byte
+ DepthBits, StencilBits byte
+ AuxBuffers byte
+ ILayerType byte
+ Reserved byte
+ DwLayerMask uint32
+ DwVisibleMask uint32
+ DwDamageMask uint32
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx
+type INPUT struct {
+ Type uint32
+ Mi MOUSEINPUT
+ Ki KEYBDINPUT
+ Hi HARDWAREINPUT
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx
+type MOUSEINPUT struct {
+ Dx int32
+ Dy int32
+ MouseData uint32
+ DwFlags uint32
+ Time uint32
+ DwExtraInfo uintptr
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271(v=vs.85).aspx
+type KEYBDINPUT struct {
+ WVk uint16
+ WScan uint16
+ DwFlags uint32
+ Time uint32
+ DwExtraInfo uintptr
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646269(v=vs.85).aspx
+type HARDWAREINPUT struct {
+ UMsg uint32
+ WParamL uint16
+ WParamH uint16
+}
+
+type KbdInput struct {
+ typ uint32
+ ki KEYBDINPUT
+}
+
+type MouseInput struct {
+ typ uint32
+ mi MOUSEINPUT
+}
+
+type HardwareInput struct {
+ typ uint32
+ hi HARDWAREINPUT
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
+type SYSTEMTIME struct {
+ Year uint16
+ Month uint16
+ DayOfWeek uint16
+ Day uint16
+ Hour uint16
+ Minute uint16
+ Second uint16
+ Milliseconds uint16
+}
+
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644967(v=vs.85).aspx
+type KBDLLHOOKSTRUCT struct {
+ VkCode DWORD
+ ScanCode DWORD
+ Flags DWORD
+ Time DWORD
+ DwExtraInfo ULONG_PTR
+}
+
+type HOOKPROC func(int, WPARAM, LPARAM) LRESULT
+
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms633498(v=vs.85).aspx
+type WNDENUMPROC func(HWND, LPARAM) LRESULT
diff --git a/vendor/github.com/apenwarr/w32/user32.go b/vendor/github.com/apenwarr/w32/user32.go
new file mode 100644
index 000000000..8286e8944
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/user32.go
@@ -0,0 +1,1046 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "fmt"
+ "syscall"
+ "unsafe"
+)
+
+var (
+ moduser32 = syscall.NewLazyDLL("user32.dll")
+
+ procRegisterClassEx = moduser32.NewProc("RegisterClassExW")
+ procLoadIcon = moduser32.NewProc("LoadIconW")
+ procLoadCursor = moduser32.NewProc("LoadCursorW")
+ procShowWindow = moduser32.NewProc("ShowWindow")
+ procUpdateWindow = moduser32.NewProc("UpdateWindow")
+ procCreateWindowEx = moduser32.NewProc("CreateWindowExW")
+ procAdjustWindowRect = moduser32.NewProc("AdjustWindowRect")
+ procAdjustWindowRectEx = moduser32.NewProc("AdjustWindowRectEx")
+ procDestroyWindow = moduser32.NewProc("DestroyWindow")
+ procDefWindowProc = moduser32.NewProc("DefWindowProcW")
+ procDefDlgProc = moduser32.NewProc("DefDlgProcW")
+ procPostQuitMessage = moduser32.NewProc("PostQuitMessage")
+ procGetMessage = moduser32.NewProc("GetMessageW")
+ procTranslateMessage = moduser32.NewProc("TranslateMessage")
+ procDispatchMessage = moduser32.NewProc("DispatchMessageW")
+ procSendMessage = moduser32.NewProc("SendMessageW")
+ procSendMessageTimeout = moduser32.NewProc("SendMessageTimeout")
+ procPostMessage = moduser32.NewProc("PostMessageW")
+ procWaitMessage = moduser32.NewProc("WaitMessage")
+ procSetWindowText = moduser32.NewProc("SetWindowTextW")
+ procGetWindowTextLength = moduser32.NewProc("GetWindowTextLengthW")
+ procGetWindowText = moduser32.NewProc("GetWindowTextW")
+ procGetWindowRect = moduser32.NewProc("GetWindowRect")
+ procMoveWindow = moduser32.NewProc("MoveWindow")
+ procScreenToClient = moduser32.NewProc("ScreenToClient")
+ procCallWindowProc = moduser32.NewProc("CallWindowProcW")
+ procSetWindowLong = moduser32.NewProc("SetWindowLongW")
+ procSetWindowLongPtr = moduser32.NewProc("SetWindowLongW")
+ procGetWindowLong = moduser32.NewProc("GetWindowLongW")
+ procGetWindowLongPtr = moduser32.NewProc("GetWindowLongW")
+ procEnableWindow = moduser32.NewProc("EnableWindow")
+ procIsWindowEnabled = moduser32.NewProc("IsWindowEnabled")
+ procIsWindowVisible = moduser32.NewProc("IsWindowVisible")
+ procSetFocus = moduser32.NewProc("SetFocus")
+ procInvalidateRect = moduser32.NewProc("InvalidateRect")
+ procGetClientRect = moduser32.NewProc("GetClientRect")
+ procGetDC = moduser32.NewProc("GetDC")
+ procReleaseDC = moduser32.NewProc("ReleaseDC")
+ procSetCapture = moduser32.NewProc("SetCapture")
+ procReleaseCapture = moduser32.NewProc("ReleaseCapture")
+ procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId")
+ procMessageBox = moduser32.NewProc("MessageBoxW")
+ procGetSystemMetrics = moduser32.NewProc("GetSystemMetrics")
+ procCopyRect = moduser32.NewProc("CopyRect")
+ procEqualRect = moduser32.NewProc("EqualRect")
+ procInflateRect = moduser32.NewProc("InflateRect")
+ procIntersectRect = moduser32.NewProc("IntersectRect")
+ procIsRectEmpty = moduser32.NewProc("IsRectEmpty")
+ procOffsetRect = moduser32.NewProc("OffsetRect")
+ procPtInRect = moduser32.NewProc("PtInRect")
+ procSetRect = moduser32.NewProc("SetRect")
+ procSetRectEmpty = moduser32.NewProc("SetRectEmpty")
+ procSubtractRect = moduser32.NewProc("SubtractRect")
+ procUnionRect = moduser32.NewProc("UnionRect")
+ procCreateDialogParam = moduser32.NewProc("CreateDialogParamW")
+ procDialogBoxParam = moduser32.NewProc("DialogBoxParamW")
+ procGetDlgItem = moduser32.NewProc("GetDlgItem")
+ procDrawIcon = moduser32.NewProc("DrawIcon")
+ procClientToScreen = moduser32.NewProc("ClientToScreen")
+ procIsDialogMessage = moduser32.NewProc("IsDialogMessageW")
+ procIsWindow = moduser32.NewProc("IsWindow")
+ procEndDialog = moduser32.NewProc("EndDialog")
+ procPeekMessage = moduser32.NewProc("PeekMessageW")
+ procTranslateAccelerator = moduser32.NewProc("TranslateAcceleratorW")
+ procSetWindowPos = moduser32.NewProc("SetWindowPos")
+ procFillRect = moduser32.NewProc("FillRect")
+ procDrawText = moduser32.NewProc("DrawTextW")
+ procAddClipboardFormatListener = moduser32.NewProc("AddClipboardFormatListener")
+ procRemoveClipboardFormatListener = moduser32.NewProc("RemoveClipboardFormatListener")
+ procOpenClipboard = moduser32.NewProc("OpenClipboard")
+ procCloseClipboard = moduser32.NewProc("CloseClipboard")
+ procEnumClipboardFormats = moduser32.NewProc("EnumClipboardFormats")
+ procGetClipboardData = moduser32.NewProc("GetClipboardData")
+ procSetClipboardData = moduser32.NewProc("SetClipboardData")
+ procEmptyClipboard = moduser32.NewProc("EmptyClipboard")
+ procGetClipboardFormatName = moduser32.NewProc("GetClipboardFormatNameW")
+ procIsClipboardFormatAvailable = moduser32.NewProc("IsClipboardFormatAvailable")
+ procBeginPaint = moduser32.NewProc("BeginPaint")
+ procEndPaint = moduser32.NewProc("EndPaint")
+ procGetKeyboardState = moduser32.NewProc("GetKeyboardState")
+ procMapVirtualKey = moduser32.NewProc("MapVirtualKeyExW")
+ procGetAsyncKeyState = moduser32.NewProc("GetAsyncKeyState")
+ procToAscii = moduser32.NewProc("ToAscii")
+ procSwapMouseButton = moduser32.NewProc("SwapMouseButton")
+ procGetCursorPos = moduser32.NewProc("GetCursorPos")
+ procSetCursorPos = moduser32.NewProc("SetCursorPos")
+ procSetCursor = moduser32.NewProc("SetCursor")
+ procCreateIcon = moduser32.NewProc("CreateIcon")
+ procDestroyIcon = moduser32.NewProc("DestroyIcon")
+ procMonitorFromPoint = moduser32.NewProc("MonitorFromPoint")
+ procMonitorFromRect = moduser32.NewProc("MonitorFromRect")
+ procMonitorFromWindow = moduser32.NewProc("MonitorFromWindow")
+ procGetMonitorInfo = moduser32.NewProc("GetMonitorInfoW")
+ procEnumDisplayMonitors = moduser32.NewProc("EnumDisplayMonitors")
+ procEnumDisplaySettingsEx = moduser32.NewProc("EnumDisplaySettingsExW")
+ procChangeDisplaySettingsEx = moduser32.NewProc("ChangeDisplaySettingsExW")
+ procSendInput = moduser32.NewProc("SendInput")
+ procSetWindowsHookEx = moduser32.NewProc("SetWindowsHookExW")
+ procUnhookWindowsHookEx = moduser32.NewProc("UnhookWindowsHookEx")
+ procCallNextHookEx = moduser32.NewProc("CallNextHookEx")
+ procSetForegroundWindow = moduser32.NewProc("SetForegroundWindow")
+ procFindWindowW = moduser32.NewProc("FindWindowW")
+ procFindWindowExW = moduser32.NewProc("FindWindowExW")
+ procGetClassName = moduser32.NewProc("GetClassNameW")
+ procEnumChildWindows = moduser32.NewProc("EnumChildWindows")
+ procSetTimer = moduser32.NewProc("SetTimer")
+ procKillTimer = moduser32.NewProc("KillTimer")
+ procRedrawWindow = moduser32.NewProc("RedrawWindow")
+)
+
+func RegisterClassEx(wndClassEx *WNDCLASSEX) ATOM {
+ ret, _, _ := procRegisterClassEx.Call(uintptr(unsafe.Pointer(wndClassEx)))
+ return ATOM(ret)
+}
+
+func LoadIcon(instance HINSTANCE, iconName *uint16) HICON {
+ ret, _, _ := procLoadIcon.Call(
+ uintptr(instance),
+ uintptr(unsafe.Pointer(iconName)))
+
+ return HICON(ret)
+
+}
+
+func LoadCursor(instance HINSTANCE, cursorName *uint16) HCURSOR {
+ ret, _, _ := procLoadCursor.Call(
+ uintptr(instance),
+ uintptr(unsafe.Pointer(cursorName)))
+
+ return HCURSOR(ret)
+
+}
+
+func GetClassNameW(hwnd HWND) string {
+ buf := make([]uint16, 255)
+ procGetClassName.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(255))
+
+ return syscall.UTF16ToString(buf)
+}
+
+func SetForegroundWindow(hwnd HWND) bool {
+ ret, _, _ := procSetForegroundWindow.Call(
+ uintptr(hwnd))
+
+ return ret != 0
+}
+
+func ShowWindow(hwnd HWND, cmdshow int) bool {
+ ret, _, _ := procShowWindow.Call(
+ uintptr(hwnd),
+ uintptr(cmdshow))
+
+ return ret != 0
+
+}
+
+func UpdateWindow(hwnd HWND) bool {
+ ret, _, _ := procUpdateWindow.Call(
+ uintptr(hwnd))
+ return ret != 0
+}
+
+func CreateWindowEx(exStyle uint, className, windowName *uint16,
+ style uint, x, y, width, height int, parent HWND, menu HMENU,
+ instance HINSTANCE, param unsafe.Pointer) HWND {
+ ret, _, _ := procCreateWindowEx.Call(
+ uintptr(exStyle),
+ uintptr(unsafe.Pointer(className)),
+ uintptr(unsafe.Pointer(windowName)),
+ uintptr(style),
+ uintptr(x),
+ uintptr(y),
+ uintptr(width),
+ uintptr(height),
+ uintptr(parent),
+ uintptr(menu),
+ uintptr(instance),
+ uintptr(param))
+
+ return HWND(ret)
+}
+
+func FindWindowExW(hwndParent, hwndChildAfter HWND, className, windowName *uint16) HWND {
+ ret, _, _ := procFindWindowExW.Call(
+ uintptr(hwndParent),
+ uintptr(hwndChildAfter),
+ uintptr(unsafe.Pointer(className)),
+ uintptr(unsafe.Pointer(windowName)))
+
+ return HWND(ret)
+}
+
+func FindWindowW(className, windowName *uint16) HWND {
+ ret, _, _ := procFindWindowW.Call(
+ uintptr(unsafe.Pointer(className)),
+ uintptr(unsafe.Pointer(windowName)))
+
+ return HWND(ret)
+}
+
+func EnumChildWindows(hWndParent HWND, lpEnumFunc WNDENUMPROC, lParam LPARAM) bool {
+ ret, _, _ := procEnumChildWindows.Call(
+ uintptr(hWndParent),
+ uintptr(syscall.NewCallback(lpEnumFunc)),
+ uintptr(lParam),
+ )
+
+ return ret != 0
+}
+
+func AdjustWindowRectEx(rect *RECT, style uint, menu bool, exStyle uint) bool {
+ ret, _, _ := procAdjustWindowRectEx.Call(
+ uintptr(unsafe.Pointer(rect)),
+ uintptr(style),
+ uintptr(BoolToBOOL(menu)),
+ uintptr(exStyle))
+
+ return ret != 0
+}
+
+func AdjustWindowRect(rect *RECT, style uint, menu bool) bool {
+ ret, _, _ := procAdjustWindowRect.Call(
+ uintptr(unsafe.Pointer(rect)),
+ uintptr(style),
+ uintptr(BoolToBOOL(menu)))
+
+ return ret != 0
+}
+
+func DestroyWindow(hwnd HWND) bool {
+ ret, _, _ := procDestroyWindow.Call(
+ uintptr(hwnd))
+
+ return ret != 0
+}
+
+func DefWindowProc(hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {
+ ret, _, _ := procDefWindowProc.Call(
+ uintptr(hwnd),
+ uintptr(msg),
+ wParam,
+ lParam)
+
+ return ret
+}
+
+func DefDlgProc(hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {
+ ret, _, _ := procDefDlgProc.Call(
+ uintptr(hwnd),
+ uintptr(msg),
+ wParam,
+ lParam)
+
+ return ret
+}
+
+func PostQuitMessage(exitCode int) {
+ procPostQuitMessage.Call(
+ uintptr(exitCode))
+}
+
+func GetMessage(msg *MSG, hwnd HWND, msgFilterMin, msgFilterMax uint32) int {
+ ret, _, _ := procGetMessage.Call(
+ uintptr(unsafe.Pointer(msg)),
+ uintptr(hwnd),
+ uintptr(msgFilterMin),
+ uintptr(msgFilterMax))
+
+ return int(ret)
+}
+
+func TranslateMessage(msg *MSG) bool {
+ ret, _, _ := procTranslateMessage.Call(
+ uintptr(unsafe.Pointer(msg)))
+
+ return ret != 0
+
+}
+
+func DispatchMessage(msg *MSG) uintptr {
+ ret, _, _ := procDispatchMessage.Call(
+ uintptr(unsafe.Pointer(msg)))
+
+ return ret
+
+}
+
+func SendMessage(hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {
+ ret, _, _ := procSendMessage.Call(
+ uintptr(hwnd),
+ uintptr(msg),
+ wParam,
+ lParam)
+
+ return ret
+}
+
+func SendMessageTimeout(hwnd HWND, msg uint32, wParam, lParam uintptr, fuFlags, uTimeout uint32) uintptr {
+ ret, _, _ := procSendMessageTimeout.Call(
+ uintptr(hwnd),
+ uintptr(msg),
+ wParam,
+ lParam,
+ uintptr(fuFlags),
+ uintptr(uTimeout))
+
+ return ret
+}
+
+func PostMessage(hwnd HWND, msg uint32, wParam, lParam uintptr) bool {
+ ret, _, _ := procPostMessage.Call(
+ uintptr(hwnd),
+ uintptr(msg),
+ wParam,
+ lParam)
+
+ return ret != 0
+}
+
+func WaitMessage() bool {
+ ret, _, _ := procWaitMessage.Call()
+ return ret != 0
+}
+
+func SetWindowText(hwnd HWND, text string) {
+ procSetWindowText.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))))
+}
+
+func GetWindowTextLength(hwnd HWND) int {
+ ret, _, _ := procGetWindowTextLength.Call(
+ uintptr(hwnd))
+
+ return int(ret)
+}
+
+func GetWindowText(hwnd HWND) string {
+ textLen := GetWindowTextLength(hwnd) + 1
+
+ buf := make([]uint16, textLen)
+ procGetWindowText.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(textLen))
+
+ return syscall.UTF16ToString(buf)
+}
+
+func GetWindowRect(hwnd HWND) *RECT {
+ var rect RECT
+ procGetWindowRect.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(&rect)))
+
+ return &rect
+}
+
+func MoveWindow(hwnd HWND, x, y, width, height int, repaint bool) bool {
+ ret, _, _ := procMoveWindow.Call(
+ uintptr(hwnd),
+ uintptr(x),
+ uintptr(y),
+ uintptr(width),
+ uintptr(height),
+ uintptr(BoolToBOOL(repaint)))
+
+ return ret != 0
+
+}
+
+func ScreenToClient(hwnd HWND, x, y int) (X, Y int, ok bool) {
+ pt := POINT{X: int32(x), Y: int32(y)}
+ ret, _, _ := procScreenToClient.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(&pt)))
+
+ return int(pt.X), int(pt.Y), ret != 0
+}
+
+func CallWindowProc(preWndProc uintptr, hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {
+ ret, _, _ := procCallWindowProc.Call(
+ preWndProc,
+ uintptr(hwnd),
+ uintptr(msg),
+ wParam,
+ lParam)
+
+ return ret
+}
+
+func SetWindowLong(hwnd HWND, index int, value uint32) uint32 {
+ ret, _, _ := procSetWindowLong.Call(
+ uintptr(hwnd),
+ uintptr(index),
+ uintptr(value))
+
+ return uint32(ret)
+}
+
+func SetWindowLongPtr(hwnd HWND, index int, value uintptr) uintptr {
+ ret, _, _ := procSetWindowLongPtr.Call(
+ uintptr(hwnd),
+ uintptr(index),
+ value)
+
+ return ret
+}
+
+func GetWindowLong(hwnd HWND, index int) int32 {
+ ret, _, _ := procGetWindowLong.Call(
+ uintptr(hwnd),
+ uintptr(index))
+
+ return int32(ret)
+}
+
+func GetWindowLongPtr(hwnd HWND, index int) uintptr {
+ ret, _, _ := procGetWindowLongPtr.Call(
+ uintptr(hwnd),
+ uintptr(index))
+
+ return ret
+}
+
+func EnableWindow(hwnd HWND, b bool) bool {
+ ret, _, _ := procEnableWindow.Call(
+ uintptr(hwnd),
+ uintptr(BoolToBOOL(b)))
+ return ret != 0
+}
+
+func IsWindowEnabled(hwnd HWND) bool {
+ ret, _, _ := procIsWindowEnabled.Call(
+ uintptr(hwnd))
+
+ return ret != 0
+}
+
+func IsWindowVisible(hwnd HWND) bool {
+ ret, _, _ := procIsWindowVisible.Call(
+ uintptr(hwnd))
+
+ return ret != 0
+}
+
+func SetFocus(hwnd HWND) HWND {
+ ret, _, _ := procSetFocus.Call(
+ uintptr(hwnd))
+
+ return HWND(ret)
+}
+
+func InvalidateRect(hwnd HWND, rect *RECT, erase bool) bool {
+ ret, _, _ := procInvalidateRect.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(rect)),
+ uintptr(BoolToBOOL(erase)))
+
+ return ret != 0
+}
+
+func GetClientRect(hwnd HWND) *RECT {
+ var rect RECT
+ ret, _, _ := procGetClientRect.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(&rect)))
+
+ if ret == 0 {
+ panic(fmt.Sprintf("GetClientRect(%d) failed", hwnd))
+ }
+
+ return &rect
+}
+
+func GetDC(hwnd HWND) HDC {
+ ret, _, _ := procGetDC.Call(
+ uintptr(hwnd))
+
+ return HDC(ret)
+}
+
+func ReleaseDC(hwnd HWND, hDC HDC) bool {
+ ret, _, _ := procReleaseDC.Call(
+ uintptr(hwnd),
+ uintptr(hDC))
+
+ return ret != 0
+}
+
+func SetCapture(hwnd HWND) HWND {
+ ret, _, _ := procSetCapture.Call(
+ uintptr(hwnd))
+
+ return HWND(ret)
+}
+
+func ReleaseCapture() bool {
+ ret, _, _ := procReleaseCapture.Call()
+
+ return ret != 0
+}
+
+func GetWindowThreadProcessId(hwnd HWND) (HANDLE, int) {
+ var processId int
+ ret, _, _ := procGetWindowThreadProcessId.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(&processId)))
+
+ return HANDLE(ret), processId
+}
+
+func MessageBox(hwnd HWND, title, caption string, flags uint) int {
+ ret, _, _ := procMessageBox.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))),
+ uintptr(flags))
+
+ return int(ret)
+}
+
+func GetSystemMetrics(index int) int {
+ ret, _, _ := procGetSystemMetrics.Call(
+ uintptr(index))
+
+ return int(ret)
+}
+
+func CopyRect(dst, src *RECT) bool {
+ ret, _, _ := procCopyRect.Call(
+ uintptr(unsafe.Pointer(dst)),
+ uintptr(unsafe.Pointer(src)))
+
+ return ret != 0
+}
+
+func EqualRect(rect1, rect2 *RECT) bool {
+ ret, _, _ := procEqualRect.Call(
+ uintptr(unsafe.Pointer(rect1)),
+ uintptr(unsafe.Pointer(rect2)))
+
+ return ret != 0
+}
+
+func InflateRect(rect *RECT, dx, dy int) bool {
+ ret, _, _ := procInflateRect.Call(
+ uintptr(unsafe.Pointer(rect)),
+ uintptr(dx),
+ uintptr(dy))
+
+ return ret != 0
+}
+
+func IntersectRect(dst, src1, src2 *RECT) bool {
+ ret, _, _ := procIntersectRect.Call(
+ uintptr(unsafe.Pointer(dst)),
+ uintptr(unsafe.Pointer(src1)),
+ uintptr(unsafe.Pointer(src2)))
+
+ return ret != 0
+}
+
+func IsRectEmpty(rect *RECT) bool {
+ ret, _, _ := procIsRectEmpty.Call(
+ uintptr(unsafe.Pointer(rect)))
+
+ return ret != 0
+}
+
+func OffsetRect(rect *RECT, dx, dy int) bool {
+ ret, _, _ := procOffsetRect.Call(
+ uintptr(unsafe.Pointer(rect)),
+ uintptr(dx),
+ uintptr(dy))
+
+ return ret != 0
+}
+
+func PtInRect(rect *RECT, x, y int) bool {
+ pt := POINT{X: int32(x), Y: int32(y)}
+ ret, _, _ := procPtInRect.Call(
+ uintptr(unsafe.Pointer(rect)),
+ uintptr(unsafe.Pointer(&pt)))
+
+ return ret != 0
+}
+
+func SetRect(rect *RECT, left, top, right, bottom int) bool {
+ ret, _, _ := procSetRect.Call(
+ uintptr(unsafe.Pointer(rect)),
+ uintptr(left),
+ uintptr(top),
+ uintptr(right),
+ uintptr(bottom))
+
+ return ret != 0
+}
+
+func SetRectEmpty(rect *RECT) bool {
+ ret, _, _ := procSetRectEmpty.Call(
+ uintptr(unsafe.Pointer(rect)))
+
+ return ret != 0
+}
+
+func SubtractRect(dst, src1, src2 *RECT) bool {
+ ret, _, _ := procSubtractRect.Call(
+ uintptr(unsafe.Pointer(dst)),
+ uintptr(unsafe.Pointer(src1)),
+ uintptr(unsafe.Pointer(src2)))
+
+ return ret != 0
+}
+
+func UnionRect(dst, src1, src2 *RECT) bool {
+ ret, _, _ := procUnionRect.Call(
+ uintptr(unsafe.Pointer(dst)),
+ uintptr(unsafe.Pointer(src1)),
+ uintptr(unsafe.Pointer(src2)))
+
+ return ret != 0
+}
+
+func CreateDialog(hInstance HINSTANCE, lpTemplate *uint16, hWndParent HWND, lpDialogProc uintptr) HWND {
+ ret, _, _ := procCreateDialogParam.Call(
+ uintptr(hInstance),
+ uintptr(unsafe.Pointer(lpTemplate)),
+ uintptr(hWndParent),
+ lpDialogProc,
+ 0)
+
+ return HWND(ret)
+}
+
+func DialogBox(hInstance HINSTANCE, lpTemplateName *uint16, hWndParent HWND, lpDialogProc uintptr) int {
+ ret, _, _ := procDialogBoxParam.Call(
+ uintptr(hInstance),
+ uintptr(unsafe.Pointer(lpTemplateName)),
+ uintptr(hWndParent),
+ lpDialogProc,
+ 0)
+
+ return int(ret)
+}
+
+func GetDlgItem(hDlg HWND, nIDDlgItem int) HWND {
+ ret, _, _ := procGetDlgItem.Call(
+ uintptr(unsafe.Pointer(hDlg)),
+ uintptr(nIDDlgItem))
+
+ return HWND(ret)
+}
+
+func DrawIcon(hDC HDC, x, y int, hIcon HICON) bool {
+ ret, _, _ := procDrawIcon.Call(
+ uintptr(unsafe.Pointer(hDC)),
+ uintptr(x),
+ uintptr(y),
+ uintptr(unsafe.Pointer(hIcon)))
+
+ return ret != 0
+}
+
+func ClientToScreen(hwnd HWND, x, y int) (int, int) {
+ pt := POINT{X: int32(x), Y: int32(y)}
+
+ procClientToScreen.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(&pt)))
+
+ return int(pt.X), int(pt.Y)
+}
+
+func IsDialogMessage(hwnd HWND, msg *MSG) bool {
+ ret, _, _ := procIsDialogMessage.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(msg)))
+
+ return ret != 0
+}
+
+func IsWindow(hwnd HWND) bool {
+ ret, _, _ := procIsWindow.Call(
+ uintptr(hwnd))
+
+ return ret != 0
+}
+
+func EndDialog(hwnd HWND, nResult uintptr) bool {
+ ret, _, _ := procEndDialog.Call(
+ uintptr(hwnd),
+ nResult)
+
+ return ret != 0
+}
+
+func PeekMessage(lpMsg *MSG, hwnd HWND, wMsgFilterMin, wMsgFilterMax, wRemoveMsg uint32) bool {
+ ret, _, _ := procPeekMessage.Call(
+ uintptr(unsafe.Pointer(lpMsg)),
+ uintptr(hwnd),
+ uintptr(wMsgFilterMin),
+ uintptr(wMsgFilterMax),
+ uintptr(wRemoveMsg))
+
+ return ret != 0
+}
+
+func TranslateAccelerator(hwnd HWND, hAccTable HACCEL, lpMsg *MSG) bool {
+ ret, _, _ := procTranslateAccelerator.Call(
+ uintptr(hwnd),
+ uintptr(hAccTable),
+ uintptr(unsafe.Pointer(lpMsg)))
+
+ return ret != 0
+}
+
+func SetWindowPos(hwnd, hWndInsertAfter HWND, x, y, cx, cy int, uFlags uint) bool {
+ ret, _, _ := procSetWindowPos.Call(
+ uintptr(hwnd),
+ uintptr(hWndInsertAfter),
+ uintptr(x),
+ uintptr(y),
+ uintptr(cx),
+ uintptr(cy),
+ uintptr(uFlags))
+
+ return ret != 0
+}
+
+func FillRect(hDC HDC, lprc *RECT, hbr HBRUSH) bool {
+ ret, _, _ := procFillRect.Call(
+ uintptr(hDC),
+ uintptr(unsafe.Pointer(lprc)),
+ uintptr(hbr))
+
+ return ret != 0
+}
+
+func DrawText(hDC HDC, text string, uCount int, lpRect *RECT, uFormat uint) int {
+ ret, _, _ := procDrawText.Call(
+ uintptr(hDC),
+ uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))),
+ uintptr(uCount),
+ uintptr(unsafe.Pointer(lpRect)),
+ uintptr(uFormat))
+
+ return int(ret)
+}
+
+func AddClipboardFormatListener(hwnd HWND) bool {
+ ret, _, _ := procAddClipboardFormatListener.Call(
+ uintptr(hwnd))
+ return ret != 0
+}
+
+func RemoveClipboardFormatListener(hwnd HWND) bool {
+ ret, _, _ := procRemoveClipboardFormatListener.Call(
+ uintptr(hwnd))
+ return ret != 0
+}
+
+func OpenClipboard(hWndNewOwner HWND) bool {
+ ret, _, _ := procOpenClipboard.Call(
+ uintptr(hWndNewOwner))
+ return ret != 0
+}
+
+func CloseClipboard() bool {
+ ret, _, _ := procCloseClipboard.Call()
+ return ret != 0
+}
+
+func EnumClipboardFormats(format uint) uint {
+ ret, _, _ := procEnumClipboardFormats.Call(
+ uintptr(format))
+ return uint(ret)
+}
+
+func GetClipboardData(uFormat uint) HANDLE {
+ ret, _, _ := procGetClipboardData.Call(
+ uintptr(uFormat))
+ return HANDLE(ret)
+}
+
+func SetClipboardData(uFormat uint, hMem HANDLE) HANDLE {
+ ret, _, _ := procSetClipboardData.Call(
+ uintptr(uFormat),
+ uintptr(hMem))
+ return HANDLE(ret)
+}
+
+func EmptyClipboard() bool {
+ ret, _, _ := procEmptyClipboard.Call()
+ return ret != 0
+}
+
+func GetClipboardFormatName(format uint) (string, bool) {
+ cchMaxCount := 255
+ buf := make([]uint16, cchMaxCount)
+ ret, _, _ := procGetClipboardFormatName.Call(
+ uintptr(format),
+ uintptr(unsafe.Pointer(&buf[0])),
+ uintptr(cchMaxCount))
+
+ if ret > 0 {
+ return syscall.UTF16ToString(buf), true
+ }
+
+ return "Requested format does not exist or is predefined", false
+}
+
+func IsClipboardFormatAvailable(format uint) bool {
+ ret, _, _ := procIsClipboardFormatAvailable.Call(uintptr(format))
+ return ret != 0
+}
+
+func BeginPaint(hwnd HWND, paint *PAINTSTRUCT) HDC {
+ ret, _, _ := procBeginPaint.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(paint)))
+ return HDC(ret)
+}
+
+func EndPaint(hwnd HWND, paint *PAINTSTRUCT) {
+ procEndPaint.Call(
+ uintptr(hwnd),
+ uintptr(unsafe.Pointer(paint)))
+}
+
+func GetKeyboardState(lpKeyState *[]byte) bool {
+ ret, _, _ := procGetKeyboardState.Call(
+ uintptr(unsafe.Pointer(&(*lpKeyState)[0])))
+ return ret != 0
+}
+
+func MapVirtualKeyEx(uCode, uMapType uint, dwhkl HKL) uint {
+ ret, _, _ := procMapVirtualKey.Call(
+ uintptr(uCode),
+ uintptr(uMapType),
+ uintptr(dwhkl))
+ return uint(ret)
+}
+
+func GetAsyncKeyState(vKey int) uint16 {
+ ret, _, _ := procGetAsyncKeyState.Call(uintptr(vKey))
+ return uint16(ret)
+}
+
+func ToAscii(uVirtKey, uScanCode uint, lpKeyState *byte, lpChar *uint16, uFlags uint) int {
+ ret, _, _ := procToAscii.Call(
+ uintptr(uVirtKey),
+ uintptr(uScanCode),
+ uintptr(unsafe.Pointer(lpKeyState)),
+ uintptr(unsafe.Pointer(lpChar)),
+ uintptr(uFlags))
+ return int(ret)
+}
+
+func SwapMouseButton(fSwap bool) bool {
+ ret, _, _ := procSwapMouseButton.Call(
+ uintptr(BoolToBOOL(fSwap)))
+ return ret != 0
+}
+
+func GetCursorPos() (x, y int, ok bool) {
+ pt := POINT{}
+ ret, _, _ := procGetCursorPos.Call(uintptr(unsafe.Pointer(&pt)))
+ return int(pt.X), int(pt.Y), ret != 0
+}
+
+func SetCursorPos(x, y int) bool {
+ ret, _, _ := procSetCursorPos.Call(
+ uintptr(x),
+ uintptr(y),
+ )
+ return ret != 0
+}
+
+func SetCursor(cursor HCURSOR) HCURSOR {
+ ret, _, _ := procSetCursor.Call(
+ uintptr(cursor),
+ )
+ return HCURSOR(ret)
+}
+
+func CreateIcon(instance HINSTANCE, nWidth, nHeight int, cPlanes, cBitsPerPixel byte, ANDbits, XORbits *byte) HICON {
+ ret, _, _ := procCreateIcon.Call(
+ uintptr(instance),
+ uintptr(nWidth),
+ uintptr(nHeight),
+ uintptr(cPlanes),
+ uintptr(cBitsPerPixel),
+ uintptr(unsafe.Pointer(ANDbits)),
+ uintptr(unsafe.Pointer(XORbits)),
+ )
+ return HICON(ret)
+}
+
+func DestroyIcon(icon HICON) bool {
+ ret, _, _ := procDestroyIcon.Call(
+ uintptr(icon),
+ )
+ return ret != 0
+}
+
+func MonitorFromPoint(x, y int, dwFlags uint32) HMONITOR {
+ ret, _, _ := procMonitorFromPoint.Call(
+ uintptr(x),
+ uintptr(y),
+ uintptr(dwFlags),
+ )
+ return HMONITOR(ret)
+}
+
+func MonitorFromRect(rc *RECT, dwFlags uint32) HMONITOR {
+ ret, _, _ := procMonitorFromRect.Call(
+ uintptr(unsafe.Pointer(rc)),
+ uintptr(dwFlags),
+ )
+ return HMONITOR(ret)
+}
+
+func MonitorFromWindow(hwnd HWND, dwFlags uint32) HMONITOR {
+ ret, _, _ := procMonitorFromWindow.Call(
+ uintptr(hwnd),
+ uintptr(dwFlags),
+ )
+ return HMONITOR(ret)
+}
+
+func GetMonitorInfo(hMonitor HMONITOR, lmpi *MONITORINFO) bool {
+ ret, _, _ := procGetMonitorInfo.Call(
+ uintptr(hMonitor),
+ uintptr(unsafe.Pointer(lmpi)),
+ )
+ return ret != 0
+}
+
+func EnumDisplayMonitors(hdc HDC, clip *RECT, fnEnum, dwData uintptr) bool {
+ ret, _, _ := procEnumDisplayMonitors.Call(
+ uintptr(hdc),
+ uintptr(unsafe.Pointer(clip)),
+ fnEnum,
+ dwData,
+ )
+ return ret != 0
+}
+
+func EnumDisplaySettingsEx(szDeviceName *uint16, iModeNum uint32, devMode *DEVMODE, dwFlags uint32) bool {
+ ret, _, _ := procEnumDisplaySettingsEx.Call(
+ uintptr(unsafe.Pointer(szDeviceName)),
+ uintptr(iModeNum),
+ uintptr(unsafe.Pointer(devMode)),
+ uintptr(dwFlags),
+ )
+ return ret != 0
+}
+
+func ChangeDisplaySettingsEx(szDeviceName *uint16, devMode *DEVMODE, hwnd HWND, dwFlags uint32, lParam uintptr) int32 {
+ ret, _, _ := procChangeDisplaySettingsEx.Call(
+ uintptr(unsafe.Pointer(szDeviceName)),
+ uintptr(unsafe.Pointer(devMode)),
+ uintptr(hwnd),
+ uintptr(dwFlags),
+ lParam,
+ )
+ return int32(ret)
+}
+
+func SetWindowsHookEx(idHook int, lpfn HOOKPROC, hMod HINSTANCE, dwThreadId DWORD) HHOOK {
+ ret, _, _ := procSetWindowsHookEx.Call(
+ uintptr(idHook),
+ uintptr(syscall.NewCallback(lpfn)),
+ uintptr(hMod),
+ uintptr(dwThreadId),
+ )
+ return HHOOK(ret)
+}
+
+func UnhookWindowsHookEx(hhk HHOOK) bool {
+ ret, _, _ := procUnhookWindowsHookEx.Call(
+ uintptr(hhk),
+ )
+ return ret != 0
+}
+
+func CallNextHookEx(hhk HHOOK, nCode int, wParam WPARAM, lParam LPARAM) LRESULT {
+ ret, _, _ := procCallNextHookEx.Call(
+ uintptr(hhk),
+ uintptr(nCode),
+ uintptr(wParam),
+ uintptr(lParam),
+ )
+ return LRESULT(ret)
+}
+
+func SetTimer(hwnd HWND, nIDEvent uint32, uElapse uint32, lpTimerProc uintptr) uintptr {
+ ret, _, _ := procSetTimer.Call(
+ uintptr(hwnd),
+ uintptr(nIDEvent),
+ uintptr(uElapse),
+ lpTimerProc,
+ )
+ return ret
+}
+
+func KillTimer(hwnd HWND, nIDEvent uint32) bool {
+ ret, _, _ := procKillTimer.Call(
+ uintptr(hwnd),
+ uintptr(nIDEvent),
+ )
+ return ret != 0
+}
+
+// it will panic when the function fails
+func RedrawWindow(hWnd HWND, lpRect *RECT, hrgnUpdate HRGN, flag uint32) {
+ ret, _, _ := procRedrawWindow.Call(
+ uintptr(hWnd),
+ uintptr(unsafe.Pointer(lpRect)),
+ uintptr(hrgnUpdate),
+ uintptr(flag),
+ )
+ if ret!=0{
+ panic("RedrawWindow fail")
+ }
+ return
+}
\ No newline at end of file
diff --git a/vendor/github.com/apenwarr/w32/utils.go b/vendor/github.com/apenwarr/w32/utils.go
new file mode 100644
index 000000000..4fb5b6c2c
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/utils.go
@@ -0,0 +1,201 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+import (
+ "syscall"
+ "unicode/utf16"
+ "unsafe"
+)
+
+func MakeIntResource(id uint16) *uint16 {
+ return (*uint16)(unsafe.Pointer(uintptr(id)))
+}
+
+func LOWORD(dw uint32) uint16 {
+ return uint16(dw)
+}
+
+func HIWORD(dw uint32) uint16 {
+ return uint16(dw >> 16 & 0xffff)
+}
+
+func BoolToBOOL(value bool) BOOL {
+ if value {
+ return 1
+ }
+
+ return 0
+}
+
+func UTF16PtrToString(cstr *uint16) string {
+ if cstr != nil {
+ us := make([]uint16, 0, 256)
+ for p := uintptr(unsafe.Pointer(cstr)); ; p += 2 {
+ u := *(*uint16)(unsafe.Pointer(p))
+ if u == 0 {
+ return string(utf16.Decode(us))
+ }
+ us = append(us, u)
+ }
+ }
+
+ return ""
+}
+
+func ComAddRef(unknown *IUnknown) int32 {
+ ret, _, _ := syscall.Syscall(unknown.lpVtbl.pAddRef, 1,
+ uintptr(unsafe.Pointer(unknown)),
+ 0,
+ 0)
+ return int32(ret)
+}
+
+func ComRelease(unknown *IUnknown) int32 {
+ ret, _, _ := syscall.Syscall(unknown.lpVtbl.pRelease, 1,
+ uintptr(unsafe.Pointer(unknown)),
+ 0,
+ 0)
+ return int32(ret)
+}
+
+func ComQueryInterface(unknown *IUnknown, id *GUID) *IDispatch {
+ var disp *IDispatch
+ hr, _, _ := syscall.Syscall(unknown.lpVtbl.pQueryInterface, 3,
+ uintptr(unsafe.Pointer(unknown)),
+ uintptr(unsafe.Pointer(id)),
+ uintptr(unsafe.Pointer(&disp)))
+ if hr != 0 {
+ panic("Invoke QieryInterface error.")
+ }
+ return disp
+}
+
+func ComGetIDsOfName(disp *IDispatch, names []string) []int32 {
+ wnames := make([]*uint16, len(names))
+ dispid := make([]int32, len(names))
+ for i := 0; i < len(names); i++ {
+ wnames[i] = syscall.StringToUTF16Ptr(names[i])
+ }
+ hr, _, _ := syscall.Syscall6(disp.lpVtbl.pGetIDsOfNames, 6,
+ uintptr(unsafe.Pointer(disp)),
+ uintptr(unsafe.Pointer(IID_NULL)),
+ uintptr(unsafe.Pointer(&wnames[0])),
+ uintptr(len(names)),
+ uintptr(GetUserDefaultLCID()),
+ uintptr(unsafe.Pointer(&dispid[0])))
+ if hr != 0 {
+ panic("Invoke GetIDsOfName error.")
+ }
+ return dispid
+}
+
+func ComInvoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (result *VARIANT) {
+ var dispparams DISPPARAMS
+
+ if dispatch&DISPATCH_PROPERTYPUT != 0 {
+ dispnames := [1]int32{DISPID_PROPERTYPUT}
+ dispparams.RgdispidNamedArgs = uintptr(unsafe.Pointer(&dispnames[0]))
+ dispparams.CNamedArgs = 1
+ }
+ var vargs []VARIANT
+ if len(params) > 0 {
+ vargs = make([]VARIANT, len(params))
+ for i, v := range params {
+ //n := len(params)-i-1
+ n := len(params) - i - 1
+ VariantInit(&vargs[n])
+ switch v.(type) {
+ case bool:
+ if v.(bool) {
+ vargs[n] = VARIANT{VT_BOOL, 0, 0, 0, 0xffff}
+ } else {
+ vargs[n] = VARIANT{VT_BOOL, 0, 0, 0, 0}
+ }
+ case *bool:
+ vargs[n] = VARIANT{VT_BOOL | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*bool))))}
+ case byte:
+ vargs[n] = VARIANT{VT_I1, 0, 0, 0, int64(v.(byte))}
+ case *byte:
+ vargs[n] = VARIANT{VT_I1 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*byte))))}
+ case int16:
+ vargs[n] = VARIANT{VT_I2, 0, 0, 0, int64(v.(int16))}
+ case *int16:
+ vargs[n] = VARIANT{VT_I2 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*int16))))}
+ case uint16:
+ vargs[n] = VARIANT{VT_UI2, 0, 0, 0, int64(v.(int16))}
+ case *uint16:
+ vargs[n] = VARIANT{VT_UI2 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*uint16))))}
+ case int, int32:
+ vargs[n] = VARIANT{VT_UI4, 0, 0, 0, int64(v.(int))}
+ case *int, *int32:
+ vargs[n] = VARIANT{VT_I4 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*int))))}
+ case uint, uint32:
+ vargs[n] = VARIANT{VT_UI4, 0, 0, 0, int64(v.(uint))}
+ case *uint, *uint32:
+ vargs[n] = VARIANT{VT_UI4 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*uint))))}
+ case int64:
+ vargs[n] = VARIANT{VT_I8, 0, 0, 0, v.(int64)}
+ case *int64:
+ vargs[n] = VARIANT{VT_I8 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*int64))))}
+ case uint64:
+ vargs[n] = VARIANT{VT_UI8, 0, 0, 0, int64(v.(uint64))}
+ case *uint64:
+ vargs[n] = VARIANT{VT_UI8 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*uint64))))}
+ case float32:
+ vargs[n] = VARIANT{VT_R4, 0, 0, 0, int64(v.(float32))}
+ case *float32:
+ vargs[n] = VARIANT{VT_R4 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*float32))))}
+ case float64:
+ vargs[n] = VARIANT{VT_R8, 0, 0, 0, int64(v.(float64))}
+ case *float64:
+ vargs[n] = VARIANT{VT_R8 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*float64))))}
+ case string:
+ vargs[n] = VARIANT{VT_BSTR, 0, 0, 0, int64(uintptr(unsafe.Pointer(SysAllocString(v.(string)))))}
+ case *string:
+ vargs[n] = VARIANT{VT_BSTR | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*string))))}
+ case *IDispatch:
+ vargs[n] = VARIANT{VT_DISPATCH, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*IDispatch))))}
+ case **IDispatch:
+ vargs[n] = VARIANT{VT_DISPATCH | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(**IDispatch))))}
+ case nil:
+ vargs[n] = VARIANT{VT_NULL, 0, 0, 0, 0}
+ case *VARIANT:
+ vargs[n] = VARIANT{VT_VARIANT | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*VARIANT))))}
+ default:
+ panic("unknown type")
+ }
+ }
+ dispparams.Rgvarg = uintptr(unsafe.Pointer(&vargs[0]))
+ dispparams.CArgs = uint32(len(params))
+ }
+
+ var ret VARIANT
+ var excepInfo EXCEPINFO
+ VariantInit(&ret)
+ hr, _, _ := syscall.Syscall9(disp.lpVtbl.pInvoke, 8,
+ uintptr(unsafe.Pointer(disp)),
+ uintptr(dispid),
+ uintptr(unsafe.Pointer(IID_NULL)),
+ uintptr(GetUserDefaultLCID()),
+ uintptr(dispatch),
+ uintptr(unsafe.Pointer(&dispparams)),
+ uintptr(unsafe.Pointer(&ret)),
+ uintptr(unsafe.Pointer(&excepInfo)),
+ 0)
+ if hr != 0 {
+ if excepInfo.BstrDescription != nil {
+ bs := UTF16PtrToString(excepInfo.BstrDescription)
+ panic(bs)
+ }
+ }
+ for _, varg := range vargs {
+ if varg.VT == VT_BSTR && varg.Val != 0 {
+ SysFreeString(((*int16)(unsafe.Pointer(uintptr(varg.Val)))))
+ }
+ }
+ result = &ret
+ return
+}
diff --git a/vendor/github.com/apenwarr/w32/vars.go b/vendor/github.com/apenwarr/w32/vars.go
new file mode 100644
index 000000000..2dab2e396
--- /dev/null
+++ b/vendor/github.com/apenwarr/w32/vars.go
@@ -0,0 +1,13 @@
+// Copyright 2010-2012 The W32 Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package w32
+
+var (
+ IID_NULL = &GUID{0x00000000, 0x0000, 0x0000, [8]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}
+ IID_IUnknown = &GUID{0x00000000, 0x0000, 0x0000, [8]byte{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}
+ IID_IDispatch = &GUID{0x00020400, 0x0000, 0x0000, [8]byte{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}
+ IID_IConnectionPointContainer = &GUID{0xB196B284, 0xBAB4, 0x101A, [8]byte{0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07}}
+ IID_IConnectionPoint = &GUID{0xB196B286, 0xBAB4, 0x101A, [8]byte{0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07}}
+)
diff --git a/vendor/github.com/go-chi/chi/v5/.gitignore b/vendor/github.com/go-chi/chi/v5/.gitignore
new file mode 100644
index 000000000..ba22c99a9
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/.gitignore
@@ -0,0 +1,3 @@
+.idea
+*.sw?
+.vscode
diff --git a/vendor/github.com/go-chi/chi/v5/CHANGELOG.md b/vendor/github.com/go-chi/chi/v5/CHANGELOG.md
new file mode 100644
index 000000000..ed54ae9d6
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/CHANGELOG.md
@@ -0,0 +1,279 @@
+# Changelog
+
+## v5.0.0 (2021-02-27)
+
+- chi v5, `github.com/go-chi/chi/v5` introduces the adoption of Go's SIV to adhere to the current state-of-the-tools in Go.
+- chi v1.5.x did not work out as planned, as the Go tooling is too powerful and chi's adoption is too wide.
+ The most responsible thing to do for everyone's benefit is to just release v5 with SIV, so I present to you all,
+ chi v5 at `github.com/go-chi/chi/v5`. I hope someday the developer experience and ergonomics I've been seeking
+ will still come to fruition in some form, see https://github.com/golang/go/issues/44550
+- History of changes: see https://github.com/go-chi/chi/compare/v1.5.4...v5.0.0
+
+
+## v1.5.4 (2021-02-27)
+
+- Undo prior retraction in v1.5.3 as we prepare for v5.0.0 release
+- History of changes: see https://github.com/go-chi/chi/compare/v1.5.3...v1.5.4
+
+
+## v1.5.3 (2021-02-21)
+
+- Update go.mod to go 1.16 with new retract directive marking all versions without prior go.mod support
+- History of changes: see https://github.com/go-chi/chi/compare/v1.5.2...v1.5.3
+
+
+## v1.5.2 (2021-02-10)
+
+- Reverting allocation optimization as a precaution as go test -race fails.
+- Minor improvements, see history below
+- History of changes: see https://github.com/go-chi/chi/compare/v1.5.1...v1.5.2
+
+
+## v1.5.1 (2020-12-06)
+
+- Performance improvement: removing 1 allocation by foregoing context.WithValue, thank you @bouk for
+ your contribution (https://github.com/go-chi/chi/pull/555). Note: new benchmarks posted in README.
+- `middleware.CleanPath`: new middleware that clean's request path of double slashes
+- deprecate & remove `chi.ServerBaseContext` in favour of stdlib `http.Server#BaseContext`
+- plus other tiny improvements, see full commit history below
+- History of changes: see https://github.com/go-chi/chi/compare/v4.1.2...v1.5.1
+
+
+## v1.5.0 (2020-11-12) - now with go.mod support
+
+`chi` dates back to 2016 with it's original implementation as one of the first routers to adopt the newly introduced
+context.Context api to the stdlib -- set out to design a router that is faster, more modular and simpler than anything
+else out there -- while not introducing any custom handler types or dependencies. Today, `chi` still has zero dependencies,
+and in many ways is future proofed from changes, given it's minimal nature. Between versions, chi's iterations have been very
+incremental, with the architecture and api being the same today as it was originally designed in 2016. For this reason it
+makes chi a pretty easy project to maintain, as well thanks to the many amazing community contributions over the years
+to who all help make chi better (total of 86 contributors to date -- thanks all!).
+
+Chi has been an labour of love, art and engineering, with the goals to offer beautiful ergonomics, flexibility, performance
+and simplicity when building HTTP services with Go. I've strived to keep the router very minimal in surface area / code size,
+and always improving the code wherever possible -- and as of today the `chi` package is just 1082 lines of code (not counting
+middlewares, which are all optional). As well, I don't have the exact metrics, but from my analysis and email exchanges from
+companies and developers, chi is used by thousands of projects around the world -- thank you all as there is no better form of
+joy for me than to have art I had started be helpful and enjoyed by others. And of course I use chi in all of my own projects too :)
+
+For me, the asthetics of chi's code and usage are very important. With the introduction of Go's module support
+(which I'm a big fan of), chi's past versioning scheme choice to v2, v3 and v4 would mean I'd require the import path
+of "github.com/go-chi/chi/v4", leading to the lengthy discussion at https://github.com/go-chi/chi/issues/462.
+Haha, to some, you may be scratching your head why I've spent > 1 year stalling to adopt "/vXX" convention in the import
+path -- which isn't horrible in general -- but for chi, I'm unable to accept it as I strive for perfection in it's API design,
+aesthetics and simplicity. It just doesn't feel good to me given chi's simple nature -- I do not foresee a "v5" or "v6",
+and upgrading between versions in the future will also be just incremental.
+
+I do understand versioning is a part of the API design as well, which is why the solution for a while has been to "do nothing",
+as Go supports both old and new import paths with/out go.mod. However, now that Go module support has had time to iron out kinks and
+is adopted everywhere, it's time for chi to get with the times. Luckily, I've discovered a path forward that will make me happy,
+while also not breaking anyone's app who adopted a prior versioning from tags in v2/v3/v4. I've made an experimental release of
+v1.5.0 with go.mod silently, and tested it with new and old projects, to ensure the developer experience is preserved, and it's
+largely unnoticed. Fortunately, Go's toolchain will check the tags of a repo and consider the "latest" tag the one with go.mod.
+However, you can still request a specific older tag such as v4.1.2, and everything will "just work". But new users can just
+`go get github.com/go-chi/chi` or `go get github.com/go-chi/chi@latest` and they will get the latest version which contains
+go.mod support, which is v1.5.0+. `chi` will not change very much over the years, just like it hasn't changed much from 4 years ago.
+Therefore, we will stay on v1.x from here on, starting from v1.5.0. Any breaking changes will bump a "minor" release and
+backwards-compatible improvements/fixes will bump a "tiny" release.
+
+For existing projects who want to upgrade to the latest go.mod version, run: `go get -u github.com/go-chi/chi@v1.5.0`,
+which will get you on the go.mod version line (as Go's mod cache may still remember v4.x). Brand new systems can run
+`go get -u github.com/go-chi/chi` or `go get -u github.com/go-chi/chi@latest` to install chi, which will install v1.5.0+
+built with go.mod support.
+
+My apologies to the developers who will disagree with the decisions above, but, hope you'll try it and see it's a very
+minor request which is backwards compatible and won't break your existing installations.
+
+Cheers all, happy coding!
+
+
+---
+
+
+## v4.1.2 (2020-06-02)
+
+- fix that handles MethodNotAllowed with path variables, thank you @caseyhadden for your contribution
+- fix to replace nested wildcards correctly in RoutePattern, thank you @@unmultimedio for your contribution
+- History of changes: see https://github.com/go-chi/chi/compare/v4.1.1...v4.1.2
+
+
+## v4.1.1 (2020-04-16)
+
+- fix for issue https://github.com/go-chi/chi/issues/411 which allows for overlapping regexp
+ route to the correct handler through a recursive tree search, thanks to @Jahaja for the PR/fix!
+- new middleware.RouteHeaders as a simple router for request headers with wildcard support
+- History of changes: see https://github.com/go-chi/chi/compare/v4.1.0...v4.1.1
+
+
+## v4.1.0 (2020-04-1)
+
+- middleware.LogEntry: Write method on interface now passes the response header
+ and an extra interface type useful for custom logger implementations.
+- middleware.WrapResponseWriter: minor fix
+- middleware.Recoverer: a bit prettier
+- History of changes: see https://github.com/go-chi/chi/compare/v4.0.4...v4.1.0
+
+## v4.0.4 (2020-03-24)
+
+- middleware.Recoverer: new pretty stack trace printing (https://github.com/go-chi/chi/pull/496)
+- a few minor improvements and fixes
+- History of changes: see https://github.com/go-chi/chi/compare/v4.0.3...v4.0.4
+
+
+## v4.0.3 (2020-01-09)
+
+- core: fix regexp routing to include default value when param is not matched
+- middleware: rewrite of middleware.Compress
+- middleware: suppress http.ErrAbortHandler in middleware.Recoverer
+- History of changes: see https://github.com/go-chi/chi/compare/v4.0.2...v4.0.3
+
+
+## v4.0.2 (2019-02-26)
+
+- Minor fixes
+- History of changes: see https://github.com/go-chi/chi/compare/v4.0.1...v4.0.2
+
+
+## v4.0.1 (2019-01-21)
+
+- Fixes issue with compress middleware: #382 #385
+- History of changes: see https://github.com/go-chi/chi/compare/v4.0.0...v4.0.1
+
+
+## v4.0.0 (2019-01-10)
+
+- chi v4 requires Go 1.10.3+ (or Go 1.9.7+) - we have deprecated support for Go 1.7 and 1.8
+- router: respond with 404 on router with no routes (#362)
+- router: additional check to ensure wildcard is at the end of a url pattern (#333)
+- middleware: deprecate use of http.CloseNotifier (#347)
+- middleware: fix RedirectSlashes to include query params on redirect (#334)
+- History of changes: see https://github.com/go-chi/chi/compare/v3.3.4...v4.0.0
+
+
+## v3.3.4 (2019-01-07)
+
+- Minor middleware improvements. No changes to core library/router. Moving v3 into its
+- own branch as a version of chi for Go 1.7, 1.8, 1.9, 1.10, 1.11
+- History of changes: see https://github.com/go-chi/chi/compare/v3.3.3...v3.3.4
+
+
+## v3.3.3 (2018-08-27)
+
+- Minor release
+- See https://github.com/go-chi/chi/compare/v3.3.2...v3.3.3
+
+
+## v3.3.2 (2017-12-22)
+
+- Support to route trailing slashes on mounted sub-routers (#281)
+- middleware: new `ContentCharset` to check matching charsets. Thank you
+ @csucu for your community contribution!
+
+
+## v3.3.1 (2017-11-20)
+
+- middleware: new `AllowContentType` handler for explicit whitelist of accepted request Content-Types
+- middleware: new `SetHeader` handler for short-hand middleware to set a response header key/value
+- Minor bug fixes
+
+
+## v3.3.0 (2017-10-10)
+
+- New chi.RegisterMethod(method) to add support for custom HTTP methods, see _examples/custom-method for usage
+- Deprecated LINK and UNLINK methods from the default list, please use `chi.RegisterMethod("LINK")` and `chi.RegisterMethod("UNLINK")` in an `init()` function
+
+
+## v3.2.1 (2017-08-31)
+
+- Add new `Match(rctx *Context, method, path string) bool` method to `Routes` interface
+ and `Mux`. Match searches the mux's routing tree for a handler that matches the method/path
+- Add new `RouteMethod` to `*Context`
+- Add new `Routes` pointer to `*Context`
+- Add new `middleware.GetHead` to route missing HEAD requests to GET handler
+- Updated benchmarks (see README)
+
+
+## v3.1.5 (2017-08-02)
+
+- Setup golint and go vet for the project
+- As per golint, we've redefined `func ServerBaseContext(h http.Handler, baseCtx context.Context) http.Handler`
+ to `func ServerBaseContext(baseCtx context.Context, h http.Handler) http.Handler`
+
+
+## v3.1.0 (2017-07-10)
+
+- Fix a few minor issues after v3 release
+- Move `docgen` sub-pkg to https://github.com/go-chi/docgen
+- Move `render` sub-pkg to https://github.com/go-chi/render
+- Add new `URLFormat` handler to chi/middleware sub-pkg to make working with url mime
+ suffixes easier, ie. parsing `/articles/1.json` and `/articles/1.xml`. See comments in
+ https://github.com/go-chi/chi/blob/master/middleware/url_format.go for example usage.
+
+
+## v3.0.0 (2017-06-21)
+
+- Major update to chi library with many exciting updates, but also some *breaking changes*
+- URL parameter syntax changed from `/:id` to `/{id}` for even more flexible routing, such as
+ `/articles/{month}-{day}-{year}-{slug}`, `/articles/{id}`, and `/articles/{id}.{ext}` on the
+ same router
+- Support for regexp for routing patterns, in the form of `/{paramKey:regExp}` for example:
+ `r.Get("/articles/{name:[a-z]+}", h)` and `chi.URLParam(r, "name")`
+- Add `Method` and `MethodFunc` to `chi.Router` to allow routing definitions such as
+ `r.Method("GET", "/", h)` which provides a cleaner interface for custom handlers like
+ in `_examples/custom-handler`
+- Deprecating `mux#FileServer` helper function. Instead, we encourage users to create their
+ own using file handler with the stdlib, see `_examples/fileserver` for an example
+- Add support for LINK/UNLINK http methods via `r.Method()` and `r.MethodFunc()`
+- Moved the chi project to its own organization, to allow chi-related community packages to
+ be easily discovered and supported, at: https://github.com/go-chi
+- *NOTE:* please update your import paths to `"github.com/go-chi/chi"`
+- *NOTE:* chi v2 is still available at https://github.com/go-chi/chi/tree/v2
+
+
+## v2.1.0 (2017-03-30)
+
+- Minor improvements and update to the chi core library
+- Introduced a brand new `chi/render` sub-package to complete the story of building
+ APIs to offer a pattern for managing well-defined request / response payloads. Please
+ check out the updated `_examples/rest` example for how it works.
+- Added `MethodNotAllowed(h http.HandlerFunc)` to chi.Router interface
+
+
+## v2.0.0 (2017-01-06)
+
+- After many months of v2 being in an RC state with many companies and users running it in
+ production, the inclusion of some improvements to the middlewares, we are very pleased to
+ announce v2.0.0 of chi.
+
+
+## v2.0.0-rc1 (2016-07-26)
+
+- Huge update! chi v2 is a large refactor targetting Go 1.7+. As of Go 1.7, the popular
+ community `"net/context"` package has been included in the standard library as `"context"` and
+ utilized by `"net/http"` and `http.Request` to managing deadlines, cancelation signals and other
+ request-scoped values. We're very excited about the new context addition and are proud to
+ introduce chi v2, a minimal and powerful routing package for building large HTTP services,
+ with zero external dependencies. Chi focuses on idiomatic design and encourages the use of
+ stdlib HTTP handlers and middlwares.
+- chi v2 deprecates its `chi.Handler` interface and requires `http.Handler` or `http.HandlerFunc`
+- chi v2 stores URL routing parameters and patterns in the standard request context: `r.Context()`
+- chi v2 lower-level routing context is accessible by `chi.RouteContext(r.Context()) *chi.Context`,
+ which provides direct access to URL routing parameters, the routing path and the matching
+ routing patterns.
+- Users upgrading from chi v1 to v2, need to:
+ 1. Update the old chi.Handler signature, `func(ctx context.Context, w http.ResponseWriter, r *http.Request)` to
+ the standard http.Handler: `func(w http.ResponseWriter, r *http.Request)`
+ 2. Use `chi.URLParam(r *http.Request, paramKey string) string`
+ or `URLParamFromCtx(ctx context.Context, paramKey string) string` to access a url parameter value
+
+
+## v1.0.0 (2016-07-01)
+
+- Released chi v1 stable https://github.com/go-chi/chi/tree/v1.0.0 for Go 1.6 and older.
+
+
+## v0.9.0 (2016-03-31)
+
+- Reuse context objects via sync.Pool for zero-allocation routing [#33](https://github.com/go-chi/chi/pull/33)
+- BREAKING NOTE: due to subtle API changes, previously `chi.URLParams(ctx)["id"]` used to access url parameters
+ has changed to: `chi.URLParam(ctx, "id")`
diff --git a/vendor/github.com/go-chi/chi/v5/CONTRIBUTING.md b/vendor/github.com/go-chi/chi/v5/CONTRIBUTING.md
new file mode 100644
index 000000000..c0ac2dfe8
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/CONTRIBUTING.md
@@ -0,0 +1,31 @@
+# Contributing
+
+## Prerequisites
+
+1. [Install Go][go-install].
+2. Download the sources and switch the working directory:
+
+ ```bash
+ go get -u -d github.com/go-chi/chi
+ cd $GOPATH/src/github.com/go-chi/chi
+ ```
+
+## Submitting a Pull Request
+
+A typical workflow is:
+
+1. [Fork the repository.][fork] [This tip maybe also helpful.][go-fork-tip]
+2. [Create a topic branch.][branch]
+3. Add tests for your change.
+4. Run `go test`. If your tests pass, return to the step 3.
+5. Implement the change and ensure the steps from the previous step pass.
+6. Run `goimports -w .`, to ensure the new code conforms to Go formatting guideline.
+7. [Add, commit and push your changes.][git-help]
+8. [Submit a pull request.][pull-req]
+
+[go-install]: https://golang.org/doc/install
+[go-fork-tip]: http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html
+[fork]: https://help.github.com/articles/fork-a-repo
+[branch]: http://learn.github.com/p/branching.html
+[git-help]: https://guides.github.com
+[pull-req]: https://help.github.com/articles/using-pull-requests
diff --git a/vendor/github.com/go-chi/chi/v5/LICENSE b/vendor/github.com/go-chi/chi/v5/LICENSE
new file mode 100644
index 000000000..d99f02ffa
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2015-present Peter Kieltyka (https://github.com/pkieltyka), Google Inc.
+
+MIT License
+
+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/vendor/github.com/go-chi/chi/v5/Makefile b/vendor/github.com/go-chi/chi/v5/Makefile
new file mode 100644
index 000000000..b96c92dd2
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/Makefile
@@ -0,0 +1,14 @@
+all:
+ @echo "**********************************************************"
+ @echo "** chi build tool **"
+ @echo "**********************************************************"
+
+
+test:
+ go clean -testcache && $(MAKE) test-router && $(MAKE) test-middleware
+
+test-router:
+ go test -race -v .
+
+test-middleware:
+ go test -race -v ./middleware
diff --git a/vendor/github.com/go-chi/chi/v5/README.md b/vendor/github.com/go-chi/chi/v5/README.md
new file mode 100644
index 000000000..55416e15e
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/README.md
@@ -0,0 +1,511 @@
+#
+
+
+[![GoDoc Widget]][GoDoc] [![Travis Widget]][Travis]
+
+`chi` is a lightweight, idiomatic and composable router for building Go HTTP services. It's
+especially good at helping you write large REST API services that are kept maintainable as your
+project grows and changes. `chi` is built on the new `context` package introduced in Go 1.7 to
+handle signaling, cancelation and request-scoped values across a handler chain.
+
+The focus of the project has been to seek out an elegant and comfortable design for writing
+REST API servers, written during the development of the Pressly API service that powers our
+public API service, which in turn powers all of our client-side applications.
+
+The key considerations of chi's design are: project structure, maintainability, standard http
+handlers (stdlib-only), developer productivity, and deconstructing a large system into many small
+parts. The core router `github.com/go-chi/chi` is quite small (less than 1000 LOC), but we've also
+included some useful/optional subpackages: [middleware](/middleware), [render](https://github.com/go-chi/render)
+and [docgen](https://github.com/go-chi/docgen). We hope you enjoy it too!
+
+## Install
+
+`go get -u github.com/go-chi/chi/v5`
+
+
+## Features
+
+* **Lightweight** - cloc'd in ~1000 LOC for the chi router
+* **Fast** - yes, see [benchmarks](#benchmarks)
+* **100% compatible with net/http** - use any http or middleware pkg in the ecosystem that is also compatible with `net/http`
+* **Designed for modular/composable APIs** - middlewares, inline middlewares, route groups and sub-router mounting
+* **Context control** - built on new `context` package, providing value chaining, cancellations and timeouts
+* **Robust** - in production at Pressly, CloudFlare, Heroku, 99Designs, and many others (see [discussion](https://github.com/go-chi/chi/issues/91))
+* **Doc generation** - `docgen` auto-generates routing documentation from your source to JSON or Markdown
+* **Go.mod support** - v1.x of chi (starting from v1.5.0), now has go.mod support (see [CHANGELOG](https://github.com/go-chi/chi/blob/master/CHANGELOG.md#v150-2020-11-12---now-with-gomod-support))
+* **No external dependencies** - plain ol' Go stdlib + net/http
+
+
+## Examples
+
+See [_examples/](https://github.com/go-chi/chi/blob/master/_examples/) for a variety of examples.
+
+
+**As easy as:**
+
+```go
+package main
+
+import (
+ "net/http"
+
+ "github.com/go-chi/chi/v5"
+ "github.com/go-chi/chi/v5/middleware"
+)
+
+func main() {
+ r := chi.NewRouter()
+ r.Use(middleware.Logger)
+ r.Get("/", func(w http.ResponseWriter, r *http.Request) {
+ w.Write([]byte("welcome"))
+ })
+ http.ListenAndServe(":3000", r)
+}
+```
+
+**REST Preview:**
+
+Here is a little preview of how routing looks like with chi. Also take a look at the generated routing docs
+in JSON ([routes.json](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.json)) and in
+Markdown ([routes.md](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.md)).
+
+I highly recommend reading the source of the [examples](https://github.com/go-chi/chi/blob/master/_examples/) listed
+above, they will show you all the features of chi and serve as a good form of documentation.
+
+```go
+import (
+ //...
+ "context"
+ "github.com/go-chi/chi/v5"
+ "github.com/go-chi/chi/v5/middleware"
+)
+
+func main() {
+ r := chi.NewRouter()
+
+ // A good base middleware stack
+ r.Use(middleware.RequestID)
+ r.Use(middleware.RealIP)
+ r.Use(middleware.Logger)
+ r.Use(middleware.Recoverer)
+
+ // Set a timeout value on the request context (ctx), that will signal
+ // through ctx.Done() that the request has timed out and further
+ // processing should be stopped.
+ r.Use(middleware.Timeout(60 * time.Second))
+
+ r.Get("/", func(w http.ResponseWriter, r *http.Request) {
+ w.Write([]byte("hi"))
+ })
+
+ // RESTy routes for "articles" resource
+ r.Route("/articles", func(r chi.Router) {
+ r.With(paginate).Get("/", listArticles) // GET /articles
+ r.With(paginate).Get("/{month}-{day}-{year}", listArticlesByDate) // GET /articles/01-16-2017
+
+ r.Post("/", createArticle) // POST /articles
+ r.Get("/search", searchArticles) // GET /articles/search
+
+ // Regexp url parameters:
+ r.Get("/{articleSlug:[a-z-]+}", getArticleBySlug) // GET /articles/home-is-toronto
+
+ // Subrouters:
+ r.Route("/{articleID}", func(r chi.Router) {
+ r.Use(ArticleCtx)
+ r.Get("/", getArticle) // GET /articles/123
+ r.Put("/", updateArticle) // PUT /articles/123
+ r.Delete("/", deleteArticle) // DELETE /articles/123
+ })
+ })
+
+ // Mount the admin sub-router
+ r.Mount("/admin", adminRouter())
+
+ http.ListenAndServe(":3333", r)
+}
+
+func ArticleCtx(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ articleID := chi.URLParam(r, "articleID")
+ article, err := dbGetArticle(articleID)
+ if err != nil {
+ http.Error(w, http.StatusText(404), 404)
+ return
+ }
+ ctx := context.WithValue(r.Context(), "article", article)
+ next.ServeHTTP(w, r.WithContext(ctx))
+ })
+}
+
+func getArticle(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+ article, ok := ctx.Value("article").(*Article)
+ if !ok {
+ http.Error(w, http.StatusText(422), 422)
+ return
+ }
+ w.Write([]byte(fmt.Sprintf("title:%s", article.Title)))
+}
+
+// A completely separate router for administrator routes
+func adminRouter() http.Handler {
+ r := chi.NewRouter()
+ r.Use(AdminOnly)
+ r.Get("/", adminIndex)
+ r.Get("/accounts", adminListAccounts)
+ return r
+}
+
+func AdminOnly(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+ perm, ok := ctx.Value("acl.permission").(YourPermissionType)
+ if !ok || !perm.IsAdmin() {
+ http.Error(w, http.StatusText(403), 403)
+ return
+ }
+ next.ServeHTTP(w, r)
+ })
+}
+```
+
+
+## Router interface
+
+chi's router is based on a kind of [Patricia Radix trie](https://en.wikipedia.org/wiki/Radix_tree).
+The router is fully compatible with `net/http`.
+
+Built on top of the tree is the `Router` interface:
+
+```go
+// Router consisting of the core routing methods used by chi's Mux,
+// using only the standard net/http.
+type Router interface {
+ http.Handler
+ Routes
+
+ // Use appends one or more middlewares onto the Router stack.
+ Use(middlewares ...func(http.Handler) http.Handler)
+
+ // With adds inline middlewares for an endpoint handler.
+ With(middlewares ...func(http.Handler) http.Handler) Router
+
+ // Group adds a new inline-Router along the current routing
+ // path, with a fresh middleware stack for the inline-Router.
+ Group(fn func(r Router)) Router
+
+ // Route mounts a sub-Router along a `pattern`` string.
+ Route(pattern string, fn func(r Router)) Router
+
+ // Mount attaches another http.Handler along ./pattern/*
+ Mount(pattern string, h http.Handler)
+
+ // Handle and HandleFunc adds routes for `pattern` that matches
+ // all HTTP methods.
+ Handle(pattern string, h http.Handler)
+ HandleFunc(pattern string, h http.HandlerFunc)
+
+ // Method and MethodFunc adds routes for `pattern` that matches
+ // the `method` HTTP method.
+ Method(method, pattern string, h http.Handler)
+ MethodFunc(method, pattern string, h http.HandlerFunc)
+
+ // HTTP-method routing along `pattern`
+ Connect(pattern string, h http.HandlerFunc)
+ Delete(pattern string, h http.HandlerFunc)
+ Get(pattern string, h http.HandlerFunc)
+ Head(pattern string, h http.HandlerFunc)
+ Options(pattern string, h http.HandlerFunc)
+ Patch(pattern string, h http.HandlerFunc)
+ Post(pattern string, h http.HandlerFunc)
+ Put(pattern string, h http.HandlerFunc)
+ Trace(pattern string, h http.HandlerFunc)
+
+ // NotFound defines a handler to respond whenever a route could
+ // not be found.
+ NotFound(h http.HandlerFunc)
+
+ // MethodNotAllowed defines a handler to respond whenever a method is
+ // not allowed.
+ MethodNotAllowed(h http.HandlerFunc)
+}
+
+// Routes interface adds two methods for router traversal, which is also
+// used by the github.com/go-chi/docgen package to generate documentation for Routers.
+type Routes interface {
+ // Routes returns the routing tree in an easily traversable structure.
+ Routes() []Route
+
+ // Middlewares returns the list of middlewares in use by the router.
+ Middlewares() Middlewares
+
+ // Match searches the routing tree for a handler that matches
+ // the method/path - similar to routing a http request, but without
+ // executing the handler thereafter.
+ Match(rctx *Context, method, path string) bool
+}
+```
+
+Each routing method accepts a URL `pattern` and chain of `handlers`. The URL pattern
+supports named params (ie. `/users/{userID}`) and wildcards (ie. `/admin/*`). URL parameters
+can be fetched at runtime by calling `chi.URLParam(r, "userID")` for named parameters
+and `chi.URLParam(r, "*")` for a wildcard parameter.
+
+
+### Middleware handlers
+
+chi's middlewares are just stdlib net/http middleware handlers. There is nothing special
+about them, which means the router and all the tooling is designed to be compatible and
+friendly with any middleware in the community. This offers much better extensibility and reuse
+of packages and is at the heart of chi's purpose.
+
+Here is an example of a standard net/http middleware where we assign a context key `"user"`
+the value of `"123"`. This middleware sets a hypothetical user identifier on the request
+context and calls the next handler in the chain.
+
+```go
+// HTTP middleware setting a value on the request context
+func MyMiddleware(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ // create new context from `r` request context, and assign key `"user"`
+ // to value of `"123"`
+ ctx := context.WithValue(r.Context(), "user", "123")
+
+ // call the next handler in the chain, passing the response writer and
+ // the updated request object with the new context value.
+ //
+ // note: context.Context values are nested, so any previously set
+ // values will be accessible as well, and the new `"user"` key
+ // will be accessible from this point forward.
+ next.ServeHTTP(w, r.WithContext(ctx))
+ })
+}
+```
+
+
+### Request handlers
+
+chi uses standard net/http request handlers. This little snippet is an example of a http.Handler
+func that reads a user identifier from the request context - hypothetically, identifying
+the user sending an authenticated request, validated+set by a previous middleware handler.
+
+```go
+// HTTP handler accessing data from the request context.
+func MyRequestHandler(w http.ResponseWriter, r *http.Request) {
+ // here we read from the request context and fetch out `"user"` key set in
+ // the MyMiddleware example above.
+ user := r.Context().Value("user").(string)
+
+ // respond to the client
+ w.Write([]byte(fmt.Sprintf("hi %s", user)))
+}
+```
+
+
+### URL parameters
+
+chi's router parses and stores URL parameters right onto the request context. Here is
+an example of how to access URL params in your net/http handlers. And of course, middlewares
+are able to access the same information.
+
+```go
+// HTTP handler accessing the url routing parameters.
+func MyRequestHandler(w http.ResponseWriter, r *http.Request) {
+ // fetch the url parameter `"userID"` from the request of a matching
+ // routing pattern. An example routing pattern could be: /users/{userID}
+ userID := chi.URLParam(r, "userID")
+
+ // fetch `"key"` from the request context
+ ctx := r.Context()
+ key := ctx.Value("key").(string)
+
+ // respond to the client
+ w.Write([]byte(fmt.Sprintf("hi %v, %v", userID, key)))
+}
+```
+
+
+## Middlewares
+
+chi comes equipped with an optional `middleware` package, providing a suite of standard
+`net/http` middlewares. Please note, any middleware in the ecosystem that is also compatible
+with `net/http` can be used with chi's mux.
+
+### Core middlewares
+
+----------------------------------------------------------------------------------------------------
+| chi/middleware Handler | description |
+| :--------------------- | :---------------------------------------------------------------------- |
+| [AllowContentEncoding] | Enforces a whitelist of request Content-Encoding headers |
+| [AllowContentType] | Explicit whitelist of accepted request Content-Types |
+| [BasicAuth] | Basic HTTP authentication |
+| [Compress] | Gzip compression for clients that accept compressed responses |
+| [ContentCharset] | Ensure charset for Content-Type request headers |
+| [CleanPath] | Clean double slashes from request path |
+| [GetHead] | Automatically route undefined HEAD requests to GET handlers |
+| [Heartbeat] | Monitoring endpoint to check the servers pulse |
+| [Logger] | Logs the start and end of each request with the elapsed processing time |
+| [NoCache] | Sets response headers to prevent clients from caching |
+| [Profiler] | Easily attach net/http/pprof to your routers |
+| [RealIP] | Sets a http.Request's RemoteAddr to either X-Forwarded-For or X-Real-IP |
+| [Recoverer] | Gracefully absorb panics and prints the stack trace |
+| [RequestID] | Injects a request ID into the context of each request |
+| [RedirectSlashes] | Redirect slashes on routing paths |
+| [RouteHeaders] | Route handling for request headers |
+| [SetHeader] | Short-hand middleware to set a response header key/value |
+| [StripSlashes] | Strip slashes on routing paths |
+| [Throttle] | Puts a ceiling on the number of concurrent requests |
+| [Timeout] | Signals to the request context when the timeout deadline is reached |
+| [URLFormat] | Parse extension from url and put it on request context |
+| [WithValue] | Short-hand middleware to set a key/value on the request context |
+----------------------------------------------------------------------------------------------------
+
+[AllowContentEncoding]: https://pkg.go.dev/github.com/go-chi/chi/middleware#AllowContentEncoding
+[AllowContentType]: https://pkg.go.dev/github.com/go-chi/chi/middleware#AllowContentType
+[BasicAuth]: https://pkg.go.dev/github.com/go-chi/chi/middleware#BasicAuth
+[Compress]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Compress
+[ContentCharset]: https://pkg.go.dev/github.com/go-chi/chi/middleware#ContentCharset
+[CleanPath]: https://pkg.go.dev/github.com/go-chi/chi/middleware#CleanPath
+[GetHead]: https://pkg.go.dev/github.com/go-chi/chi/middleware#GetHead
+[GetReqID]: https://pkg.go.dev/github.com/go-chi/chi/middleware#GetReqID
+[Heartbeat]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Heartbeat
+[Logger]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Logger
+[NoCache]: https://pkg.go.dev/github.com/go-chi/chi/middleware#NoCache
+[Profiler]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Profiler
+[RealIP]: https://pkg.go.dev/github.com/go-chi/chi/middleware#RealIP
+[Recoverer]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Recoverer
+[RedirectSlashes]: https://pkg.go.dev/github.com/go-chi/chi/middleware#RedirectSlashes
+[RequestLogger]: https://pkg.go.dev/github.com/go-chi/chi/middleware#RequestLogger
+[RequestID]: https://pkg.go.dev/github.com/go-chi/chi/middleware#RequestID
+[RouteHeaders]: https://pkg.go.dev/github.com/go-chi/chi/middleware#RouteHeaders
+[SetHeader]: https://pkg.go.dev/github.com/go-chi/chi/middleware#SetHeader
+[StripSlashes]: https://pkg.go.dev/github.com/go-chi/chi/middleware#StripSlashes
+[Throttle]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Throttle
+[ThrottleBacklog]: https://pkg.go.dev/github.com/go-chi/chi/middleware#ThrottleBacklog
+[ThrottleWithOpts]: https://pkg.go.dev/github.com/go-chi/chi/middleware#ThrottleWithOpts
+[Timeout]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Timeout
+[URLFormat]: https://pkg.go.dev/github.com/go-chi/chi/middleware#URLFormat
+[WithLogEntry]: https://pkg.go.dev/github.com/go-chi/chi/middleware#WithLogEntry
+[WithValue]: https://pkg.go.dev/github.com/go-chi/chi/middleware#WithValue
+[Compressor]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Compressor
+[DefaultLogFormatter]: https://pkg.go.dev/github.com/go-chi/chi/middleware#DefaultLogFormatter
+[EncoderFunc]: https://pkg.go.dev/github.com/go-chi/chi/middleware#EncoderFunc
+[HeaderRoute]: https://pkg.go.dev/github.com/go-chi/chi/middleware#HeaderRoute
+[HeaderRouter]: https://pkg.go.dev/github.com/go-chi/chi/middleware#HeaderRouter
+[LogEntry]: https://pkg.go.dev/github.com/go-chi/chi/middleware#LogEntry
+[LogFormatter]: https://pkg.go.dev/github.com/go-chi/chi/middleware#LogFormatter
+[LoggerInterface]: https://pkg.go.dev/github.com/go-chi/chi/middleware#LoggerInterface
+[ThrottleOpts]: https://pkg.go.dev/github.com/go-chi/chi/middleware#ThrottleOpts
+[WrapResponseWriter]: https://pkg.go.dev/github.com/go-chi/chi/middleware#WrapResponseWriter
+
+### Extra middlewares & packages
+
+Please see https://github.com/go-chi for additional packages.
+
+--------------------------------------------------------------------------------------------------------------------
+| package | description |
+|:---------------------------------------------------|:-------------------------------------------------------------
+| [cors](https://github.com/go-chi/cors) | Cross-origin resource sharing (CORS) |
+| [docgen](https://github.com/go-chi/docgen) | Print chi.Router routes at runtime |
+| [jwtauth](https://github.com/go-chi/jwtauth) | JWT authentication |
+| [hostrouter](https://github.com/go-chi/hostrouter) | Domain/host based request routing |
+| [httplog](https://github.com/go-chi/httplog) | Small but powerful structured HTTP request logging |
+| [httprate](https://github.com/go-chi/httprate) | HTTP request rate limiter |
+| [httptracer](https://github.com/go-chi/httptracer) | HTTP request performance tracing library |
+| [httpvcr](https://github.com/go-chi/httpvcr) | Write deterministic tests for external sources |
+| [stampede](https://github.com/go-chi/stampede) | HTTP request coalescer |
+--------------------------------------------------------------------------------------------------------------------
+
+
+## context?
+
+`context` is a tiny pkg that provides simple interface to signal context across call stacks
+and goroutines. It was originally written by [Sameer Ajmani](https://github.com/Sajmani)
+and is available in stdlib since go1.7.
+
+Learn more at https://blog.golang.org/context
+
+and..
+* Docs: https://golang.org/pkg/context
+* Source: https://github.com/golang/go/tree/master/src/context
+
+
+## Benchmarks
+
+The benchmark suite: https://github.com/pkieltyka/go-http-routing-benchmark
+
+Results as of Nov 29, 2020 with Go 1.15.5 on Linux AMD 3950x
+
+```shell
+BenchmarkChi_Param 3075895 384 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_Param5 2116603 566 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_Param20 964117 1227 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_ParamWrite 2863413 420 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_GithubStatic 3045488 395 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_GithubParam 2204115 540 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_GithubAll 10000 113811 ns/op 81203 B/op 406 allocs/op
+BenchmarkChi_GPlusStatic 3337485 359 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_GPlusParam 2825853 423 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_GPlus2Params 2471697 483 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_GPlusAll 194220 5950 ns/op 5200 B/op 26 allocs/op
+BenchmarkChi_ParseStatic 3365324 356 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_ParseParam 2976614 404 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_Parse2Params 2638084 439 ns/op 400 B/op 2 allocs/op
+BenchmarkChi_ParseAll 109567 11295 ns/op 10400 B/op 52 allocs/op
+BenchmarkChi_StaticAll 16846 71308 ns/op 62802 B/op 314 allocs/op
+```
+
+Comparison with other routers: https://gist.github.com/pkieltyka/123032f12052520aaccab752bd3e78cc
+
+NOTE: the allocs in the benchmark above are from the calls to http.Request's
+`WithContext(context.Context)` method that clones the http.Request, sets the `Context()`
+on the duplicated (alloc'd) request and returns it the new request object. This is just
+how setting context on a request in Go works.
+
+
+## Go module support & note on chi's versioning
+
+* Go.mod support means we reset our versioning starting from v1.5 (see [CHANGELOG](https://github.com/go-chi/chi/blob/master/CHANGELOG.md#v150-2020-11-12---now-with-gomod-support))
+* All older tags are preserved, are backwards-compatible and will "just work" as they
+* Brand new systems can run `go get -u github.com/go-chi/chi` as normal, or `go get -u github.com/go-chi/chi@latest`
+to install chi, which will install v1.x+ built with go.mod support, starting from v1.5.0.
+* For existing projects who want to upgrade to the latest go.mod version, run: `go get -u github.com/go-chi/chi@v1.5.0`,
+which will get you on the go.mod version line (as Go's mod cache may still remember v4.x).
+* Any breaking changes will bump a "minor" release and backwards-compatible improvements/fixes will bump a "tiny" release.
+
+
+## Credits
+
+* Carl Jackson for https://github.com/zenazn/goji
+ * Parts of chi's thinking comes from goji, and chi's middleware package
+ sources from goji.
+* Armon Dadgar for https://github.com/armon/go-radix
+* Contributions: [@VojtechVitek](https://github.com/VojtechVitek)
+
+We'll be more than happy to see [your contributions](./CONTRIBUTING.md)!
+
+
+## Beyond REST
+
+chi is just a http router that lets you decompose request handling into many smaller layers.
+Many companies use chi to write REST services for their public APIs. But, REST is just a convention
+for managing state via HTTP, and there's a lot of other pieces required to write a complete client-server
+system or network of microservices.
+
+Looking beyond REST, I also recommend some newer works in the field:
+* [webrpc](https://github.com/webrpc/webrpc) - Web-focused RPC client+server framework with code-gen
+* [gRPC](https://github.com/grpc/grpc-go) - Google's RPC framework via protobufs
+* [graphql](https://github.com/99designs/gqlgen) - Declarative query language
+* [NATS](https://nats.io) - lightweight pub-sub
+
+
+## License
+
+Copyright (c) 2015-present [Peter Kieltyka](https://github.com/pkieltyka)
+
+Licensed under [MIT License](./LICENSE)
+
+[GoDoc]: https://pkg.go.dev/github.com/go-chi/chi?tab=versions
+[GoDoc Widget]: https://godoc.org/github.com/go-chi/chi?status.svg
+[Travis]: https://travis-ci.org/go-chi/chi
+[Travis Widget]: https://travis-ci.org/go-chi/chi.svg?branch=master
diff --git a/vendor/github.com/go-chi/chi/v5/chain.go b/vendor/github.com/go-chi/chi/v5/chain.go
new file mode 100644
index 000000000..88e684613
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/chain.go
@@ -0,0 +1,49 @@
+package chi
+
+import "net/http"
+
+// Chain returns a Middlewares type from a slice of middleware handlers.
+func Chain(middlewares ...func(http.Handler) http.Handler) Middlewares {
+ return Middlewares(middlewares)
+}
+
+// Handler builds and returns a http.Handler from the chain of middlewares,
+// with `h http.Handler` as the final handler.
+func (mws Middlewares) Handler(h http.Handler) http.Handler {
+ return &ChainHandler{mws, h, chain(mws, h)}
+}
+
+// HandlerFunc builds and returns a http.Handler from the chain of middlewares,
+// with `h http.Handler` as the final handler.
+func (mws Middlewares) HandlerFunc(h http.HandlerFunc) http.Handler {
+ return &ChainHandler{mws, h, chain(mws, h)}
+}
+
+// ChainHandler is a http.Handler with support for handler composition and
+// execution.
+type ChainHandler struct {
+ Middlewares Middlewares
+ Endpoint http.Handler
+ chain http.Handler
+}
+
+func (c *ChainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ c.chain.ServeHTTP(w, r)
+}
+
+// chain builds a http.Handler composed of an inline middleware stack and endpoint
+// handler in the order they are passed.
+func chain(middlewares []func(http.Handler) http.Handler, endpoint http.Handler) http.Handler {
+ // Return ahead of time if there aren't any middlewares for the chain
+ if len(middlewares) == 0 {
+ return endpoint
+ }
+
+ // Wrap the end handler with the middleware chain
+ h := middlewares[len(middlewares)-1](endpoint)
+ for i := len(middlewares) - 2; i >= 0; i-- {
+ h = middlewares[i](h)
+ }
+
+ return h
+}
diff --git a/vendor/github.com/go-chi/chi/v5/chi.go b/vendor/github.com/go-chi/chi/v5/chi.go
new file mode 100644
index 000000000..d2e5354dc
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/chi.go
@@ -0,0 +1,134 @@
+//
+// Package chi is a small, idiomatic and composable router for building HTTP services.
+//
+// chi requires Go 1.10 or newer.
+//
+// Example:
+// package main
+//
+// import (
+// "net/http"
+//
+// "github.com/go-chi/chi/v5"
+// "github.com/go-chi/chi/v5/middleware"
+// )
+//
+// func main() {
+// r := chi.NewRouter()
+// r.Use(middleware.Logger)
+// r.Use(middleware.Recoverer)
+//
+// r.Get("/", func(w http.ResponseWriter, r *http.Request) {
+// w.Write([]byte("root."))
+// })
+//
+// http.ListenAndServe(":3333", r)
+// }
+//
+// See github.com/go-chi/chi/_examples/ for more in-depth examples.
+//
+// URL patterns allow for easy matching of path components in HTTP
+// requests. The matching components can then be accessed using
+// chi.URLParam(). All patterns must begin with a slash.
+//
+// A simple named placeholder {name} matches any sequence of characters
+// up to the next / or the end of the URL. Trailing slashes on paths must
+// be handled explicitly.
+//
+// A placeholder with a name followed by a colon allows a regular
+// expression match, for example {number:\\d+}. The regular expression
+// syntax is Go's normal regexp RE2 syntax, except that regular expressions
+// including { or } are not supported, and / will never be
+// matched. An anonymous regexp pattern is allowed, using an empty string
+// before the colon in the placeholder, such as {:\\d+}
+//
+// The special placeholder of asterisk matches the rest of the requested
+// URL. Any trailing characters in the pattern are ignored. This is the only
+// placeholder which will match / characters.
+//
+// Examples:
+// "/user/{name}" matches "/user/jsmith" but not "/user/jsmith/info" or "/user/jsmith/"
+// "/user/{name}/info" matches "/user/jsmith/info"
+// "/page/*" matches "/page/intro/latest"
+// "/page/*/index" also matches "/page/intro/latest"
+// "/date/{yyyy:\\d\\d\\d\\d}/{mm:\\d\\d}/{dd:\\d\\d}" matches "/date/2017/04/01"
+//
+package chi
+
+import "net/http"
+
+// NewRouter returns a new Mux object that implements the Router interface.
+func NewRouter() *Mux {
+ return NewMux()
+}
+
+// Router consisting of the core routing methods used by chi's Mux,
+// using only the standard net/http.
+type Router interface {
+ http.Handler
+ Routes
+
+ // Use appends one or more middlewares onto the Router stack.
+ Use(middlewares ...func(http.Handler) http.Handler)
+
+ // With adds inline middlewares for an endpoint handler.
+ With(middlewares ...func(http.Handler) http.Handler) Router
+
+ // Group adds a new inline-Router along the current routing
+ // path, with a fresh middleware stack for the inline-Router.
+ Group(fn func(r Router)) Router
+
+ // Route mounts a sub-Router along a `pattern`` string.
+ Route(pattern string, fn func(r Router)) Router
+
+ // Mount attaches another http.Handler along ./pattern/*
+ Mount(pattern string, h http.Handler)
+
+ // Handle and HandleFunc adds routes for `pattern` that matches
+ // all HTTP methods.
+ Handle(pattern string, h http.Handler)
+ HandleFunc(pattern string, h http.HandlerFunc)
+
+ // Method and MethodFunc adds routes for `pattern` that matches
+ // the `method` HTTP method.
+ Method(method, pattern string, h http.Handler)
+ MethodFunc(method, pattern string, h http.HandlerFunc)
+
+ // HTTP-method routing along `pattern`
+ Connect(pattern string, h http.HandlerFunc)
+ Delete(pattern string, h http.HandlerFunc)
+ Get(pattern string, h http.HandlerFunc)
+ Head(pattern string, h http.HandlerFunc)
+ Options(pattern string, h http.HandlerFunc)
+ Patch(pattern string, h http.HandlerFunc)
+ Post(pattern string, h http.HandlerFunc)
+ Put(pattern string, h http.HandlerFunc)
+ Trace(pattern string, h http.HandlerFunc)
+
+ // NotFound defines a handler to respond whenever a route could
+ // not be found.
+ NotFound(h http.HandlerFunc)
+
+ // MethodNotAllowed defines a handler to respond whenever a method is
+ // not allowed.
+ MethodNotAllowed(h http.HandlerFunc)
+}
+
+// Routes interface adds two methods for router traversal, which is also
+// used by the `docgen` subpackage to generation documentation for Routers.
+type Routes interface {
+ // Routes returns the routing tree in an easily traversable structure.
+ Routes() []Route
+
+ // Middlewares returns the list of middlewares in use by the router.
+ Middlewares() Middlewares
+
+ // Match searches the routing tree for a handler that matches
+ // the method/path - similar to routing a http request, but without
+ // executing the handler thereafter.
+ Match(rctx *Context, method, path string) bool
+}
+
+// Middlewares type is a slice of standard middleware handlers with methods
+// to compose middleware chains and http.Handler's.
+type Middlewares []func(http.Handler) http.Handler
diff --git a/vendor/github.com/go-chi/chi/v5/context.go b/vendor/github.com/go-chi/chi/v5/context.go
new file mode 100644
index 000000000..8c97f214a
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/context.go
@@ -0,0 +1,157 @@
+package chi
+
+import (
+ "context"
+ "net/http"
+ "strings"
+)
+
+// URLParam returns the url parameter from a http.Request object.
+func URLParam(r *http.Request, key string) string {
+ if rctx := RouteContext(r.Context()); rctx != nil {
+ return rctx.URLParam(key)
+ }
+ return ""
+}
+
+// URLParamFromCtx returns the url parameter from a http.Request Context.
+func URLParamFromCtx(ctx context.Context, key string) string {
+ if rctx := RouteContext(ctx); rctx != nil {
+ return rctx.URLParam(key)
+ }
+ return ""
+}
+
+// RouteContext returns chi's routing Context object from a
+// http.Request Context.
+func RouteContext(ctx context.Context) *Context {
+ val, _ := ctx.Value(RouteCtxKey).(*Context)
+ return val
+}
+
+// NewRouteContext returns a new routing Context object.
+func NewRouteContext() *Context {
+ return &Context{}
+}
+
+var (
+ // RouteCtxKey is the context.Context key to store the request context.
+ RouteCtxKey = &contextKey{"RouteContext"}
+)
+
+// Context is the default routing context set on the root node of a
+// request context to track route patterns, URL parameters and
+// an optional routing path.
+type Context struct {
+ Routes Routes
+
+ // Routing path/method override used during the route search.
+ // See Mux#routeHTTP method.
+ RoutePath string
+ RouteMethod string
+
+ // Routing pattern stack throughout the lifecycle of the request,
+ // across all connected routers. It is a record of all matching
+ // patterns across a stack of sub-routers.
+ RoutePatterns []string
+
+ // URLParams are the stack of routeParams captured during the
+ // routing lifecycle across a stack of sub-routers.
+ URLParams RouteParams
+
+ // The endpoint routing pattern that matched the request URI path
+ // or `RoutePath` of the current sub-router. This value will update
+ // during the lifecycle of a request passing through a stack of
+ // sub-routers.
+ routePattern string
+
+ // Route parameters matched for the current sub-router. It is
+ // intentionally unexported so it cant be tampered.
+ routeParams RouteParams
+
+ // methodNotAllowed hint
+ methodNotAllowed bool
+
+ // parentCtx is the parent of this one, for using Context as a
+ // context.Context directly. This is an optimization that saves
+ // 1 allocation.
+ parentCtx context.Context
+}
+
+// Reset a routing context to its initial state.
+func (x *Context) Reset() {
+ x.Routes = nil
+ x.RoutePath = ""
+ x.RouteMethod = ""
+ x.RoutePatterns = x.RoutePatterns[:0]
+ x.URLParams.Keys = x.URLParams.Keys[:0]
+ x.URLParams.Values = x.URLParams.Values[:0]
+
+ x.routePattern = ""
+ x.routeParams.Keys = x.routeParams.Keys[:0]
+ x.routeParams.Values = x.routeParams.Values[:0]
+ x.methodNotAllowed = false
+ x.parentCtx = nil
+}
+
+// URLParam returns the corresponding URL parameter value from the request
+// routing context.
+func (x *Context) URLParam(key string) string {
+ for k := len(x.URLParams.Keys) - 1; k >= 0; k-- {
+ if x.URLParams.Keys[k] == key {
+ return x.URLParams.Values[k]
+ }
+ }
+ return ""
+}
+
+// RoutePattern builds the routing pattern string for the particular
+// request, at the particular point during routing. This means, the value
+// will change throughout the execution of a request in a router. That is
+// why its advised to only use this value after calling the next handler.
+//
+// For example,
+//
+// func Instrument(next http.Handler) http.Handler {
+// return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+// next.ServeHTTP(w, r)
+// routePattern := chi.RouteContext(r.Context()).RoutePattern()
+// measure(w, r, routePattern)
+// })
+// }
+func (x *Context) RoutePattern() string {
+ routePattern := strings.Join(x.RoutePatterns, "")
+ return replaceWildcards(routePattern)
+}
+
+// replaceWildcards takes a route pattern and recursively replaces all
+// occurrences of "/*/" to "/".
+func replaceWildcards(p string) string {
+ if strings.Contains(p, "/*/") {
+ return replaceWildcards(strings.Replace(p, "/*/", "/", -1))
+ }
+
+ return p
+}
+
+// RouteParams is a structure to track URL routing parameters efficiently.
+type RouteParams struct {
+ Keys, Values []string
+}
+
+// Add will append a URL parameter to the end of the route param
+func (s *RouteParams) Add(key, value string) {
+ s.Keys = append(s.Keys, key)
+ s.Values = append(s.Values, value)
+}
+
+// contextKey is a value for use with context.WithValue. It's used as
+// a pointer so it fits in an interface{} without allocation. This technique
+// for defining context keys was copied from Go 1.7's new use of context in net/http.
+type contextKey struct {
+ name string
+}
+
+func (k *contextKey) String() string {
+ return "chi context value " + k.name
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/basic_auth.go b/vendor/github.com/go-chi/chi/v5/middleware/basic_auth.go
new file mode 100644
index 000000000..a546c9e9e
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/basic_auth.go
@@ -0,0 +1,33 @@
+package middleware
+
+import (
+ "crypto/subtle"
+ "fmt"
+ "net/http"
+)
+
+// BasicAuth implements a simple middleware handler for adding basic http auth to a route.
+func BasicAuth(realm string, creds map[string]string) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ user, pass, ok := r.BasicAuth()
+ if !ok {
+ basicAuthFailed(w, realm)
+ return
+ }
+
+ credPass, credUserOk := creds[user]
+ if !credUserOk || subtle.ConstantTimeCompare([]byte(pass), []byte(credPass)) != 1 {
+ basicAuthFailed(w, realm)
+ return
+ }
+
+ next.ServeHTTP(w, r)
+ })
+ }
+}
+
+func basicAuthFailed(w http.ResponseWriter, realm string) {
+ w.Header().Add("WWW-Authenticate", fmt.Sprintf(`Basic realm="%s"`, realm))
+ w.WriteHeader(http.StatusUnauthorized)
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/clean_path.go b/vendor/github.com/go-chi/chi/v5/middleware/clean_path.go
new file mode 100644
index 000000000..adeba4295
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/clean_path.go
@@ -0,0 +1,28 @@
+package middleware
+
+import (
+ "net/http"
+ "path"
+
+ "github.com/go-chi/chi/v5"
+)
+
+// CleanPath middleware will clean out double slash mistakes from a user's request path.
+// For example, if a user requests /users//1 or //users////1 will both be treated as: /users/1
+func CleanPath(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ rctx := chi.RouteContext(r.Context())
+
+ routePath := rctx.RoutePath
+ if routePath == "" {
+ if r.URL.RawPath != "" {
+ routePath = r.URL.RawPath
+ } else {
+ routePath = r.URL.Path
+ }
+ rctx.RoutePath = path.Clean(routePath)
+ }
+
+ next.ServeHTTP(w, r)
+ })
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/compress.go b/vendor/github.com/go-chi/chi/v5/middleware/compress.go
new file mode 100644
index 000000000..2f40cc15a
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/compress.go
@@ -0,0 +1,399 @@
+package middleware
+
+import (
+ "bufio"
+ "compress/flate"
+ "compress/gzip"
+ "errors"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "net"
+ "net/http"
+ "strings"
+ "sync"
+)
+
+var defaultCompressibleContentTypes = []string{
+ "text/html",
+ "text/css",
+ "text/plain",
+ "text/javascript",
+ "application/javascript",
+ "application/x-javascript",
+ "application/json",
+ "application/atom+xml",
+ "application/rss+xml",
+ "image/svg+xml",
+}
+
+// Compress is a middleware that compresses response
+// body of a given content types to a data format based
+// on Accept-Encoding request header. It uses a given
+// compression level.
+//
+// NOTE: make sure to set the Content-Type header on your response
+// otherwise this middleware will not compress the response body. For ex, in
+// your handler you should set w.Header().Set("Content-Type", http.DetectContentType(yourBody))
+// or set it manually.
+//
+// Passing a compression level of 5 is sensible value
+func Compress(level int, types ...string) func(next http.Handler) http.Handler {
+ compressor := NewCompressor(level, types...)
+ return compressor.Handler
+}
+
+// Compressor represents a set of encoding configurations.
+type Compressor struct {
+ level int // The compression level.
+ // The mapping of encoder names to encoder functions.
+ encoders map[string]EncoderFunc
+ // The mapping of pooled encoders to pools.
+ pooledEncoders map[string]*sync.Pool
+ // The set of content types allowed to be compressed.
+ allowedTypes map[string]struct{}
+ allowedWildcards map[string]struct{}
+ // The list of encoders in order of decreasing precedence.
+ encodingPrecedence []string
+}
+
+// NewCompressor creates a new Compressor that will handle encoding responses.
+//
+// The level should be one of the ones defined in the flate package.
+// The types are the content types that are allowed to be compressed.
+func NewCompressor(level int, types ...string) *Compressor {
+ // If types are provided, set those as the allowed types. If none are
+ // provided, use the default list.
+ allowedTypes := make(map[string]struct{})
+ allowedWildcards := make(map[string]struct{})
+ if len(types) > 0 {
+ for _, t := range types {
+ if strings.Contains(strings.TrimSuffix(t, "/*"), "*") {
+ panic(fmt.Sprintf("middleware/compress: Unsupported content-type wildcard pattern '%s'. Only '/*' supported", t))
+ }
+ if strings.HasSuffix(t, "/*") {
+ allowedWildcards[strings.TrimSuffix(t, "/*")] = struct{}{}
+ } else {
+ allowedTypes[t] = struct{}{}
+ }
+ }
+ } else {
+ for _, t := range defaultCompressibleContentTypes {
+ allowedTypes[t] = struct{}{}
+ }
+ }
+
+ c := &Compressor{
+ level: level,
+ encoders: make(map[string]EncoderFunc),
+ pooledEncoders: make(map[string]*sync.Pool),
+ allowedTypes: allowedTypes,
+ allowedWildcards: allowedWildcards,
+ }
+
+ // Set the default encoders. The precedence order uses the reverse
+ // ordering that the encoders were added. This means adding new encoders
+ // will move them to the front of the order.
+ //
+ // TODO:
+ // lzma: Opera.
+ // sdch: Chrome, Android. Gzip output + dictionary header.
+ // br: Brotli, see https://github.com/go-chi/chi/pull/326
+
+ // HTTP 1.1 "deflate" (RFC 2616) stands for DEFLATE data (RFC 1951)
+ // wrapped with zlib (RFC 1950). The zlib wrapper uses Adler-32
+ // checksum compared to CRC-32 used in "gzip" and thus is faster.
+ //
+ // But.. some old browsers (MSIE, Safari 5.1) incorrectly expect
+ // raw DEFLATE data only, without the mentioned zlib wrapper.
+ // Because of this major confusion, most modern browsers try it
+ // both ways, first looking for zlib headers.
+ // Quote by Mark Adler: http://stackoverflow.com/a/9186091/385548
+ //
+ // The list of browsers having problems is quite big, see:
+ // http://zoompf.com/blog/2012/02/lose-the-wait-http-compression
+ // https://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests/results
+ //
+ // That's why we prefer gzip over deflate. It's just more reliable
+ // and not significantly slower than gzip.
+ c.SetEncoder("deflate", encoderDeflate)
+
+ // TODO: Exception for old MSIE browsers that can't handle non-HTML?
+ // https://zoompf.com/blog/2012/02/lose-the-wait-http-compression
+ c.SetEncoder("gzip", encoderGzip)
+
+ // NOTE: Not implemented, intentionally:
+ // case "compress": // LZW. Deprecated.
+ // case "bzip2": // Too slow on-the-fly.
+ // case "zopfli": // Too slow on-the-fly.
+ // case "xz": // Too slow on-the-fly.
+ return c
+}
+
+// SetEncoder can be used to set the implementation of a compression algorithm.
+//
+// The encoding should be a standardised identifier. See:
+// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
+//
+// For example, add the Brotli algortithm:
+//
+// import brotli_enc "gopkg.in/kothar/brotli-go.v0/enc"
+//
+// compressor := middleware.NewCompressor(5, "text/html")
+// compressor.SetEncoder("br", func(w http.ResponseWriter, level int) io.Writer {
+// params := brotli_enc.NewBrotliParams()
+// params.SetQuality(level)
+// return brotli_enc.NewBrotliWriter(params, w)
+// })
+func (c *Compressor) SetEncoder(encoding string, fn EncoderFunc) {
+ encoding = strings.ToLower(encoding)
+ if encoding == "" {
+ panic("the encoding can not be empty")
+ }
+ if fn == nil {
+ panic("attempted to set a nil encoder function")
+ }
+
+ // If we are adding a new encoder that is already registered, we have to
+ // clear that one out first.
+ if _, ok := c.pooledEncoders[encoding]; ok {
+ delete(c.pooledEncoders, encoding)
+ }
+ if _, ok := c.encoders[encoding]; ok {
+ delete(c.encoders, encoding)
+ }
+
+ // If the encoder supports Resetting (IoReseterWriter), then it can be pooled.
+ encoder := fn(ioutil.Discard, c.level)
+ if encoder != nil {
+ if _, ok := encoder.(ioResetterWriter); ok {
+ pool := &sync.Pool{
+ New: func() interface{} {
+ return fn(ioutil.Discard, c.level)
+ },
+ }
+ c.pooledEncoders[encoding] = pool
+ }
+ }
+ // If the encoder is not in the pooledEncoders, add it to the normal encoders.
+ if _, ok := c.pooledEncoders[encoding]; !ok {
+ c.encoders[encoding] = fn
+ }
+
+ for i, v := range c.encodingPrecedence {
+ if v == encoding {
+ c.encodingPrecedence = append(c.encodingPrecedence[:i], c.encodingPrecedence[i+1:]...)
+ }
+ }
+
+ c.encodingPrecedence = append([]string{encoding}, c.encodingPrecedence...)
+}
+
+// Handler returns a new middleware that will compress the response based on the
+// current Compressor.
+func (c *Compressor) Handler(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ encoder, encoding, cleanup := c.selectEncoder(r.Header, w)
+
+ cw := &compressResponseWriter{
+ ResponseWriter: w,
+ w: w,
+ contentTypes: c.allowedTypes,
+ contentWildcards: c.allowedWildcards,
+ encoding: encoding,
+ compressable: false, // determined in post-handler
+ }
+ if encoder != nil {
+ cw.w = encoder
+ }
+ // Re-add the encoder to the pool if applicable.
+ defer cleanup()
+ defer cw.Close()
+
+ next.ServeHTTP(cw, r)
+ })
+}
+
+// selectEncoder returns the encoder, the name of the encoder, and a closer function.
+func (c *Compressor) selectEncoder(h http.Header, w io.Writer) (io.Writer, string, func()) {
+ header := h.Get("Accept-Encoding")
+
+ // Parse the names of all accepted algorithms from the header.
+ accepted := strings.Split(strings.ToLower(header), ",")
+
+ // Find supported encoder by accepted list by precedence
+ for _, name := range c.encodingPrecedence {
+ if matchAcceptEncoding(accepted, name) {
+ if pool, ok := c.pooledEncoders[name]; ok {
+ encoder := pool.Get().(ioResetterWriter)
+ cleanup := func() {
+ pool.Put(encoder)
+ }
+ encoder.Reset(w)
+ return encoder, name, cleanup
+
+ }
+ if fn, ok := c.encoders[name]; ok {
+ return fn(w, c.level), name, func() {}
+ }
+ }
+
+ }
+
+ // No encoder found to match the accepted encoding
+ return nil, "", func() {}
+}
+
+func matchAcceptEncoding(accepted []string, encoding string) bool {
+ for _, v := range accepted {
+ if strings.Contains(v, encoding) {
+ return true
+ }
+ }
+ return false
+}
+
+// An EncoderFunc is a function that wraps the provided io.Writer with a
+// streaming compression algorithm and returns it.
+//
+// In case of failure, the function should return nil.
+type EncoderFunc func(w io.Writer, level int) io.Writer
+
+// Interface for types that allow resetting io.Writers.
+type ioResetterWriter interface {
+ io.Writer
+ Reset(w io.Writer)
+}
+
+type compressResponseWriter struct {
+ http.ResponseWriter
+
+ // The streaming encoder writer to be used if there is one. Otherwise,
+ // this is just the normal writer.
+ w io.Writer
+ encoding string
+ contentTypes map[string]struct{}
+ contentWildcards map[string]struct{}
+ wroteHeader bool
+ compressable bool
+}
+
+func (cw *compressResponseWriter) isCompressable() bool {
+ // Parse the first part of the Content-Type response header.
+ contentType := cw.Header().Get("Content-Type")
+ if idx := strings.Index(contentType, ";"); idx >= 0 {
+ contentType = contentType[0:idx]
+ }
+
+ // Is the content type compressable?
+ if _, ok := cw.contentTypes[contentType]; ok {
+ return true
+ }
+ if idx := strings.Index(contentType, "/"); idx > 0 {
+ contentType = contentType[0:idx]
+ _, ok := cw.contentWildcards[contentType]
+ return ok
+ }
+ return false
+}
+
+func (cw *compressResponseWriter) WriteHeader(code int) {
+ if cw.wroteHeader {
+ cw.ResponseWriter.WriteHeader(code) // Allow multiple calls to propagate.
+ return
+ }
+ cw.wroteHeader = true
+ defer cw.ResponseWriter.WriteHeader(code)
+
+ // Already compressed data?
+ if cw.Header().Get("Content-Encoding") != "" {
+ return
+ }
+
+ if !cw.isCompressable() {
+ cw.compressable = false
+ return
+ }
+
+ if cw.encoding != "" {
+ cw.compressable = true
+ cw.Header().Set("Content-Encoding", cw.encoding)
+ cw.Header().Set("Vary", "Accept-Encoding")
+
+ // The content-length after compression is unknown
+ cw.Header().Del("Content-Length")
+ }
+}
+
+func (cw *compressResponseWriter) Write(p []byte) (int, error) {
+ if !cw.wroteHeader {
+ cw.WriteHeader(http.StatusOK)
+ }
+
+ return cw.writer().Write(p)
+}
+
+func (cw *compressResponseWriter) writer() io.Writer {
+ if cw.compressable {
+ return cw.w
+ } else {
+ return cw.ResponseWriter
+ }
+}
+
+type compressFlusher interface {
+ Flush() error
+}
+
+func (cw *compressResponseWriter) Flush() {
+ if f, ok := cw.writer().(http.Flusher); ok {
+ f.Flush()
+ }
+ // If the underlying writer has a compression flush signature,
+ // call this Flush() method instead
+ if f, ok := cw.writer().(compressFlusher); ok {
+ f.Flush()
+
+ // Also flush the underlying response writer
+ if f, ok := cw.ResponseWriter.(http.Flusher); ok {
+ f.Flush()
+ }
+ }
+}
+
+func (cw *compressResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
+ if hj, ok := cw.writer().(http.Hijacker); ok {
+ return hj.Hijack()
+ }
+ return nil, nil, errors.New("chi/middleware: http.Hijacker is unavailable on the writer")
+}
+
+func (cw *compressResponseWriter) Push(target string, opts *http.PushOptions) error {
+ if ps, ok := cw.writer().(http.Pusher); ok {
+ return ps.Push(target, opts)
+ }
+ return errors.New("chi/middleware: http.Pusher is unavailable on the writer")
+}
+
+func (cw *compressResponseWriter) Close() error {
+ if c, ok := cw.writer().(io.WriteCloser); ok {
+ return c.Close()
+ }
+ return errors.New("chi/middleware: io.WriteCloser is unavailable on the writer")
+}
+
+func encoderGzip(w io.Writer, level int) io.Writer {
+ gw, err := gzip.NewWriterLevel(w, level)
+ if err != nil {
+ return nil
+ }
+ return gw
+}
+
+func encoderDeflate(w io.Writer, level int) io.Writer {
+ dw, err := flate.NewWriter(w, level)
+ if err != nil {
+ return nil
+ }
+ return dw
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/content_charset.go b/vendor/github.com/go-chi/chi/v5/middleware/content_charset.go
new file mode 100644
index 000000000..07b5ce6f6
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/content_charset.go
@@ -0,0 +1,51 @@
+package middleware
+
+import (
+ "net/http"
+ "strings"
+)
+
+// ContentCharset generates a handler that writes a 415 Unsupported Media Type response if none of the charsets match.
+// An empty charset will allow requests with no Content-Type header or no specified charset.
+func ContentCharset(charsets ...string) func(next http.Handler) http.Handler {
+ for i, c := range charsets {
+ charsets[i] = strings.ToLower(c)
+ }
+
+ return func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if !contentEncoding(r.Header.Get("Content-Type"), charsets...) {
+ w.WriteHeader(http.StatusUnsupportedMediaType)
+ return
+ }
+
+ next.ServeHTTP(w, r)
+ })
+ }
+}
+
+// Check the content encoding against a list of acceptable values.
+func contentEncoding(ce string, charsets ...string) bool {
+ _, ce = split(strings.ToLower(ce), ";")
+ _, ce = split(ce, "charset=")
+ ce, _ = split(ce, ";")
+ for _, c := range charsets {
+ if ce == c {
+ return true
+ }
+ }
+
+ return false
+}
+
+// Split a string in two parts, cleaning any whitespace.
+func split(str, sep string) (string, string) {
+ var a, b string
+ var parts = strings.SplitN(str, sep, 2)
+ a = strings.TrimSpace(parts[0])
+ if len(parts) == 2 {
+ b = strings.TrimSpace(parts[1])
+ }
+
+ return a, b
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/content_encoding.go b/vendor/github.com/go-chi/chi/v5/middleware/content_encoding.go
new file mode 100644
index 000000000..e0b9ccc08
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/content_encoding.go
@@ -0,0 +1,34 @@
+package middleware
+
+import (
+ "net/http"
+ "strings"
+)
+
+// AllowContentEncoding enforces a whitelist of request Content-Encoding otherwise responds
+// with a 415 Unsupported Media Type status.
+func AllowContentEncoding(contentEncoding ...string) func(next http.Handler) http.Handler {
+ allowedEncodings := make(map[string]struct{}, len(contentEncoding))
+ for _, encoding := range contentEncoding {
+ allowedEncodings[strings.TrimSpace(strings.ToLower(encoding))] = struct{}{}
+ }
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ requestEncodings := r.Header["Content-Encoding"]
+ // skip check for empty content body or no Content-Encoding
+ if r.ContentLength == 0 {
+ next.ServeHTTP(w, r)
+ return
+ }
+ // All encodings in the request must be allowed
+ for _, encoding := range requestEncodings {
+ if _, ok := allowedEncodings[strings.TrimSpace(strings.ToLower(encoding))]; !ok {
+ w.WriteHeader(http.StatusUnsupportedMediaType)
+ return
+ }
+ }
+ next.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+ }
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/content_type.go b/vendor/github.com/go-chi/chi/v5/middleware/content_type.go
new file mode 100644
index 000000000..023978fac
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/content_type.go
@@ -0,0 +1,49 @@
+package middleware
+
+import (
+ "net/http"
+ "strings"
+)
+
+// SetHeader is a convenience handler to set a response header key/value
+func SetHeader(key, value string) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set(key, value)
+ next.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+ }
+}
+
+// AllowContentType enforces a whitelist of request Content-Types otherwise responds
+// with a 415 Unsupported Media Type status.
+func AllowContentType(contentTypes ...string) func(next http.Handler) http.Handler {
+ allowedContentTypes := make(map[string]struct{}, len(contentTypes))
+ for _, ctype := range contentTypes {
+ allowedContentTypes[strings.TrimSpace(strings.ToLower(ctype))] = struct{}{}
+ }
+
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ if r.ContentLength == 0 {
+ // skip check for empty content body
+ next.ServeHTTP(w, r)
+ return
+ }
+
+ s := strings.ToLower(strings.TrimSpace(r.Header.Get("Content-Type")))
+ if i := strings.Index(s, ";"); i > -1 {
+ s = s[0:i]
+ }
+
+ if _, ok := allowedContentTypes[s]; ok {
+ next.ServeHTTP(w, r)
+ return
+ }
+
+ w.WriteHeader(http.StatusUnsupportedMediaType)
+ }
+ return http.HandlerFunc(fn)
+ }
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/get_head.go b/vendor/github.com/go-chi/chi/v5/middleware/get_head.go
new file mode 100644
index 000000000..d4606d8be
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/get_head.go
@@ -0,0 +1,39 @@
+package middleware
+
+import (
+ "net/http"
+
+ "github.com/go-chi/chi/v5"
+)
+
+// GetHead automatically route undefined HEAD requests to GET handlers.
+func GetHead(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if r.Method == "HEAD" {
+ rctx := chi.RouteContext(r.Context())
+ routePath := rctx.RoutePath
+ if routePath == "" {
+ if r.URL.RawPath != "" {
+ routePath = r.URL.RawPath
+ } else {
+ routePath = r.URL.Path
+ }
+ }
+
+ // Temporary routing context to look-ahead before routing the request
+ tctx := chi.NewRouteContext()
+
+ // Attempt to find a HEAD handler for the routing path, if not found, traverse
+ // the router as through its a GET route, but proceed with the request
+ // with the HEAD method.
+ if !rctx.Routes.Match(tctx, "HEAD", routePath) {
+ rctx.RouteMethod = "GET"
+ rctx.RoutePath = routePath
+ next.ServeHTTP(w, r)
+ return
+ }
+ }
+
+ next.ServeHTTP(w, r)
+ })
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/heartbeat.go b/vendor/github.com/go-chi/chi/v5/middleware/heartbeat.go
new file mode 100644
index 000000000..fe822fb53
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/heartbeat.go
@@ -0,0 +1,26 @@
+package middleware
+
+import (
+ "net/http"
+ "strings"
+)
+
+// Heartbeat endpoint middleware useful to setting up a path like
+// `/ping` that load balancers or uptime testing external services
+// can make a request before hitting any routes. It's also convenient
+// to place this above ACL middlewares as well.
+func Heartbeat(endpoint string) func(http.Handler) http.Handler {
+ f := func(h http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ if r.Method == "GET" && strings.EqualFold(r.URL.Path, endpoint) {
+ w.Header().Set("Content-Type", "text/plain")
+ w.WriteHeader(http.StatusOK)
+ w.Write([]byte("."))
+ return
+ }
+ h.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+ }
+ return f
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/logger.go b/vendor/github.com/go-chi/chi/v5/middleware/logger.go
new file mode 100644
index 000000000..66edc3dda
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/logger.go
@@ -0,0 +1,174 @@
+package middleware
+
+import (
+ "bytes"
+ "context"
+ "log"
+ "net/http"
+ "os"
+ "runtime"
+ "time"
+)
+
+var (
+ // LogEntryCtxKey is the context.Context key to store the request log entry.
+ LogEntryCtxKey = &contextKey{"LogEntry"}
+
+ // DefaultLogger is called by the Logger middleware handler to log each request.
+ // Its made a package-level variable so that it can be reconfigured for custom
+ // logging configurations.
+ DefaultLogger func(next http.Handler) http.Handler
+)
+
+// Logger is a middleware that logs the start and end of each request, along
+// with some useful data about what was requested, what the response status was,
+// and how long it took to return. When standard output is a TTY, Logger will
+// print in color, otherwise it will print in black and white. Logger prints a
+// request ID if one is provided.
+//
+// Alternatively, look at https://github.com/goware/httplog for a more in-depth
+// http logger with structured logging support.
+//
+// IMPORTANT NOTE: Logger should go before any other middleware that may change
+// the response, such as `middleware.Recoverer`. Example:
+//
+// ```go
+// r := chi.NewRouter()
+// r.Use(middleware.Logger) // <--<< Logger should come before Recoverer
+// r.Use(middleware.Recoverer)
+// r.Get("/", handler)
+// ```
+func Logger(next http.Handler) http.Handler {
+ return DefaultLogger(next)
+}
+
+// RequestLogger returns a logger handler using a custom LogFormatter.
+func RequestLogger(f LogFormatter) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ entry := f.NewLogEntry(r)
+ ww := NewWrapResponseWriter(w, r.ProtoMajor)
+
+ t1 := time.Now()
+ defer func() {
+ entry.Write(ww.Status(), ww.BytesWritten(), ww.Header(), time.Since(t1), nil)
+ }()
+
+ next.ServeHTTP(ww, WithLogEntry(r, entry))
+ }
+ return http.HandlerFunc(fn)
+ }
+}
+
+// LogFormatter initiates the beginning of a new LogEntry per request.
+// See DefaultLogFormatter for an example implementation.
+type LogFormatter interface {
+ NewLogEntry(r *http.Request) LogEntry
+}
+
+// LogEntry records the final log when a request completes.
+// See defaultLogEntry for an example implementation.
+type LogEntry interface {
+ Write(status, bytes int, header http.Header, elapsed time.Duration, extra interface{})
+ Panic(v interface{}, stack []byte)
+}
+
+// GetLogEntry returns the in-context LogEntry for a request.
+func GetLogEntry(r *http.Request) LogEntry {
+ entry, _ := r.Context().Value(LogEntryCtxKey).(LogEntry)
+ return entry
+}
+
+// WithLogEntry sets the in-context LogEntry for a request.
+func WithLogEntry(r *http.Request, entry LogEntry) *http.Request {
+ r = r.WithContext(context.WithValue(r.Context(), LogEntryCtxKey, entry))
+ return r
+}
+
+// LoggerInterface accepts printing to stdlib logger or compatible logger.
+type LoggerInterface interface {
+ Print(v ...interface{})
+}
+
+// DefaultLogFormatter is a simple logger that implements a LogFormatter.
+type DefaultLogFormatter struct {
+ Logger LoggerInterface
+ NoColor bool
+}
+
+// NewLogEntry creates a new LogEntry for the request.
+func (l *DefaultLogFormatter) NewLogEntry(r *http.Request) LogEntry {
+ useColor := !l.NoColor
+ entry := &defaultLogEntry{
+ DefaultLogFormatter: l,
+ request: r,
+ buf: &bytes.Buffer{},
+ useColor: useColor,
+ }
+
+ reqID := GetReqID(r.Context())
+ if reqID != "" {
+ cW(entry.buf, useColor, nYellow, "[%s] ", reqID)
+ }
+ cW(entry.buf, useColor, nCyan, "\"")
+ cW(entry.buf, useColor, bMagenta, "%s ", r.Method)
+
+ scheme := "http"
+ if r.TLS != nil {
+ scheme = "https"
+ }
+ cW(entry.buf, useColor, nCyan, "%s://%s%s %s\" ", scheme, r.Host, r.RequestURI, r.Proto)
+
+ entry.buf.WriteString("from ")
+ entry.buf.WriteString(r.RemoteAddr)
+ entry.buf.WriteString(" - ")
+
+ return entry
+}
+
+type defaultLogEntry struct {
+ *DefaultLogFormatter
+ request *http.Request
+ buf *bytes.Buffer
+ useColor bool
+}
+
+func (l *defaultLogEntry) Write(status, bytes int, header http.Header, elapsed time.Duration, extra interface{}) {
+ switch {
+ case status < 200:
+ cW(l.buf, l.useColor, bBlue, "%03d", status)
+ case status < 300:
+ cW(l.buf, l.useColor, bGreen, "%03d", status)
+ case status < 400:
+ cW(l.buf, l.useColor, bCyan, "%03d", status)
+ case status < 500:
+ cW(l.buf, l.useColor, bYellow, "%03d", status)
+ default:
+ cW(l.buf, l.useColor, bRed, "%03d", status)
+ }
+
+ cW(l.buf, l.useColor, bBlue, " %dB", bytes)
+
+ l.buf.WriteString(" in ")
+ if elapsed < 500*time.Millisecond {
+ cW(l.buf, l.useColor, nGreen, "%s", elapsed)
+ } else if elapsed < 5*time.Second {
+ cW(l.buf, l.useColor, nYellow, "%s", elapsed)
+ } else {
+ cW(l.buf, l.useColor, nRed, "%s", elapsed)
+ }
+
+ l.Logger.Print(l.buf.String())
+}
+
+func (l *defaultLogEntry) Panic(v interface{}, stack []byte) {
+ PrintPrettyStack(v)
+}
+
+func init() {
+ color := true
+ if runtime.GOOS == "windows" {
+ color = false
+ }
+ DefaultLogger = RequestLogger(&DefaultLogFormatter{Logger: log.New(os.Stdout, "", log.LstdFlags), NoColor: !color})
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/middleware.go b/vendor/github.com/go-chi/chi/v5/middleware/middleware.go
new file mode 100644
index 000000000..cc371e00a
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/middleware.go
@@ -0,0 +1,23 @@
+package middleware
+
+import "net/http"
+
+// New will create a new middleware handler from a http.Handler.
+func New(h http.Handler) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ h.ServeHTTP(w, r)
+ })
+ }
+}
+
+// contextKey is a value for use with context.WithValue. It's used as
+// a pointer so it fits in an interface{} without allocation. This technique
+// for defining context keys was copied from Go 1.7's new use of context in net/http.
+type contextKey struct {
+ name string
+}
+
+func (k *contextKey) String() string {
+ return "chi/middleware context value " + k.name
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/nocache.go b/vendor/github.com/go-chi/chi/v5/middleware/nocache.go
new file mode 100644
index 000000000..2412829e1
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/nocache.go
@@ -0,0 +1,58 @@
+package middleware
+
+// Ported from Goji's middleware, source:
+// https://github.com/zenazn/goji/tree/master/web/middleware
+
+import (
+ "net/http"
+ "time"
+)
+
+// Unix epoch time
+var epoch = time.Unix(0, 0).Format(time.RFC1123)
+
+// Taken from https://github.com/mytrile/nocache
+var noCacheHeaders = map[string]string{
+ "Expires": epoch,
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0",
+ "Pragma": "no-cache",
+ "X-Accel-Expires": "0",
+}
+
+var etagHeaders = []string{
+ "ETag",
+ "If-Modified-Since",
+ "If-Match",
+ "If-None-Match",
+ "If-Range",
+ "If-Unmodified-Since",
+}
+
+// NoCache is a simple piece of middleware that sets a number of HTTP headers to prevent
+// a router (or subrouter) from being cached by an upstream proxy and/or client.
+//
+// As per http://wiki.nginx.org/HttpProxyModule - NoCache sets:
+// Expires: Thu, 01 Jan 1970 00:00:00 UTC
+// Cache-Control: no-cache, private, max-age=0
+// X-Accel-Expires: 0
+// Pragma: no-cache (for HTTP/1.0 proxies/clients)
+func NoCache(h http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+
+ // Delete any ETag headers that may have been set
+ for _, v := range etagHeaders {
+ if r.Header.Get(v) != "" {
+ r.Header.Del(v)
+ }
+ }
+
+ // Set our NoCache headers
+ for k, v := range noCacheHeaders {
+ w.Header().Set(k, v)
+ }
+
+ h.ServeHTTP(w, r)
+ }
+
+ return http.HandlerFunc(fn)
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/profiler.go b/vendor/github.com/go-chi/chi/v5/middleware/profiler.go
new file mode 100644
index 000000000..18158e56d
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/profiler.go
@@ -0,0 +1,55 @@
+package middleware
+
+import (
+ "expvar"
+ "fmt"
+ "net/http"
+ "net/http/pprof"
+
+ "github.com/go-chi/chi/v5"
+)
+
+// Profiler is a convenient subrouter used for mounting net/http/pprof. ie.
+//
+// func MyService() http.Handler {
+// r := chi.NewRouter()
+// // ..middlewares
+// r.Mount("/debug", middleware.Profiler())
+// // ..routes
+// return r
+// }
+func Profiler() http.Handler {
+ r := chi.NewRouter()
+ r.Use(NoCache)
+
+ r.Get("/", func(w http.ResponseWriter, r *http.Request) {
+ http.Redirect(w, r, r.RequestURI+"/pprof/", http.StatusMovedPermanently)
+ })
+ r.HandleFunc("/pprof", func(w http.ResponseWriter, r *http.Request) {
+ http.Redirect(w, r, r.RequestURI+"/", http.StatusMovedPermanently)
+ })
+
+ r.HandleFunc("/pprof/*", pprof.Index)
+ r.HandleFunc("/pprof/cmdline", pprof.Cmdline)
+ r.HandleFunc("/pprof/profile", pprof.Profile)
+ r.HandleFunc("/pprof/symbol", pprof.Symbol)
+ r.HandleFunc("/pprof/trace", pprof.Trace)
+ r.HandleFunc("/vars", expVars)
+
+ return r
+}
+
+// Replicated from expvar.go as not public.
+func expVars(w http.ResponseWriter, r *http.Request) {
+ first := true
+ w.Header().Set("Content-Type", "application/json")
+ fmt.Fprintf(w, "{\n")
+ expvar.Do(func(kv expvar.KeyValue) {
+ if !first {
+ fmt.Fprintf(w, ",\n")
+ }
+ first = false
+ fmt.Fprintf(w, "%q: %s", kv.Key, kv.Value)
+ })
+ fmt.Fprintf(w, "\n}\n")
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/realip.go b/vendor/github.com/go-chi/chi/v5/middleware/realip.go
new file mode 100644
index 000000000..72db6ca9f
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/realip.go
@@ -0,0 +1,54 @@
+package middleware
+
+// Ported from Goji's middleware, source:
+// https://github.com/zenazn/goji/tree/master/web/middleware
+
+import (
+ "net/http"
+ "strings"
+)
+
+var xForwardedFor = http.CanonicalHeaderKey("X-Forwarded-For")
+var xRealIP = http.CanonicalHeaderKey("X-Real-IP")
+
+// RealIP is a middleware that sets a http.Request's RemoteAddr to the results
+// of parsing either the X-Forwarded-For header or the X-Real-IP header (in that
+// order).
+//
+// This middleware should be inserted fairly early in the middleware stack to
+// ensure that subsequent layers (e.g., request loggers) which examine the
+// RemoteAddr will see the intended value.
+//
+// You should only use this middleware if you can trust the headers passed to
+// you (in particular, the two headers this middleware uses), for example
+// because you have placed a reverse proxy like HAProxy or nginx in front of
+// chi. If your reverse proxies are configured to pass along arbitrary header
+// values from the client, or if you use this middleware without a reverse
+// proxy, malicious clients will be able to make you very sad (or, depending on
+// how you're using RemoteAddr, vulnerable to an attack of some sort).
+func RealIP(h http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ if rip := realIP(r); rip != "" {
+ r.RemoteAddr = rip
+ }
+ h.ServeHTTP(w, r)
+ }
+
+ return http.HandlerFunc(fn)
+}
+
+func realIP(r *http.Request) string {
+ var ip string
+
+ if xrip := r.Header.Get(xRealIP); xrip != "" {
+ ip = xrip
+ } else if xff := r.Header.Get(xForwardedFor); xff != "" {
+ i := strings.Index(xff, ", ")
+ if i == -1 {
+ i = len(xff)
+ }
+ ip = xff[:i]
+ }
+
+ return ip
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/recoverer.go b/vendor/github.com/go-chi/chi/v5/middleware/recoverer.go
new file mode 100644
index 000000000..785b18c52
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/recoverer.go
@@ -0,0 +1,192 @@
+package middleware
+
+// The original work was derived from Goji's middleware, source:
+// https://github.com/zenazn/goji/tree/master/web/middleware
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "net/http"
+ "os"
+ "runtime/debug"
+ "strings"
+)
+
+// Recoverer is a middleware that recovers from panics, logs the panic (and a
+// backtrace), and returns a HTTP 500 (Internal Server Error) status if
+// possible. Recoverer prints a request ID if one is provided.
+//
+// Alternatively, look at https://github.com/pressly/lg middleware pkgs.
+func Recoverer(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ defer func() {
+ if rvr := recover(); rvr != nil && rvr != http.ErrAbortHandler {
+
+ logEntry := GetLogEntry(r)
+ if logEntry != nil {
+ logEntry.Panic(rvr, debug.Stack())
+ } else {
+ PrintPrettyStack(rvr)
+ }
+
+ w.WriteHeader(http.StatusInternalServerError)
+ }
+ }()
+
+ next.ServeHTTP(w, r)
+ }
+
+ return http.HandlerFunc(fn)
+}
+
+func PrintPrettyStack(rvr interface{}) {
+ debugStack := debug.Stack()
+ s := prettyStack{}
+ out, err := s.parse(debugStack, rvr)
+ if err == nil {
+ os.Stderr.Write(out)
+ } else {
+ // print stdlib output as a fallback
+ os.Stderr.Write(debugStack)
+ }
+}
+
+type prettyStack struct {
+}
+
+func (s prettyStack) parse(debugStack []byte, rvr interface{}) ([]byte, error) {
+ var err error
+ useColor := true
+ buf := &bytes.Buffer{}
+
+ cW(buf, false, bRed, "\n")
+ cW(buf, useColor, bCyan, " panic: ")
+ cW(buf, useColor, bBlue, "%v", rvr)
+ cW(buf, false, bWhite, "\n \n")
+
+ // process debug stack info
+ stack := strings.Split(string(debugStack), "\n")
+ lines := []string{}
+
+ // locate panic line, as we may have nested panics
+ for i := len(stack) - 1; i > 0; i-- {
+ lines = append(lines, stack[i])
+ if strings.HasPrefix(stack[i], "panic(0x") {
+ lines = lines[0 : len(lines)-2] // remove boilerplate
+ break
+ }
+ }
+
+ // reverse
+ for i := len(lines)/2 - 1; i >= 0; i-- {
+ opp := len(lines) - 1 - i
+ lines[i], lines[opp] = lines[opp], lines[i]
+ }
+
+ // decorate
+ for i, line := range lines {
+ lines[i], err = s.decorateLine(line, useColor, i)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ for _, l := range lines {
+ fmt.Fprintf(buf, "%s", l)
+ }
+ return buf.Bytes(), nil
+}
+
+func (s prettyStack) decorateLine(line string, useColor bool, num int) (string, error) {
+ line = strings.TrimSpace(line)
+ if strings.HasPrefix(line, "\t") || strings.Contains(line, ".go:") {
+ return s.decorateSourceLine(line, useColor, num)
+ } else if strings.HasSuffix(line, ")") {
+ return s.decorateFuncCallLine(line, useColor, num)
+ } else {
+ if strings.HasPrefix(line, "\t") {
+ return strings.Replace(line, "\t", " ", 1), nil
+ } else {
+ return fmt.Sprintf(" %s\n", line), nil
+ }
+ }
+}
+
+func (s prettyStack) decorateFuncCallLine(line string, useColor bool, num int) (string, error) {
+ idx := strings.LastIndex(line, "(")
+ if idx < 0 {
+ return "", errors.New("not a func call line")
+ }
+
+ buf := &bytes.Buffer{}
+ pkg := line[0:idx]
+ // addr := line[idx:]
+ method := ""
+
+ idx = strings.LastIndex(pkg, string(os.PathSeparator))
+ if idx < 0 {
+ idx = strings.Index(pkg, ".")
+ method = pkg[idx:]
+ pkg = pkg[0:idx]
+ } else {
+ method = pkg[idx+1:]
+ pkg = pkg[0 : idx+1]
+ idx = strings.Index(method, ".")
+ pkg += method[0:idx]
+ method = method[idx:]
+ }
+ pkgColor := nYellow
+ methodColor := bGreen
+
+ if num == 0 {
+ cW(buf, useColor, bRed, " -> ")
+ pkgColor = bMagenta
+ methodColor = bRed
+ } else {
+ cW(buf, useColor, bWhite, " ")
+ }
+ cW(buf, useColor, pkgColor, "%s", pkg)
+ cW(buf, useColor, methodColor, "%s\n", method)
+ // cW(buf, useColor, nBlack, "%s", addr)
+ return buf.String(), nil
+}
+
+func (s prettyStack) decorateSourceLine(line string, useColor bool, num int) (string, error) {
+ idx := strings.LastIndex(line, ".go:")
+ if idx < 0 {
+ return "", errors.New("not a source line")
+ }
+
+ buf := &bytes.Buffer{}
+ path := line[0 : idx+3]
+ lineno := line[idx+3:]
+
+ idx = strings.LastIndex(path, string(os.PathSeparator))
+ dir := path[0 : idx+1]
+ file := path[idx+1:]
+
+ idx = strings.Index(lineno, " ")
+ if idx > 0 {
+ lineno = lineno[0:idx]
+ }
+ fileColor := bCyan
+ lineColor := bGreen
+
+ if num == 1 {
+ cW(buf, useColor, bRed, " -> ")
+ fileColor = bRed
+ lineColor = bMagenta
+ } else {
+ cW(buf, false, bWhite, " ")
+ }
+ cW(buf, useColor, bWhite, "%s", dir)
+ cW(buf, useColor, fileColor, "%s", file)
+ cW(buf, useColor, lineColor, "%s", lineno)
+ if num == 1 {
+ cW(buf, false, bWhite, "\n")
+ }
+ cW(buf, false, bWhite, "\n")
+
+ return buf.String(), nil
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/request_id.go b/vendor/github.com/go-chi/chi/v5/middleware/request_id.go
new file mode 100644
index 000000000..4903ecc21
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/request_id.go
@@ -0,0 +1,96 @@
+package middleware
+
+// Ported from Goji's middleware, source:
+// https://github.com/zenazn/goji/tree/master/web/middleware
+
+import (
+ "context"
+ "crypto/rand"
+ "encoding/base64"
+ "fmt"
+ "net/http"
+ "os"
+ "strings"
+ "sync/atomic"
+)
+
+// Key to use when setting the request ID.
+type ctxKeyRequestID int
+
+// RequestIDKey is the key that holds the unique request ID in a request context.
+const RequestIDKey ctxKeyRequestID = 0
+
+// RequestIDHeader is the name of the HTTP Header which contains the request id.
+// Exported so that it can be changed by developers
+var RequestIDHeader = "X-Request-Id"
+
+var prefix string
+var reqid uint64
+
+// A quick note on the statistics here: we're trying to calculate the chance that
+// two randomly generated base62 prefixes will collide. We use the formula from
+// http://en.wikipedia.org/wiki/Birthday_problem
+//
+// P[m, n] \approx 1 - e^{-m^2/2n}
+//
+// We ballpark an upper bound for $m$ by imagining (for whatever reason) a server
+// that restarts every second over 10 years, for $m = 86400 * 365 * 10 = 315360000$
+//
+// For a $k$ character base-62 identifier, we have $n(k) = 62^k$
+//
+// Plugging this in, we find $P[m, n(10)] \approx 5.75%$, which is good enough for
+// our purposes, and is surely more than anyone would ever need in practice -- a
+// process that is rebooted a handful of times a day for a hundred years has less
+// than a millionth of a percent chance of generating two colliding IDs.
+
+func init() {
+ hostname, err := os.Hostname()
+ if hostname == "" || err != nil {
+ hostname = "localhost"
+ }
+ var buf [12]byte
+ var b64 string
+ for len(b64) < 10 {
+ rand.Read(buf[:])
+ b64 = base64.StdEncoding.EncodeToString(buf[:])
+ b64 = strings.NewReplacer("+", "", "/", "").Replace(b64)
+ }
+
+ prefix = fmt.Sprintf("%s/%s", hostname, b64[0:10])
+}
+
+// RequestID is a middleware that injects a request ID into the context of each
+// request. A request ID is a string of the form "host.example.com/random-0001",
+// where "random" is a base62 random string that uniquely identifies this go
+// process, and where the last number is an atomically incremented request
+// counter.
+func RequestID(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+ requestID := r.Header.Get(RequestIDHeader)
+ if requestID == "" {
+ myid := atomic.AddUint64(&reqid, 1)
+ requestID = fmt.Sprintf("%s-%06d", prefix, myid)
+ }
+ ctx = context.WithValue(ctx, RequestIDKey, requestID)
+ next.ServeHTTP(w, r.WithContext(ctx))
+ }
+ return http.HandlerFunc(fn)
+}
+
+// GetReqID returns a request ID from the given context if one is present.
+// Returns the empty string if a request ID cannot be found.
+func GetReqID(ctx context.Context) string {
+ if ctx == nil {
+ return ""
+ }
+ if reqID, ok := ctx.Value(RequestIDKey).(string); ok {
+ return reqID
+ }
+ return ""
+}
+
+// NextRequestID generates the next request ID in the sequence.
+func NextRequestID() uint64 {
+ return atomic.AddUint64(&reqid, 1)
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/route_headers.go b/vendor/github.com/go-chi/chi/v5/middleware/route_headers.go
new file mode 100644
index 000000000..0e67b5f76
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/route_headers.go
@@ -0,0 +1,160 @@
+package middleware
+
+import (
+ "net/http"
+ "strings"
+)
+
+// RouteHeaders is a neat little header-based router that allows you to direct
+// the flow of a request through a middleware stack based on a request header.
+//
+// For example, lets say you'd like to setup multiple routers depending on the
+// request Host header, you could then do something as so:
+//
+// r := chi.NewRouter()
+// rSubdomain := chi.NewRouter()
+//
+// r.Use(middleware.RouteHeaders().
+// Route("Host", "example.com", middleware.New(r)).
+// Route("Host", "*.example.com", middleware.New(rSubdomain)).
+// Handler)
+//
+// r.Get("/", h)
+// rSubdomain.Get("/", h2)
+//
+//
+// Another example, imagine you want to setup multiple CORS handlers, where for
+// your origin servers you allow authorized requests, but for third-party public
+// requests, authorization is disabled.
+//
+// r := chi.NewRouter()
+//
+// r.Use(middleware.RouteHeaders().
+// Route("Origin", "https://app.skyweaver.net", cors.Handler(cors.Options{
+// AllowedOrigins: []string{"https://api.skyweaver.net"},
+// AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
+// AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"},
+// AllowCredentials: true, // <----------<<< allow credentials
+// })).
+// Route("Origin", "*", cors.Handler(cors.Options{
+// AllowedOrigins: []string{"*"},
+// AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
+// AllowedHeaders: []string{"Accept", "Content-Type"},
+// AllowCredentials: false, // <----------<<< do not allow credentials
+// })).
+// Handler)
+//
+func RouteHeaders() HeaderRouter {
+ return HeaderRouter{}
+}
+
+type HeaderRouter map[string][]HeaderRoute
+
+func (hr HeaderRouter) Route(header, match string, middlewareHandler func(next http.Handler) http.Handler) HeaderRouter {
+ header = strings.ToLower(header)
+ k := hr[header]
+ if k == nil {
+ hr[header] = []HeaderRoute{}
+ }
+ hr[header] = append(hr[header], HeaderRoute{MatchOne: NewPattern(match), Middleware: middlewareHandler})
+ return hr
+}
+
+func (hr HeaderRouter) RouteAny(header string, match []string, middlewareHandler func(next http.Handler) http.Handler) HeaderRouter {
+ header = strings.ToLower(header)
+ k := hr[header]
+ if k == nil {
+ hr[header] = []HeaderRoute{}
+ }
+ patterns := []Pattern{}
+ for _, m := range match {
+ patterns = append(patterns, NewPattern(m))
+ }
+ hr[header] = append(hr[header], HeaderRoute{MatchAny: patterns, Middleware: middlewareHandler})
+ return hr
+}
+
+func (hr HeaderRouter) RouteDefault(handler func(next http.Handler) http.Handler) HeaderRouter {
+ hr["*"] = []HeaderRoute{{Middleware: handler}}
+ return hr
+}
+
+func (hr HeaderRouter) Handler(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if len(hr) == 0 {
+ // skip if no routes set
+ next.ServeHTTP(w, r)
+ }
+
+ // find first matching header route, and continue
+ for header, matchers := range hr {
+ headerValue := r.Header.Get(header)
+ if headerValue == "" {
+ continue
+ }
+ headerValue = strings.ToLower(headerValue)
+ for _, matcher := range matchers {
+ if matcher.IsMatch(headerValue) {
+ matcher.Middleware(next).ServeHTTP(w, r)
+ return
+ }
+ }
+ }
+
+ // if no match, check for "*" default route
+ matcher, ok := hr["*"]
+ if !ok || matcher[0].Middleware == nil {
+ next.ServeHTTP(w, r)
+ return
+ }
+ matcher[0].Middleware(next).ServeHTTP(w, r)
+ })
+}
+
+type HeaderRoute struct {
+ MatchAny []Pattern
+ MatchOne Pattern
+ Middleware func(next http.Handler) http.Handler
+}
+
+func (r HeaderRoute) IsMatch(value string) bool {
+ if len(r.MatchAny) > 0 {
+ for _, m := range r.MatchAny {
+ if m.Match(value) {
+ return true
+ }
+ }
+ } else if r.MatchOne.Match(value) {
+ return true
+ }
+ return false
+}
+
+type Pattern struct {
+ prefix string
+ suffix string
+ wildcard bool
+}
+
+func NewPattern(value string) Pattern {
+ p := Pattern{}
+ if i := strings.IndexByte(value, '*'); i >= 0 {
+ p.wildcard = true
+ p.prefix = value[0:i]
+ p.suffix = value[i+1:]
+ } else {
+ p.prefix = value
+ }
+ return p
+}
+
+func (p Pattern) Match(v string) bool {
+ if !p.wildcard {
+ if p.prefix == v {
+ return true
+ } else {
+ return false
+ }
+ }
+ return len(v) >= len(p.prefix+p.suffix) && strings.HasPrefix(v, p.prefix) && strings.HasSuffix(v, p.suffix)
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/strip.go b/vendor/github.com/go-chi/chi/v5/middleware/strip.go
new file mode 100644
index 000000000..ce8ebfcce
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/strip.go
@@ -0,0 +1,62 @@
+package middleware
+
+import (
+ "fmt"
+ "net/http"
+
+ "github.com/go-chi/chi/v5"
+)
+
+// StripSlashes is a middleware that will match request paths with a trailing
+// slash, strip it from the path and continue routing through the mux, if a route
+// matches, then it will serve the handler.
+func StripSlashes(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ var path string
+ rctx := chi.RouteContext(r.Context())
+ if rctx != nil && rctx.RoutePath != "" {
+ path = rctx.RoutePath
+ } else {
+ path = r.URL.Path
+ }
+ if len(path) > 1 && path[len(path)-1] == '/' {
+ newPath := path[:len(path)-1]
+ if rctx == nil {
+ r.URL.Path = newPath
+ } else {
+ rctx.RoutePath = newPath
+ }
+ }
+ next.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+}
+
+// RedirectSlashes is a middleware that will match request paths with a trailing
+// slash and redirect to the same path, less the trailing slash.
+//
+// NOTE: RedirectSlashes middleware is *incompatible* with http.FileServer,
+// see https://github.com/go-chi/chi/issues/343
+func RedirectSlashes(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ var path string
+ rctx := chi.RouteContext(r.Context())
+ if rctx != nil && rctx.RoutePath != "" {
+ path = rctx.RoutePath
+ } else {
+ path = r.URL.Path
+ }
+ if len(path) > 1 && path[len(path)-1] == '/' {
+ if r.URL.RawQuery != "" {
+ path = fmt.Sprintf("%s?%s", path[:len(path)-1], r.URL.RawQuery)
+ } else {
+ path = path[:len(path)-1]
+ }
+ redirectURL := fmt.Sprintf("//%s%s", r.Host, path)
+ http.Redirect(w, r, redirectURL, 301)
+ return
+ }
+ next.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/terminal.go b/vendor/github.com/go-chi/chi/v5/middleware/terminal.go
new file mode 100644
index 000000000..5ead7b924
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/terminal.go
@@ -0,0 +1,63 @@
+package middleware
+
+// Ported from Goji's middleware, source:
+// https://github.com/zenazn/goji/tree/master/web/middleware
+
+import (
+ "fmt"
+ "io"
+ "os"
+)
+
+var (
+ // Normal colors
+ nBlack = []byte{'\033', '[', '3', '0', 'm'}
+ nRed = []byte{'\033', '[', '3', '1', 'm'}
+ nGreen = []byte{'\033', '[', '3', '2', 'm'}
+ nYellow = []byte{'\033', '[', '3', '3', 'm'}
+ nBlue = []byte{'\033', '[', '3', '4', 'm'}
+ nMagenta = []byte{'\033', '[', '3', '5', 'm'}
+ nCyan = []byte{'\033', '[', '3', '6', 'm'}
+ nWhite = []byte{'\033', '[', '3', '7', 'm'}
+ // Bright colors
+ bBlack = []byte{'\033', '[', '3', '0', ';', '1', 'm'}
+ bRed = []byte{'\033', '[', '3', '1', ';', '1', 'm'}
+ bGreen = []byte{'\033', '[', '3', '2', ';', '1', 'm'}
+ bYellow = []byte{'\033', '[', '3', '3', ';', '1', 'm'}
+ bBlue = []byte{'\033', '[', '3', '4', ';', '1', 'm'}
+ bMagenta = []byte{'\033', '[', '3', '5', ';', '1', 'm'}
+ bCyan = []byte{'\033', '[', '3', '6', ';', '1', 'm'}
+ bWhite = []byte{'\033', '[', '3', '7', ';', '1', 'm'}
+
+ reset = []byte{'\033', '[', '0', 'm'}
+)
+
+var IsTTY bool
+
+func init() {
+ // This is sort of cheating: if stdout is a character device, we assume
+ // that means it's a TTY. Unfortunately, there are many non-TTY
+ // character devices, but fortunately stdout is rarely set to any of
+ // them.
+ //
+ // We could solve this properly by pulling in a dependency on
+ // code.google.com/p/go.crypto/ssh/terminal, for instance, but as a
+ // heuristic for whether to print in color or in black-and-white, I'd
+ // really rather not.
+ fi, err := os.Stdout.Stat()
+ if err == nil {
+ m := os.ModeDevice | os.ModeCharDevice
+ IsTTY = fi.Mode()&m == m
+ }
+}
+
+// colorWrite
+func cW(w io.Writer, useColor bool, color []byte, s string, args ...interface{}) {
+ if IsTTY && useColor {
+ w.Write(color)
+ }
+ fmt.Fprintf(w, s, args...)
+ if IsTTY && useColor {
+ w.Write(reset)
+ }
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/throttle.go b/vendor/github.com/go-chi/chi/v5/middleware/throttle.go
new file mode 100644
index 000000000..7bb2e804f
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/throttle.go
@@ -0,0 +1,132 @@
+package middleware
+
+import (
+ "net/http"
+ "strconv"
+ "time"
+)
+
+const (
+ errCapacityExceeded = "Server capacity exceeded."
+ errTimedOut = "Timed out while waiting for a pending request to complete."
+ errContextCanceled = "Context was canceled."
+)
+
+var (
+ defaultBacklogTimeout = time.Second * 60
+)
+
+// ThrottleOpts represents a set of throttling options.
+type ThrottleOpts struct {
+ Limit int
+ BacklogLimit int
+ BacklogTimeout time.Duration
+ RetryAfterFn func(ctxDone bool) time.Duration
+}
+
+// Throttle is a middleware that limits number of currently processed requests
+// at a time across all users. Note: Throttle is not a rate-limiter per user,
+// instead it just puts a ceiling on the number of currentl in-flight requests
+// being processed from the point from where the Throttle middleware is mounted.
+func Throttle(limit int) func(http.Handler) http.Handler {
+ return ThrottleWithOpts(ThrottleOpts{Limit: limit, BacklogTimeout: defaultBacklogTimeout})
+}
+
+// ThrottleBacklog is a middleware that limits number of currently processed
+// requests at a time and provides a backlog for holding a finite number of
+// pending requests.
+func ThrottleBacklog(limit, backlogLimit int, backlogTimeout time.Duration) func(http.Handler) http.Handler {
+ return ThrottleWithOpts(ThrottleOpts{Limit: limit, BacklogLimit: backlogLimit, BacklogTimeout: backlogTimeout})
+}
+
+// ThrottleWithOpts is a middleware that limits number of currently processed requests using passed ThrottleOpts.
+func ThrottleWithOpts(opts ThrottleOpts) func(http.Handler) http.Handler {
+ if opts.Limit < 1 {
+ panic("chi/middleware: Throttle expects limit > 0")
+ }
+
+ if opts.BacklogLimit < 0 {
+ panic("chi/middleware: Throttle expects backlogLimit to be positive")
+ }
+
+ t := throttler{
+ tokens: make(chan token, opts.Limit),
+ backlogTokens: make(chan token, opts.Limit+opts.BacklogLimit),
+ backlogTimeout: opts.BacklogTimeout,
+ retryAfterFn: opts.RetryAfterFn,
+ }
+
+ // Filling tokens.
+ for i := 0; i < opts.Limit+opts.BacklogLimit; i++ {
+ if i < opts.Limit {
+ t.tokens <- token{}
+ }
+ t.backlogTokens <- token{}
+ }
+
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+
+ select {
+
+ case <-ctx.Done():
+ t.setRetryAfterHeaderIfNeeded(w, true)
+ http.Error(w, errContextCanceled, http.StatusTooManyRequests)
+ return
+
+ case btok := <-t.backlogTokens:
+ timer := time.NewTimer(t.backlogTimeout)
+
+ defer func() {
+ t.backlogTokens <- btok
+ }()
+
+ select {
+ case <-timer.C:
+ t.setRetryAfterHeaderIfNeeded(w, false)
+ http.Error(w, errTimedOut, http.StatusTooManyRequests)
+ return
+ case <-ctx.Done():
+ timer.Stop()
+ t.setRetryAfterHeaderIfNeeded(w, true)
+ http.Error(w, errContextCanceled, http.StatusTooManyRequests)
+ return
+ case tok := <-t.tokens:
+ defer func() {
+ timer.Stop()
+ t.tokens <- tok
+ }()
+ next.ServeHTTP(w, r)
+ }
+ return
+
+ default:
+ t.setRetryAfterHeaderIfNeeded(w, false)
+ http.Error(w, errCapacityExceeded, http.StatusTooManyRequests)
+ return
+ }
+ }
+
+ return http.HandlerFunc(fn)
+ }
+}
+
+// token represents a request that is being processed.
+type token struct{}
+
+// throttler limits number of currently processed requests at a time.
+type throttler struct {
+ tokens chan token
+ backlogTokens chan token
+ backlogTimeout time.Duration
+ retryAfterFn func(ctxDone bool) time.Duration
+}
+
+// setRetryAfterHeaderIfNeeded sets Retry-After HTTP header if corresponding retryAfterFn option of throttler is initialized.
+func (t throttler) setRetryAfterHeaderIfNeeded(w http.ResponseWriter, ctxDone bool) {
+ if t.retryAfterFn == nil {
+ return
+ }
+ w.Header().Set("Retry-After", strconv.Itoa(int(t.retryAfterFn(ctxDone).Seconds())))
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/timeout.go b/vendor/github.com/go-chi/chi/v5/middleware/timeout.go
new file mode 100644
index 000000000..8e373536c
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/timeout.go
@@ -0,0 +1,49 @@
+package middleware
+
+import (
+ "context"
+ "net/http"
+ "time"
+)
+
+// Timeout is a middleware that cancels ctx after a given timeout and return
+// a 504 Gateway Timeout error to the client.
+//
+// It's required that you select the ctx.Done() channel to check for the signal
+// if the context has reached its deadline and return, otherwise the timeout
+// signal will be just ignored.
+//
+// ie. a route/handler may look like:
+//
+// r.Get("/long", func(w http.ResponseWriter, r *http.Request) {
+// ctx := r.Context()
+// processTime := time.Duration(rand.Intn(4)+1) * time.Second
+//
+// select {
+// case <-ctx.Done():
+// return
+//
+// case <-time.After(processTime):
+// // The above channel simulates some hard work.
+// }
+//
+// w.Write([]byte("done"))
+// })
+//
+func Timeout(timeout time.Duration) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ ctx, cancel := context.WithTimeout(r.Context(), timeout)
+ defer func() {
+ cancel()
+ if ctx.Err() == context.DeadlineExceeded {
+ w.WriteHeader(http.StatusGatewayTimeout)
+ }
+ }()
+
+ r = r.WithContext(ctx)
+ next.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+ }
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/url_format.go b/vendor/github.com/go-chi/chi/v5/middleware/url_format.go
new file mode 100644
index 000000000..10d7134dc
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/url_format.go
@@ -0,0 +1,72 @@
+package middleware
+
+import (
+ "context"
+ "net/http"
+ "strings"
+
+ "github.com/go-chi/chi/v5"
+)
+
+var (
+ // URLFormatCtxKey is the context.Context key to store the URL format data
+ // for a request.
+ URLFormatCtxKey = &contextKey{"URLFormat"}
+)
+
+// URLFormat is a middleware that parses the url extension from a request path and stores it
+// on the context as a string under the key `middleware.URLFormatCtxKey`. The middleware will
+// trim the suffix from the routing path and continue routing.
+//
+// Routers should not include a url parameter for the suffix when using this middleware.
+//
+// Sample usage.. for url paths: `/articles/1`, `/articles/1.json` and `/articles/1.xml`
+//
+// func routes() http.Handler {
+// r := chi.NewRouter()
+// r.Use(middleware.URLFormat)
+//
+// r.Get("/articles/{id}", ListArticles)
+//
+// return r
+// }
+//
+// func ListArticles(w http.ResponseWriter, r *http.Request) {
+// urlFormat, _ := r.Context().Value(middleware.URLFormatCtxKey).(string)
+//
+// switch urlFormat {
+// case "json":
+// render.JSON(w, r, articles)
+// case "xml:"
+// render.XML(w, r, articles)
+// default:
+// render.JSON(w, r, articles)
+// }
+// }
+//
+func URLFormat(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+
+ var format string
+ path := r.URL.Path
+
+ if strings.Index(path, ".") > 0 {
+ base := strings.LastIndex(path, "/")
+ idx := strings.LastIndex(path[base:], ".")
+
+ if idx > 0 {
+ idx += base
+ format = path[idx+1:]
+
+ rctx := chi.RouteContext(r.Context())
+ rctx.RoutePath = path[:idx]
+ }
+ }
+
+ r = r.WithContext(context.WithValue(ctx, URLFormatCtxKey, format))
+
+ next.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/value.go b/vendor/github.com/go-chi/chi/v5/middleware/value.go
new file mode 100644
index 000000000..a9dfd4345
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/value.go
@@ -0,0 +1,17 @@
+package middleware
+
+import (
+ "context"
+ "net/http"
+)
+
+// WithValue is a middleware that sets a given key/value in a context chain.
+func WithValue(key, val interface{}) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ r = r.WithContext(context.WithValue(r.Context(), key, val))
+ next.ServeHTTP(w, r)
+ }
+ return http.HandlerFunc(fn)
+ }
+}
diff --git a/vendor/github.com/go-chi/chi/v5/middleware/wrap_writer.go b/vendor/github.com/go-chi/chi/v5/middleware/wrap_writer.go
new file mode 100644
index 000000000..6438c7a65
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/middleware/wrap_writer.go
@@ -0,0 +1,165 @@
+package middleware
+
+// The original work was derived from Goji's middleware, source:
+// https://github.com/zenazn/goji/tree/master/web/middleware
+
+import (
+ "bufio"
+ "io"
+ "net"
+ "net/http"
+)
+
+// NewWrapResponseWriter wraps an http.ResponseWriter, returning a proxy that allows you to
+// hook into various parts of the response process.
+func NewWrapResponseWriter(w http.ResponseWriter, protoMajor int) WrapResponseWriter {
+ _, fl := w.(http.Flusher)
+
+ bw := basicWriter{ResponseWriter: w}
+
+ if protoMajor == 2 {
+ _, ps := w.(http.Pusher)
+ if fl || ps {
+ return &http2FancyWriter{bw}
+ }
+ } else {
+ _, hj := w.(http.Hijacker)
+ _, rf := w.(io.ReaderFrom)
+ if fl || hj || rf {
+ return &httpFancyWriter{bw}
+ }
+ }
+
+ return &bw
+}
+
+// WrapResponseWriter is a proxy around an http.ResponseWriter that allows you to hook
+// into various parts of the response process.
+type WrapResponseWriter interface {
+ http.ResponseWriter
+ // Status returns the HTTP status of the request, or 0 if one has not
+ // yet been sent.
+ Status() int
+ // BytesWritten returns the total number of bytes sent to the client.
+ BytesWritten() int
+ // Tee causes the response body to be written to the given io.Writer in
+ // addition to proxying the writes through. Only one io.Writer can be
+ // tee'd to at once: setting a second one will overwrite the first.
+ // Writes will be sent to the proxy before being written to this
+ // io.Writer. It is illegal for the tee'd writer to be modified
+ // concurrently with writes.
+ Tee(io.Writer)
+ // Unwrap returns the original proxied target.
+ Unwrap() http.ResponseWriter
+}
+
+// basicWriter wraps a http.ResponseWriter that implements the minimal
+// http.ResponseWriter interface.
+type basicWriter struct {
+ http.ResponseWriter
+ wroteHeader bool
+ code int
+ bytes int
+ tee io.Writer
+}
+
+func (b *basicWriter) WriteHeader(code int) {
+ if !b.wroteHeader {
+ b.code = code
+ b.wroteHeader = true
+ b.ResponseWriter.WriteHeader(code)
+ }
+}
+
+func (b *basicWriter) Write(buf []byte) (int, error) {
+ b.maybeWriteHeader()
+ n, err := b.ResponseWriter.Write(buf)
+ if b.tee != nil {
+ _, err2 := b.tee.Write(buf[:n])
+ // Prefer errors generated by the proxied writer.
+ if err == nil {
+ err = err2
+ }
+ }
+ b.bytes += n
+ return n, err
+}
+
+func (b *basicWriter) maybeWriteHeader() {
+ if !b.wroteHeader {
+ b.WriteHeader(http.StatusOK)
+ }
+}
+
+func (b *basicWriter) Status() int {
+ return b.code
+}
+
+func (b *basicWriter) BytesWritten() int {
+ return b.bytes
+}
+
+func (b *basicWriter) Tee(w io.Writer) {
+ b.tee = w
+}
+
+func (b *basicWriter) Unwrap() http.ResponseWriter {
+ return b.ResponseWriter
+}
+
+// httpFancyWriter is a HTTP writer that additionally satisfies
+// http.Flusher, http.Hijacker, and io.ReaderFrom. It exists for the common case
+// of wrapping the http.ResponseWriter that package http gives you, in order to
+// make the proxied object support the full method set of the proxied object.
+type httpFancyWriter struct {
+ basicWriter
+}
+
+func (f *httpFancyWriter) Flush() {
+ f.wroteHeader = true
+ fl := f.basicWriter.ResponseWriter.(http.Flusher)
+ fl.Flush()
+}
+
+func (f *httpFancyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
+ hj := f.basicWriter.ResponseWriter.(http.Hijacker)
+ return hj.Hijack()
+}
+
+func (f *httpFancyWriter) ReadFrom(r io.Reader) (int64, error) {
+ if f.basicWriter.tee != nil {
+ n, err := io.Copy(&f.basicWriter, r)
+ f.basicWriter.bytes += int(n)
+ return n, err
+ }
+ rf := f.basicWriter.ResponseWriter.(io.ReaderFrom)
+ f.basicWriter.maybeWriteHeader()
+ n, err := rf.ReadFrom(r)
+ f.basicWriter.bytes += int(n)
+ return n, err
+}
+
+var _ http.Flusher = &httpFancyWriter{}
+var _ http.Hijacker = &httpFancyWriter{}
+var _ io.ReaderFrom = &httpFancyWriter{}
+
+// http2FancyWriter is a HTTP2 writer that additionally satisfies
+// http.Flusher, and io.ReaderFrom. It exists for the common case
+// of wrapping the http.ResponseWriter that package http gives you, in order to
+// make the proxied object support the full method set of the proxied object.
+type http2FancyWriter struct {
+ basicWriter
+}
+
+func (f *http2FancyWriter) Flush() {
+ f.wroteHeader = true
+ fl := f.basicWriter.ResponseWriter.(http.Flusher)
+ fl.Flush()
+}
+
+func (f *http2FancyWriter) Push(target string, opts *http.PushOptions) error {
+ return f.basicWriter.ResponseWriter.(http.Pusher).Push(target, opts)
+}
+
+var _ http.Flusher = &http2FancyWriter{}
+var _ http.Pusher = &http2FancyWriter{}
diff --git a/vendor/github.com/go-chi/chi/v5/mux.go b/vendor/github.com/go-chi/chi/v5/mux.go
new file mode 100644
index 000000000..146643b04
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/mux.go
@@ -0,0 +1,479 @@
+package chi
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+ "strings"
+ "sync"
+)
+
+var _ Router = &Mux{}
+
+// Mux is a simple HTTP route multiplexer that parses a request path,
+// records any URL params, and executes an end handler. It implements
+// the http.Handler interface and is friendly with the standard library.
+//
+// Mux is designed to be fast, minimal and offer a powerful API for building
+// modular and composable HTTP services with a large set of handlers. It's
+// particularly useful for writing large REST API services that break a handler
+// into many smaller parts composed of middlewares and end handlers.
+type Mux struct {
+ // The radix trie router
+ tree *node
+
+ // The middleware stack
+ middlewares []func(http.Handler) http.Handler
+
+ // Controls the behaviour of middleware chain generation when a mux
+ // is registered as an inline group inside another mux.
+ inline bool
+ parent *Mux
+
+ // The computed mux handler made of the chained middleware stack and
+ // the tree router
+ handler http.Handler
+
+ // Routing context pool
+ pool *sync.Pool
+
+ // Custom route not found handler
+ notFoundHandler http.HandlerFunc
+
+ // Custom method not allowed handler
+ methodNotAllowedHandler http.HandlerFunc
+}
+
+// NewMux returns a newly initialized Mux object that implements the Router
+// interface.
+func NewMux() *Mux {
+ mux := &Mux{tree: &node{}, pool: &sync.Pool{}}
+ mux.pool.New = func() interface{} {
+ return NewRouteContext()
+ }
+ return mux
+}
+
+// ServeHTTP is the single method of the http.Handler interface that makes
+// Mux interoperable with the standard library. It uses a sync.Pool to get and
+// reuse routing contexts for each request.
+func (mx *Mux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ // Ensure the mux has some routes defined on the mux
+ if mx.handler == nil {
+ mx.NotFoundHandler().ServeHTTP(w, r)
+ return
+ }
+
+ // Check if a routing context already exists from a parent router.
+ rctx, _ := r.Context().Value(RouteCtxKey).(*Context)
+ if rctx != nil {
+ mx.handler.ServeHTTP(w, r)
+ return
+ }
+
+ // Fetch a RouteContext object from the sync pool, and call the computed
+ // mx.handler that is comprised of mx.middlewares + mx.routeHTTP.
+ // Once the request is finished, reset the routing context and put it back
+ // into the pool for reuse from another request.
+ rctx = mx.pool.Get().(*Context)
+ rctx.Reset()
+ rctx.Routes = mx
+ rctx.parentCtx = r.Context()
+
+ // NOTE: r.WithContext() causes 2 allocations and context.WithValue() causes 1 allocation
+ r = r.WithContext(context.WithValue(r.Context(), RouteCtxKey, rctx))
+
+ // Serve the request and once its done, put the request context back in the sync pool
+ mx.handler.ServeHTTP(w, r)
+ mx.pool.Put(rctx)
+}
+
+// Use appends a middleware handler to the Mux middleware stack.
+//
+// The middleware stack for any Mux will execute before searching for a matching
+// route to a specific handler, which provides opportunity to respond early,
+// change the course of the request execution, or set request-scoped values for
+// the next http.Handler.
+func (mx *Mux) Use(middlewares ...func(http.Handler) http.Handler) {
+ if mx.handler != nil {
+ panic("chi: all middlewares must be defined before routes on a mux")
+ }
+ mx.middlewares = append(mx.middlewares, middlewares...)
+}
+
+// Handle adds the route `pattern` that matches any http method to
+// execute the `handler` http.Handler.
+func (mx *Mux) Handle(pattern string, handler http.Handler) {
+ mx.handle(mALL, pattern, handler)
+}
+
+// HandleFunc adds the route `pattern` that matches any http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) HandleFunc(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mALL, pattern, handlerFn)
+}
+
+// Method adds the route `pattern` that matches `method` http method to
+// execute the `handler` http.Handler.
+func (mx *Mux) Method(method, pattern string, handler http.Handler) {
+ m, ok := methodMap[strings.ToUpper(method)]
+ if !ok {
+ panic(fmt.Sprintf("chi: '%s' http method is not supported.", method))
+ }
+ mx.handle(m, pattern, handler)
+}
+
+// MethodFunc adds the route `pattern` that matches `method` http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) MethodFunc(method, pattern string, handlerFn http.HandlerFunc) {
+ mx.Method(method, pattern, handlerFn)
+}
+
+// Connect adds the route `pattern` that matches a CONNECT http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Connect(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mCONNECT, pattern, handlerFn)
+}
+
+// Delete adds the route `pattern` that matches a DELETE http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Delete(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mDELETE, pattern, handlerFn)
+}
+
+// Get adds the route `pattern` that matches a GET http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Get(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mGET, pattern, handlerFn)
+}
+
+// Head adds the route `pattern` that matches a HEAD http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Head(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mHEAD, pattern, handlerFn)
+}
+
+// Options adds the route `pattern` that matches a OPTIONS http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Options(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mOPTIONS, pattern, handlerFn)
+}
+
+// Patch adds the route `pattern` that matches a PATCH http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Patch(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mPATCH, pattern, handlerFn)
+}
+
+// Post adds the route `pattern` that matches a POST http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Post(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mPOST, pattern, handlerFn)
+}
+
+// Put adds the route `pattern` that matches a PUT http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Put(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mPUT, pattern, handlerFn)
+}
+
+// Trace adds the route `pattern` that matches a TRACE http method to
+// execute the `handlerFn` http.HandlerFunc.
+func (mx *Mux) Trace(pattern string, handlerFn http.HandlerFunc) {
+ mx.handle(mTRACE, pattern, handlerFn)
+}
+
+// NotFound sets a custom http.HandlerFunc for routing paths that could
+// not be found. The default 404 handler is `http.NotFound`.
+func (mx *Mux) NotFound(handlerFn http.HandlerFunc) {
+ // Build NotFound handler chain
+ m := mx
+ h := Chain(mx.middlewares...).HandlerFunc(handlerFn).ServeHTTP
+ if mx.inline && mx.parent != nil {
+ m = mx.parent
+ }
+
+ // Update the notFoundHandler from this point forward
+ m.notFoundHandler = h
+ m.updateSubRoutes(func(subMux *Mux) {
+ if subMux.notFoundHandler == nil {
+ subMux.NotFound(h)
+ }
+ })
+}
+
+// MethodNotAllowed sets a custom http.HandlerFunc for routing paths where the
+// method is unresolved. The default handler returns a 405 with an empty body.
+func (mx *Mux) MethodNotAllowed(handlerFn http.HandlerFunc) {
+ // Build MethodNotAllowed handler chain
+ m := mx
+ h := Chain(mx.middlewares...).HandlerFunc(handlerFn).ServeHTTP
+ if mx.inline && mx.parent != nil {
+ m = mx.parent
+ }
+
+ // Update the methodNotAllowedHandler from this point forward
+ m.methodNotAllowedHandler = h
+ m.updateSubRoutes(func(subMux *Mux) {
+ if subMux.methodNotAllowedHandler == nil {
+ subMux.MethodNotAllowed(h)
+ }
+ })
+}
+
+// With adds inline middlewares for an endpoint handler.
+func (mx *Mux) With(middlewares ...func(http.Handler) http.Handler) Router {
+ // Similarly as in handle(), we must build the mux handler once additional
+ // middleware registration isn't allowed for this stack, like now.
+ if !mx.inline && mx.handler == nil {
+ mx.updateRouteHandler()
+ }
+
+ // Copy middlewares from parent inline muxs
+ var mws Middlewares
+ if mx.inline {
+ mws = make(Middlewares, len(mx.middlewares))
+ copy(mws, mx.middlewares)
+ }
+ mws = append(mws, middlewares...)
+
+ im := &Mux{
+ pool: mx.pool, inline: true, parent: mx, tree: mx.tree, middlewares: mws,
+ notFoundHandler: mx.notFoundHandler, methodNotAllowedHandler: mx.methodNotAllowedHandler,
+ }
+
+ return im
+}
+
+// Group creates a new inline-Mux with a fresh middleware stack. It's useful
+// for a group of handlers along the same routing path that use an additional
+// set of middlewares. See _examples/.
+func (mx *Mux) Group(fn func(r Router)) Router {
+ im := mx.With().(*Mux)
+ if fn != nil {
+ fn(im)
+ }
+ return im
+}
+
+// Route creates a new Mux with a fresh middleware stack and mounts it
+// along the `pattern` as a subrouter. Effectively, this is a short-hand
+// call to Mount. See _examples/.
+func (mx *Mux) Route(pattern string, fn func(r Router)) Router {
+ if fn == nil {
+ panic(fmt.Sprintf("chi: attempting to Route() a nil subrouter on '%s'", pattern))
+ }
+ subRouter := NewRouter()
+ fn(subRouter)
+ mx.Mount(pattern, subRouter)
+ return subRouter
+}
+
+// Mount attaches another http.Handler or chi Router as a subrouter along a routing
+// path. It's very useful to split up a large API as many independent routers and
+// compose them as a single service using Mount. See _examples/.
+//
+// Note that Mount() simply sets a wildcard along the `pattern` that will continue
+// routing at the `handler`, which in most cases is another chi.Router. As a result,
+// if you define two Mount() routes on the exact same pattern the mount will panic.
+func (mx *Mux) Mount(pattern string, handler http.Handler) {
+ if handler == nil {
+ panic(fmt.Sprintf("chi: attempting to Mount() a nil handler on '%s'", pattern))
+ }
+
+ // Provide runtime safety for ensuring a pattern isn't mounted on an existing
+ // routing pattern.
+ if mx.tree.findPattern(pattern+"*") || mx.tree.findPattern(pattern+"/*") {
+ panic(fmt.Sprintf("chi: attempting to Mount() a handler on an existing path, '%s'", pattern))
+ }
+
+ // Assign sub-Router's with the parent not found & method not allowed handler if not specified.
+ subr, ok := handler.(*Mux)
+ if ok && subr.notFoundHandler == nil && mx.notFoundHandler != nil {
+ subr.NotFound(mx.notFoundHandler)
+ }
+ if ok && subr.methodNotAllowedHandler == nil && mx.methodNotAllowedHandler != nil {
+ subr.MethodNotAllowed(mx.methodNotAllowedHandler)
+ }
+
+ mountHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ rctx := RouteContext(r.Context())
+
+ // shift the url path past the previous subrouter
+ rctx.RoutePath = mx.nextRoutePath(rctx)
+
+ // reset the wildcard URLParam which connects the subrouter
+ n := len(rctx.URLParams.Keys) - 1
+ if n >= 0 && rctx.URLParams.Keys[n] == "*" && len(rctx.URLParams.Values) > n {
+ rctx.URLParams.Values[n] = ""
+ }
+
+ handler.ServeHTTP(w, r)
+ })
+
+ if pattern == "" || pattern[len(pattern)-1] != '/' {
+ mx.handle(mALL|mSTUB, pattern, mountHandler)
+ mx.handle(mALL|mSTUB, pattern+"/", mountHandler)
+ pattern += "/"
+ }
+
+ method := mALL
+ subroutes, _ := handler.(Routes)
+ if subroutes != nil {
+ method |= mSTUB
+ }
+ n := mx.handle(method, pattern+"*", mountHandler)
+
+ if subroutes != nil {
+ n.subroutes = subroutes
+ }
+}
+
+// Routes returns a slice of routing information from the tree,
+// useful for traversing available routes of a router.
+func (mx *Mux) Routes() []Route {
+ return mx.tree.routes()
+}
+
+// Middlewares returns a slice of middleware handler functions.
+func (mx *Mux) Middlewares() Middlewares {
+ return mx.middlewares
+}
+
+// Match searches the routing tree for a handler that matches the method/path.
+// It's similar to routing a http request, but without executing the handler
+// thereafter.
+//
+// Note: the *Context state is updated during execution, so manage
+// the state carefully or make a NewRouteContext().
+func (mx *Mux) Match(rctx *Context, method, path string) bool {
+ m, ok := methodMap[method]
+ if !ok {
+ return false
+ }
+
+ node, _, h := mx.tree.FindRoute(rctx, m, path)
+
+ if node != nil && node.subroutes != nil {
+ rctx.RoutePath = mx.nextRoutePath(rctx)
+ return node.subroutes.Match(rctx, method, rctx.RoutePath)
+ }
+
+ return h != nil
+}
+
+// NotFoundHandler returns the default Mux 404 responder whenever a route
+// cannot be found.
+func (mx *Mux) NotFoundHandler() http.HandlerFunc {
+ if mx.notFoundHandler != nil {
+ return mx.notFoundHandler
+ }
+ return http.NotFound
+}
+
+// MethodNotAllowedHandler returns the default Mux 405 responder whenever
+// a method cannot be resolved for a route.
+func (mx *Mux) MethodNotAllowedHandler() http.HandlerFunc {
+ if mx.methodNotAllowedHandler != nil {
+ return mx.methodNotAllowedHandler
+ }
+ return methodNotAllowedHandler
+}
+
+// handle registers a http.Handler in the routing tree for a particular http method
+// and routing pattern.
+func (mx *Mux) handle(method methodTyp, pattern string, handler http.Handler) *node {
+ if len(pattern) == 0 || pattern[0] != '/' {
+ panic(fmt.Sprintf("chi: routing pattern must begin with '/' in '%s'", pattern))
+ }
+
+ // Build the computed routing handler for this routing pattern.
+ if !mx.inline && mx.handler == nil {
+ mx.updateRouteHandler()
+ }
+
+ // Build endpoint handler with inline middlewares for the route
+ var h http.Handler
+ if mx.inline {
+ mx.handler = http.HandlerFunc(mx.routeHTTP)
+ h = Chain(mx.middlewares...).Handler(handler)
+ } else {
+ h = handler
+ }
+
+ // Add the endpoint to the tree and return the node
+ return mx.tree.InsertRoute(method, pattern, h)
+}
+
+// routeHTTP routes a http.Request through the Mux routing tree to serve
+// the matching handler for a particular http method.
+func (mx *Mux) routeHTTP(w http.ResponseWriter, r *http.Request) {
+ // Grab the route context object
+ rctx := r.Context().Value(RouteCtxKey).(*Context)
+
+ // The request routing path
+ routePath := rctx.RoutePath
+ if routePath == "" {
+ if r.URL.RawPath != "" {
+ routePath = r.URL.RawPath
+ } else {
+ routePath = r.URL.Path
+ }
+ }
+
+ // Check if method is supported by chi
+ if rctx.RouteMethod == "" {
+ rctx.RouteMethod = r.Method
+ }
+ method, ok := methodMap[rctx.RouteMethod]
+ if !ok {
+ mx.MethodNotAllowedHandler().ServeHTTP(w, r)
+ return
+ }
+
+ // Find the route
+ if _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {
+ h.ServeHTTP(w, r)
+ return
+ }
+ if rctx.methodNotAllowed {
+ mx.MethodNotAllowedHandler().ServeHTTP(w, r)
+ } else {
+ mx.NotFoundHandler().ServeHTTP(w, r)
+ }
+}
+
+func (mx *Mux) nextRoutePath(rctx *Context) string {
+ routePath := "/"
+ nx := len(rctx.routeParams.Keys) - 1 // index of last param in list
+ if nx >= 0 && rctx.routeParams.Keys[nx] == "*" && len(rctx.routeParams.Values) > nx {
+ routePath = "/" + rctx.routeParams.Values[nx]
+ }
+ return routePath
+}
+
+// Recursively update data on child routers.
+func (mx *Mux) updateSubRoutes(fn func(subMux *Mux)) {
+ for _, r := range mx.tree.routes() {
+ subMux, ok := r.SubRoutes.(*Mux)
+ if !ok {
+ continue
+ }
+ fn(subMux)
+ }
+}
+
+// updateRouteHandler builds the single mux handler that is a chain of the middleware
+// stack, as defined by calls to Use(), and the tree router (Mux) itself. After this
+// point, no other middlewares can be registered on this Mux's stack. But you can still
+// compose additional middlewares via Group()'s or using a chained middleware handler.
+func (mx *Mux) updateRouteHandler() {
+ mx.handler = chain(mx.middlewares, http.HandlerFunc(mx.routeHTTP))
+}
+
+// methodNotAllowedHandler is a helper function to respond with a 405,
+// method not allowed.
+func methodNotAllowedHandler(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(405)
+ w.Write(nil)
+}
diff --git a/vendor/github.com/go-chi/chi/v5/tree.go b/vendor/github.com/go-chi/chi/v5/tree.go
new file mode 100644
index 000000000..8057c5281
--- /dev/null
+++ b/vendor/github.com/go-chi/chi/v5/tree.go
@@ -0,0 +1,866 @@
+package chi
+
+// Radix tree implementation below is a based on the original work by
+// Armon Dadgar in https://github.com/armon/go-radix/blob/master/radix.go
+// (MIT licensed). It's been heavily modified for use as a HTTP routing tree.
+
+import (
+ "fmt"
+ "net/http"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+)
+
+type methodTyp int
+
+const (
+ mSTUB methodTyp = 1 << iota
+ mCONNECT
+ mDELETE
+ mGET
+ mHEAD
+ mOPTIONS
+ mPATCH
+ mPOST
+ mPUT
+ mTRACE
+)
+
+var mALL = mCONNECT | mDELETE | mGET | mHEAD |
+ mOPTIONS | mPATCH | mPOST | mPUT | mTRACE
+
+var methodMap = map[string]methodTyp{
+ http.MethodConnect: mCONNECT,
+ http.MethodDelete: mDELETE,
+ http.MethodGet: mGET,
+ http.MethodHead: mHEAD,
+ http.MethodOptions: mOPTIONS,
+ http.MethodPatch: mPATCH,
+ http.MethodPost: mPOST,
+ http.MethodPut: mPUT,
+ http.MethodTrace: mTRACE,
+}
+
+// RegisterMethod adds support for custom HTTP method handlers, available
+// via Router#Method and Router#MethodFunc
+func RegisterMethod(method string) {
+ if method == "" {
+ return
+ }
+ method = strings.ToUpper(method)
+ if _, ok := methodMap[method]; ok {
+ return
+ }
+ n := len(methodMap)
+ if n > strconv.IntSize-2 {
+ panic(fmt.Sprintf("chi: max number of methods reached (%d)", strconv.IntSize))
+ }
+ mt := methodTyp(2 << n)
+ methodMap[method] = mt
+ mALL |= mt
+}
+
+type nodeTyp uint8
+
+const (
+ ntStatic nodeTyp = iota // /home
+ ntRegexp // /{id:[0-9]+}
+ ntParam // /{user}
+ ntCatchAll // /api/v1/*
+)
+
+type node struct {
+ // node type: static, regexp, param, catchAll
+ typ nodeTyp
+
+ // first byte of the prefix
+ label byte
+
+ // first byte of the child prefix
+ tail byte
+
+ // prefix is the common prefix we ignore
+ prefix string
+
+ // regexp matcher for regexp nodes
+ rex *regexp.Regexp
+
+ // HTTP handler endpoints on the leaf node
+ endpoints endpoints
+
+ // subroutes on the leaf node
+ subroutes Routes
+
+ // child nodes should be stored in-order for iteration,
+ // in groups of the node type.
+ children [ntCatchAll + 1]nodes
+}
+
+// endpoints is a mapping of http method constants to handlers
+// for a given route.
+type endpoints map[methodTyp]*endpoint
+
+type endpoint struct {
+ // endpoint handler
+ handler http.Handler
+
+ // pattern is the routing pattern for handler nodes
+ pattern string
+
+ // parameter keys recorded on handler nodes
+ paramKeys []string
+}
+
+func (s endpoints) Value(method methodTyp) *endpoint {
+ mh, ok := s[method]
+ if !ok {
+ mh = &endpoint{}
+ s[method] = mh
+ }
+ return mh
+}
+
+func (n *node) InsertRoute(method methodTyp, pattern string, handler http.Handler) *node {
+ var parent *node
+ search := pattern
+
+ for {
+ // Handle key exhaustion
+ if len(search) == 0 {
+ // Insert or update the node's leaf handler
+ n.setEndpoint(method, handler, pattern)
+ return n
+ }
+
+ // We're going to be searching for a wild node next,
+ // in this case, we need to get the tail
+ var label = search[0]
+ var segTail byte
+ var segEndIdx int
+ var segTyp nodeTyp
+ var segRexpat string
+ if label == '{' || label == '*' {
+ segTyp, _, segRexpat, segTail, _, segEndIdx = patNextSegment(search)
+ }
+
+ var prefix string
+ if segTyp == ntRegexp {
+ prefix = segRexpat
+ }
+
+ // Look for the edge to attach to
+ parent = n
+ n = n.getEdge(segTyp, label, segTail, prefix)
+
+ // No edge, create one
+ if n == nil {
+ child := &node{label: label, tail: segTail, prefix: search}
+ hn := parent.addChild(child, search)
+ hn.setEndpoint(method, handler, pattern)
+
+ return hn
+ }
+
+ // Found an edge to match the pattern
+
+ if n.typ > ntStatic {
+ // We found a param node, trim the param from the search path and continue.
+ // This param/wild pattern segment would already be on the tree from a previous
+ // call to addChild when creating a new node.
+ search = search[segEndIdx:]
+ continue
+ }
+
+ // Static nodes fall below here.
+ // Determine longest prefix of the search key on match.
+ commonPrefix := longestPrefix(search, n.prefix)
+ if commonPrefix == len(n.prefix) {
+ // the common prefix is as long as the current node's prefix we're attempting to insert.
+ // keep the search going.
+ search = search[commonPrefix:]
+ continue
+ }
+
+ // Split the node
+ child := &node{
+ typ: ntStatic,
+ prefix: search[:commonPrefix],
+ }
+ parent.replaceChild(search[0], segTail, child)
+
+ // Restore the existing node
+ n.label = n.prefix[commonPrefix]
+ n.prefix = n.prefix[commonPrefix:]
+ child.addChild(n, n.prefix)
+
+ // If the new key is a subset, set the method/handler on this node and finish.
+ search = search[commonPrefix:]
+ if len(search) == 0 {
+ child.setEndpoint(method, handler, pattern)
+ return child
+ }
+
+ // Create a new edge for the node
+ subchild := &node{
+ typ: ntStatic,
+ label: search[0],
+ prefix: search,
+ }
+ hn := child.addChild(subchild, search)
+ hn.setEndpoint(method, handler, pattern)
+ return hn
+ }
+}
+
+// addChild appends the new `child` node to the tree using the `pattern` as the trie key.
+// For a URL router like chi's, we split the static, param, regexp and wildcard segments
+// into different nodes. In addition, addChild will recursively call itself until every
+// pattern segment is added to the url pattern tree as individual nodes, depending on type.
+func (n *node) addChild(child *node, prefix string) *node {
+ search := prefix
+
+ // handler leaf node added to the tree is the child.
+ // this may be overridden later down the flow
+ hn := child
+
+ // Parse next segment
+ segTyp, _, segRexpat, segTail, segStartIdx, segEndIdx := patNextSegment(search)
+
+ // Add child depending on next up segment
+ switch segTyp {
+
+ case ntStatic:
+ // Search prefix is all static (that is, has no params in path)
+ // noop
+
+ default:
+ // Search prefix contains a param, regexp or wildcard
+
+ if segTyp == ntRegexp {
+ rex, err := regexp.Compile(segRexpat)
+ if err != nil {
+ panic(fmt.Sprintf("chi: invalid regexp pattern '%s' in route param", segRexpat))
+ }
+ child.prefix = segRexpat
+ child.rex = rex
+ }
+
+ if segStartIdx == 0 {
+ // Route starts with a param
+ child.typ = segTyp
+
+ if segTyp == ntCatchAll {
+ segStartIdx = -1
+ } else {
+ segStartIdx = segEndIdx
+ }
+ if segStartIdx < 0 {
+ segStartIdx = len(search)
+ }
+ child.tail = segTail // for params, we set the tail
+
+ if segStartIdx != len(search) {
+ // add static edge for the remaining part, split the end.
+ // its not possible to have adjacent param nodes, so its certainly
+ // going to be a static node next.
+
+ search = search[segStartIdx:] // advance search position
+
+ nn := &node{
+ typ: ntStatic,
+ label: search[0],
+ prefix: search,
+ }
+ hn = child.addChild(nn, search)
+ }
+
+ } else if segStartIdx > 0 {
+ // Route has some param
+
+ // starts with a static segment
+ child.typ = ntStatic
+ child.prefix = search[:segStartIdx]
+ child.rex = nil
+
+ // add the param edge node
+ search = search[segStartIdx:]
+
+ nn := &node{
+ typ: segTyp,
+ label: search[0],
+ tail: segTail,
+ }
+ hn = child.addChild(nn, search)
+
+ }
+ }
+
+ n.children[child.typ] = append(n.children[child.typ], child)
+ n.children[child.typ].Sort()
+ return hn
+}
+
+func (n *node) replaceChild(label, tail byte, child *node) {
+ for i := 0; i < len(n.children[child.typ]); i++ {
+ if n.children[child.typ][i].label == label && n.children[child.typ][i].tail == tail {
+ n.children[child.typ][i] = child
+ n.children[child.typ][i].label = label
+ n.children[child.typ][i].tail = tail
+ return
+ }
+ }
+ panic("chi: replacing missing child")
+}
+
+func (n *node) getEdge(ntyp nodeTyp, label, tail byte, prefix string) *node {
+ nds := n.children[ntyp]
+ for i := 0; i < len(nds); i++ {
+ if nds[i].label == label && nds[i].tail == tail {
+ if ntyp == ntRegexp && nds[i].prefix != prefix {
+ continue
+ }
+ return nds[i]
+ }
+ }
+ return nil
+}
+
+func (n *node) setEndpoint(method methodTyp, handler http.Handler, pattern string) {
+ // Set the handler for the method type on the node
+ if n.endpoints == nil {
+ n.endpoints = make(endpoints)
+ }
+
+ paramKeys := patParamKeys(pattern)
+
+ if method&mSTUB == mSTUB {
+ n.endpoints.Value(mSTUB).handler = handler
+ }
+ if method&mALL == mALL {
+ h := n.endpoints.Value(mALL)
+ h.handler = handler
+ h.pattern = pattern
+ h.paramKeys = paramKeys
+ for _, m := range methodMap {
+ h := n.endpoints.Value(m)
+ h.handler = handler
+ h.pattern = pattern
+ h.paramKeys = paramKeys
+ }
+ } else {
+ h := n.endpoints.Value(method)
+ h.handler = handler
+ h.pattern = pattern
+ h.paramKeys = paramKeys
+ }
+}
+
+func (n *node) FindRoute(rctx *Context, method methodTyp, path string) (*node, endpoints, http.Handler) {
+ // Reset the context routing pattern and params
+ rctx.routePattern = ""
+ rctx.routeParams.Keys = rctx.routeParams.Keys[:0]
+ rctx.routeParams.Values = rctx.routeParams.Values[:0]
+
+ // Find the routing handlers for the path
+ rn := n.findRoute(rctx, method, path)
+ if rn == nil {
+ return nil, nil, nil
+ }
+
+ // Record the routing params in the request lifecycle
+ rctx.URLParams.Keys = append(rctx.URLParams.Keys, rctx.routeParams.Keys...)
+ rctx.URLParams.Values = append(rctx.URLParams.Values, rctx.routeParams.Values...)
+
+ // Record the routing pattern in the request lifecycle
+ if rn.endpoints[method].pattern != "" {
+ rctx.routePattern = rn.endpoints[method].pattern
+ rctx.RoutePatterns = append(rctx.RoutePatterns, rctx.routePattern)
+ }
+
+ return rn, rn.endpoints, rn.endpoints[method].handler
+}
+
+// Recursive edge traversal by checking all nodeTyp groups along the way.
+// It's like searching through a multi-dimensional radix trie.
+func (n *node) findRoute(rctx *Context, method methodTyp, path string) *node {
+ nn := n
+ search := path
+
+ for t, nds := range nn.children {
+ ntyp := nodeTyp(t)
+ if len(nds) == 0 {
+ continue
+ }
+
+ var xn *node
+ xsearch := search
+
+ var label byte
+ if search != "" {
+ label = search[0]
+ }
+
+ switch ntyp {
+ case ntStatic:
+ xn = nds.findEdge(label)
+ if xn == nil || !strings.HasPrefix(xsearch, xn.prefix) {
+ continue
+ }
+ xsearch = xsearch[len(xn.prefix):]
+
+ case ntParam, ntRegexp:
+ // short-circuit and return no matching route for empty param values
+ if xsearch == "" {
+ continue
+ }
+
+ // serially loop through each node grouped by the tail delimiter
+ for idx := 0; idx < len(nds); idx++ {
+ xn = nds[idx]
+
+ // label for param nodes is the delimiter byte
+ p := strings.IndexByte(xsearch, xn.tail)
+
+ if p < 0 {
+ if xn.tail == '/' {
+ p = len(xsearch)
+ } else {
+ continue
+ }
+ } else if ntyp == ntRegexp && p == 0 {
+ continue
+ }
+
+ if ntyp == ntRegexp && xn.rex != nil {
+ if !xn.rex.MatchString(xsearch[:p]) {
+ continue
+ }
+ } else if strings.IndexByte(xsearch[:p], '/') != -1 {
+ // avoid a match across path segments
+ continue
+ }
+
+ prevlen := len(rctx.routeParams.Values)
+ rctx.routeParams.Values = append(rctx.routeParams.Values, xsearch[:p])
+ xsearch = xsearch[p:]
+
+ if len(xsearch) == 0 {
+ if xn.isLeaf() {
+ h := xn.endpoints[method]
+ if h != nil && h.handler != nil {
+ rctx.routeParams.Keys = append(rctx.routeParams.Keys, h.paramKeys...)
+ return xn
+ }
+
+ // flag that the routing context found a route, but not a corresponding
+ // supported method
+ rctx.methodNotAllowed = true
+ }
+ }
+
+ // recursively find the next node on this branch
+ fin := xn.findRoute(rctx, method, xsearch)
+ if fin != nil {
+ return fin
+ }
+
+ // not found on this branch, reset vars
+ rctx.routeParams.Values = rctx.routeParams.Values[:prevlen]
+ xsearch = search
+ }
+
+ rctx.routeParams.Values = append(rctx.routeParams.Values, "")
+
+ default:
+ // catch-all nodes
+ rctx.routeParams.Values = append(rctx.routeParams.Values, search)
+ xn = nds[0]
+ xsearch = ""
+ }
+
+ if xn == nil {
+ continue
+ }
+
+ // did we find it yet?
+ if len(xsearch) == 0 {
+ if xn.isLeaf() {
+ h := xn.endpoints[method]
+ if h != nil && h.handler != nil {
+ rctx.routeParams.Keys = append(rctx.routeParams.Keys, h.paramKeys...)
+ return xn
+ }
+
+ // flag that the routing context found a route, but not a corresponding
+ // supported method
+ rctx.methodNotAllowed = true
+ }
+ }
+
+ // recursively find the next node..
+ fin := xn.findRoute(rctx, method, xsearch)
+ if fin != nil {
+ return fin
+ }
+
+ // Did not find final handler, let's remove the param here if it was set
+ if xn.typ > ntStatic {
+ if len(rctx.routeParams.Values) > 0 {
+ rctx.routeParams.Values = rctx.routeParams.Values[:len(rctx.routeParams.Values)-1]
+ }
+ }
+
+ }
+
+ return nil
+}
+
+func (n *node) findEdge(ntyp nodeTyp, label byte) *node {
+ nds := n.children[ntyp]
+ num := len(nds)
+ idx := 0
+
+ switch ntyp {
+ case ntStatic, ntParam, ntRegexp:
+ i, j := 0, num-1
+ for i <= j {
+ idx = i + (j-i)/2
+ if label > nds[idx].label {
+ i = idx + 1
+ } else if label < nds[idx].label {
+ j = idx - 1
+ } else {
+ i = num // breaks cond
+ }
+ }
+ if nds[idx].label != label {
+ return nil
+ }
+ return nds[idx]
+
+ default: // catch all
+ return nds[idx]
+ }
+}
+
+func (n *node) isLeaf() bool {
+ return n.endpoints != nil
+}
+
+func (n *node) findPattern(pattern string) bool {
+ nn := n
+ for _, nds := range nn.children {
+ if len(nds) == 0 {
+ continue
+ }
+
+ n = nn.findEdge(nds[0].typ, pattern[0])
+ if n == nil {
+ continue
+ }
+
+ var idx int
+ var xpattern string
+
+ switch n.typ {
+ case ntStatic:
+ idx = longestPrefix(pattern, n.prefix)
+ if idx < len(n.prefix) {
+ continue
+ }
+
+ case ntParam, ntRegexp:
+ idx = strings.IndexByte(pattern, '}') + 1
+
+ case ntCatchAll:
+ idx = longestPrefix(pattern, "*")
+
+ default:
+ panic("chi: unknown node type")
+ }
+
+ xpattern = pattern[idx:]
+ if len(xpattern) == 0 {
+ return true
+ }
+
+ return n.findPattern(xpattern)
+ }
+ return false
+}
+
+func (n *node) routes() []Route {
+ rts := []Route{}
+
+ n.walk(func(eps endpoints, subroutes Routes) bool {
+ if eps[mSTUB] != nil && eps[mSTUB].handler != nil && subroutes == nil {
+ return false
+ }
+
+ // Group methodHandlers by unique patterns
+ pats := make(map[string]endpoints)
+
+ for mt, h := range eps {
+ if h.pattern == "" {
+ continue
+ }
+ p, ok := pats[h.pattern]
+ if !ok {
+ p = endpoints{}
+ pats[h.pattern] = p
+ }
+ p[mt] = h
+ }
+
+ for p, mh := range pats {
+ hs := make(map[string]http.Handler)
+ if mh[mALL] != nil && mh[mALL].handler != nil {
+ hs["*"] = mh[mALL].handler
+ }
+
+ for mt, h := range mh {
+ if h.handler == nil {
+ continue
+ }
+ m := methodTypString(mt)
+ if m == "" {
+ continue
+ }
+ hs[m] = h.handler
+ }
+
+ rt := Route{p, hs, subroutes}
+ rts = append(rts, rt)
+ }
+
+ return false
+ })
+
+ return rts
+}
+
+func (n *node) walk(fn func(eps endpoints, subroutes Routes) bool) bool {
+ // Visit the leaf values if any
+ if (n.endpoints != nil || n.subroutes != nil) && fn(n.endpoints, n.subroutes) {
+ return true
+ }
+
+ // Recurse on the children
+ for _, ns := range n.children {
+ for _, cn := range ns {
+ if cn.walk(fn) {
+ return true
+ }
+ }
+ }
+ return false
+}
+
+// patNextSegment returns the next segment details from a pattern:
+// node type, param key, regexp string, param tail byte, param starting index, param ending index
+func patNextSegment(pattern string) (nodeTyp, string, string, byte, int, int) {
+ ps := strings.Index(pattern, "{")
+ ws := strings.Index(pattern, "*")
+
+ if ps < 0 && ws < 0 {
+ return ntStatic, "", "", 0, 0, len(pattern) // we return the entire thing
+ }
+
+ // Sanity check
+ if ps >= 0 && ws >= 0 && ws < ps {
+ panic("chi: wildcard '*' must be the last pattern in a route, otherwise use a '{param}'")
+ }
+
+ var tail byte = '/' // Default endpoint tail to / byte
+
+ if ps >= 0 {
+ // Param/Regexp pattern is next
+ nt := ntParam
+
+ // Read to closing } taking into account opens and closes in curl count (cc)
+ cc := 0
+ pe := ps
+ for i, c := range pattern[ps:] {
+ if c == '{' {
+ cc++
+ } else if c == '}' {
+ cc--
+ if cc == 0 {
+ pe = ps + i
+ break
+ }
+ }
+ }
+ if pe == ps {
+ panic("chi: route param closing delimiter '}' is missing")
+ }
+
+ key := pattern[ps+1 : pe]
+ pe++ // set end to next position
+
+ if pe < len(pattern) {
+ tail = pattern[pe]
+ }
+
+ var rexpat string
+ if idx := strings.Index(key, ":"); idx >= 0 {
+ nt = ntRegexp
+ rexpat = key[idx+1:]
+ key = key[:idx]
+ }
+
+ if len(rexpat) > 0 {
+ if rexpat[0] != '^' {
+ rexpat = "^" + rexpat
+ }
+ if rexpat[len(rexpat)-1] != '$' {
+ rexpat += "$"
+ }
+ }
+
+ return nt, key, rexpat, tail, ps, pe
+ }
+
+ // Wildcard pattern as finale
+ if ws < len(pattern)-1 {
+ panic("chi: wildcard '*' must be the last value in a route. trim trailing text or use a '{param}' instead")
+ }
+ return ntCatchAll, "*", "", 0, ws, len(pattern)
+}
+
+func patParamKeys(pattern string) []string {
+ pat := pattern
+ paramKeys := []string{}
+ for {
+ ptyp, paramKey, _, _, _, e := patNextSegment(pat)
+ if ptyp == ntStatic {
+ return paramKeys
+ }
+ for i := 0; i < len(paramKeys); i++ {
+ if paramKeys[i] == paramKey {
+ panic(fmt.Sprintf("chi: routing pattern '%s' contains duplicate param key, '%s'", pattern, paramKey))
+ }
+ }
+ paramKeys = append(paramKeys, paramKey)
+ pat = pat[e:]
+ }
+}
+
+// longestPrefix finds the length of the shared prefix
+// of two strings
+func longestPrefix(k1, k2 string) int {
+ max := len(k1)
+ if l := len(k2); l < max {
+ max = l
+ }
+ var i int
+ for i = 0; i < max; i++ {
+ if k1[i] != k2[i] {
+ break
+ }
+ }
+ return i
+}
+
+func methodTypString(method methodTyp) string {
+ for s, t := range methodMap {
+ if method == t {
+ return s
+ }
+ }
+ return ""
+}
+
+type nodes []*node
+
+// Sort the list of nodes by label
+func (ns nodes) Sort() { sort.Sort(ns); ns.tailSort() }
+func (ns nodes) Len() int { return len(ns) }
+func (ns nodes) Swap(i, j int) { ns[i], ns[j] = ns[j], ns[i] }
+func (ns nodes) Less(i, j int) bool { return ns[i].label < ns[j].label }
+
+// tailSort pushes nodes with '/' as the tail to the end of the list for param nodes.
+// The list order determines the traversal order.
+func (ns nodes) tailSort() {
+ for i := len(ns) - 1; i >= 0; i-- {
+ if ns[i].typ > ntStatic && ns[i].tail == '/' {
+ ns.Swap(i, len(ns)-1)
+ return
+ }
+ }
+}
+
+func (ns nodes) findEdge(label byte) *node {
+ num := len(ns)
+ idx := 0
+ i, j := 0, num-1
+ for i <= j {
+ idx = i + (j-i)/2
+ if label > ns[idx].label {
+ i = idx + 1
+ } else if label < ns[idx].label {
+ j = idx - 1
+ } else {
+ i = num // breaks cond
+ }
+ }
+ if ns[idx].label != label {
+ return nil
+ }
+ return ns[idx]
+}
+
+// Route describes the details of a routing handler.
+// Handlers map key is an HTTP method
+type Route struct {
+ Pattern string
+ Handlers map[string]http.Handler
+ SubRoutes Routes
+}
+
+// WalkFunc is the type of the function called for each method and route visited by Walk.
+type WalkFunc func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error
+
+// Walk walks any router tree that implements Routes interface.
+func Walk(r Routes, walkFn WalkFunc) error {
+ return walk(r, walkFn, "")
+}
+
+func walk(r Routes, walkFn WalkFunc, parentRoute string, parentMw ...func(http.Handler) http.Handler) error {
+ for _, route := range r.Routes() {
+ mws := make([]func(http.Handler) http.Handler, len(parentMw))
+ copy(mws, parentMw)
+ mws = append(mws, r.Middlewares()...)
+
+ if route.SubRoutes != nil {
+ if err := walk(route.SubRoutes, walkFn, parentRoute+route.Pattern, mws...); err != nil {
+ return err
+ }
+ continue
+ }
+
+ for method, handler := range route.Handlers {
+ if method == "*" {
+ // Ignore a "catchAll" method, since we pass down all the specific methods for each route.
+ continue
+ }
+
+ fullRoute := parentRoute + route.Pattern
+ fullRoute = strings.Replace(fullRoute, "/*/", "/", -1)
+
+ if chain, ok := handler.(*ChainHandler); ok {
+ if err := walkFn(method, fullRoute, chain.Endpoint, append(mws, chain.Middlewares...)...); err != nil {
+ return err
+ }
+ } else {
+ if err := walkFn(method, fullRoute, handler, mws...); err != nil {
+ return err
+ }
+ }
+ }
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/go-chi/httplog/LICENSE b/vendor/github.com/go-chi/httplog/LICENSE
new file mode 100644
index 000000000..0bb58ba51
--- /dev/null
+++ b/vendor/github.com/go-chi/httplog/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2015-present Peter Kieltyka (https://github.com/pkieltyka).
+
+MIT License
+
+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/vendor/github.com/go-chi/httplog/README.md b/vendor/github.com/go-chi/httplog/README.md
new file mode 100644
index 000000000..ac0dc9cf2
--- /dev/null
+++ b/vendor/github.com/go-chi/httplog/README.md
@@ -0,0 +1,67 @@
+httplog
+=======
+
+Small but powerful structured logging package for HTTP request logging in Go.
+
+## Example
+
+(see [_example/](./_example/main.go))
+
+```go
+package main
+
+import (
+ "net/http"
+ "github.com/go-chi/chi/v5"
+ "github.com/go-chi/chi/v5/middleware"
+ "github.com/go-chi/httplog"
+)
+
+func main() {
+ // Logger
+ logger := httplog.NewLogger("httplog-example", httplog.Options{
+ JSON: true,
+ })
+
+ // Service
+ r := chi.NewRouter()
+ r.Use(httplog.RequestLogger(logger))
+ r.Use(middleware.Heartbeat("/ping"))
+
+ r.Get("/", func(w http.ResponseWriter, r *http.Request) {
+ w.Write([]byte("hello world"))
+ })
+
+ r.Get("/panic", func(w http.ResponseWriter, r *http.Request) {
+ panic("oh no")
+ })
+
+ r.Get("/info", func(w http.ResponseWriter, r *http.Request) {
+ oplog := httplog.LogEntry(r.Context())
+ w.Header().Add("Content-Type", "text/plain")
+ oplog.Info().Msg("info here")
+ w.Write([]byte("info here"))
+ })
+
+ r.Get("/warn", func(w http.ResponseWriter, r *http.Request) {
+ oplog := httplog.LogEntry(r.Context())
+ oplog.Warn().Msg("warn here")
+ w.WriteHeader(400)
+ w.Write([]byte("warn here"))
+ })
+
+ r.Get("/err", func(w http.ResponseWriter, r *http.Request) {
+ oplog := httplog.LogEntry(r.Context())
+ oplog.Error().Msg("err here")
+ w.WriteHeader(500)
+ w.Write([]byte("err here"))
+ })
+
+ http.ListenAndServe(":5555", r)
+}
+
+```
+
+## License
+
+MIT
diff --git a/vendor/github.com/go-chi/httplog/config.go b/vendor/github.com/go-chi/httplog/config.go
new file mode 100644
index 000000000..6538813a3
--- /dev/null
+++ b/vendor/github.com/go-chi/httplog/config.go
@@ -0,0 +1,86 @@
+package httplog
+
+import (
+ "fmt"
+ "os"
+ "strings"
+ "time"
+
+ "github.com/rs/zerolog"
+ "github.com/rs/zerolog/log"
+)
+
+var DefaultOptions = Options{
+ LogLevel: "info",
+ LevelFieldName: "level",
+ JSON: false,
+ Concise: false,
+ Tags: nil,
+ SkipHeaders: nil,
+}
+
+type Options struct {
+ // LogLevel defines the minimum level of severity that app should log.
+ //
+ // Must be one of: ["trace", "debug", "info", "warn", "error", "critical"]
+ LogLevel string
+
+ // LevelFieldName sets the field name for the log level or severity.
+ // Some providers parse and search for different field names.
+ LevelFieldName string
+
+ // JSON enables structured logging output in json. Make sure to enable this
+ // in production mode so log aggregators can receive data in parsable format.
+ //
+ // In local development mode, its appropriate to set this value to false to
+ // receive pretty output and stacktraces to stdout.
+ JSON bool
+
+ // Concise mode includes fewer log details during the request flow. For example
+ // exluding details like request content length, user-agent and other details.
+ // This is useful if during development your console is too noisy.
+ Concise bool
+
+ // Tags are additional fields included at the root level of all logs.
+ // These can be useful for example the commit hash of a build, or an environment
+ // name like prod/stg/dev
+ Tags map[string]string
+
+ // SkipHeaders are additional headers which are redacted from the logs
+ SkipHeaders []string
+}
+
+// Configure will set new global/default options for the httplog and behaviour
+// of underlying zerolog pkg and its global logger.
+func Configure(opts Options) {
+ if opts.LogLevel == "" {
+ opts.LogLevel = "info"
+ }
+
+ if opts.LevelFieldName == "" {
+ opts.LevelFieldName = "level"
+ }
+
+ // Pre-downcase all SkipHeaders
+ for i, header := range opts.SkipHeaders {
+ opts.SkipHeaders[i] = strings.ToLower(header)
+ }
+
+ DefaultOptions = opts
+
+ // Config the zerolog global logger
+ logLevel, err := zerolog.ParseLevel(strings.ToLower(opts.LogLevel))
+ if err != nil {
+ fmt.Printf("httplog: error! %v\n", err)
+ os.Exit(1)
+ }
+ zerolog.SetGlobalLevel(logLevel)
+
+ zerolog.LevelFieldName = strings.ToLower(opts.LevelFieldName)
+ zerolog.TimestampFieldName = "timestamp"
+ zerolog.TimeFieldFormat = time.RFC3339Nano
+
+ if !opts.JSON {
+ log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339})
+ }
+}
diff --git a/vendor/github.com/go-chi/httplog/httplog.go b/vendor/github.com/go-chi/httplog/httplog.go
new file mode 100644
index 000000000..ea90e63c7
--- /dev/null
+++ b/vendor/github.com/go-chi/httplog/httplog.go
@@ -0,0 +1,248 @@
+package httplog
+
+import (
+ "context"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "strings"
+ "time"
+
+ "github.com/go-chi/chi/v5"
+ "github.com/go-chi/chi/v5/middleware"
+ "github.com/rs/zerolog"
+ "github.com/rs/zerolog/log"
+)
+
+func NewLogger(serviceName string, opts ...Options) zerolog.Logger {
+ if len(opts) > 0 {
+ Configure(opts[0])
+ } else {
+ Configure(DefaultOptions)
+ }
+ logger := log.With().Str("service", strings.ToLower(serviceName))
+ if !DefaultOptions.Concise && len(DefaultOptions.Tags) > 0 {
+ logger = logger.Fields(map[string]interface{}{
+ "tags": DefaultOptions.Tags,
+ })
+ }
+ return logger.Logger()
+}
+
+// RequestLogger is an http middleware to log http requests and responses.
+//
+// NOTE: for simplicty, RequestLogger automatically makes use of the chi RequestID and
+// Recoverer middleware.
+func RequestLogger(logger zerolog.Logger) func(next http.Handler) http.Handler {
+ return chi.Chain(
+ middleware.RequestID,
+ Handler(logger),
+ middleware.Recoverer,
+ ).Handler
+}
+
+func Handler(logger zerolog.Logger) func(next http.Handler) http.Handler {
+ var f middleware.LogFormatter = &requestLogger{logger}
+ return func(next http.Handler) http.Handler {
+ fn := func(w http.ResponseWriter, r *http.Request) {
+ entry := f.NewLogEntry(r)
+ ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
+
+ buf := newLimitBuffer(512)
+ ww.Tee(buf)
+
+ t1 := time.Now()
+ defer func() {
+ var respBody []byte
+ if ww.Status() >= 400 {
+ respBody, _ = ioutil.ReadAll(buf)
+ }
+ entry.Write(ww.Status(), ww.BytesWritten(), ww.Header(), time.Since(t1), respBody)
+ }()
+
+ next.ServeHTTP(ww, middleware.WithLogEntry(r, entry))
+ }
+ return http.HandlerFunc(fn)
+ }
+}
+
+type requestLogger struct {
+ Logger zerolog.Logger
+}
+
+func (l *requestLogger) NewLogEntry(r *http.Request) middleware.LogEntry {
+ entry := &RequestLoggerEntry{}
+ msg := fmt.Sprintf("Request: %s %s", r.Method, r.URL.Path)
+ entry.Logger = l.Logger.With().Fields(requestLogFields(r, true)).Logger()
+ if !DefaultOptions.Concise {
+ entry.Logger.Info().Fields(requestLogFields(r, DefaultOptions.Concise)).Msgf(msg)
+ }
+ return entry
+}
+
+type RequestLoggerEntry struct {
+ Logger zerolog.Logger
+ msg string
+}
+
+func (l *RequestLoggerEntry) Write(status, bytes int, header http.Header, elapsed time.Duration, extra interface{}) {
+ msg := fmt.Sprintf("Response: %d %s", status, statusLabel(status))
+ if l.msg != "" {
+ msg = fmt.Sprintf("%s - %s", msg, l.msg)
+ }
+
+ responseLog := map[string]interface{}{
+ "status": status,
+ "bytes": bytes,
+ "elapsed": float64(elapsed.Nanoseconds()) / 1000000.0, // in milliseconds
+ }
+
+ if !DefaultOptions.Concise {
+ // Include response header, as well for error status codes (>400) we include
+ // the response body so we may inspect the log message sent back to the client.
+ if status >= 400 {
+ body, _ := extra.([]byte)
+ responseLog["body"] = string(body)
+ }
+ if len(header) > 0 {
+ responseLog["header"] = headerLogField(header)
+ }
+ }
+
+ l.Logger.WithLevel(statusLevel(status)).Fields(map[string]interface{}{
+ "httpResponse": responseLog,
+ }).Msgf(msg)
+}
+
+func (l *RequestLoggerEntry) Panic(v interface{}, stack []byte) {
+ stacktrace := "#"
+ if DefaultOptions.JSON {
+ stacktrace = string(stack)
+ }
+
+ l.Logger = l.Logger.With().
+ Str("stacktrace", stacktrace).
+ Str("panic", fmt.Sprintf("%+v", v)).
+ Logger()
+
+ l.msg = fmt.Sprintf("%+v", v)
+
+ if !DefaultOptions.JSON {
+ middleware.PrintPrettyStack(v)
+ }
+}
+
+func requestLogFields(r *http.Request, concise bool) map[string]interface{} {
+ scheme := "http"
+ if r.TLS != nil {
+ scheme = "https"
+ }
+ requestURL := fmt.Sprintf("%s://%s%s", scheme, r.Host, r.RequestURI)
+
+ requestFields := map[string]interface{}{
+ "requestURL": requestURL,
+ "requestMethod": r.Method,
+ "requestPath": r.URL.Path,
+ "remoteIP": r.RemoteAddr,
+ "proto": r.Proto,
+ }
+ if reqID := middleware.GetReqID(r.Context()); reqID != "" {
+ requestFields["requestID"] = reqID
+ }
+
+ if concise {
+ return map[string]interface{}{
+ "httpRequest": requestFields,
+ }
+ }
+
+ requestFields["scheme"] = scheme
+
+ if len(r.Header) > 0 {
+ requestFields["header"] = headerLogField(r.Header)
+ }
+
+ return map[string]interface{}{
+ "httpRequest": requestFields,
+ }
+}
+
+func headerLogField(header http.Header) map[string]string {
+ headerField := map[string]string{}
+ for k, v := range header {
+ k = strings.ToLower(k)
+ switch {
+ case len(v) == 0:
+ continue
+ case len(v) == 1:
+ headerField[k] = v[0]
+ default:
+ headerField[k] = fmt.Sprintf("[%s]", strings.Join(v, "], ["))
+ }
+ if k == "authorization" || k == "cookie" || k == "set-cookie" {
+ headerField[k] = "***"
+ }
+
+ for _, skip := range DefaultOptions.SkipHeaders {
+ if k == skip {
+ headerField[k] = "***"
+ break
+ }
+ }
+ }
+ return headerField
+}
+
+func statusLevel(status int) zerolog.Level {
+ switch {
+ case status <= 0:
+ return zerolog.WarnLevel
+ case status < 400: // for codes in 100s, 200s, 300s
+ return zerolog.InfoLevel
+ case status >= 400 && status < 500:
+ return zerolog.WarnLevel
+ case status >= 500:
+ return zerolog.ErrorLevel
+ default:
+ return zerolog.InfoLevel
+ }
+}
+
+func statusLabel(status int) string {
+ switch {
+ case status >= 100 && status < 300:
+ return "OK"
+ case status >= 300 && status < 400:
+ return "Redirect"
+ case status >= 400 && status < 500:
+ return "Client Error"
+ case status >= 500:
+ return "Server Error"
+ default:
+ return "Unknown"
+ }
+}
+
+// Helper methods used by the application to get the request-scoped
+// logger entry and set additional fields between handlers.
+//
+// This is a useful pattern to use to set state on the entry as it
+// passes through the handler chain, which at any point can be logged
+// with a call to .Print(), .Info(), etc.
+
+func LogEntry(ctx context.Context) zerolog.Logger {
+ entry := ctx.Value(middleware.LogEntryCtxKey).(*RequestLoggerEntry)
+ return entry.Logger
+}
+
+func LogEntrySetField(ctx context.Context, key, value string) {
+ if entry, ok := ctx.Value(middleware.LogEntryCtxKey).(*RequestLoggerEntry); ok {
+ entry.Logger = entry.Logger.With().Str(key, value).Logger()
+ }
+}
+
+func LogEntrySetFields(ctx context.Context, fields map[string]interface{}) {
+ if entry, ok := ctx.Value(middleware.LogEntryCtxKey).(*RequestLoggerEntry); ok {
+ entry.Logger = entry.Logger.With().Fields(fields).Logger()
+ }
+}
diff --git a/vendor/github.com/go-chi/httplog/util.go b/vendor/github.com/go-chi/httplog/util.go
new file mode 100644
index 000000000..dcb785161
--- /dev/null
+++ b/vendor/github.com/go-chi/httplog/util.go
@@ -0,0 +1,37 @@
+package httplog
+
+import (
+ "bytes"
+ "io"
+)
+
+// limitBuffer is used to pipe response body information from the
+// response writer to a certain limit amount. The idea is to read
+// a portion of the response body such as an error response so we
+// may log it.
+type limitBuffer struct {
+ *bytes.Buffer
+ limit int
+}
+
+func newLimitBuffer(size int) io.ReadWriter {
+ return limitBuffer{
+ Buffer: bytes.NewBuffer(make([]byte, 0, size)),
+ limit: size,
+ }
+}
+
+func (b limitBuffer) Write(p []byte) (n int, err error) {
+ if b.Buffer.Len() >= b.limit {
+ return len(p), nil
+ }
+ limit := b.limit
+ if len(p) < limit {
+ limit = len(p)
+ }
+ return b.Buffer.Write(p[:limit])
+}
+
+func (b limitBuffer) Read(p []byte) (n int, err error) {
+ return b.Buffer.Read(p)
+}
diff --git a/vendor/github.com/go-toast/toast/.gitignore b/vendor/github.com/go-toast/toast/.gitignore
new file mode 100644
index 000000000..ecdc9e248
--- /dev/null
+++ b/vendor/github.com/go-toast/toast/.gitignore
@@ -0,0 +1,3 @@
+.idea/
+vendor/*
+!vendor/vendor.json
diff --git a/vendor/github.com/go-toast/toast/LICENSE b/vendor/github.com/go-toast/toast/LICENSE
new file mode 100644
index 000000000..68b7294f9
--- /dev/null
+++ b/vendor/github.com/go-toast/toast/LICENSE
@@ -0,0 +1,7 @@
+Copyright (c) 2016 Jacob Marshall
+
+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.
\ No newline at end of file
diff --git a/vendor/github.com/go-toast/toast/readme.md b/vendor/github.com/go-toast/toast/readme.md
new file mode 100644
index 000000000..4dbc20741
--- /dev/null
+++ b/vendor/github.com/go-toast/toast/readme.md
@@ -0,0 +1,61 @@
+# Toast
+
+A go package for Windows 10 toast notifications.
+
+As seen in [jacobmarshall/pokevision-cli](https://github.com/jacobmarshall/pokevision-cli).
+
+## CLI
+
+As well as using go-toast within your Go projects, you can also utilise the CLI - for any of your projects.
+
+Download [64bit](https://go-toast-downloads.s3.amazonaws.com/v1/toast64.exe) or [32bit](https://go-toast-downloads.s3.amazonaws.com/v1/toast32.exe)
+
+```cmd
+C:\Users\Example\Downloads\toast64.exe \
+ --app-id "Example App" \
+ --title "Hello World" \
+ --message "Lorem ipsum dolor sit amet, consectetur adipiscing elit." \
+ --icon "C:\Users\Example\Pictures\icon.png" \
+ --audio "default" --loop \
+ --duration "long" \
+ --activation-arg "https://google.com" \
+ --action "Open maps" --action-arg "bingmaps:?q=sushi" \
+ --action "Open browser" --action-arg "http://..."
+```
+
+
+
+## Example
+
+```go
+package main
+
+import (
+ "log"
+
+ "gopkg.in/toast.v1"
+)
+
+func main() {
+ notification := toast.Notification{
+ AppID: "Example App",
+ Title: "My notification",
+ Message: "Some message about how important something is...",
+ Icon: "go.png", // This file must exist (remove this line if it doesn't)
+ Actions: []toast.Action{
+ {"protocol", "I'm a button", ""},
+ {"protocol", "Me too!", ""},
+ },
+ }
+ err := notification.Push()
+ if err != nil {
+ log.Fatalln(err)
+ }
+}
+```
+
+## Screenshots
+
+
+
+
diff --git a/vendor/github.com/go-toast/toast/screenshot-action-centre.png b/vendor/github.com/go-toast/toast/screenshot-action-centre.png
new file mode 100644
index 000000000..e63917b2d
Binary files /dev/null and b/vendor/github.com/go-toast/toast/screenshot-action-centre.png differ
diff --git a/vendor/github.com/go-toast/toast/screenshot-cli.png b/vendor/github.com/go-toast/toast/screenshot-cli.png
new file mode 100644
index 000000000..fc03c37e8
Binary files /dev/null and b/vendor/github.com/go-toast/toast/screenshot-cli.png differ
diff --git a/vendor/github.com/go-toast/toast/screenshot-toast.png b/vendor/github.com/go-toast/toast/screenshot-toast.png
new file mode 100644
index 000000000..93904061d
Binary files /dev/null and b/vendor/github.com/go-toast/toast/screenshot-toast.png differ
diff --git a/vendor/github.com/go-toast/toast/toast.go b/vendor/github.com/go-toast/toast/toast.go
new file mode 100644
index 000000000..1bcba4bf9
--- /dev/null
+++ b/vendor/github.com/go-toast/toast/toast.go
@@ -0,0 +1,359 @@
+package toast
+
+import (
+ "bytes"
+ "errors"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "text/template"
+
+ "github.com/nu7hatch/gouuid"
+ "syscall"
+)
+
+var toastTemplate *template.Template
+
+var (
+ ErrorInvalidAudio error = errors.New("toast: invalid audio")
+ ErrorInvalidDuration = errors.New("toast: invalid duration")
+)
+
+type toastAudio string
+
+const (
+ Default toastAudio = "ms-winsoundevent:Notification.Default"
+ IM = "ms-winsoundevent:Notification.IM"
+ Mail = "ms-winsoundevent:Notification.Mail"
+ Reminder = "ms-winsoundevent:Notification.Reminder"
+ SMS = "ms-winsoundevent:Notification.SMS"
+ LoopingAlarm = "ms-winsoundevent:Notification.Looping.Alarm"
+ LoopingAlarm2 = "ms-winsoundevent:Notification.Looping.Alarm2"
+ LoopingAlarm3 = "ms-winsoundevent:Notification.Looping.Alarm3"
+ LoopingAlarm4 = "ms-winsoundevent:Notification.Looping.Alarm4"
+ LoopingAlarm5 = "ms-winsoundevent:Notification.Looping.Alarm5"
+ LoopingAlarm6 = "ms-winsoundevent:Notification.Looping.Alarm6"
+ LoopingAlarm7 = "ms-winsoundevent:Notification.Looping.Alarm7"
+ LoopingAlarm8 = "ms-winsoundevent:Notification.Looping.Alarm8"
+ LoopingAlarm9 = "ms-winsoundevent:Notification.Looping.Alarm9"
+ LoopingAlarm10 = "ms-winsoundevent:Notification.Looping.Alarm10"
+ LoopingCall = "ms-winsoundevent:Notification.Looping.Call"
+ LoopingCall2 = "ms-winsoundevent:Notification.Looping.Call2"
+ LoopingCall3 = "ms-winsoundevent:Notification.Looping.Call3"
+ LoopingCall4 = "ms-winsoundevent:Notification.Looping.Call4"
+ LoopingCall5 = "ms-winsoundevent:Notification.Looping.Call5"
+ LoopingCall6 = "ms-winsoundevent:Notification.Looping.Call6"
+ LoopingCall7 = "ms-winsoundevent:Notification.Looping.Call7"
+ LoopingCall8 = "ms-winsoundevent:Notification.Looping.Call8"
+ LoopingCall9 = "ms-winsoundevent:Notification.Looping.Call9"
+ LoopingCall10 = "ms-winsoundevent:Notification.Looping.Call10"
+ Silent = "silent"
+)
+
+type toastDuration string
+
+const (
+ Short toastDuration = "short"
+ Long = "long"
+)
+
+func init() {
+ toastTemplate = template.New("toast")
+ toastTemplate.Parse(`
+[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
+[Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
+[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
+
+$APP_ID = '{{if .AppID}}{{.AppID}}{{else}}Windows App{{end}}'
+
+$template = @"
+
+
+
+ {{if .Icon}}
+
+ {{end}}
+ {{if .Title}}
+
+ {{end}}
+ {{if .Message}}
+
+ {{end}}
+
+
+ {{if ne .Audio "silent"}}
+
+ {{else}}
+
+ {{end}}
+ {{if .Actions}}
+
+ {{range .Actions}}
+
+ {{end}}
+
+ {{end}}
+
+"@
+
+$xml = New-Object Windows.Data.Xml.Dom.XmlDocument
+$xml.LoadXml($template)
+$toast = New-Object Windows.UI.Notifications.ToastNotification $xml
+[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($APP_ID).Show($toast)
+ `)
+}
+
+// Notification
+//
+// The toast notification data. The following fields are strongly recommended;
+// - AppID
+// - Title
+//
+// If no toastAudio is provided, then the toast notification will be silent.
+// You can set the toast to have a default audio by setting "Audio" to "toast.Default", or if your go app takes
+// user-provided input for audio, call the "toast.Audio(name)" func.
+//
+// The AppID is shown beneath the toast message (in certain cases), and above the notification within the Action
+// Center - and is used to group your notifications together. It is recommended that you provide a "pretty"
+// name for your app, and not something like "com.example.MyApp".
+//
+// If no Title is provided, but a Message is, the message will display as the toast notification's title -
+// which is a slightly different font style (heavier).
+//
+// The Icon should be an absolute path to the icon (as the toast is invoked from a temporary path on the user's
+// system, not the working directory).
+//
+// If you would like the toast to call an external process/open a webpage, then you can set ActivationArguments
+// to the uri you would like to trigger when the toast is clicked. For example: "https://google.com" would open
+// the Google homepage when the user clicks the toast notification.
+// By default, clicking the toast just hides/dismisses it.
+//
+// The following would show a notification to the user letting them know they received an email, and opens
+// gmail.com when they click the notification. It also makes the Windows 10 "mail" sound effect.
+//
+// toast := toast.Notification{
+// AppID: "Google Mail",
+// Title: email.Subject,
+// Message: email.Preview,
+// Icon: "C:/Program Files/Google Mail/icons/logo.png",
+// ActivationArguments: "https://gmail.com",
+// Audio: toast.Mail,
+// }
+//
+// err := toast.Push()
+type Notification struct {
+ // The name of your app. This value shows up in Windows 10's Action Centre, so make it
+ // something readable for your users. It can contain spaces, however special characters
+ // (eg. é) are not supported.
+ AppID string
+
+ // The main title/heading for the toast notification.
+ Title string
+
+ // The single/multi line message to display for the toast notification.
+ Message string
+
+ // An optional path to an image on the OS to display to the left of the title & message.
+ Icon string
+
+ // The type of notification level action (like toast.Action)
+ ActivationType string
+
+ // The activation/action arguments (invoked when the user clicks the notification)
+ ActivationArguments string
+
+ // Optional action buttons to display below the notification title & message.
+ Actions []Action
+
+ // The audio to play when displaying the toast
+ Audio toastAudio
+
+ // Whether to loop the audio (default false)
+ Loop bool
+
+ // How long the toast should show up for (short/long)
+ Duration toastDuration
+}
+
+// Action
+//
+// Defines an actionable button.
+// See https://msdn.microsoft.com/en-us/windows/uwp/controls-and-patterns/tiles-and-notifications-adaptive-interactive-toasts for more info.
+//
+// Only protocol type action buttons are actually useful, as there's no way of receiving feedback from the
+// user's choice. Examples of protocol type action buttons include: "bingmaps:?q=sushi" to open up Windows 10's
+// maps app with a pre-populated search field set to "sushi".
+//
+// toast.Action{"protocol", "Open Maps", "bingmaps:?q=sushi"}
+type Action struct {
+ Type string
+ Label string
+ Arguments string
+}
+
+func (n *Notification) applyDefaults() {
+ if n.ActivationType == "" {
+ n.ActivationType = "protocol"
+ }
+ if n.Duration == "" {
+ n.Duration = Short
+ }
+ if n.Audio == "" {
+ n.Audio = Default
+ }
+}
+
+func (n *Notification) buildXML() (string, error) {
+ var out bytes.Buffer
+ err := toastTemplate.Execute(&out, n)
+ if err != nil {
+ return "", err
+ }
+ return out.String(), nil
+}
+
+// Builds the Windows PowerShell script & invokes it, causing the toast to display.
+//
+// Note: Running the PowerShell script is by far the slowest process here, and can take a few
+// seconds in some cases.
+//
+// notification := toast.Notification{
+// AppID: "Example App",
+// Title: "My notification",
+// Message: "Some message about how important something is...",
+// Icon: "go.png",
+// Actions: []toast.Action{
+// {"protocol", "I'm a button", ""},
+// {"protocol", "Me too!", ""},
+// },
+// }
+// err := notification.Push()
+// if err != nil {
+// log.Fatalln(err)
+// }
+func (n *Notification) Push() error {
+ n.applyDefaults()
+ xml, err := n.buildXML()
+ if err != nil {
+ return err
+ }
+ return invokeTemporaryScript(xml)
+}
+
+// Returns a toastAudio given a user-provided input (useful for cli apps).
+//
+// If the "name" doesn't match, then the default toastAudio is returned, along with ErrorInvalidAudio.
+//
+// The following names are valid;
+// - default
+// - im
+// - mail
+// - reminder
+// - sms
+// - loopingalarm
+// - loopimgalarm[2-10]
+// - loopingcall
+// - loopingcall[2-10]
+// - silent
+//
+// Handle the error appropriately according to how your app should work.
+func Audio(name string) (toastAudio, error) {
+ switch strings.ToLower(name) {
+ case "default":
+ return Default, nil
+ case "im":
+ return IM, nil
+ case "mail":
+ return Mail, nil
+ case "reminder":
+ return Reminder, nil
+ case "sms":
+ return SMS, nil
+ case "loopingalarm":
+ return LoopingAlarm, nil
+ case "loopingalarm2":
+ return LoopingAlarm2, nil
+ case "loopingalarm3":
+ return LoopingAlarm3, nil
+ case "loopingalarm4":
+ return LoopingAlarm4, nil
+ case "loopingalarm5":
+ return LoopingAlarm5, nil
+ case "loopingalarm6":
+ return LoopingAlarm6, nil
+ case "loopingalarm7":
+ return LoopingAlarm7, nil
+ case "loopingalarm8":
+ return LoopingAlarm8, nil
+ case "loopingalarm9":
+ return LoopingAlarm9, nil
+ case "loopingalarm10":
+ return LoopingAlarm10, nil
+ case "loopingcall":
+ return LoopingCall, nil
+ case "loopingcall2":
+ return LoopingCall2, nil
+ case "loopingcall3":
+ return LoopingCall3, nil
+ case "loopingcall4":
+ return LoopingCall4, nil
+ case "loopingcall5":
+ return LoopingCall5, nil
+ case "loopingcall6":
+ return LoopingCall6, nil
+ case "loopingcall7":
+ return LoopingCall7, nil
+ case "loopingcall8":
+ return LoopingCall8, nil
+ case "loopingcall9":
+ return LoopingCall9, nil
+ case "loopingcall10":
+ return LoopingCall10, nil
+ case "silent":
+ return Silent, nil
+ default:
+ return Default, ErrorInvalidAudio
+ }
+}
+
+// Returns a toastDuration given a user-provided input (useful for cli apps).
+//
+// The default duration is short. If the "name" doesn't match, then the default toastDuration is returned,
+// along with ErrorInvalidDuration. Most of the time "short" is the most appropriate for a toast notification,
+// and Microsoft recommend not using "long", but it can be useful for important dialogs or looping sound toasts.
+//
+// The following names are valid;
+// - short
+// - long
+//
+// Handle the error appropriately according to how your app should work.
+func Duration(name string) (toastDuration, error) {
+ switch strings.ToLower(name) {
+ case "short":
+ return Short, nil
+ case "long":
+ return Long, nil
+ default:
+ return Short, ErrorInvalidDuration
+ }
+}
+
+func invokeTemporaryScript(content string) error {
+ id, _ := uuid.NewV4()
+ file := filepath.Join(os.TempDir(), id.String()+".ps1")
+ defer os.Remove(file)
+ bomUtf8 := []byte{0xEF, 0xBB, 0xBF}
+ out := append(bomUtf8, []byte(content)...)
+ err := ioutil.WriteFile(file, out, 0600)
+ if err != nil {
+ return err
+ }
+ cmd := exec.Command("PowerShell", "-ExecutionPolicy", "Bypass", "-File", file)
+ cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
+ if err = cmd.Run(); err != nil {
+ return err
+ }
+ return nil
+}
diff --git a/vendor/github.com/kermieisinthehouse/gosx-notifier/LICENSE-MIT b/vendor/github.com/kermieisinthehouse/gosx-notifier/LICENSE-MIT
new file mode 100644
index 000000000..7302a7721
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/gosx-notifier/LICENSE-MIT
@@ -0,0 +1,22 @@
+Copyright (c) 2012 Ralph Caraveo
+
+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/vendor/github.com/kermieisinthehouse/gosx-notifier/README.md b/vendor/github.com/kermieisinthehouse/gosx-notifier/README.md
new file mode 100644
index 000000000..55c6f8ccd
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/gosx-notifier/README.md
@@ -0,0 +1,179 @@
+gosx-notifier
+===========================
+A [Go](http://golang.org) lib for sending desktop notifications to OSX Mountain Lion's (10.8 or higher REQUIRED)
+[Notification Center](http://www.macworld.com/article/1165411/mountain_lion_hands_on_with_notification_center.html).
+
+[](http://godoc.org/github.com/deckarep/gosx-notifier)
+
+Update 4/3/2014
+------
+On OSX 10.9 and above gosx-notifier now supports images and icons.
+
+
+Synopsis
+--------
+OSX Mountain Lion comes packaged with a built-in notification center. For whatever reason, [Apple sandboxed the
+notification center API](http://forums.macrumors.com/showthread.php?t=1403807) to apps hosted in its App Store. The end
+result? A potentially useful API shackled to Apple's ecosystem.
+
+Thankfully, [Eloy Durán](https://github.com/alloy) put together [an osx app](https://github.com/alloy/terminal-notifier) that allows terminal access to the sandboxed API. **gosx-notifier** embeds this app with a simple interface to the closed API.
+
+It's not perfect, and the implementor will quickly notice its limitations. However, it's a start and any pull requests are accepted and encouraged!
+
+Dependencies:
+-------------
+There are none! If you utilize this package and create a binary executable it will auto-magically install the terminal-notifier component into a temp directory of the server. This is possible because in this latest version the terminal-notifier binary is now statically embedded into the Go source files.
+
+
+Installation and Requirements
+-----------------------------
+The following command will install the notification api for Go along with the binaries. Also, utilizing this lib requires OSX 10.8 or higher. It will simply not work on lower versions of OSX.
+
+```sh
+go get github.com/deckarep/gosx-notifier
+```
+
+Using the Command Line
+-------------
+```Go
+notify "Wow! A notification!!!"
+```
+
+useful for knowing when long running commands finish
+
+```Go
+longRunningCommand && notify done!
+```
+
+Using the Code
+------------------
+It's a pretty straightforward API:
+
+```Go
+package main
+
+import (
+ "github.com/deckarep/gosx-notifier"
+ "log"
+)
+
+func main() {
+ //At a minimum specifiy a message to display to end-user.
+ note := gosxnotifier.NewNotification("Check your Apple Stock!")
+
+ //Optionally, set a title
+ note.Title = "It's money making time 💰"
+
+ //Optionally, set a subtitle
+ note.Subtitle = "My subtitle"
+
+ //Optionally, set a sound from a predefined set.
+ note.Sound = gosxnotifier.Basso
+
+ //Optionally, set a group which ensures only one notification is ever shown replacing previous notification of same group id.
+ note.Group = "com.unique.yourapp.identifier"
+
+ //Optionally, set a sender (Notification will now use the Safari icon)
+ note.Sender = "com.apple.Safari"
+
+ //Optionally, specifiy a url or bundleid to open should the notification be
+ //clicked.
+ note.Link = "http://www.yahoo.com" //or BundleID like: com.apple.Terminal
+
+ //Optionally, an app icon (10.9+ ONLY)
+ note.AppIcon = "gopher.png"
+
+ //Optionally, a content image (10.9+ ONLY)
+ note.ContentImage = "gopher.png"
+
+ //Then, push the notification
+ err := note.Push()
+
+ //If necessary, check error
+ if err != nil {
+ log.Println("Uh oh!")
+ }
+}
+```
+
+Sample App: Desktop Pinger Notification - monitors your websites and will notifiy you when a website is down.
+```Go
+package main
+
+import (
+ "github.com/deckarep/gosx-notifier"
+ "net/http"
+ "strings"
+ "time"
+)
+
+//a slice of string sites that you are interested in watching
+var sites []string = []string{
+ "http://www.yahoo.com",
+ "http://www.google.com",
+ "http://www.bing.com"}
+
+func main() {
+ ch := make(chan string)
+
+ for _, s := range sites {
+ go pinger(ch, s)
+ }
+
+ for {
+ select {
+ case result := <-ch:
+ if strings.HasPrefix(result, "-") {
+ s := strings.Trim(result, "-")
+ showNotification("Urgent, can't ping website: " + s)
+ }
+ }
+ }
+}
+
+func showNotification(message string) {
+
+ note := gosxnotifier.NewNotification(message)
+ note.Title = "Site Down"
+ note.Sound = gosxnotifier.Default
+
+ note.Push()
+}
+
+//Prefixing a site with a + means it's up, while - means it's down
+func pinger(ch chan string, site string) {
+ for {
+ res, err := http.Get(site)
+
+ if err != nil {
+ ch <- "-" + site
+ } else {
+ if res.StatusCode != 200 {
+ ch <- "-" + site
+ } else {
+ ch <- "+" + site
+ }
+ res.Body.Close()
+ }
+ time.Sleep(30 * time.Second)
+ }
+}
+```
+
+Usage Ideas
+-----------
+* Monitor your awesome server cluster and push notifications when something goes haywire (we've all been there)
+* Scrape Hacker News looking for articles of certain keywords and push a notification
+* Monitor your stock performance, push a notification, before you lose all your money
+* Hook it up to ifttt.com and push a notification when your motion-sensor at home goes off
+
+Coming Soon
+-----------
+* Remove ID
+
+Licence
+-------
+This project is dual licensed under [any licensing defined by the underlying apps](https://github.com/alloy/terminal-notifier) and MIT licensed for this version written in Go.
+
+
+[](https://bitdeli.com/free "Bitdeli Badge")
diff --git a/vendor/github.com/kermieisinthehouse/gosx-notifier/example.png b/vendor/github.com/kermieisinthehouse/gosx-notifier/example.png
new file mode 100644
index 000000000..194e25741
Binary files /dev/null and b/vendor/github.com/kermieisinthehouse/gosx-notifier/example.png differ
diff --git a/vendor/github.com/kermieisinthehouse/gosx-notifier/gopher.png b/vendor/github.com/kermieisinthehouse/gosx-notifier/gopher.png
new file mode 100644
index 000000000..ec274053b
Binary files /dev/null and b/vendor/github.com/kermieisinthehouse/gosx-notifier/gopher.png differ
diff --git a/vendor/github.com/kermieisinthehouse/gosx-notifier/gosx-notifier.go b/vendor/github.com/kermieisinthehouse/gosx-notifier/gosx-notifier.go
new file mode 100644
index 000000000..69ab22443
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/gosx-notifier/gosx-notifier.go
@@ -0,0 +1,137 @@
+package gosxnotifier
+
+import (
+ "errors"
+ "net/url"
+ "os/exec"
+ "path/filepath"
+ "strings"
+)
+
+type Sound string
+
+const (
+ Default Sound = "'default'"
+ Basso Sound = "Basso"
+ Blow Sound = "Blow"
+ Bottle Sound = "Bottle"
+ Frog Sound = "Frog"
+ Funk Sound = "Funk"
+ Glass Sound = "Glass"
+ Hero Sound = "Hero"
+ Morse Sound = "Morse"
+ Ping Sound = "Ping"
+ Pop Sound = "Pop"
+ Purr Sound = "Purr"
+ Sosumi Sound = "Sosumi"
+ Submarine Sound = "Submarine"
+ Tink Sound = "Tink"
+)
+
+type Notification struct {
+ Message string //required
+ Title string //optional
+ Subtitle string //optional
+ Sound Sound //optional
+ Link string //optional
+ Sender string //optional
+ Group string //optional
+ AppIcon string //optional
+ ContentImage string //optional
+}
+
+func NewNotification(message string) *Notification {
+ n := &Notification{Message: message}
+ return n
+}
+
+func (n *Notification) Push() error {
+ if supportedOS() {
+ commandTuples := make([]string, 0)
+
+ //check required commands
+ if n.Message == "" {
+ return errors.New("Please specifiy a proper message argument.")
+ } else {
+ commandTuples = append(commandTuples, []string{"-message", n.Message}...)
+ }
+
+ //add title if found
+ if n.Title != "" {
+ commandTuples = append(commandTuples, []string{"-title", n.Title}...)
+ }
+
+ //add subtitle if found
+ if n.Subtitle != "" {
+ commandTuples = append(commandTuples, []string{"-subtitle", n.Subtitle}...)
+ }
+
+ //add sound if specified
+ if n.Sound != "" {
+ commandTuples = append(commandTuples, []string{"-sound", string(n.Sound)}...)
+ }
+
+ //add group if specified
+ if n.Group != "" {
+ commandTuples = append(commandTuples, []string{"-group", n.Group}...)
+ }
+
+ //add appIcon if specified
+ if n.AppIcon != "" {
+ img, err := normalizeImagePath(n.AppIcon)
+
+ if err != nil {
+ return err
+ }
+
+ commandTuples = append(commandTuples, []string{"-appIcon", img}...)
+ }
+
+ //add contentImage if specified
+ if n.ContentImage != "" {
+ img, err := normalizeImagePath(n.ContentImage)
+
+ if err != nil {
+ return err
+ }
+ commandTuples = append(commandTuples, []string{"-contentImage", img}...)
+ }
+
+ //add url if specified
+ url, err := url.Parse(n.Link)
+ if err != nil {
+ n.Link = ""
+ }
+ if url != nil && n.Link != "" {
+ commandTuples = append(commandTuples, []string{"-open", n.Link}...)
+ }
+
+ //add bundle id if specified
+ if strings.HasPrefix(strings.ToLower(n.Link), "com.") {
+ commandTuples = append(commandTuples, []string{"-activate", n.Link}...)
+ }
+
+ //add sender if specified
+ if strings.HasPrefix(strings.ToLower(n.Sender), "com.") {
+ commandTuples = append(commandTuples, []string{"-sender", n.Sender}...)
+ }
+
+ if len(commandTuples) == 0 {
+ return errors.New("Please provide a Message and Type at a minimum.")
+ }
+
+ _, err = exec.Command(FinalPath, commandTuples...).Output()
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func normalizeImagePath(image string) (string, error) {
+ if imagePath, err := filepath.Abs(image); err != nil {
+ return "", errors.New("Could not resolve image path of image: " + image)
+ } else {
+ return imagePath, nil
+ }
+}
diff --git a/vendor/github.com/kermieisinthehouse/gosx-notifier/terminal-app-binary.go b/vendor/github.com/kermieisinthehouse/gosx-notifier/terminal-app-binary.go
new file mode 100644
index 000000000..e59059003
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/gosx-notifier/terminal-app-binary.go
@@ -0,0 +1,3428 @@
+package gosxnotifier
+
+// terminalnotifier returns raw, uncompressed file data.
+func terminalnotifier() []byte {
+ zipFile := []byte{
+ 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05,
+ 0x89, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x16, 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e,
+ 0x61, 0x70, 0x70, 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x59, 0xc1, 0xb1,
+ 0x61, 0xc1, 0xc1, 0xb1, 0x61, 0x59, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b,
+ 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00,
+ 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x09,
+ 0x89, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e,
+ 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73,
+ 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x3c, 0xc8, 0xb1, 0x61, 0x43, 0xc8,
+ 0xb1, 0x61, 0x3c, 0xc8, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04,
+ 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x50, 0x4b, 0x03,
+ 0x04, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x6c, 0x09, 0x89, 0x53, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x06, 0x00, 0x00, 0x29,
+ 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d,
+ 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x49, 0x6e,
+ 0x66, 0x6f, 0x2e, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x54, 0x0d, 0x00,
+ 0x07, 0x3c, 0xc8, 0xb1, 0x61, 0x3c, 0xc8, 0xb1, 0x61, 0x3c, 0xc8, 0xb1,
+ 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04,
+ 0xe8, 0x03, 0x00, 0x00, 0x9d, 0x55, 0xc1, 0x72, 0xda, 0x30, 0x14, 0x3c,
+ 0x37, 0x5f, 0xa1, 0xfa, 0x5c, 0x2c, 0x3b, 0x69, 0x93, 0xa6, 0x43, 0xc8,
+ 0x00, 0x26, 0x2d, 0xad, 0x71, 0x3c, 0x91, 0xe9, 0xa4, 0xa7, 0x8e, 0xb0,
+ 0x05, 0xa8, 0x91, 0x25, 0x8f, 0x24, 0x03, 0xfe, 0x9c, 0x1e, 0xfb, 0x1b,
+ 0xed, 0x8f, 0x55, 0x76, 0xc0, 0x25, 0x76, 0x3c, 0xd3, 0x96, 0x03, 0x83,
+ 0xd0, 0xee, 0x6a, 0xdf, 0xf3, 0xd3, 0xba, 0x7f, 0xbd, 0x4b, 0x19, 0xd8,
+ 0x10, 0xa9, 0xa8, 0xe0, 0x57, 0x96, 0x6b, 0x3b, 0x16, 0x20, 0x3c, 0x16,
+ 0x09, 0xe5, 0xab, 0x2b, 0x6b, 0x1e, 0xdd, 0xf4, 0xde, 0x5a, 0xd7, 0x83,
+ 0x93, 0xfe, 0x4b, 0xef, 0x76, 0x1c, 0x7d, 0x09, 0x27, 0x20, 0x63, 0x54,
+ 0x69, 0x10, 0xce, 0x47, 0xfe, 0x74, 0x0c, 0xac, 0x1e, 0x84, 0xc3, 0x2c,
+ 0x63, 0x04, 0x42, 0x2f, 0xf2, 0x40, 0xe8, 0x4f, 0x51, 0x04, 0x8c, 0x06,
+ 0x84, 0x93, 0xc0, 0x02, 0xd6, 0x5a, 0xeb, 0xec, 0x1d, 0x84, 0xdb, 0xed,
+ 0xd6, 0xc6, 0x25, 0xca, 0x8e, 0x45, 0x5a, 0x02, 0x15, 0x0c, 0xa5, 0xc8,
+ 0x88, 0xd4, 0x85, 0x6f, 0xc4, 0x7a, 0x86, 0x60, 0x27, 0x3a, 0xb1, 0xcc,
+ 0x31, 0x8f, 0xea, 0x4f, 0xec, 0x98, 0x7f, 0x13, 0x1a, 0xeb, 0xc1, 0xc9,
+ 0x8b, 0xfe, 0x03, 0x29, 0x06, 0xa3, 0x9c, 0xb2, 0x64, 0x86, 0xe3, 0x35,
+ 0xe5, 0xe4, 0x16, 0x55, 0xab, 0x3e, 0x2c, 0x37, 0xcc, 0xbe, 0xd2, 0xd2,
+ 0xd8, 0x1e, 0xb8, 0x17, 0xc3, 0xd7, 0xce, 0x9b, 0x3e, 0xdc, 0x2f, 0xf7,
+ 0xc4, 0xf1, 0xcd, 0x28, 0xe7, 0x09, 0x23, 0x1e, 0xd9, 0x10, 0x26, 0xb2,
+ 0x94, 0x70, 0x7d, 0x47, 0x56, 0xe6, 0x98, 0x26, 0x9d, 0xf0, 0x2e, 0xea,
+ 0x64, 0x47, 0xe2, 0x5c, 0xe3, 0x05, 0x23, 0x4d, 0x8e, 0x26, 0x32, 0xa5,
+ 0x1c, 0xb3, 0x1e, 0x17, 0x9a, 0x2e, 0x29, 0x91, 0x5d, 0x12, 0xd3, 0xc4,
+ 0x9c, 0xbb, 0x47, 0x3c, 0x95, 0x58, 0x4a, 0xfb, 0x5b, 0xce, 0x28, 0xe1,
+ 0xbb, 0x9d, 0x2d, 0x94, 0xb2, 0xff, 0x5e, 0x92, 0x2f, 0x85, 0x67, 0x3a,
+ 0x64, 0x4a, 0xc1, 0xb2, 0xf8, 0xfc, 0xd8, 0xbb, 0xa6, 0xfa, 0xb9, 0xed,
+ 0x74, 0xf1, 0x03, 0x9c, 0xfe, 0x7f, 0x3d, 0x21, 0x8e, 0x1f, 0xf0, 0x8a,
+ 0x44, 0x45, 0xd6, 0xd2, 0x18, 0x86, 0xa1, 0xdf, 0x45, 0x43, 0x6b, 0x21,
+ 0xf5, 0xde, 0x2a, 0xaa, 0x10, 0x4d, 0xf6, 0xa9, 0x19, 0x8a, 0x4e, 0xcb,
+ 0x88, 0xae, 0x38, 0xd6, 0xb9, 0x6c, 0x9d, 0x79, 0x6d, 0x3e, 0x9d, 0xa4,
+ 0x3c, 0xcb, 0xcc, 0xa9, 0x24, 0x09, 0x19, 0xd6, 0x4b, 0x21, 0x53, 0x55,
+ 0xb3, 0xb1, 0x94, 0xb8, 0xfc, 0x51, 0xeb, 0x98, 0x01, 0xbb, 0x45, 0xf7,
+ 0xc7, 0x4a, 0xf0, 0x80, 0x79, 0xa2, 0xd9, 0xd1, 0x6d, 0xb7, 0x35, 0x7d,
+ 0x5e, 0x34, 0x16, 0x69, 0x46, 0x59, 0xfb, 0xb9, 0x9b, 0x3b, 0xf1, 0xe7,
+ 0x76, 0x54, 0x08, 0x65, 0x33, 0xb6, 0x49, 0xed, 0x98, 0x61, 0xbe, 0xb2,
+ 0xdd, 0xaf, 0xad, 0x2e, 0x78, 0xd1, 0xa1, 0x82, 0x67, 0xc7, 0xff, 0x72,
+ 0xe8, 0x3a, 0xce, 0xeb, 0x6e, 0x52, 0x87, 0xe7, 0xf7, 0xb3, 0x36, 0x05,
+ 0x79, 0x9f, 0xba, 0x6e, 0xd8, 0xd9, 0xf9, 0x33, 0xbe, 0x0c, 0xfe, 0xb9,
+ 0x69, 0x4a, 0x71, 0x2c, 0xd4, 0xce, 0x75, 0x6c, 0xf7, 0xac, 0xcd, 0xb9,
+ 0x37, 0x61, 0xd3, 0x62, 0x38, 0x97, 0x8e, 0xdb, 0x01, 0xfd, 0x87, 0x9a,
+ 0x7d, 0x34, 0xa3, 0x9c, 0xa6, 0x79, 0x8a, 0x0a, 0xa5, 0x49, 0x57, 0xe1,
+ 0xa5, 0xaf, 0x56, 0x2d, 0x3e, 0x9a, 0x4f, 0x27, 0x8c, 0x94, 0x29, 0x51,
+ 0xe3, 0xb5, 0xcc, 0x09, 0x3c, 0x00, 0x02, 0x64, 0x82, 0x2f, 0x92, 0x98,
+ 0xab, 0x72, 0xa8, 0x90, 0x09, 0x06, 0x49, 0x75, 0x51, 0x63, 0xf7, 0x91,
+ 0x55, 0x63, 0x19, 0x13, 0x5b, 0x35, 0x94, 0x0b, 0xaa, 0xa5, 0xb9, 0xa4,
+ 0xbe, 0xc0, 0x49, 0x3d, 0x7d, 0x47, 0xc2, 0xf0, 0x38, 0xe9, 0x02, 0xf4,
+ 0x21, 0x4f, 0x31, 0xbf, 0x23, 0x38, 0x29, 0x23, 0x67, 0x2c, 0xb2, 0x42,
+ 0xd2, 0xd5, 0x5a, 0x37, 0xfd, 0xd7, 0x1b, 0xe0, 0xe7, 0x0f, 0x70, 0xea,
+ 0xb8, 0xa7, 0x3d, 0xf3, 0x75, 0x01, 0x26, 0x4c, 0x14, 0xc0, 0xcb, 0xe5,
+ 0xaf, 0xef, 0xfc, 0x15, 0xf8, 0x58, 0x25, 0x0b, 0x18, 0x99, 0x91, 0x8a,
+ 0xd7, 0x58, 0x26, 0x36, 0x30, 0x8e, 0x40, 0xc5, 0x52, 0x40, 0x12, 0x45,
+ 0xe4, 0x86, 0x24, 0x76, 0xb3, 0x09, 0x01, 0x9a, 0x61, 0xca, 0x03, 0xba,
+ 0xb8, 0xa1, 0xed, 0xc8, 0x2b, 0xb7, 0x66, 0x84, 0xe7, 0x6d, 0x52, 0x68,
+ 0x96, 0x31, 0xcd, 0x30, 0x1b, 0x33, 0xac, 0x54, 0x93, 0x57, 0x35, 0x8e,
+ 0xd1, 0x18, 0xeb, 0xea, 0x59, 0x34, 0xc9, 0x73, 0xe3, 0x25, 0xa8, 0x42,
+ 0xe7, 0x11, 0x31, 0x34, 0x17, 0x42, 0x23, 0x5d, 0xb4, 0x0d, 0x2c, 0x30,
+ 0xe7, 0xc7, 0xc1, 0x74, 0xe8, 0x5e, 0x1f, 0x56, 0x6f, 0x91, 0xc1, 0xc9,
+ 0x6f, 0x50, 0x4b, 0x07, 0x08, 0x33, 0xf2, 0xe4, 0x12, 0x9d, 0x02, 0x00,
+ 0x00, 0xdc, 0x06, 0x00, 0x00, 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x08,
+ 0x00, 0x08, 0x00, 0x37, 0x4b, 0x61, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x26, 0x00, 0x20, 0x00, 0x74,
+ 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x50, 0x6b, 0x67, 0x49, 0x6e, 0x66,
+ 0x6f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x8a, 0xf5, 0xf9, 0x59, 0x42, 0xc2,
+ 0xb1, 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04,
+ 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x73, 0x0c, 0x08,
+ 0xf0, 0xb1, 0x07, 0x02, 0x00, 0x50, 0x4b, 0x07, 0x08, 0x49, 0x04, 0x8a,
+ 0x5b, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x4b, 0x03,
+ 0x04, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x05, 0x89, 0x53, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d,
+ 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x4d, 0x61,
+ 0x63, 0x4f, 0x53, 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0xd3, 0xc1, 0xb1,
+ 0x61, 0xd6, 0xc1, 0xb1, 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b,
+ 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00,
+ 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x37, 0x4b,
+ 0x61, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0a,
+ 0x01, 0x00, 0x36, 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e,
+ 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73,
+ 0x2f, 0x4d, 0x61, 0x63, 0x4f, 0x53, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x69,
+ 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x55, 0x54, 0x0d, 0x00, 0x07, 0x8a, 0xf5, 0xf9, 0x59, 0xd7, 0xc2, 0xb1,
+ 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8,
+ 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0xed, 0xbd, 0x0b, 0x7c,
+ 0x54, 0xd5, 0xb5, 0x30, 0x7e, 0x26, 0x0f, 0x08, 0x28, 0x84, 0x57, 0x10,
+ 0x54, 0x74, 0x40, 0x90, 0xf0, 0xca, 0x03, 0x08, 0x24, 0x81, 0x48, 0x86,
+ 0x24, 0x38, 0x91, 0x04, 0x42, 0x1e, 0x12, 0x5e, 0x0e, 0x93, 0x99, 0x49,
+ 0x32, 0x32, 0x99, 0x09, 0xf3, 0x80, 0x80, 0xa2, 0xd1, 0x90, 0x96, 0x71,
+ 0x9a, 0x96, 0x5a, 0xb5, 0x68, 0x6b, 0x4b, 0xab, 0xed, 0xf5, 0xb6, 0xb4,
+ 0xc5, 0x5b, 0x51, 0xb4, 0x6a, 0x83, 0xa8, 0xc4, 0x47, 0x15, 0x15, 0x95,
+ 0xaa, 0x55, 0x54, 0xaa, 0x83, 0x50, 0xc4, 0x47, 0x11, 0x1f, 0x30, 0xdf,
+ 0x5a, 0x7b, 0xaf, 0x7d, 0xe6, 0x9c, 0x3d, 0x33, 0x21, 0xdc, 0xff, 0xf7,
+ 0xfb, 0x7f, 0xdf, 0xfd, 0x7d, 0x04, 0xce, 0xd9, 0x7b, 0xed, 0xf5, 0xd8,
+ 0xaf, 0xb5, 0xd7, 0x5e, 0x7b, 0x9f, 0x7d, 0xe6, 0xbc, 0xfc, 0xcd, 0xbf,
+ 0xce, 0xf4, 0x57, 0x14, 0x43, 0xb2, 0xa2, 0xb4, 0x27, 0x29, 0x8a, 0x92,
+ 0x01, 0x57, 0xda, 0x20, 0x45, 0xe9, 0x54, 0x8c, 0x0a, 0xfe, 0x8d, 0x86,
+ 0xcb, 0x0c, 0x97, 0xc5, 0x52, 0x65, 0xba, 0xba, 0x6c, 0x79, 0x59, 0xf5,
+ 0x62, 0x25, 0xe6, 0xcf, 0x10, 0x9b, 0x14, 0xf3, 0x87, 0x72, 0x46, 0x25,
+ 0xa3, 0x9c, 0xda, 0xb2, 0xfa, 0xda, 0x38, 0xfc, 0xed, 0x12, 0x03, 0xc1,
+ 0x50, 0x36, 0x25, 0x15, 0xae, 0x01, 0x94, 0x6c, 0xb1, 0xf8, 0x1d, 0x6d,
+ 0xfe, 0x28, 0x99, 0x2c, 0xef, 0xf8, 0x08, 0x2e, 0x6f, 0xbf, 0x29, 0x0a,
+ 0xeb, 0xfe, 0x52, 0xf4, 0x39, 0x59, 0x2c, 0x3e, 0x7f, 0xa0, 0xc1, 0x97,
+ 0x50, 0xde, 0x93, 0xd7, 0x72, 0x79, 0x6e, 0x83, 0x1e, 0x16, 0x7f, 0x69,
+ 0x24, 0xaf, 0x9f, 0x4e, 0x9e, 0xa5, 0xd9, 0xe1, 0x6a, 0x75, 0x78, 0xe3,
+ 0xc8, 0x9b, 0x5a, 0xcf, 0xf9, 0xbd, 0x49, 0x51, 0x38, 0xa9, 0xd7, 0xf2,
+ 0xd9, 0x7c, 0x7e, 0xaf, 0xd3, 0xdd, 0x94, 0xa0, 0x7c, 0xdb, 0x97, 0x73,
+ 0x79, 0x73, 0x87, 0x44, 0xe1, 0x14, 0x0d, 0xbf, 0x4e, 0x36, 0xe3, 0xf7,
+ 0x34, 0x5c, 0x6f, 0xb3, 0xb4, 0x38, 0xfc, 0xcd, 0x6e, 0x6b, 0x8b, 0x23,
+ 0x46, 0xde, 0x3b, 0xd7, 0x73, 0x79, 0x77, 0x0c, 0x8e, 0xc2, 0xda, 0xbf,
+ 0x04, 0xf2, 0x6c, 0x2e, 0xab, 0xcf, 0x87, 0x02, 0x65, 0x79, 0xad, 0x1b,
+ 0xb8, 0xbc, 0x27, 0x35, 0x70, 0x1f, 0xe4, 0x61, 0xf9, 0xfc, 0x1b, 0x5a,
+ 0x63, 0xcb, 0x97, 0xb5, 0x91, 0xcb, 0x7b, 0x24, 0x25, 0x0a, 0xf7, 0x2e,
+ 0xcf, 0xe6, 0x71, 0xfb, 0xfc, 0x1a, 0x58, 0x2f, 0x2f, 0x7c, 0x13, 0x97,
+ 0x97, 0xa6, 0x81, 0x93, 0x95, 0xc4, 0x7f, 0x16, 0x4b, 0xc0, 0xbd, 0xde,
+ 0xe9, 0xb6, 0x5b, 0x9c, 0xee, 0x46, 0x4f, 0x1c, 0x79, 0x27, 0x84, 0x3c,
+ 0x43, 0x14, 0x96, 0xcb, 0xa4, 0xfd, 0xc3, 0x71, 0x11, 0x4e, 0x45, 0x39,
+ 0xa5, 0xa6, 0x5a, 0x93, 0x06, 0xd1, 0x4e, 0x7a, 0x66, 0x8c, 0xc2, 0x8a,
+ 0x06, 0xc6, 0x71, 0x81, 0xe5, 0x1c, 0xa6, 0x96, 0xcb, 0xed, 0xb2, 0xf8,
+ 0x36, 0xb4, 0x34, 0x78, 0x5c, 0x96, 0x56, 0xbf, 0x37, 0xa1, 0xbc, 0x21,
+ 0x1a, 0x58, 0x5b, 0x4f, 0xd4, 0xdf, 0x22, 0x5d, 0x3d, 0x9b, 0x3c, 0x7e,
+ 0x1d, 0xac, 0x97, 0x37, 0x84, 0xe4, 0x6d, 0xd7, 0xc0, 0xb2, 0xbc, 0x79,
+ 0x3a, 0x7e, 0x97, 0xb5, 0xb7, 0xf2, 0xed, 0x24, 0x79, 0x61, 0x43, 0x14,
+ 0xd6, 0xca, 0xc3, 0xfa, 0xd6, 0xe8, 0xe4, 0xc9, 0xfd, 0xaa, 0x97, 0xb7,
+ 0xed, 0x56, 0x7d, 0x7d, 0x11, 0xee, 0xbd, 0x5f, 0x6d, 0x8d, 0xda, 0x81,
+ 0x26, 0xcb, 0x7b, 0x80, 0xe4, 0x15, 0xf7, 0x8b, 0xc2, 0xbd, 0xcb, 0x8b,
+ 0x8e, 0x0b, 0x97, 0xd3, 0xe7, 0x97, 0xe5, 0x85, 0xb7, 0x48, 0x7a, 0xb7,
+ 0x25, 0x46, 0xde, 0x10, 0x2d, 0x40, 0xf2, 0xdc, 0x2e, 0x9b, 0x2b, 0xae,
+ 0xbc, 0x13, 0x92, 0xbc, 0x13, 0x7d, 0x93, 0x67, 0xb3, 0xfa, 0x51, 0x5a,
+ 0x6c, 0x7d, 0x4f, 0x6d, 0xd1, 0xb7, 0xdf, 0xa9, 0xbe, 0xc9, 0x6b, 0xf5,
+ 0x7a, 0xfc, 0x9e, 0x78, 0xe5, 0x4b, 0x0b, 0x72, 0x79, 0x99, 0x1a, 0xb8,
+ 0x0f, 0xed, 0xe7, 0x6c, 0xb1, 0x36, 0x39, 0x70, 0xa8, 0xc9, 0xf2, 0x72,
+ 0x82, 0xfa, 0xfa, 0x22, 0xdc, 0xdb, 0x38, 0x13, 0xf5, 0x15, 0x4a, 0x23,
+ 0xcb, 0xcb, 0x27, 0x79, 0x3b, 0x2f, 0x8c, 0xc2, 0x7d, 0x28, 0x9f, 0xcf,
+ 0xe1, 0xf2, 0x3a, 0x1a, 0x7d, 0xb1, 0xf2, 0xc2, 0x77, 0x72, 0x79, 0x5b,
+ 0x92, 0xa3, 0xb0, 0x56, 0x5e, 0x6a, 0x2f, 0xed, 0x87, 0x12, 0x65, 0x79,
+ 0xad, 0x77, 0xeb, 0xfb, 0x03, 0xe1, 0xbe, 0xea, 0x5f, 0x3c, 0x79, 0xed,
+ 0x77, 0xeb, 0xc7, 0x6f, 0x7b, 0xac, 0xbc, 0x78, 0xe5, 0xb3, 0x5b, 0xfd,
+ 0x56, 0x82, 0xf5, 0xf2, 0x8c, 0xf7, 0xe8, 0xe5, 0x21, 0xdc, 0x7b, 0xf9,
+ 0x54, 0x51, 0x71, 0xe5, 0x75, 0x93, 0x3c, 0x63, 0x52, 0x14, 0x3e, 0xcb,
+ 0xf8, 0xf5, 0xb4, 0xb4, 0x78, 0xdc, 0x89, 0xe4, 0x1d, 0xfa, 0xb9, 0x5e,
+ 0x5f, 0xf0, 0x4f, 0x2b, 0x4f, 0xf6, 0x61, 0x2c, 0x96, 0x06, 0x9f, 0x4f,
+ 0x07, 0x4b, 0xe3, 0x8d, 0xe4, 0xb5, 0x6b, 0x94, 0x4e, 0x3b, 0xef, 0xca,
+ 0xf2, 0xa2, 0x7e, 0x54, 0x45, 0xf9, 0xa2, 0x85, 0x65, 0xa5, 0xe5, 0x62,
+ 0xce, 0xd8, 0x4e, 0xb4, 0xad, 0x51, 0x18, 0xff, 0xba, 0x69, 0xde, 0xed,
+ 0x2f, 0xc9, 0x1a, 0x07, 0x59, 0xe6, 0x10, 0x5d, 0x18, 0x82, 0x30, 0x84,
+ 0x5b, 0x53, 0xa3, 0xf8, 0xb6, 0xdf, 0x42, 0xd9, 0x00, 0x6e, 0xde, 0xc1,
+ 0xa7, 0x0a, 0x2c, 0xde, 0x28, 0x2c, 0x2f, 0xc0, 0x25, 0x00, 0xac, 0x7e,
+ 0x0d, 0xae, 0xd9, 0x8a, 0x72, 0x01, 0xa4, 0x55, 0x11, 0xcf, 0x3f, 0x0c,
+ 0xfc, 0xc2, 0x7c, 0xde, 0x85, 0x9b, 0x43, 0x49, 0xfc, 0x67, 0x7c, 0x05,
+ 0xf2, 0x8b, 0x93, 0x8e, 0xee, 0x02, 0xe6, 0x87, 0xc3, 0x27, 0x3b, 0xe0,
+ 0xf3, 0x66, 0xbb, 0x9c, 0x0d, 0xd9, 0xf6, 0x0d, 0x2e, 0x3b, 0xe1, 0x2f,
+ 0xa1, 0x72, 0xfc, 0xec, 0x70, 0x68, 0xde, 0x3b, 0xc5, 0x05, 0x2f, 0x3f,
+ 0x64, 0x2f, 0x7d, 0x7c, 0xfd, 0xc2, 0xbd, 0x29, 0xe3, 0x15, 0x52, 0xb4,
+ 0x81, 0x03, 0x15, 0x65, 0xd0, 0x40, 0x65, 0xb2, 0xa2, 0x57, 0x3c, 0xb0,
+ 0x17, 0xed, 0xc8, 0x27, 0xfb, 0x71, 0x98, 0x4f, 0x33, 0xc9, 0xe4, 0x5d,
+ 0x60, 0x60, 0x57, 0x76, 0xcd, 0x06, 0x9f, 0xdf, 0xd1, 0x92, 0x5d, 0xe1,
+ 0x6c, 0xf0, 0x5a, 0xbd, 0x1b, 0xb2, 0x17, 0x78, 0xc1, 0x29, 0x59, 0xef,
+ 0xf1, 0xae, 0xf1, 0x65, 0xd7, 0xd8, 0xbc, 0xce, 0x56, 0x3f, 0x58, 0xf8,
+ 0xf9, 0x5e, 0xa7, 0xbd, 0xc9, 0x91, 0xd5, 0x28, 0x50, 0xd9, 0xd7, 0x3a,
+ 0xbc, 0x3e, 0x27, 0x58, 0x86, 0x6c, 0x93, 0x4c, 0xc4, 0xf2, 0xa9, 0xd7,
+ 0xe5, 0x33, 0xf2, 0x6c, 0xf9, 0x94, 0x78, 0x6c, 0x1e, 0x6b, 0x7c, 0xe9,
+ 0x0c, 0xa5, 0x96, 0x7f, 0xb5, 0x56, 0xee, 0xe0, 0xfb, 0xa0, 0xd7, 0xa6,
+ 0x1a, 0x7a, 0x91, 0xbb, 0xc0, 0x13, 0x70, 0xc3, 0xa0, 0x01, 0x51, 0xf1,
+ 0x84, 0x97, 0x68, 0xf0, 0x24, 0x3f, 0x5f, 0x57, 0xee, 0xc3, 0xbc, 0xdc,
+ 0xa2, 0x6f, 0xe0, 0xc2, 0x11, 0x9d, 0x65, 0xca, 0x82, 0x5e, 0x72, 0x36,
+ 0x68, 0xdb, 0x55, 0xe2, 0x4b, 0x91, 0xf9, 0x78, 0x11, 0xb3, 0xe6, 0x6b,
+ 0x39, 0x63, 0xdb, 0x69, 0x34, 0xcc, 0x94, 0xd3, 0x7a, 0x6b, 0x27, 0x53,
+ 0x6b, 0xeb, 0x42, 0xa7, 0x3f, 0x7e, 0x5d, 0x38, 0x2e, 0x5e, 0x3f, 0x0f,
+ 0xc2, 0x76, 0xba, 0xab, 0xf7, 0xf6, 0xf7, 0x3a, 0x7a, 0x6f, 0x2b, 0x93,
+ 0x44, 0x03, 0x62, 0xaf, 0x24, 0xbd, 0xdb, 0xb2, 0x83, 0xe7, 0x37, 0x89,
+ 0x60, 0x1c, 0x37, 0xe7, 0xff, 0xce, 0xff, 0x9d, 0xff, 0x3b, 0xff, 0x77,
+ 0xfe, 0xef, 0xfc, 0xdf, 0xf9, 0xbf, 0xff, 0xc9, 0x7f, 0x75, 0xe6, 0xe0,
+ 0x3f, 0x57, 0x1d, 0x79, 0xd1, 0xc4, 0x63, 0xa6, 0x6b, 0x6b, 0xca, 0x83,
+ 0x67, 0xcc, 0xa1, 0xa2, 0xf5, 0x9b, 0xc1, 0x39, 0x0f, 0xe5, 0x1d, 0x6c,
+ 0x57, 0x94, 0x48, 0xc6, 0xf5, 0x6b, 0x00, 0x08, 0xee, 0x0b, 0x3f, 0x36,
+ 0x1f, 0xc3, 0xbd, 0xe6, 0xe0, 0x7b, 0x91, 0x8c, 0x46, 0x48, 0xab, 0x28,
+ 0xf8, 0xc2, 0x7f, 0x31, 0x50, 0x3d, 0x06, 0x54, 0x15, 0xc1, 0xaf, 0x22,
+ 0x19, 0x26, 0x22, 0xfc, 0x31, 0x10, 0x1e, 0xbd, 0xc4, 0x1c, 0x4a, 0xdd,
+ 0xfa, 0x7d, 0x48, 0xe8, 0xec, 0x36, 0x77, 0x15, 0x2d, 0x6a, 0x81, 0x58,
+ 0x7a, 0xd9, 0xa9, 0x48, 0xc6, 0x4c, 0x4e, 0xb4, 0xc2, 0x74, 0xdd, 0xaa,
+ 0x23, 0x57, 0xce, 0x57, 0xf3, 0x05, 0x39, 0x1b, 0x51, 0x4e, 0x28, 0xef,
+ 0x5b, 0x70, 0xf4, 0x4d, 0x91, 0x37, 0x50, 0x90, 0x99, 0x72, 0x0c, 0x15,
+ 0x1d, 0xef, 0x60, 0x05, 0xb2, 0xb4, 0x73, 0x5c, 0x28, 0x6f, 0x55, 0x3b,
+ 0xa2, 0xde, 0x33, 0x07, 0x9f, 0x02, 0x78, 0x73, 0xb7, 0xff, 0x6a, 0x48,
+ 0x5b, 0x82, 0x69, 0x5d, 0x19, 0xe3, 0x5a, 0x18, 0x2a, 0x92, 0xf1, 0x20,
+ 0x48, 0x02, 0xd4, 0x54, 0x40, 0x5d, 0x05, 0xa8, 0xc7, 0xd0, 0x21, 0x66,
+ 0x88, 0x6d, 0xd7, 0xf3, 0x82, 0x86, 0xa1, 0xde, 0xe5, 0xc1, 0x67, 0x59,
+ 0xda, 0x1d, 0xd7, 0x63, 0x2d, 0xbe, 0x80, 0x38, 0x2b, 0x5a, 0x48, 0x34,
+ 0xc9, 0x52, 0x2c, 0x5c, 0xc7, 0xb1, 0x51, 0x50, 0x9d, 0x01, 0xc8, 0x16,
+ 0x02, 0xce, 0xb2, 0x43, 0x50, 0x24, 0x1b, 0x2f, 0xd2, 0xb1, 0x9b, 0xb1,
+ 0xd4, 0x45, 0x65, 0xac, 0xd4, 0x6f, 0xa2, 0xd4, 0xdb, 0x49, 0x6a, 0x57,
+ 0xea, 0x6e, 0x17, 0x16, 0xa8, 0x72, 0xbf, 0x39, 0x68, 0x00, 0xe8, 0x79,
+ 0x06, 0xd5, 0x1d, 0x34, 0x07, 0x93, 0x80, 0x7d, 0x2a, 0x67, 0xdf, 0x05,
+ 0xec, 0xa6, 0xdd, 0x58, 0x32, 0xe2, 0xc6, 0x35, 0x15, 0xab, 0x73, 0xde,
+ 0xaf, 0x6f, 0x66, 0xed, 0x6a, 0x0e, 0xbe, 0x05, 0x28, 0xc8, 0xe2, 0x73,
+ 0x27, 0x2b, 0x3e, 0x02, 0xc1, 0xaf, 0x90, 0x3a, 0x94, 0xba, 0xde, 0xc9,
+ 0x4b, 0x34, 0xa7, 0xec, 0x50, 0xe0, 0x02, 0x73, 0xc7, 0xd3, 0xa3, 0xa0,
+ 0xec, 0x26, 0xcb, 0xaa, 0xbd, 0xe1, 0x61, 0xc5, 0xd1, 0xe2, 0x9b, 0xea,
+ 0x4c, 0xb5, 0x35, 0x55, 0x90, 0xe5, 0xaf, 0x6e, 0x65, 0x59, 0x26, 0xf1,
+ 0x12, 0xff, 0xc4, 0xa9, 0xe6, 0x79, 0xa8, 0x58, 0xe4, 0x39, 0xeb, 0x66,
+ 0xd6, 0x84, 0xf3, 0x5c, 0x22, 0x2b, 0x44, 0xef, 0x29, 0xe6, 0xcd, 0xf5,
+ 0xe7, 0x62, 0x5e, 0xb1, 0x50, 0xde, 0x45, 0xbc, 0x68, 0x80, 0x2f, 0x0f,
+ 0x3e, 0x53, 0x11, 0x9a, 0xb0, 0xd4, 0x49, 0xf0, 0x01, 0xc6, 0x75, 0x00,
+ 0x32, 0x9b, 0xc9, 0x33, 0xbb, 0xf3, 0x26, 0x35, 0x97, 0x8d, 0xc4, 0xde,
+ 0x95, 0xa1, 0xb8, 0x78, 0xcd, 0x42, 0x79, 0xcf, 0x46, 0xd1, 0x2b, 0x28,
+ 0x97, 0xca, 0x62, 0xa1, 0x66, 0x80, 0xff, 0x23, 0xc7, 0x97, 0x07, 0xf7,
+ 0x71, 0xc1, 0x94, 0x49, 0x57, 0x51, 0x7b, 0x89, 0xa2, 0xe4, 0x76, 0x57,
+ 0x04, 0x8f, 0x57, 0x04, 0xbf, 0xa9, 0x08, 0x1e, 0x81, 0xba, 0xa7, 0xad,
+ 0x30, 0xad, 0x34, 0xad, 0x62, 0xf5, 0x3f, 0x32, 0x31, 0x5e, 0xf5, 0x7f,
+ 0x7d, 0x0b, 0x2b, 0x51, 0xf2, 0x4d, 0xac, 0xfa, 0x77, 0x34, 0xab, 0x39,
+ 0xbf, 0x3f, 0x4f, 0x54, 0x7f, 0xf6, 0x4d, 0xac, 0xfa, 0xc5, 0x6b, 0xb4,
+ 0xd5, 0x7f, 0x6a, 0x1e, 0x2f, 0xd8, 0x43, 0xf3, 0x44, 0xf5, 0x47, 0xdd,
+ 0xa4, 0xaf, 0x7e, 0x7d, 0x73, 0x4c, 0xf5, 0xf3, 0x78, 0x66, 0x77, 0x6d,
+ 0x52, 0x73, 0xb9, 0x61, 0x9e, 0xa8, 0xbe, 0x61, 0x8d, 0xa8, 0xfe, 0xbe,
+ 0x28, 0x7a, 0x25, 0xe5, 0xb2, 0x68, 0x9e, 0xa6, 0xfa, 0x7f, 0xda, 0x94,
+ 0xa0, 0xfa, 0xc1, 0x85, 0xd1, 0xea, 0x4b, 0x75, 0x9f, 0x32, 0x4f, 0xaa,
+ 0x3b, 0x68, 0x6f, 0x7d, 0x79, 0xf0, 0xb4, 0x39, 0xf8, 0x66, 0x24, 0xe3,
+ 0xe1, 0x26, 0x2c, 0xc4, 0x3e, 0x10, 0xbd, 0x72, 0x13, 0x1b, 0x6d, 0x5d,
+ 0x4d, 0x58, 0x96, 0x08, 0x0d, 0xb8, 0x37, 0xaf, 0x42, 0xf4, 0xd3, 0xa0,
+ 0x59, 0xa9, 0x4d, 0x58, 0xfe, 0x21, 0x40, 0x38, 0x07, 0x09, 0x83, 0x1f,
+ 0x13, 0xc5, 0xae, 0xab, 0x58, 0xf1, 0x20, 0x21, 0x92, 0x61, 0x45, 0x9a,
+ 0xce, 0xb7, 0xfd, 0x30, 0x36, 0xf2, 0xc6, 0x30, 0xaa, 0x4f, 0x41, 0x59,
+ 0x23, 0x19, 0x05, 0x90, 0x7e, 0xe4, 0x54, 0x1a, 0x26, 0xb4, 0xf4, 0x98,
+ 0x83, 0xab, 0xb6, 0x56, 0x04, 0x37, 0x6d, 0x81, 0x36, 0x31, 0xb5, 0xb3,
+ 0x36, 0xf9, 0xe6, 0x46, 0x75, 0x80, 0x37, 0x5d, 0x25, 0x8a, 0xf3, 0xaf,
+ 0x1b, 0xb5, 0xe5, 0x58, 0x7c, 0x95, 0xe8, 0x91, 0x7f, 0xdc, 0xc8, 0x7a,
+ 0xe4, 0xb8, 0xd0, 0xfd, 0x37, 0x78, 0x8b, 0x7f, 0xd4, 0x48, 0xf0, 0x01,
+ 0xc6, 0x74, 0xc0, 0xbc, 0x3b, 0xc2, 0xff, 0x6e, 0x2e, 0x2f, 0x78, 0x26,
+ 0xbd, 0xf3, 0x17, 0x69, 0x98, 0x53, 0xd1, 0xfe, 0x9b, 0x59, 0x86, 0xc1,
+ 0x68, 0x86, 0x27, 0x8b, 0x58, 0x86, 0xc0, 0x04, 0xe9, 0x1b, 0xa2, 0xe9,
+ 0xef, 0x16, 0xf1, 0x0c, 0xbb, 0x32, 0xee, 0xe7, 0x39, 0x01, 0xba, 0x81,
+ 0xa3, 0x21, 0xc3, 0x5e, 0x72, 0x2a, 0xe2, 0x39, 0xb9, 0x79, 0x4e, 0x57,
+ 0x47, 0x25, 0xfe, 0xa0, 0x48, 0x54, 0xad, 0x50, 0x57, 0x35, 0x3f, 0x4b,
+ 0x7f, 0x06, 0xd2, 0x27, 0xf3, 0xaa, 0xd5, 0xb0, 0xb1, 0xf3, 0x29, 0xa1,
+ 0xeb, 0x8a, 0xa8, 0x7d, 0x3f, 0x8d, 0xe6, 0xd8, 0x95, 0x91, 0xdd, 0x8c,
+ 0xa9, 0xab, 0xb6, 0xf1, 0x82, 0x3d, 0x77, 0x03, 0xcf, 0xe5, 0x51, 0x51,
+ 0x12, 0x73, 0x41, 0x4f, 0xfa, 0xe6, 0x67, 0xfb, 0xb3, 0x92, 0xbc, 0x78,
+ 0x13, 0x2b, 0x49, 0xdd, 0x0d, 0x6a, 0x49, 0x92, 0x28, 0xc7, 0xae, 0x8c,
+ 0x4c, 0x9e, 0x15, 0xb4, 0x5f, 0xe3, 0x0d, 0x18, 0xfb, 0x88, 0x28, 0x0e,
+ 0xcd, 0x45, 0xf1, 0x65, 0x0f, 0x00, 0xc9, 0x04, 0x22, 0x51, 0x71, 0x4f,
+ 0xcf, 0x15, 0x2d, 0x33, 0x59, 0x46, 0xfd, 0x27, 0x67, 0xdb, 0x0d, 0xb8,
+ 0x2c, 0x19, 0xd7, 0x35, 0x17, 0x13, 0x3e, 0xe3, 0x0a, 0x9f, 0xa3, 0x62,
+ 0x23, 0xaf, 0x20, 0xb2, 0x95, 0x33, 0xee, 0x04, 0xe5, 0x49, 0xef, 0xec,
+ 0x06, 0xdb, 0x97, 0x1b, 0x09, 0xbf, 0x3b, 0x47, 0x51, 0x3a, 0xbb, 0xd3,
+ 0x3b, 0x1f, 0x54, 0xd8, 0xf0, 0x9c, 0xc0, 0xaa, 0x51, 0x74, 0x25, 0xaf,
+ 0x4d, 0xff, 0x1b, 0x30, 0x18, 0x73, 0xc8, 0x0e, 0xf3, 0xd1, 0x6b, 0x28,
+ 0x21, 0x8b, 0x4b, 0xd8, 0x0f, 0xb8, 0x2f, 0x36, 0xb2, 0x81, 0xc3, 0xd3,
+ 0x47, 0xce, 0x25, 0x05, 0xce, 0x3b, 0xbc, 0x91, 0xb5, 0x7a, 0x45, 0xf0,
+ 0x03, 0x8e, 0xf9, 0x6e, 0x8e, 0x50, 0x5c, 0xa8, 0x7e, 0xd3, 0x46, 0x96,
+ 0xc9, 0x76, 0x3b, 0x1f, 0x7e, 0xa1, 0x4d, 0xfb, 0x59, 0x50, 0xf4, 0xfd,
+ 0x4d, 0x2c, 0xbb, 0x9d, 0x1b, 0x71, 0xde, 0xf3, 0xda, 0x19, 0xf0, 0x7b,
+ 0x00, 0x1e, 0x4d, 0x61, 0x53, 0xc7, 0xbe, 0xf2, 0xe0, 0x7b, 0x30, 0xe0,
+ 0x22, 0x19, 0x4b, 0xed, 0x24, 0x2c, 0x12, 0xc9, 0x58, 0x01, 0xf1, 0xca,
+ 0xce, 0x93, 0x81, 0x21, 0xe6, 0x8e, 0x4d, 0xbb, 0x95, 0xc0, 0x00, 0xac,
+ 0xd4, 0xe6, 0xea, 0x7e, 0xac, 0xc3, 0xba, 0x01, 0x91, 0xde, 0xb9, 0xba,
+ 0x1f, 0xeb, 0xe8, 0xdf, 0x35, 0xaa, 0xad, 0x90, 0x31, 0xd2, 0xce, 0x47,
+ 0x7b, 0xe3, 0x9c, 0xe8, 0x9c, 0x3a, 0xcc, 0xce, 0x86, 0x53, 0xfa, 0xe6,
+ 0xdb, 0x20, 0xb3, 0x70, 0xca, 0x1c, 0x5e, 0x93, 0xae, 0xa2, 0xdf, 0x5c,
+ 0x03, 0xe0, 0x20, 0x22, 0x84, 0xe1, 0x66, 0x81, 0x42, 0x9d, 0xb9, 0x81,
+ 0x69, 0x69, 0x78, 0x75, 0xa1, 0xd0, 0xb2, 0x99, 0x1b, 0x78, 0xca, 0xa2,
+ 0x42, 0x56, 0x6f, 0x73, 0xf0, 0xd9, 0xf0, 0x9f, 0x0a, 0x59, 0xbe, 0xd3,
+ 0x79, 0xbe, 0x40, 0x83, 0xcf, 0x9a, 0x22, 0x19, 0xf7, 0xd8, 0x78, 0xde,
+ 0x9f, 0x14, 0xb2, 0x26, 0x3e, 0x8a, 0xaa, 0x1b, 0x4c, 0x3d, 0x7c, 0x33,
+ 0xe2, 0x7e, 0x68, 0x63, 0x83, 0x3d, 0xdc, 0x8e, 0x52, 0x42, 0x13, 0xe6,
+ 0xa1, 0xd0, 0x50, 0xdd, 0x6e, 0x73, 0xe7, 0xab, 0xfe, 0x3c, 0xb4, 0x47,
+ 0x0c, 0xde, 0xd4, 0x13, 0xc9, 0xa8, 0xb3, 0xb1, 0x58, 0xb7, 0xb9, 0x33,
+ 0x92, 0xbe, 0xf9, 0x27, 0xa9, 0xac, 0xa5, 0xee, 0x66, 0xe2, 0xe7, 0xd8,
+ 0xd8, 0xa4, 0x1f, 0x18, 0x7d, 0xe4, 0xc6, 0x54, 0x14, 0x12, 0xc0, 0x46,
+ 0x80, 0xce, 0x9b, 0x01, 0xe9, 0xe9, 0x9b, 0xf1, 0x31, 0x15, 0x64, 0x7a,
+ 0xed, 0x8d, 0x8c, 0xc3, 0xb3, 0x81, 0x19, 0xa1, 0x34, 0x9b, 0xaa, 0xac,
+ 0x75, 0x54, 0xa1, 0xae, 0x8c, 0x4b, 0x9a, 0x24, 0x95, 0x2a, 0x2c, 0x8c,
+ 0xb6, 0xd5, 0x47, 0x0d, 0xdc, 0xf4, 0xcc, 0x01, 0xc2, 0xcf, 0x1b, 0x25,
+ 0xc2, 0xa1, 0x85, 0xc2, 0x7a, 0x5c, 0x84, 0xe5, 0xed, 0x1a, 0x74, 0xa2,
+ 0x91, 0xda, 0xe4, 0x2d, 0x46, 0x01, 0xfc, 0xbf, 0x6d, 0xc0, 0x94, 0x4d,
+ 0xfb, 0x81, 0xfd, 0x0b, 0x4d, 0xb7, 0xdc, 0xdc, 0xc0, 0x9b, 0xe6, 0xe5,
+ 0x82, 0x68, 0x56, 0x37, 0x50, 0x56, 0x73, 0x81, 0x76, 0x9f, 0x9c, 0xd5,
+ 0x6f, 0x0b, 0x44, 0x56, 0x3b, 0xda, 0x58, 0x56, 0xcf, 0x34, 0xb2, 0x76,
+ 0xd9, 0xaf, 0xc9, 0xab, 0xb0, 0x81, 0x75, 0xc3, 0x0b, 0x9a, 0x7c, 0x2e,
+ 0xa2, 0x7c, 0x9a, 0x34, 0xf9, 0x0c, 0xe7, 0xf9, 0x80, 0x5a, 0xfe, 0x7d,
+ 0xbd, 0xa2, 0xb0, 0xec, 0xb6, 0xc9, 0xd9, 0xcd, 0x56, 0xb3, 0x2b, 0xe2,
+ 0xd9, 0xdd, 0x15, 0x9b, 0xdd, 0x0b, 0x56, 0x96, 0xdd, 0xcf, 0x35, 0xd9,
+ 0x3d, 0x60, 0xe5, 0xd9, 0x9d, 0xca, 0x8f, 0x66, 0x77, 0xbf, 0x95, 0x57,
+ 0x6b, 0x7e, 0x45, 0x57, 0x51, 0xab, 0x4a, 0x0b, 0xda, 0x4d, 0x59, 0xbd,
+ 0x98, 0x2f, 0xb2, 0x7a, 0x75, 0xbd, 0x9a, 0x47, 0x45, 0xf0, 0x6b, 0x28,
+ 0x5f, 0xc1, 0x7a, 0xea, 0x2e, 0x10, 0xb3, 0x8a, 0xe7, 0xb6, 0x48, 0x93,
+ 0x5b, 0x21, 0xe5, 0x76, 0x9b, 0x26, 0xb7, 0x59, 0x9a, 0xdc, 0xc6, 0xc5,
+ 0xc9, 0xed, 0x3a, 0x35, 0x37, 0xbb, 0x9c, 0xdb, 0x0b, 0xeb, 0xa2, 0xb9,
+ 0x7d, 0xba, 0x9a, 0xe5, 0xa6, 0x68, 0x72, 0x7b, 0x71, 0x35, 0xcf, 0xed,
+ 0x52, 0x4d, 0x6e, 0x3d, 0xab, 0x69, 0x24, 0xcd, 0x33, 0x30, 0xbb, 0x71,
+ 0x82, 0xa9, 0x41, 0xc6, 0x73, 0x0e, 0xa9, 0x39, 0xc3, 0xb3, 0x85, 0xb5,
+ 0x38, 0xb9, 0x8e, 0x8d, 0x1e, 0xb0, 0x16, 0x84, 0xfa, 0xdb, 0x6c, 0x9a,
+ 0x28, 0x60, 0x9e, 0xdb, 0xb0, 0x1a, 0x47, 0x78, 0xc4, 0xbf, 0x00, 0x08,
+ 0x5f, 0x5f, 0xc7, 0x54, 0x29, 0x92, 0x51, 0x4b, 0xf9, 0xde, 0x3f, 0x5b,
+ 0x1d, 0x98, 0xb9, 0x80, 0x7f, 0x42, 0xe0, 0x67, 0x12, 0x7e, 0xf3, 0x6c,
+ 0xee, 0x03, 0x07, 0x57, 0x6d, 0xf7, 0x67, 0x9a, 0x1e, 0x32, 0x1c, 0x9d,
+ 0x03, 0x54, 0xbf, 0x5c, 0x87, 0x36, 0xef, 0xe8, 0x40, 0x88, 0xde, 0x21,
+ 0x18, 0x92, 0x57, 0xa3, 0xb7, 0x6a, 0x4a, 0xbf, 0xf3, 0xe9, 0xa3, 0x93,
+ 0x21, 0xfd, 0x46, 0x91, 0x7e, 0xd4, 0x22, 0xd2, 0x73, 0x41, 0x0a, 0x0c,
+ 0xf5, 0x31, 0x47, 0x2c, 0xcc, 0x0c, 0x86, 0x36, 0x6d, 0x87, 0x3b, 0xe8,
+ 0xbf, 0x5d, 0x8c, 0xef, 0xad, 0x01, 0x1c, 0x80, 0x8f, 0x59, 0x78, 0xce,
+ 0x03, 0x79, 0xc9, 0xca, 0x36, 0x1f, 0x4e, 0xdf, 0x7c, 0xca, 0xc0, 0xed,
+ 0xe8, 0x3a, 0xa6, 0x35, 0xdd, 0x76, 0xb5, 0x8d, 0x23, 0x19, 0x21, 0x0b,
+ 0x4d, 0x78, 0xa9, 0x3f, 0x66, 0xb1, 0xbd, 0x91, 0xd7, 0x30, 0xdf, 0xd7,
+ 0xa0, 0xe9, 0xab, 0x02, 0x6c, 0xb0, 0x06, 0xdb, 0x30, 0x83, 0x33, 0xd4,
+ 0x32, 0x7f, 0x9e, 0xa5, 0x99, 0x42, 0x67, 0x05, 0xd4, 0x91, 0xfb, 0xb3,
+ 0x59, 0xa2, 0x0b, 0x9f, 0x0b, 0xb0, 0xe6, 0xbe, 0xc7, 0x2e, 0xe6, 0x6c,
+ 0x13, 0xb4, 0x31, 0xcb, 0x21, 0x5b, 0x97, 0x83, 0xa9, 0xfd, 0x3b, 0x43,
+ 0x05, 0x14, 0x23, 0x60, 0x82, 0x4c, 0x6a, 0xdb, 0xb8, 0xbf, 0x18, 0x20,
+ 0x47, 0x9d, 0xa4, 0x96, 0xa9, 0x52, 0x17, 0x32, 0xa9, 0x83, 0xec, 0x76,
+ 0x79, 0x2c, 0xbf, 0x75, 0x1d, 0xcb, 0x6e, 0x8d, 0xda, 0x0c, 0x41, 0xbf,
+ 0xca, 0xde, 0x6f, 0x96, 0xe8, 0x1d, 0xa0, 0x70, 0x62, 0x81, 0xd2, 0xcb,
+ 0x5e, 0xa3, 0x72, 0x9b, 0x43, 0x30, 0x03, 0x05, 0x53, 0xc6, 0xa3, 0x41,
+ 0x33, 0x87, 0x2a, 0x1f, 0xa8, 0x08, 0x9e, 0x60, 0xd6, 0x2a, 0x78, 0xa2,
+ 0x32, 0xf8, 0x75, 0x64, 0x3f, 0x2b, 0xf1, 0x98, 0x4d, 0xd7, 0x61, 0x5b,
+ 0xb3, 0xe2, 0x02, 0xdd, 0x4e, 0x76, 0xdf, 0x8d, 0x09, 0x5f, 0xb1, 0xe8,
+ 0x03, 0x18, 0xfd, 0x94, 0x45, 0xb7, 0x61, 0x93, 0xa1, 0x9f, 0x03, 0xfe,
+ 0x4e, 0x28, 0xaf, 0xec, 0x3a, 0x51, 0x79, 0x36, 0x09, 0x9d, 0x00, 0x27,
+ 0xad, 0x3e, 0xea, 0xa4, 0x45, 0x60, 0x01, 0x91, 0x37, 0x10, 0x8a, 0x79,
+ 0xb4, 0x3f, 0x44, 0x06, 0xf8, 0x85, 0x55, 0x8d, 0xac, 0x82, 0x24, 0x73,
+ 0xd8, 0x3c, 0x93, 0xf7, 0xa0, 0x39, 0x8f, 0xe6, 0xde, 0xa2, 0x45, 0x30,
+ 0x7e, 0x8e, 0x16, 0xa1, 0xfe, 0xf9, 0x04, 0xed, 0x6b, 0x40, 0xfb, 0x57,
+ 0xf6, 0x84, 0x38, 0x34, 0x93, 0x35, 0xdd, 0x40, 0x12, 0x53, 0x11, 0xfc,
+ 0x3c, 0x92, 0xb1, 0x6b, 0x15, 0x9b, 0x55, 0x5b, 0x11, 0xd5, 0x55, 0xf4,
+ 0x69, 0x03, 0xba, 0x8b, 0xe6, 0xe0, 0xbb, 0xe1, 0x8f, 0x67, 0x28, 0x7c,
+ 0x0d, 0x74, 0xbf, 0xca, 0x5e, 0x31, 0x33, 0xc6, 0x59, 0x46, 0x57, 0x31,
+ 0xb4, 0x8a, 0xdc, 0xdd, 0xa2, 0x07, 0xd7, 0x31, 0xf9, 0xaf, 0xfa, 0xd0,
+ 0x58, 0x4f, 0x5b, 0xb1, 0x0a, 0xdb, 0xf9, 0x73, 0x53, 0xe4, 0x75, 0x2c,
+ 0xe2, 0x6f, 0x66, 0x8a, 0x09, 0xe8, 0x2f, 0x3e, 0x72, 0x73, 0x58, 0x7a,
+ 0xd7, 0x4c, 0xd1, 0x6f, 0x1d, 0x3e, 0x6a, 0x89, 0xd7, 0xcb, 0x99, 0x1a,
+ 0x44, 0x32, 0x26, 0xad, 0xc2, 0xf1, 0x74, 0x38, 0x90, 0x05, 0xb2, 0xeb,
+ 0xb8, 0xec, 0x3f, 0x32, 0x66, 0x28, 0xf7, 0xe9, 0x95, 0xbc, 0xea, 0x95,
+ 0x33, 0xa3, 0x33, 0xec, 0xd7, 0x2b, 0x31, 0x0f, 0xe8, 0x8d, 0xa2, 0xd9,
+ 0x9c, 0x7a, 0x88, 0x0f, 0x3b, 0xf8, 0x75, 0x88, 0xdd, 0xc4, 0x84, 0xef,
+ 0x63, 0x86, 0xe4, 0x75, 0xa4, 0x0f, 0x4d, 0x78, 0x61, 0x25, 0x95, 0xe3,
+ 0x80, 0xea, 0x92, 0x4b, 0x1e, 0xf2, 0x9f, 0x66, 0xc4, 0x56, 0xf8, 0x85,
+ 0xf2, 0x20, 0xac, 0xb1, 0xf2, 0xee, 0x12, 0xcc, 0x6f, 0xa0, 0x77, 0x01,
+ 0xd2, 0x26, 0x88, 0xd2, 0xbf, 0xc1, 0x3b, 0xa2, 0xac, 0x81, 0xcd, 0x58,
+ 0xd7, 0x32, 0xba, 0x8f, 0x84, 0x16, 0xee, 0x0b, 0xdf, 0x3b, 0x83, 0x9c,
+ 0xac, 0xa2, 0x92, 0x06, 0x0d, 0x0a, 0xaa, 0x0c, 0xd4, 0xf9, 0x2b, 0xa3,
+ 0xca, 0xf0, 0x71, 0xd8, 0x3b, 0x43, 0x34, 0xcd, 0x7e, 0x2f, 0xf9, 0x28,
+ 0x9f, 0x98, 0x83, 0x7f, 0x8f, 0x64, 0x18, 0x56, 0x52, 0x5b, 0xa2, 0x3b,
+ 0xf2, 0x46, 0x65, 0xf0, 0x4b, 0xc0, 0x85, 0x4b, 0x67, 0x88, 0x35, 0x2a,
+ 0xab, 0x11, 0x77, 0x0b, 0xbf, 0x92, 0x6a, 0xf4, 0x8f, 0xe9, 0xb1, 0x3e,
+ 0x7f, 0x66, 0x65, 0xf0, 0xc5, 0x4a, 0x64, 0x7c, 0xc1, 0x0c, 0x13, 0x1d,
+ 0xa8, 0xe6, 0x10, 0xe8, 0xbc, 0x87, 0x57, 0x60, 0xde, 0x6f, 0xb2, 0xc6,
+ 0x02, 0xc7, 0x8d, 0x75, 0x0b, 0x7a, 0x62, 0xac, 0xa9, 0x30, 0xd6, 0xc3,
+ 0x5c, 0x7d, 0xe8, 0xaa, 0x67, 0x45, 0x5f, 0x96, 0x75, 0x43, 0x33, 0xcc,
+ 0x5a, 0xcb, 0xc6, 0xd8, 0xc7, 0x16, 0xb6, 0x72, 0x61, 0x86, 0xb7, 0x66,
+ 0x05, 0xef, 0xa9, 0xfb, 0xa6, 0x47, 0x0d, 0xef, 0xe2, 0x15, 0xd1, 0xb9,
+ 0xf2, 0x2f, 0x16, 0xe6, 0x63, 0x4d, 0x5d, 0x21, 0x58, 0x68, 0xa1, 0xe3,
+ 0x9b, 0x2e, 0xaa, 0x6f, 0x5d, 0xab, 0x99, 0xbc, 0xde, 0x64, 0x02, 0x06,
+ 0xaf, 0x60, 0x16, 0x67, 0x29, 0x53, 0xe5, 0xbc, 0xdd, 0x6b, 0x99, 0x17,
+ 0x72, 0x64, 0x39, 0x76, 0xf7, 0x01, 0xae, 0x66, 0x3b, 0xd6, 0xf2, 0xf1,
+ 0x1f, 0x5a, 0xb5, 0x9b, 0xf1, 0x1d, 0x80, 0x5a, 0x1d, 0x5c, 0x2e, 0x54,
+ 0x0c, 0x08, 0x7e, 0xa2, 0x12, 0xec, 0xe4, 0x04, 0x2a, 0xe6, 0x16, 0x15,
+ 0xd3, 0x23, 0x61, 0x3c, 0x6b, 0xa9, 0x23, 0x3e, 0xe7, 0xfe, 0xb6, 0xc5,
+ 0x22, 0x56, 0x68, 0x45, 0xad, 0x2c, 0x6f, 0xb6, 0xff, 0x91, 0x2b, 0x2a,
+ 0x8a, 0x4c, 0x38, 0xbd, 0xe0, 0xa3, 0x10, 0xa0, 0xce, 0x55, 0xa9, 0xd3,
+ 0xa3, 0xd4, 0x3f, 0xc8, 0xc5, 0xc4, 0x40, 0x0f, 0xf7, 0xf5, 0x47, 0x52,
+ 0x55, 0xa1, 0xab, 0x09, 0xef, 0xca, 0x15, 0xcd, 0x90, 0xc4, 0xda, 0x76,
+ 0xd0, 0x94, 0xd5, 0x51, 0xc3, 0x76, 0x80, 0x9b, 0x4b, 0x65, 0xb9, 0x6a,
+ 0x2e, 0xc1, 0x69, 0x0f, 0xf4, 0x44, 0x5e, 0x2b, 0x0f, 0xfe, 0x03, 0x9a,
+ 0x27, 0x93, 0x19, 0x81, 0xbc, 0x57, 0x20, 0xb7, 0xdc, 0x57, 0x49, 0xde,
+ 0xa5, 0x24, 0xaf, 0x6b, 0x50, 0x12, 0x09, 0x0a, 0xe5, 0x3d, 0xd0, 0x8a,
+ 0x69, 0x9a, 0x9a, 0x76, 0x65, 0xfc, 0xe6, 0x3a, 0x51, 0x56, 0x9b, 0x07,
+ 0x27, 0x8b, 0xae, 0x65, 0xbc, 0x17, 0xff, 0x91, 0x13, 0xed, 0xc5, 0xe0,
+ 0x32, 0xde, 0x8b, 0x0e, 0xa0, 0x0f, 0xa8, 0xf4, 0x33, 0x3c, 0x6a, 0xdd,
+ 0x76, 0x02, 0x71, 0x65, 0xf0, 0xdf, 0x7c, 0x31, 0x3c, 0xa7, 0x55, 0x54,
+ 0xed, 0x73, 0x42, 0xff, 0x38, 0x47, 0x54, 0x6d, 0x76, 0x6b, 0x4c, 0x9d,
+ 0xa6, 0x2e, 0x53, 0xeb, 0xf4, 0x55, 0x65, 0xf0, 0x38, 0x1a, 0xcd, 0x69,
+ 0x07, 0xdd, 0x90, 0xd6, 0xb1, 0xa9, 0x5b, 0x61, 0x4e, 0xe6, 0xc0, 0x56,
+ 0xd6, 0xaa, 0x2b, 0x70, 0xae, 0x08, 0xad, 0xea, 0xe6, 0x9a, 0xbf, 0xb9,
+ 0x1b, 0x78, 0xdb, 0xea, 0x99, 0x01, 0xc7, 0xf5, 0xe6, 0xbf, 0x3c, 0x5a,
+ 0xc9, 0x5d, 0x19, 0x95, 0xd7, 0x91, 0x9a, 0x1d, 0x8f, 0x64, 0x3c, 0x5a,
+ 0xcf, 0xeb, 0x34, 0x40, 0x53, 0xa7, 0x5d, 0xf5, 0xbc, 0x4e, 0x38, 0xd5,
+ 0x1c, 0x61, 0x9d, 0x91, 0x37, 0xd9, 0xa3, 0x4e, 0x35, 0xac, 0xd8, 0x6f,
+ 0x65, 0x8b, 0x62, 0xb7, 0x7a, 0x58, 0x8f, 0x7c, 0x7d, 0x9d, 0xbe, 0xf4,
+ 0x91, 0x0c, 0x4f, 0x3d, 0x53, 0xcf, 0x6e, 0x2e, 0x60, 0x6d, 0xb4, 0x45,
+ 0x7e, 0xa1, 0xf2, 0xda, 0x3d, 0x34, 0x9d, 0xd6, 0xed, 0x67, 0x3b, 0x01,
+ 0x79, 0x2b, 0x3c, 0xe4, 0x5a, 0x7c, 0xa3, 0xb6, 0x41, 0x66, 0xbd, 0x76,
+ 0x1a, 0x44, 0x37, 0x9a, 0x35, 0x87, 0x39, 0x78, 0x10, 0xc6, 0x75, 0xa6,
+ 0x76, 0x9a, 0xd0, 0x0f, 0xea, 0x5b, 0x8e, 0xe5, 0xb3, 0x79, 0x3c, 0xf5,
+ 0xe6, 0xa5, 0x0a, 0xed, 0x44, 0xed, 0x67, 0xb6, 0xfa, 0x3d, 0x84, 0x83,
+ 0x9d, 0xf9, 0xb0, 0x18, 0x84, 0xe2, 0x8d, 0xe5, 0xc5, 0x7b, 0xd5, 0xcd,
+ 0xec, 0xf5, 0xef, 0x97, 0x72, 0x63, 0x89, 0xfe, 0x5f, 0x16, 0xb8, 0xe0,
+ 0x4b, 0xbb, 0xcd, 0x5d, 0xf7, 0x6e, 0x3f, 0x13, 0x89, 0xa4, 0x4f, 0x2a,
+ 0xc9, 0x81, 0xcb, 0x08, 0xd7, 0x90, 0xf4, 0x49, 0xc9, 0x38, 0xde, 0xdc,
+ 0x4c, 0x4c, 0x0e, 0x8a, 0x09, 0xee, 0x23, 0xa6, 0xbd, 0x59, 0x4c, 0xda,
+ 0xfd, 0x88, 0xeb, 0xea, 0xaa, 0x02, 0x9c, 0x69, 0xf7, 0x10, 0xb6, 0x1c,
+ 0xea, 0x2c, 0xe6, 0x84, 0xac, 0x81, 0x80, 0xb6, 0x33, 0x13, 0x61, 0x58,
+ 0xc4, 0x6d, 0x4e, 0x49, 0x42, 0xe2, 0x4e, 0xcc, 0xc5, 0x1c, 0x2a, 0x1e,
+ 0xc2, 0x8a, 0xda, 0x19, 0x66, 0x50, 0xea, 0x14, 0x9e, 0x89, 0x91, 0x95,
+ 0x35, 0xf5, 0x75, 0xb6, 0xd3, 0xd4, 0x39, 0x84, 0x43, 0x2f, 0x73, 0x68,
+ 0x14, 0x87, 0x0a, 0x38, 0xe5, 0x09, 0xce, 0x37, 0x83, 0x43, 0xa7, 0x38,
+ 0x74, 0x27, 0xa7, 0x54, 0x38, 0xe5, 0xe5, 0x1c, 0x97, 0x06, 0x50, 0x59,
+ 0x2e, 0x24, 0x74, 0xee, 0x64, 0x54, 0x5d, 0x2c, 0xcb, 0x82, 0x34, 0xff,
+ 0x85, 0xe6, 0xd0, 0x13, 0x58, 0xd8, 0x70, 0xf7, 0x34, 0xac, 0x4c, 0xe7,
+ 0x03, 0x90, 0xbe, 0x28, 0x34, 0xf3, 0x14, 0x98, 0xeb, 0x99, 0xab, 0x30,
+ 0x65, 0x17, 0x2f, 0xce, 0x9d, 0xd8, 0x82, 0x50, 0x97, 0xcd, 0xdd, 0x81,
+ 0x8d, 0x4c, 0xeb, 0x77, 0x0d, 0xe1, 0x09, 0x6c, 0xfc, 0x4f, 0x13, 0xea,
+ 0x04, 0xe9, 0xac, 0x88, 0x5d, 0x19, 0x6f, 0x2c, 0x57, 0x1b, 0xf7, 0x67,
+ 0xd3, 0x70, 0x50, 0x1c, 0xc3, 0xfd, 0x09, 0xf4, 0x42, 0xf4, 0x12, 0x0f,
+ 0x6c, 0xe9, 0x5c, 0x0c, 0x11, 0xc0, 0x54, 0x06, 0xff, 0x09, 0x05, 0xbe,
+ 0xf2, 0x5a, 0xe6, 0x79, 0xaa, 0x3b, 0x46, 0xed, 0x4f, 0x20, 0x1a, 0xd6,
+ 0x47, 0x9d, 0x0a, 0x8d, 0xb7, 0x5d, 0x58, 0x6d, 0x12, 0x5d, 0xac, 0xcd,
+ 0xf9, 0x54, 0x34, 0x3d, 0x73, 0x1a, 0xf7, 0x5f, 0x99, 0x52, 0xbd, 0x56,
+ 0x07, 0xe3, 0x79, 0x3f, 0x4e, 0x30, 0x17, 0x68, 0xc9, 0x15, 0x51, 0x81,
+ 0x3d, 0xb9, 0xb8, 0x11, 0xfb, 0x1e, 0x5b, 0x1b, 0xbd, 0x14, 0x4e, 0x65,
+ 0x0d, 0xf1, 0x04, 0xeb, 0xea, 0xd0, 0xae, 0x34, 0x56, 0x36, 0x3e, 0xa7,
+ 0x83, 0x9a, 0x6f, 0x01, 0x51, 0xe5, 0x91, 0x7d, 0x15, 0x73, 0x9e, 0xc0,
+ 0x1e, 0x4d, 0xbf, 0xf5, 0xf7, 0x67, 0xd4, 0x4e, 0xe7, 0xed, 0x88, 0x7e,
+ 0x2b, 0xdb, 0xcd, 0xbc, 0x93, 0x75, 0x31, 0xa9, 0x85, 0x4e, 0x07, 0x3a,
+ 0x87, 0xb2, 0x2e, 0x18, 0x33, 0xb7, 0x4e, 0xe5, 0x42, 0x55, 0x67, 0x39,
+ 0xb2, 0x48, 0x3e, 0x45, 0x52, 0xff, 0xab, 0x56, 0xa1, 0x4d, 0xcc, 0xfd,
+ 0x81, 0x61, 0xe6, 0x5b, 0x9e, 0x46, 0x1d, 0x8f, 0x8e, 0x81, 0xbd, 0xe1,
+ 0x05, 0x53, 0xe4, 0xc9, 0xed, 0x96, 0x63, 0x99, 0x49, 0x6c, 0x1c, 0xac,
+ 0xaf, 0xd5, 0x8f, 0x83, 0x37, 0x6b, 0x99, 0x1e, 0xec, 0x66, 0x59, 0x17,
+ 0x8d, 0x76, 0x33, 0xcd, 0x7d, 0x7e, 0x0d, 0x9b, 0x88, 0xee, 0xab, 0x55,
+ 0xf7, 0xda, 0x4e, 0x4c, 0xa1, 0xd1, 0x5a, 0x74, 0xa6, 0x85, 0x91, 0x7c,
+ 0xbc, 0x46, 0xc5, 0x1d, 0x60, 0xb8, 0xce, 0x6e, 0x1c, 0x20, 0x4b, 0xbb,
+ 0x2b, 0xba, 0x76, 0xed, 0x3c, 0x0d, 0x55, 0x4b, 0x9f, 0xb4, 0x20, 0x07,
+ 0x6f, 0x46, 0xbc, 0x0d, 0x81, 0x5b, 0x3f, 0xf4, 0x33, 0xd9, 0x36, 0xe1,
+ 0xbd, 0xed, 0x98, 0x9b, 0xba, 0x5b, 0x78, 0xc7, 0x14, 0x26, 0x31, 0xb0,
+ 0x26, 0x76, 0xb8, 0xf4, 0x30, 0xc2, 0x7d, 0xac, 0xa1, 0x81, 0x96, 0x69,
+ 0x21, 0x1b, 0x2e, 0x8f, 0xf3, 0xe1, 0x82, 0x39, 0x45, 0x87, 0x4b, 0x33,
+ 0x57, 0xf4, 0x87, 0x9c, 0x7c, 0x4c, 0x72, 0xe8, 0x8f, 0x1c, 0xca, 0xe7,
+ 0x50, 0xfe, 0x1a, 0x3e, 0x0c, 0x39, 0x34, 0x9d, 0x43, 0x66, 0x0e, 0x4d,
+ 0xe5, 0x50, 0x15, 0x87, 0x8e, 0xb3, 0x1d, 0xef, 0xce, 0x7a, 0x0e, 0x85,
+ 0x39, 0xb4, 0x9a, 0x43, 0xf7, 0x70, 0x88, 0x0f, 0xd6, 0xd4, 0xef, 0x38,
+ 0xd4, 0xca, 0xa1, 0x93, 0x1c, 0x6a, 0x3b, 0x83, 0x03, 0x0b, 0x56, 0xf1,
+ 0x9d, 0xdd, 0xac, 0x8c, 0x5d, 0xcd, 0x9a, 0x81, 0x85, 0xd5, 0x0a, 0x37,
+ 0x4d, 0x66, 0x03, 0x6b, 0xf7, 0x69, 0x1c, 0x58, 0x73, 0x4f, 0xb0, 0xf9,
+ 0x67, 0x17, 0x16, 0x1a, 0xe6, 0xef, 0x49, 0x35, 0xaa, 0x9d, 0x5c, 0x37,
+ 0x59, 0xa3, 0x9a, 0xac, 0x16, 0x5d, 0x19, 0xb7, 0x2f, 0x55, 0xd1, 0x4b,
+ 0x19, 0x9a, 0x8f, 0x5e, 0x30, 0x99, 0xa1, 0x69, 0x67, 0xaa, 0xd9, 0xf8,
+ 0xe2, 0xe2, 0x8a, 0x99, 0xe6, 0x33, 0xc2, 0x2c, 0x4e, 0xb8, 0x05, 0x33,
+ 0x60, 0x38, 0x73, 0x14, 0x37, 0x8c, 0xe3, 0xb6, 0xaa, 0xb8, 0xaa, 0x28,
+ 0xee, 0xe4, 0x24, 0x86, 0xdb, 0xa6, 0xe2, 0xea, 0xa3, 0xb8, 0xb7, 0x26,
+ 0x69, 0xca, 0xb6, 0x3a, 0x9a, 0xfe, 0xd4, 0x24, 0xee, 0x96, 0xd1, 0x14,
+ 0x5a, 0x94, 0xb4, 0x8c, 0x59, 0x0c, 0xde, 0x5e, 0x77, 0xee, 0xe6, 0x84,
+ 0x60, 0x31, 0x2e, 0x85, 0xb6, 0xe0, 0x76, 0x27, 0x06, 0xe7, 0x6f, 0x02,
+ 0x5d, 0x9b, 0xbc, 0x86, 0x39, 0xe1, 0xa1, 0x5d, 0xad, 0xbc, 0xde, 0x6f,
+ 0xb1, 0xc9, 0xa4, 0x6b, 0x27, 0x6b, 0x24, 0x5e, 0x95, 0x50, 0x17, 0x96,
+ 0xda, 0xb4, 0x34, 0xb2, 0x6b, 0x1b, 0xe5, 0xdf, 0xf1, 0xf4, 0x10, 0x2c,
+ 0xc3, 0x55, 0x54, 0xb6, 0xd0, 0x13, 0xdd, 0x3c, 0x87, 0x36, 0xd6, 0x44,
+ 0x34, 0x31, 0x41, 0x43, 0xbd, 0xbe, 0x44, 0x34, 0x14, 0xf3, 0x68, 0x9e,
+ 0xd8, 0x46, 0x56, 0x22, 0xf4, 0xc4, 0x56, 0x35, 0xb6, 0x45, 0x8d, 0xed,
+ 0xe4, 0xb1, 0xf2, 0xc8, 0xb3, 0x15, 0x73, 0x76, 0xa1, 0x1a, 0xa6, 0xdf,
+ 0x6a, 0xd4, 0x8e, 0x71, 0xa6, 0xa9, 0xa1, 0xbc, 0x9d, 0xcd, 0x6c, 0x8c,
+ 0x33, 0xbd, 0xe4, 0xba, 0x1c, 0xc9, 0x58, 0xb9, 0x84, 0xb5, 0xa0, 0xd0,
+ 0xdd, 0xce, 0x65, 0x4c, 0x21, 0x18, 0x07, 0xf8, 0x7f, 0x4b, 0x98, 0xf2,
+ 0xf7, 0x20, 0x5f, 0xe8, 0xde, 0x6e, 0xde, 0x8d, 0x91, 0x8c, 0x4c, 0x4c,
+ 0x46, 0x45, 0xff, 0x37, 0x73, 0x98, 0x8a, 0x70, 0xdd, 0x1d, 0xfe, 0x55,
+ 0x26, 0x9b, 0x8c, 0x60, 0x84, 0x9d, 0x48, 0x30, 0xc2, 0x90, 0x35, 0x75,
+ 0x09, 0xed, 0x07, 0x75, 0xed, 0x57, 0x0b, 0xc8, 0x9d, 0x9b, 0xe1, 0xcd,
+ 0xb4, 0x64, 0x78, 0xbe, 0x8a, 0xb9, 0xde, 0x95, 0x9d, 0xff, 0x4a, 0xdf,
+ 0xbc, 0x99, 0x65, 0xd0, 0x79, 0x82, 0x46, 0x52, 0x45, 0x28, 0x07, 0x4c,
+ 0x90, 0xb3, 0x51, 0x51, 0xca, 0x72, 0x0f, 0x83, 0x7a, 0x2a, 0xd8, 0xc8,
+ 0x05, 0x39, 0xfe, 0x34, 0xf4, 0xac, 0x1f, 0x9a, 0xc8, 0x54, 0xf6, 0x14,
+ 0xd0, 0x5e, 0x13, 0x9a, 0x7b, 0x28, 0x7c, 0x60, 0x22, 0x73, 0x1b, 0x60,
+ 0x95, 0x14, 0xc9, 0x58, 0x57, 0xc5, 0x5d, 0x88, 0xef, 0x26, 0xa2, 0x25,
+ 0x7c, 0xba, 0xb2, 0xe0, 0x98, 0xb7, 0x5b, 0x9b, 0xf9, 0x5d, 0x4d, 0xac,
+ 0x65, 0x4e, 0xf0, 0x96, 0xd9, 0xcf, 0x2a, 0x3f, 0x5f, 0x2d, 0x47, 0xe0,
+ 0x36, 0xb6, 0x6e, 0x31, 0x55, 0xa9, 0xcd, 0x00, 0x8b, 0x80, 0x19, 0x55,
+ 0xea, 0x4a, 0x22, 0xf4, 0x44, 0x3b, 0xeb, 0x00, 0x8c, 0xed, 0x16, 0xb1,
+ 0xd4, 0xdf, 0x2d, 0xd6, 0xdb, 0x41, 0xb4, 0x71, 0x5a, 0x3b, 0x78, 0xd5,
+ 0x95, 0x71, 0x9c, 0x7c, 0xf4, 0xed, 0x99, 0xe9, 0x7b, 0x67, 0x31, 0x2d,
+ 0x1e, 0x8a, 0xc6, 0xb1, 0x87, 0x42, 0x79, 0xaf, 0x35, 0x32, 0xe7, 0x79,
+ 0xc7, 0x62, 0x75, 0x74, 0x7d, 0x7d, 0xa5, 0x70, 0x52, 0x3e, 0x6d, 0xd4,
+ 0xf8, 0x24, 0xa0, 0x3d, 0x3f, 0x5d, 0xac, 0x71, 0xa0, 0xe7, 0x3b, 0xc4,
+ 0x02, 0x8a, 0xed, 0xff, 0x72, 0x26, 0xa8, 0xc0, 0x74, 0x07, 0xf3, 0xcb,
+ 0x3e, 0xac, 0x21, 0xde, 0x93, 0x44, 0xf1, 0x6b, 0x46, 0x51, 0xd6, 0xc3,
+ 0x05, 0xf0, 0xf6, 0x39, 0x63, 0x57, 0x73, 0xed, 0xa0, 0x5c, 0x61, 0xfd,
+ 0x2d, 0x73, 0x36, 0x73, 0xce, 0xdd, 0x5a, 0xce, 0xa7, 0xa3, 0x9c, 0xe5,
+ 0x2a, 0xe7, 0x9f, 0x64, 0xce, 0x2c, 0xce, 0xd9, 0xad, 0xe5, 0xbc, 0x2d,
+ 0xca, 0x99, 0xae, 0x72, 0xbe, 0x2e, 0x73, 0x7e, 0x39, 0x21, 0xba, 0x9e,
+ 0xc2, 0xd1, 0xec, 0xaf, 0xc3, 0x51, 0x19, 0x7e, 0x79, 0x3c, 0xd3, 0xcc,
+ 0xef, 0xd5, 0xf1, 0x31, 0x1a, 0xe8, 0x09, 0x3f, 0x31, 0x9e, 0x35, 0xe3,
+ 0x01, 0x5d, 0x6b, 0x3c, 0x3c, 0x81, 0x04, 0x17, 0xdd, 0x58, 0x27, 0x96,
+ 0xd4, 0x77, 0x8c, 0xd7, 0x34, 0xde, 0x1f, 0x74, 0xe4, 0xdf, 0x57, 0xc9,
+ 0x5b, 0x54, 0x72, 0x87, 0x96, 0xfc, 0x7b, 0x9c, 0xbc, 0x12, 0x17, 0x5d,
+ 0x8c, 0xa3, 0x4e, 0xe5, 0x58, 0xa1, 0x72, 0xcc, 0x50, 0x39, 0xc0, 0xe9,
+ 0xc6, 0x2d, 0x0a, 0xc0, 0xae, 0xa2, 0x82, 0xe2, 0x2a, 0xe8, 0xdd, 0xf0,
+ 0x50, 0x5e, 0xfa, 0xe6, 0x3a, 0xfe, 0x54, 0xe8, 0x64, 0x58, 0xe1, 0x09,
+ 0xeb, 0x29, 0xe1, 0x78, 0xf8, 0xd3, 0x2b, 0xd8, 0x52, 0xe0, 0xcf, 0x06,
+ 0xdc, 0xca, 0x1d, 0x09, 0x39, 0x4f, 0x75, 0x70, 0xb7, 0x3d, 0x92, 0x71,
+ 0x5b, 0xa5, 0xa2, 0x04, 0xf7, 0xb6, 0x7f, 0x68, 0xa8, 0xec, 0x3c, 0xc9,
+ 0x50, 0xa3, 0x1d, 0xaa, 0x47, 0x1f, 0xc9, 0x70, 0x01, 0xd6, 0xb8, 0x17,
+ 0x94, 0xda, 0xdf, 0x08, 0xba, 0xf5, 0x3d, 0xb6, 0xdf, 0x98, 0x67, 0xb1,
+ 0xa1, 0xaf, 0xf3, 0x1d, 0x95, 0xf9, 0x57, 0xe3, 0xc5, 0x4e, 0xc1, 0xf7,
+ 0x39, 0xfa, 0x01, 0xb6, 0x8b, 0x2c, 0x56, 0x3a, 0xb7, 0x8e, 0x17, 0x5b,
+ 0x04, 0x3d, 0x76, 0x72, 0xd2, 0x51, 0xed, 0x8c, 0x7b, 0x59, 0xb7, 0xa5,
+ 0x5e, 0x52, 0xc9, 0xd0, 0xea, 0x63, 0xcd, 0xdc, 0xc8, 0xe6, 0xb7, 0x8b,
+ 0xd3, 0xef, 0xd8, 0x17, 0x7e, 0xe8, 0x0a, 0xcd, 0xd3, 0xe1, 0xa2, 0x95,
+ 0x5c, 0x74, 0x17, 0x3e, 0x02, 0xc8, 0x78, 0xb3, 0x82, 0x0f, 0xcf, 0x89,
+ 0xe3, 0x15, 0xb1, 0xf9, 0x96, 0x01, 0xc8, 0x36, 0xbe, 0xe3, 0x14, 0xc9,
+ 0x78, 0x04, 0xf0, 0xa6, 0x87, 0x0d, 0x47, 0x87, 0x42, 0x1b, 0xfc, 0xa4,
+ 0x16, 0x47, 0xff, 0x49, 0xe8, 0xe3, 0xa3, 0xe3, 0x08, 0xfd, 0x00, 0xa2,
+ 0xd3, 0x1f, 0x7e, 0x16, 0x9f, 0xf4, 0xee, 0x95, 0x87, 0x94, 0x19, 0xfd,
+ 0xc9, 0x0a, 0xbd, 0x5f, 0x71, 0x73, 0x85, 0x70, 0x18, 0xfe, 0xc1, 0xda,
+ 0x26, 0x0f, 0xf7, 0xef, 0xc1, 0xa7, 0x58, 0x5c, 0xa1, 0xfa, 0x0d, 0x3f,
+ 0xbf, 0x42, 0x3c, 0x1d, 0x4c, 0xb2, 0x8b, 0xa7, 0x83, 0x6c, 0xff, 0xef,
+ 0x0a, 0xda, 0x63, 0x2c, 0xfa, 0x1d, 0x67, 0xfd, 0xb0, 0x81, 0x9e, 0xe9,
+ 0xe1, 0xba, 0xf0, 0x5d, 0x1b, 0x1b, 0x53, 0xe9, 0xb5, 0xf4, 0x0c, 0xe8,
+ 0x4d, 0x73, 0x57, 0xea, 0x38, 0x74, 0x62, 0xba, 0xea, 0xba, 0xf1, 0x39,
+ 0x31, 0x7b, 0xe6, 0xb3, 0x3c, 0x0d, 0xb8, 0xfd, 0x9c, 0x7b, 0x17, 0x30,
+ 0x3c, 0x9a, 0x14, 0x7d, 0x5c, 0x3c, 0xe1, 0x0a, 0x31, 0xa6, 0xef, 0xb3,
+ 0x89, 0x27, 0x70, 0x62, 0x31, 0xbd, 0x67, 0x21, 0x63, 0xb9, 0xdd, 0x46,
+ 0xdb, 0x9e, 0xcc, 0xed, 0x80, 0x71, 0x22, 0xe0, 0xc0, 0x76, 0x35, 0xed,
+ 0x26, 0x96, 0xd6, 0xf2, 0x00, 0x15, 0x22, 0x54, 0x34, 0x88, 0x67, 0xe7,
+ 0xb6, 0xa9, 0x39, 0xfd, 0x65, 0x1c, 0x0d, 0xd6, 0x50, 0xde, 0x6a, 0x46,
+ 0xed, 0xd8, 0x09, 0xce, 0x26, 0xd3, 0x02, 0x86, 0xff, 0xd9, 0x38, 0xd6,
+ 0x00, 0xa8, 0x44, 0xd7, 0x41, 0xd3, 0xfc, 0xc0, 0xca, 0x3c, 0xb4, 0x22,
+ 0xf6, 0xb0, 0xa1, 0x6c, 0x2b, 0x18, 0x99, 0xc9, 0x8c, 0xeb, 0x0b, 0xa6,
+ 0x00, 0x67, 0x50, 0x37, 0x3a, 0xbb, 0xfd, 0x33, 0x71, 0x3b, 0x0d, 0x86,
+ 0xdb, 0x56, 0x9a, 0xcb, 0x42, 0x9b, 0x40, 0xe8, 0x71, 0x31, 0xfe, 0xc7,
+ 0x45, 0x1f, 0xcf, 0xff, 0xfb, 0x1a, 0xf6, 0x94, 0x05, 0xf8, 0x03, 0x4f,
+ 0x42, 0x09, 0x8e, 0xb3, 0x6d, 0x18, 0x2a, 0x2f, 0x3e, 0x6f, 0xfd, 0x1b,
+ 0x7b, 0x1e, 0x91, 0x77, 0x72, 0x35, 0xb7, 0x01, 0xa1, 0xbc, 0x2f, 0x57,
+ 0x47, 0x1f, 0xdb, 0xe0, 0x23, 0x0c, 0x26, 0x13, 0xc7, 0xd5, 0x87, 0xd5,
+ 0x62, 0x5c, 0xbd, 0x6d, 0x64, 0x9d, 0x78, 0xcf, 0x35, 0x34, 0xbc, 0xb0,
+ 0x21, 0xee, 0x6d, 0xa0, 0x9e, 0x38, 0x90, 0xfb, 0x76, 0x67, 0xb7, 0x29,
+ 0xfd, 0x8e, 0xa7, 0xb1, 0x84, 0xaa, 0x72, 0x8a, 0xf6, 0xd9, 0xb4, 0x93,
+ 0x07, 0xdb, 0x79, 0xb0, 0x8d, 0x3f, 0x8e, 0x0f, 0x97, 0x47, 0x2d, 0xf8,
+ 0x88, 0xd2, 0x2d, 0x1f, 0xb2, 0xf5, 0x9c, 0x59, 0x6b, 0xc3, 0x37, 0x1a,
+ 0xb9, 0x4e, 0xb3, 0x27, 0xfe, 0xa4, 0x7b, 0xa0, 0xde, 0xc1, 0x17, 0xc0,
+ 0xbe, 0x5e, 0xcc, 0xca, 0xf1, 0x26, 0xdf, 0xd6, 0x84, 0x7b, 0x6e, 0x24,
+ 0xfc, 0xa0, 0x51, 0x63, 0xf2, 0x51, 0x3b, 0x8b, 0xee, 0x87, 0x2c, 0x94,
+ 0xc0, 0x85, 0x50, 0x8f, 0x33, 0xc9, 0x30, 0x89, 0xe6, 0x18, 0xd9, 0x38,
+ 0xbf, 0x18, 0x16, 0xff, 0xe1, 0x4f, 0x8c, 0xc2, 0x52, 0x9f, 0xb0, 0x0a,
+ 0xa3, 0x17, 0x76, 0x1a, 0x71, 0xf7, 0x98, 0x6d, 0xb5, 0xdd, 0xde, 0x40,
+ 0xeb, 0xdd, 0x47, 0x0d, 0x6c, 0x1e, 0x3b, 0x19, 0xbe, 0x70, 0x2c, 0xd2,
+ 0xbd, 0x02, 0x0a, 0x78, 0x88, 0x3d, 0xaf, 0x7a, 0x0f, 0x9f, 0x1a, 0x7d,
+ 0x7b, 0x39, 0x13, 0xf9, 0x32, 0x2c, 0x9e, 0xc3, 0x3f, 0x15, 0x22, 0x8b,
+ 0x7e, 0x23, 0x44, 0x9e, 0x09, 0x8f, 0x8c, 0x8a, 0x9c, 0x27, 0x89, 0x3c,
+ 0x13, 0x7e, 0xd4, 0x28, 0x44, 0xfe, 0x32, 0x2a, 0xf2, 0x01, 0x2e, 0x32,
+ 0x84, 0x22, 0x4b, 0x85, 0xc8, 0x09, 0x1f, 0x5c, 0x47, 0x22, 0x3f, 0x0a,
+ 0xef, 0xbd, 0x5c, 0x15, 0xf9, 0xa5, 0x55, 0x2f, 0xf2, 0xa3, 0x70, 0xa3,
+ 0x2a, 0xf2, 0x8f, 0x51, 0x91, 0x75, 0x5c, 0x64, 0x19, 0x8a, 0xfc, 0xec,
+ 0x72, 0xe1, 0xb8, 0x61, 0xa5, 0xd6, 0x47, 0x65, 0x6d, 0xb7, 0xca, 0x35,
+ 0xbe, 0x58, 0x95, 0xe5, 0x8f, 0xca, 0x1a, 0xc0, 0x65, 0xf5, 0x43, 0x59,
+ 0xbf, 0xd1, 0xc8, 0x3a, 0x13, 0x9e, 0x12, 0x95, 0x55, 0x6b, 0x95, 0xab,
+ 0xfa, 0xd2, 0xe5, 0x42, 0x56, 0x61, 0x54, 0xd6, 0x13, 0x97, 0x31, 0xb5,
+ 0x3f, 0x7e, 0xb5, 0xa2, 0x7c, 0x9e, 0x3e, 0x24, 0xf5, 0xae, 0x05, 0x8a,
+ 0xd2, 0x98, 0x9e, 0xa5, 0xac, 0x33, 0x41, 0x06, 0x8f, 0x66, 0x63, 0xfd,
+ 0x2f, 0x17, 0x03, 0x76, 0x23, 0xd6, 0x3f, 0x54, 0x94, 0xac, 0x13, 0x1c,
+ 0x6e, 0x53, 0xa5, 0x9e, 0x4c, 0x55, 0xa5, 0xde, 0x8b, 0x52, 0x3b, 0x8a,
+ 0xbe, 0xba, 0x5a, 0x74, 0x7e, 0x12, 0xe4, 0x18, 0x9e, 0xc1, 0x53, 0x5f,
+ 0xc1, 0xd4, 0xf4, 0xce, 0x7f, 0x1a, 0x58, 0x2d, 0x82, 0x17, 0x00, 0x66,
+ 0xf4, 0x65, 0x2c, 0xde, 0x80, 0x35, 0x7a, 0xed, 0x32, 0xd5, 0x46, 0xe6,
+ 0x9b, 0xbb, 0xf2, 0xac, 0x6c, 0x53, 0xe4, 0xbd, 0xf0, 0x74, 0x96, 0x9c,
+ 0x9a, 0xea, 0x60, 0xae, 0x99, 0x7f, 0x0c, 0xee, 0x43, 0xaf, 0x62, 0xc6,
+ 0x68, 0xfa, 0x20, 0x0c, 0x06, 0x95, 0x11, 0xe1, 0xd1, 0x31, 0x4c, 0x56,
+ 0x21, 0xca, 0xfa, 0x7e, 0x54, 0x56, 0x03, 0xe2, 0xfe, 0x70, 0x99, 0x30,
+ 0x7a, 0x7f, 0xb3, 0x30, 0xde, 0x06, 0xce, 0xfb, 0x08, 0x37, 0xc4, 0x61,
+ 0xe3, 0x20, 0x36, 0x2a, 0x77, 0x73, 0x64, 0x3d, 0x47, 0xfe, 0x9a, 0xdb,
+ 0xc7, 0x70, 0x32, 0x47, 0xde, 0xc7, 0x91, 0x8b, 0x38, 0xb2, 0x8b, 0x90,
+ 0x1f, 0x5d, 0xc8, 0xe7, 0xe3, 0x2c, 0xc8, 0x75, 0x28, 0x2f, 0xea, 0x46,
+ 0x3b, 0x4b, 0xda, 0x83, 0xad, 0x78, 0x66, 0x0c, 0x4b, 0xf2, 0xf0, 0xa4,
+ 0xbf, 0x62, 0xd2, 0x51, 0x9e, 0x64, 0xe7, 0x49, 0xbb, 0x30, 0xe9, 0xe0,
+ 0x18, 0xb5, 0xb8, 0x85, 0x90, 0x93, 0x89, 0xe7, 0x34, 0x96, 0xe7, 0x54,
+ 0x42, 0x65, 0xbc, 0xf1, 0x42, 0x56, 0x8c, 0xa9, 0x1c, 0x79, 0x2d, 0x47,
+ 0x66, 0x11, 0xd2, 0xc2, 0x8b, 0xd1, 0x81, 0xd2, 0x6e, 0x8b, 0x4a, 0xbb,
+ 0x11, 0x18, 0x5e, 0x58, 0xc1, 0x18, 0xd6, 0x73, 0x86, 0x54, 0x62, 0xc8,
+ 0xe2, 0xd2, 0x7e, 0xc1, 0x9f, 0x49, 0xec, 0xe0, 0xc8, 0x13, 0x36, 0x8e,
+ 0x1c, 0xca, 0x91, 0x1b, 0x38, 0xf2, 0x43, 0x8e, 0x7c, 0x9b, 0x90, 0x5f,
+ 0x5e, 0xc0, 0x90, 0x3b, 0x38, 0x32, 0x7b, 0x30, 0x43, 0x3e, 0xcb, 0x91,
+ 0x68, 0x42, 0xd8, 0x46, 0xef, 0xcb, 0x17, 0x70, 0x9f, 0x90, 0x59, 0x13,
+ 0xb4, 0x0c, 0xb8, 0x77, 0xfd, 0x2d, 0x28, 0xc1, 0x4c, 0x3c, 0x76, 0x1e,
+ 0x18, 0x0e, 0x65, 0x7d, 0x64, 0x2a, 0x94, 0xf5, 0xdd, 0x4b, 0x59, 0x63,
+ 0x5c, 0x0e, 0xa9, 0xb7, 0xa5, 0x96, 0x37, 0x30, 0x2d, 0x9e, 0x07, 0x73,
+ 0xcb, 0x8e, 0xa9, 0x2c, 0x9d, 0x3d, 0x7f, 0xec, 0x4a, 0x2d, 0x65, 0xe6,
+ 0x31, 0x75, 0x28, 0x87, 0x7e, 0xc7, 0x71, 0x17, 0x70, 0xc8, 0xc4, 0x71,
+ 0xa9, 0x00, 0x3d, 0x9b, 0xda, 0x0f, 0xee, 0x06, 0x50, 0x9e, 0xf7, 0x50,
+ 0x57, 0x93, 0xf8, 0x31, 0x2a, 0xb6, 0x05, 0xbd, 0xea, 0xc8, 0x14, 0x3a,
+ 0x45, 0x86, 0xcf, 0x09, 0x98, 0xc9, 0xcf, 0x4b, 0x5a, 0x09, 0xa6, 0x2d,
+ 0x32, 0x61, 0x46, 0x99, 0x40, 0xe4, 0xd5, 0xaf, 0x62, 0x29, 0x63, 0xcb,
+ 0x62, 0x1d, 0xd8, 0x66, 0x73, 0xb0, 0x6e, 0x8b, 0x39, 0x18, 0xd8, 0x5a,
+ 0x1a, 0x6a, 0x1a, 0x52, 0xd6, 0x79, 0x38, 0x7d, 0xf3, 0x02, 0x5c, 0x0c,
+ 0x07, 0x37, 0x3d, 0x50, 0xd1, 0xe5, 0x31, 0xa2, 0x9d, 0x2e, 0xdb, 0x5f,
+ 0x16, 0xfc, 0xb8, 0x22, 0x78, 0x94, 0xc5, 0x77, 0x76, 0xcc, 0x19, 0x1d,
+ 0x30, 0x57, 0x74, 0xf9, 0xd2, 0x70, 0x93, 0xa4, 0x2b, 0x2f, 0x1d, 0x2b,
+ 0x6b, 0xbb, 0x14, 0x8f, 0x0e, 0xf8, 0x27, 0xf0, 0xa4, 0x64, 0x4c, 0xaa,
+ 0x62, 0x49, 0x81, 0xcb, 0xcc, 0xa1, 0x92, 0x51, 0xe6, 0xe4, 0xb2, 0x9d,
+ 0xe6, 0x29, 0x25, 0x99, 0x28, 0xea, 0x28, 0x2c, 0x58, 0xcb, 0x1e, 0x00,
+ 0x68, 0x14, 0x0a, 0x0b, 0x95, 0xa4, 0x98, 0x0d, 0x7b, 0x4d, 0x91, 0x97,
+ 0x03, 0x0f, 0xb0, 0x7d, 0x68, 0x7c, 0x96, 0xbd, 0xcf, 0x80, 0xd3, 0x03,
+ 0x94, 0xc4, 0xbf, 0x08, 0x1d, 0xcc, 0xd2, 0xe0, 0xa1, 0x8a, 0xe0, 0x91,
+ 0xdc, 0x57, 0xa1, 0x98, 0x3d, 0xec, 0xbe, 0x3b, 0x34, 0xb4, 0xe3, 0x9b,
+ 0x0b, 0xfc, 0x97, 0x74, 0x7c, 0x93, 0x14, 0x30, 0x86, 0x96, 0xa4, 0x85,
+ 0xd6, 0x0e, 0x31, 0x1b, 0xce, 0x40, 0x0d, 0x7a, 0xcc, 0x86, 0x6f, 0x00,
+ 0xdf, 0x7d, 0x74, 0x60, 0x68, 0x49, 0x3e, 0x8f, 0xef, 0x0e, 0x2d, 0x81,
+ 0x0c, 0x5e, 0x89, 0xf4, 0x04, 0x9e, 0x3f, 0x3a, 0x04, 0xe7, 0x4e, 0x56,
+ 0x87, 0x1e, 0x76, 0xef, 0x66, 0x1b, 0x9e, 0xe9, 0x77, 0x62, 0xd8, 0x03,
+ 0xe1, 0x1e, 0x76, 0x7c, 0x20, 0xfd, 0xce, 0xa7, 0x58, 0x23, 0x98, 0xa0,
+ 0x14, 0xc6, 0x3d, 0xc6, 0xe7, 0xd3, 0x37, 0xcf, 0x66, 0xe5, 0x29, 0x0d,
+ 0x3a, 0xee, 0x07, 0xa6, 0x76, 0x98, 0xa3, 0xb7, 0x99, 0x3a, 0x36, 0x29,
+ 0xa3, 0xd3, 0x3b, 0x15, 0xb6, 0x15, 0x58, 0xb9, 0xcd, 0xdc, 0xb5, 0xc4,
+ 0x1c, 0x32, 0x15, 0x9b, 0xbb, 0x52, 0xda, 0xcd, 0x7b, 0x0e, 0xa5, 0x98,
+ 0xbb, 0x4a, 0x0d, 0x66, 0x5c, 0xb2, 0xe3, 0x3e, 0x4c, 0xc1, 0x53, 0xe9,
+ 0x1d, 0x07, 0x59, 0x77, 0xd5, 0xed, 0x6f, 0xdf, 0x58, 0xdc, 0x3f, 0xbd,
+ 0x73, 0x17, 0x5b, 0xe0, 0xe1, 0xa3, 0x8d, 0xd5, 0x99, 0xe5, 0x7b, 0x8e,
+ 0x25, 0xa7, 0x6f, 0xbe, 0x8f, 0x52, 0xcc, 0x21, 0xb3, 0xd1, 0x9c, 0x5c,
+ 0xb9, 0xd3, 0x1c, 0xec, 0x6a, 0x05, 0xde, 0x50, 0x71, 0x29, 0x1e, 0x09,
+ 0x61, 0xab, 0xfe, 0xb2, 0x07, 0x4c, 0x5d, 0x29, 0xfd, 0x20, 0xb3, 0xdd,
+ 0xa1, 0x94, 0x5b, 0x1e, 0x05, 0xfa, 0x76, 0x73, 0x41, 0x8f, 0x7f, 0x35,
+ 0xbe, 0x1e, 0x59, 0xec, 0x5f, 0x06, 0x05, 0xdf, 0xa2, 0xf8, 0xab, 0x59,
+ 0xe6, 0xa1, 0xca, 0xee, 0xd0, 0xa5, 0x06, 0x73, 0xf2, 0xaa, 0x1e, 0xd3,
+ 0x13, 0x68, 0xce, 0xca, 0x72, 0x23, 0xe5, 0x7b, 0x3e, 0x86, 0xf4, 0xb2,
+ 0xad, 0xb0, 0xc6, 0xca, 0xc7, 0x59, 0x77, 0xd7, 0xc5, 0xac, 0xb7, 0x06,
+ 0x97, 0xe1, 0x54, 0xfa, 0x4c, 0xc5, 0x9c, 0x4d, 0x5b, 0xbc, 0xef, 0x1c,
+ 0x1d, 0xc1, 0x29, 0x4a, 0xf3, 0xc1, 0xd5, 0x61, 0xd9, 0x5f, 0x13, 0x4c,
+ 0xf9, 0xac, 0xac, 0x6b, 0x9d, 0xa1, 0xb2, 0xe0, 0xa3, 0xf4, 0x5b, 0x37,
+ 0xb2, 0x2d, 0xa7, 0xba, 0xfd, 0xe6, 0x8e, 0xa7, 0xaa, 0xcc, 0x73, 0xee,
+ 0x6c, 0x63, 0x9b, 0x52, 0xb8, 0xd1, 0x04, 0x2e, 0xc0, 0x36, 0x53, 0xa8,
+ 0x2c, 0xa5, 0xdc, 0x00, 0xce, 0x54, 0x59, 0x7b, 0xa4, 0xbb, 0x34, 0xe4,
+ 0xb8, 0xbf, 0xb4, 0xe0, 0x50, 0x7a, 0xe7, 0xcb, 0xb8, 0xf6, 0xec, 0x78,
+ 0xba, 0x59, 0x33, 0xf9, 0x92, 0x32, 0x7e, 0xb8, 0x9c, 0x29, 0xe3, 0x1d,
+ 0xf3, 0x35, 0x07, 0xfc, 0xaa, 0xca, 0x83, 0x2f, 0x97, 0x07, 0xdf, 0xc0,
+ 0xa1, 0x14, 0xca, 0x1b, 0xb8, 0x1c, 0x5d, 0x4c, 0xff, 0x7c, 0x3c, 0xe1,
+ 0x78, 0x2a, 0x80, 0x86, 0xf1, 0xc4, 0x32, 0x9a, 0xa9, 0x3e, 0xe7, 0xcf,
+ 0x5d, 0xd8, 0xde, 0xec, 0x84, 0xea, 0xf9, 0x4c, 0xdd, 0x7f, 0xb6, 0x9c,
+ 0x90, 0xdf, 0x54, 0x04, 0x3f, 0xd3, 0xe2, 0xa7, 0xcf, 0x57, 0x07, 0xc0,
+ 0x2f, 0x97, 0xb2, 0x3c, 0x8d, 0xd1, 0x94, 0x55, 0xbc, 0x14, 0x83, 0xa3,
+ 0x29, 0x2b, 0x78, 0xca, 0x77, 0x74, 0xf0, 0x10, 0xfd, 0xf4, 0xc1, 0x90,
+ 0x5c, 0xc1, 0x93, 0xff, 0x69, 0x62, 0x99, 0x2d, 0x60, 0x99, 0x3d, 0x0f,
+ 0x09, 0x07, 0x88, 0xee, 0xb6, 0xd4, 0x42, 0xf6, 0x80, 0x38, 0xbd, 0x73,
+ 0x29, 0x9b, 0x00, 0x52, 0x9b, 0x26, 0x71, 0x3b, 0xc8, 0xec, 0x48, 0x6a,
+ 0xad, 0x81, 0x41, 0xd7, 0x5d, 0xa7, 0xc5, 0xd5, 0x73, 0xe8, 0xc7, 0x1c,
+ 0x57, 0xcd, 0xa1, 0x15, 0x1c, 0x57, 0xc1, 0xa1, 0x5f, 0xb1, 0x51, 0x98,
+ 0xba, 0x80, 0x43, 0x15, 0x1c, 0x57, 0xcc, 0xa1, 0x4b, 0x53, 0x18, 0x54,
+ 0xc8, 0xa1, 0x22, 0x8e, 0x9b, 0xc9, 0xa1, 0x61, 0x1c, 0x97, 0xc5, 0xa1,
+ 0x19, 0x1c, 0x97, 0xc9, 0x21, 0x85, 0xe3, 0xc6, 0x71, 0x68, 0x02, 0xc7,
+ 0x5d, 0xca, 0xa1, 0x93, 0xc9, 0x0c, 0x1a, 0xc9, 0xa1, 0x4b, 0x38, 0x6e,
+ 0x08, 0x87, 0x8e, 0x71, 0xdc, 0x40, 0x0e, 0x5d, 0xc4, 0x71, 0x29, 0x1c,
+ 0xfa, 0x96, 0xe3, 0xce, 0xb0, 0xa9, 0x2b, 0x75, 0x14, 0xc7, 0x9d, 0xe2,
+ 0xd0, 0x67, 0x1c, 0xf7, 0x39, 0x87, 0x2e, 0xe7, 0xb8, 0x63, 0xab, 0xb4,
+ 0x65, 0xf9, 0x88, 0x43, 0x13, 0x39, 0xee, 0xd0, 0x2a, 0x6d, 0x59, 0xde,
+ 0x5a, 0x85, 0xa6, 0xef, 0xed, 0x55, 0xdc, 0xf4, 0x8d, 0x80, 0xf0, 0x31,
+ 0x7c, 0xf9, 0x66, 0xd5, 0x91, 0xfc, 0x6f, 0x23, 0x11, 0x8d, 0x57, 0x06,
+ 0x8a, 0x53, 0x1e, 0xfc, 0xb2, 0x3c, 0x18, 0xc9, 0x7d, 0x1b, 0x4f, 0x09,
+ 0x4c, 0xaf, 0x04, 0xdb, 0x31, 0x0d, 0x37, 0x18, 0x7e, 0x74, 0x11, 0xca,
+ 0xd9, 0x87, 0x3e, 0xcc, 0xd3, 0x23, 0xd5, 0xb9, 0x63, 0x08, 0x7b, 0xa4,
+ 0xf0, 0x2e, 0x28, 0x53, 0x78, 0x23, 0x10, 0x1c, 0x4d, 0xca, 0x7d, 0xdb,
+ 0x1c, 0x3c, 0xa8, 0x33, 0xea, 0xd1, 0x07, 0x93, 0x4c, 0xf6, 0x57, 0xe5,
+ 0xc1, 0xef, 0x50, 0xa8, 0x03, 0xc5, 0xaf, 0xc6, 0x1d, 0xde, 0x3c, 0x26,
+ 0x19, 0x17, 0x50, 0xe1, 0x1d, 0x23, 0xd9, 0xae, 0xc3, 0xd1, 0x4b, 0x98,
+ 0x0e, 0x1e, 0x0f, 0x2f, 0x1f, 0xc9, 0xf4, 0xd6, 0x3f, 0x0c, 0xe7, 0x94,
+ 0x65, 0x6a, 0xb6, 0x81, 0x43, 0xb9, 0x6f, 0x23, 0x79, 0xc7, 0x48, 0xbe,
+ 0x18, 0xdb, 0x7d, 0x8a, 0x9d, 0x1c, 0x03, 0xf4, 0x15, 0x25, 0x46, 0x73,
+ 0xa8, 0x38, 0xad, 0x3d, 0x5f, 0x69, 0x1b, 0xbe, 0x38, 0x38, 0x73, 0xae,
+ 0xfe, 0xd1, 0xe2, 0xde, 0xd2, 0x50, 0x73, 0x0a, 0x8a, 0x4a, 0x1b, 0xc9,
+ 0x1d, 0x85, 0x77, 0x6e, 0x1b, 0xb5, 0xf9, 0x6d, 0xff, 0x1b, 0xa6, 0x8e,
+ 0x67, 0xfa, 0x9b, 0x3a, 0xfe, 0x79, 0x0a, 0xcf, 0x68, 0x4c, 0x3a, 0x62,
+ 0xde, 0x73, 0x24, 0x19, 0xad, 0xe3, 0x9b, 0xe9, 0x0f, 0x7f, 0x61, 0x86,
+ 0x51, 0xb2, 0xe7, 0x13, 0xb0, 0x7b, 0xdf, 0x74, 0x7c, 0x94, 0xee, 0x1f,
+ 0xfe, 0xd5, 0xbb, 0xe6, 0x82, 0x57, 0xfc, 0x17, 0x99, 0x0b, 0x9e, 0xbf,
+ 0xf9, 0x57, 0xe6, 0xc8, 0x53, 0x91, 0x67, 0x03, 0x9f, 0x9a, 0x23, 0xdd,
+ 0x28, 0x24, 0xf0, 0xf2, 0xd1, 0x1f, 0x2d, 0x0c, 0x5d, 0x3a, 0x17, 0xcf,
+ 0x11, 0xdf, 0x06, 0xba, 0xed, 0x5d, 0xca, 0x9e, 0x57, 0x7c, 0x7b, 0x15,
+ 0x2d, 0x9f, 0x5e, 0x67, 0xa5, 0x09, 0xe5, 0x35, 0x2c, 0xa5, 0x01, 0x16,
+ 0xd6, 0x17, 0x4d, 0x7e, 0x3a, 0xd2, 0x71, 0x2c, 0xb3, 0x3c, 0x78, 0x12,
+ 0xfa, 0x01, 0x9b, 0xa9, 0x05, 0x2b, 0x3b, 0x98, 0xaa, 0x0f, 0xc5, 0x2f,
+ 0xca, 0x60, 0xcb, 0xb0, 0x4a, 0xc3, 0x97, 0x7f, 0x15, 0x7e, 0xe5, 0x85,
+ 0x19, 0xea, 0x82, 0x65, 0x1e, 0x5f, 0x94, 0x54, 0x04, 0x3f, 0x08, 0xfb,
+ 0x33, 0x14, 0xf6, 0xa0, 0x28, 0xbb, 0xfc, 0x71, 0xb5, 0x89, 0x42, 0x25,
+ 0xc6, 0x8a, 0xb1, 0x87, 0x44, 0x2b, 0x4d, 0x44, 0x79, 0x91, 0x11, 0xd1,
+ 0x96, 0x3d, 0x9a, 0x0c, 0x56, 0x92, 0x3f, 0xe3, 0xd7, 0x3c, 0xbc, 0x61,
+ 0xbd, 0xf3, 0x83, 0x0c, 0xde, 0x6a, 0xef, 0xe3, 0xa3, 0xc0, 0x23, 0xbf,
+ 0x63, 0xa6, 0x76, 0xd3, 0xfe, 0xf0, 0x5f, 0x46, 0x28, 0x7c, 0x43, 0x6c,
+ 0x27, 0xa4, 0x60, 0x5b, 0xa4, 0x6f, 0xfe, 0x2d, 0xc3, 0x55, 0x82, 0x19,
+ 0x2e, 0x37, 0x9a, 0x1f, 0x53, 0xb3, 0x1e, 0xfb, 0x0a, 0x24, 0xa4, 0x95,
+ 0x86, 0x36, 0xa4, 0x98, 0x3a, 0xf6, 0x41, 0x8b, 0x7f, 0x7c, 0xaa, 0x22,
+ 0x79, 0x53, 0x0f, 0xb4, 0x60, 0x69, 0xfa, 0xc3, 0x1f, 0x56, 0x06, 0x3f,
+ 0x2a, 0xdf, 0x73, 0x1c, 0x30, 0x87, 0xd3, 0x17, 0x77, 0x4d, 0xfd, 0xca,
+ 0x3f, 0x9f, 0xaf, 0xcf, 0xc6, 0x64, 0x5e, 0x0b, 0xab, 0xa0, 0xae, 0xd2,
+ 0xf1, 0x11, 0x9c, 0x67, 0x4c, 0x5f, 0xbd, 0x53, 0x1e, 0xda, 0x04, 0xd9,
+ 0x45, 0xfc, 0x03, 0xd8, 0xde, 0xd6, 0x3d, 0x78, 0x1e, 0xb0, 0xe3, 0x99,
+ 0x34, 0x53, 0xe4, 0xe9, 0x00, 0x18, 0x9e, 0xb2, 0xee, 0x0a, 0xc3, 0x89,
+ 0xca, 0x2e, 0xd7, 0x3e, 0x30, 0xbd, 0x65, 0xbb, 0xb1, 0x30, 0x95, 0xc1,
+ 0x4f, 0x03, 0xf7, 0x1e, 0x1d, 0xc5, 0xcf, 0xd7, 0x15, 0x6b, 0xaa, 0x9e,
+ 0xbe, 0xe5, 0x2a, 0x66, 0x89, 0xa1, 0x06, 0x91, 0xe1, 0xac, 0x06, 0xd1,
+ 0x46, 0x0a, 0xec, 0xc7, 0x27, 0x94, 0x47, 0xfe, 0x7d, 0x86, 0x8f, 0x0d,
+ 0xe8, 0xb7, 0x5f, 0xd7, 0x31, 0xcb, 0x35, 0xa5, 0x48, 0x1c, 0x33, 0x5f,
+ 0x3f, 0x5c, 0x35, 0x76, 0x3f, 0xe4, 0xb8, 0xf4, 0x22, 0x35, 0x65, 0x33,
+ 0x4f, 0x39, 0x3d, 0x97, 0xa7, 0xe0, 0x89, 0xdd, 0xbc, 0xd5, 0xec, 0xd9,
+ 0xc1, 0x98, 0x23, 0x73, 0xf9, 0x79, 0x17, 0x0e, 0xe3, 0x0e, 0xdd, 0x41,
+ 0xee, 0x7c, 0x70, 0x0d, 0x00, 0xc4, 0xd5, 0x9c, 0xb9, 0x5b, 0xcb, 0x7c,
+ 0x05, 0x67, 0xde, 0x21, 0x98, 0xaf, 0x48, 0xc4, 0xfc, 0x4d, 0x2d, 0x63,
+ 0xee, 0x98, 0xab, 0x5f, 0x6b, 0x05, 0xbf, 0x40, 0x55, 0x0a, 0xcd, 0x2e,
+ 0x2f, 0x78, 0xd7, 0x9f, 0x85, 0xfb, 0x69, 0xb5, 0x6c, 0x3f, 0x6d, 0x25,
+ 0x3b, 0x79, 0xf8, 0x1e, 0x7b, 0x1e, 0x7d, 0x39, 0xee, 0x57, 0xd5, 0xd2,
+ 0x9e, 0xc6, 0x21, 0x31, 0x84, 0x23, 0x87, 0x74, 0x83, 0xf9, 0xb6, 0xd4,
+ 0x47, 0x97, 0x73, 0x03, 0xbd, 0x8f, 0x1b, 0xe8, 0x4a, 0xb6, 0xc5, 0x93,
+ 0xfa, 0xc5, 0x32, 0x06, 0x79, 0x98, 0x97, 0x9f, 0xfa, 0x2f, 0x0e, 0x95,
+ 0x71, 0xdc, 0xc7, 0x1c, 0xfa, 0x43, 0x1a, 0x83, 0xde, 0x67, 0x1b, 0xce,
+ 0xa9, 0xbf, 0x66, 0x47, 0x00, 0x53, 0x7d, 0xcb, 0xb9, 0x69, 0xe5, 0x94,
+ 0x7f, 0xe3, 0x94, 0xe3, 0x06, 0x30, 0x68, 0x1f, 0xa7, 0x3c, 0xc8, 0x29,
+ 0x97, 0x70, 0xca, 0xb1, 0x9c, 0xf2, 0xcf, 0x9c, 0xb2, 0x82, 0x53, 0xfe,
+ 0x81, 0x53, 0xf2, 0xf3, 0x87, 0xa9, 0xd9, 0x9c, 0xb2, 0x1f, 0xa7, 0xbc,
+ 0x9b, 0x53, 0xae, 0xe7, 0x94, 0x3f, 0xe1, 0x94, 0xa5, 0x9c, 0x72, 0x10,
+ 0xa7, 0xfc, 0x94, 0x6d, 0xbc, 0xa4, 0xde, 0xcc, 0x29, 0x7f, 0xcd, 0x29,
+ 0x37, 0x70, 0xca, 0xc9, 0x9c, 0xf2, 0x28, 0xc7, 0xbd, 0xc3, 0x29, 0x1d,
+ 0x1c, 0xfa, 0x1b, 0xa7, 0xb4, 0x70, 0xca, 0x34, 0x4e, 0xf9, 0x1c, 0xc7,
+ 0x3d, 0xcd, 0x29, 0x17, 0x72, 0xe8, 0x14, 0xa7, 0x2c, 0xe3, 0x94, 0x2f,
+ 0xb1, 0xc7, 0x56, 0xa9, 0xff, 0xc1, 0x71, 0x3b, 0x38, 0x65, 0x2e, 0x87,
+ 0xae, 0x1c, 0xc8, 0xa0, 0x29, 0x9c, 0xd2, 0xc5, 0x29, 0x3b, 0x39, 0xee,
+ 0xc7, 0x9c, 0xf2, 0x22, 0x0e, 0x0d, 0xe5, 0x94, 0x43, 0x39, 0xe5, 0x63,
+ 0x9c, 0xd2, 0xc6, 0x71, 0x1b, 0x38, 0xe5, 0xe9, 0x7a, 0x06, 0x45, 0x78,
+ 0xee, 0x5f, 0xb1, 0x2d, 0xfa, 0xd4, 0x7c, 0x4e, 0x69, 0x5a, 0x86, 0x13,
+ 0xc2, 0x27, 0xf5, 0x7c, 0x42, 0x98, 0x01, 0xe1, 0x63, 0x17, 0xb0, 0x09,
+ 0x61, 0xe2, 0xbf, 0xb9, 0xd2, 0xa3, 0x33, 0x8e, 0xaa, 0xb6, 0x73, 0x29,
+ 0xae, 0x9d, 0x87, 0x82, 0x71, 0x1f, 0x64, 0x2e, 0x38, 0xe8, 0x1f, 0x8a,
+ 0x9b, 0x19, 0x2f, 0x0d, 0x61, 0x03, 0x26, 0x70, 0x3c, 0xb7, 0xfb, 0x68,
+ 0xd2, 0x4e, 0x43, 0xfa, 0xc3, 0xdd, 0x5c, 0x0d, 0xc5, 0x1e, 0x40, 0x79,
+ 0xf0, 0x25, 0x60, 0x0e, 0xff, 0x88, 0x93, 0xf9, 0x07, 0xf1, 0x9d, 0xe8,
+ 0xf0, 0x67, 0x43, 0xd8, 0x21, 0x21, 0x98, 0x58, 0xd3, 0xd1, 0x5a, 0xf5,
+ 0x53, 0xb7, 0xac, 0x22, 0x19, 0xd5, 0xcc, 0x2e, 0xee, 0x5b, 0x75, 0xe4,
+ 0xf4, 0x60, 0xae, 0xb9, 0x91, 0x8c, 0xab, 0x45, 0xd2, 0x27, 0x83, 0xf5,
+ 0xde, 0xcd, 0x9b, 0x91, 0x8c, 0x19, 0xf8, 0x98, 0x25, 0xf8, 0x6c, 0x19,
+ 0x98, 0xbb, 0x11, 0xa5, 0xa0, 0xdc, 0xa1, 0x79, 0xe1, 0xa7, 0x07, 0xa3,
+ 0x25, 0x80, 0x81, 0x1f, 0x79, 0x21, 0xf0, 0x69, 0x29, 0x33, 0x60, 0xe4,
+ 0xbd, 0xec, 0xd5, 0xcd, 0x6f, 0x6f, 0x32, 0xbb, 0xfa, 0x1d, 0x1a, 0xb4,
+ 0x3d, 0x83, 0x69, 0xe6, 0x01, 0x97, 0xfc, 0x24, 0x3b, 0x3f, 0xf6, 0x2d,
+ 0x7b, 0x94, 0xf9, 0x6c, 0x45, 0xc1, 0xb7, 0x7e, 0x3c, 0x2e, 0xfe, 0x10,
+ 0x7b, 0x3e, 0xf0, 0x1e, 0xe4, 0x57, 0x80, 0x03, 0xe3, 0x44, 0xec, 0xc4,
+ 0x26, 0x49, 0xf4, 0xc4, 0x48, 0x7c, 0x50, 0x2f, 0xb1, 0x41, 0x48, 0x7c,
+ 0x3f, 0xbf, 0x6f, 0x12, 0xc7, 0xc4, 0x48, 0x6c, 0xd2, 0x4b, 0x1c, 0x22,
+ 0x24, 0xfe, 0xa8, 0x37, 0x89, 0x34, 0xf3, 0xe2, 0x6a, 0xf4, 0x85, 0x41,
+ 0x51, 0x89, 0x67, 0x98, 0xc4, 0x31, 0xd7, 0x2a, 0xec, 0x05, 0x18, 0x3c,
+ 0x8b, 0xb0, 0x87, 0xef, 0xec, 0xab, 0xe3, 0x7f, 0x42, 0x7e, 0xbe, 0xb4,
+ 0x4a, 0xd3, 0x4e, 0xe8, 0x2f, 0xb1, 0xb2, 0x82, 0xbf, 0x70, 0x1a, 0x25,
+ 0xaf, 0x15, 0x92, 0xe9, 0x3c, 0x24, 0x3b, 0x08, 0xd4, 0x53, 0xc7, 0x85,
+ 0x5f, 0x86, 0xe7, 0x09, 0xb8, 0x70, 0x69, 0xea, 0x9b, 0xf0, 0x3a, 0x1e,
+ 0xee, 0xd3, 0xcf, 0xd4, 0xf2, 0x6c, 0x08, 0xde, 0xf6, 0x6b, 0xbc, 0x51,
+ 0x60, 0x6d, 0x56, 0xc4, 0xac, 0x61, 0xde, 0x1b, 0x95, 0x6c, 0xcb, 0xeb,
+ 0xa7, 0xb3, 0xe9, 0xe0, 0x73, 0x5e, 0x06, 0x7f, 0xd0, 0xc1, 0xf6, 0xf0,
+ 0xca, 0x7a, 0x20, 0x61, 0x25, 0x4b, 0x58, 0xb5, 0x5d, 0xdd, 0x11, 0xab,
+ 0x61, 0x09, 0xb0, 0x68, 0x62, 0x54, 0xda, 0x07, 0x2d, 0x15, 0x41, 0x47,
+ 0x37, 0xcc, 0x6b, 0x30, 0xe3, 0xa4, 0x3e, 0xc9, 0x36, 0x48, 0xcb, 0x76,
+ 0x56, 0x80, 0x3f, 0xcc, 0x1e, 0x63, 0xa4, 0xee, 0x60, 0x8f, 0x14, 0xd8,
+ 0x19, 0xaa, 0xa1, 0x55, 0x6c, 0x4f, 0x2d, 0xdc, 0x79, 0x21, 0x9f, 0x33,
+ 0x43, 0x9b, 0xb6, 0x9b, 0x43, 0x81, 0x9d, 0x6c, 0x87, 0xf8, 0x4d, 0x7e,
+ 0x62, 0x0d, 0xba, 0xe9, 0x29, 0xa8, 0x3a, 0xee, 0xb0, 0x15, 0x1c, 0xf5,
+ 0x0f, 0x64, 0xcf, 0xe0, 0x02, 0xfc, 0x50, 0x36, 0xac, 0x04, 0xd9, 0xd9,
+ 0x21, 0x7a, 0xb4, 0xf2, 0x30, 0x4c, 0x33, 0xbb, 0x2b, 0x42, 0x90, 0x33,
+ 0x4c, 0x43, 0x47, 0xfb, 0x43, 0x65, 0xe6, 0x2f, 0x66, 0x67, 0x96, 0x51,
+ 0x08, 0x3f, 0xd9, 0x03, 0xfd, 0x5a, 0x4b, 0x2e, 0xc3, 0x19, 0x68, 0xa3,
+ 0x7c, 0x6d, 0xbb, 0xdd, 0x3b, 0x2b, 0xf6, 0x61, 0xf2, 0x16, 0xb6, 0x42,
+ 0x02, 0xd7, 0x3f, 0x75, 0x22, 0x1e, 0x17, 0xa4, 0x7d, 0xdf, 0x47, 0xc5,
+ 0xcc, 0x56, 0x11, 0xba, 0xc2, 0x1c, 0xaa, 0x31, 0x96, 0x07, 0x5f, 0x2f,
+ 0x1f, 0xfb, 0x37, 0x5c, 0x7c, 0x29, 0x1b, 0x52, 0x2a, 0x43, 0x2d, 0x69,
+ 0x95, 0x21, 0xff, 0x78, 0x23, 0x4e, 0xfb, 0x63, 0x7b, 0x3a, 0xf2, 0x21,
+ 0x0d, 0x27, 0x49, 0x73, 0xe8, 0x86, 0x34, 0x98, 0x69, 0x03, 0x17, 0x98,
+ 0x4e, 0x96, 0x29, 0x49, 0xe9, 0x9b, 0x15, 0xe6, 0x46, 0xdf, 0xd9, 0xcc,
+ 0x0e, 0x4a, 0x74, 0xd6, 0xb3, 0xd9, 0x13, 0xfc, 0x2d, 0x5c, 0xfe, 0x85,
+ 0xd8, 0x1a, 0x14, 0x1a, 0xaf, 0x64, 0x08, 0x3b, 0x0b, 0x1f, 0x4a, 0x36,
+ 0x87, 0x16, 0xa6, 0x99, 0x83, 0x95, 0xd0, 0xd2, 0x65, 0xdb, 0xcb, 0x43,
+ 0xa5, 0xe3, 0x91, 0x6e, 0x2b, 0x46, 0x90, 0x70, 0x0b, 0x46, 0x90, 0xb2,
+ 0xbd, 0x3c, 0x94, 0x32, 0xbe, 0x3c, 0x54, 0x31, 0x1e, 0x68, 0xbb, 0xda,
+ 0xb8, 0xe0, 0x56, 0xfe, 0x4c, 0xbe, 0x6d, 0x11, 0x3b, 0xff, 0x99, 0xc7,
+ 0x5c, 0xbc, 0x27, 0x33, 0xf9, 0x3a, 0x3d, 0x7c, 0x19, 0x34, 0x3b, 0x03,
+ 0xd0, 0x73, 0xc4, 0x2d, 0x88, 0xf2, 0x50, 0x60, 0x14, 0x3f, 0xd7, 0x52,
+ 0x11, 0x7c, 0x3f, 0xfc, 0xc2, 0x85, 0xe4, 0x8b, 0x7c, 0xcb, 0x48, 0xfe,
+ 0xb0, 0x1a, 0x65, 0x3d, 0x8a, 0x3f, 0xb3, 0xa0, 0xb4, 0x47, 0x22, 0xec,
+ 0x75, 0x8b, 0x27, 0xb0, 0xfc, 0xe5, 0x63, 0x5f, 0x2e, 0x1f, 0xfb, 0x12,
+ 0xf6, 0xe3, 0x23, 0xc0, 0x51, 0x31, 0xe0, 0x06, 0x23, 0xf8, 0x09, 0x95,
+ 0x03, 0xa0, 0x0d, 0x70, 0x7b, 0xfb, 0x49, 0xd1, 0x5a, 0xe5, 0x57, 0xac,
+ 0x37, 0x76, 0x5c, 0xc5, 0x9a, 0x63, 0x5d, 0x5a, 0x45, 0x88, 0x89, 0x2b,
+ 0x0f, 0x95, 0xe5, 0xb0, 0x2c, 0x8a, 0x60, 0x06, 0x2c, 0x0d, 0x2d, 0x4a,
+ 0x29, 0x83, 0x35, 0x5b, 0x69, 0xa8, 0x3e, 0xa5, 0x12, 0x4f, 0x51, 0x1d,
+ 0x66, 0xe5, 0xdc, 0x85, 0x79, 0x84, 0xf2, 0x4d, 0x4f, 0xa2, 0x7b, 0x96,
+ 0xfb, 0xb6, 0xe9, 0xb1, 0x34, 0x56, 0x9c, 0x77, 0x83, 0x6f, 0x9b, 0x3b,
+ 0x6e, 0x1c, 0x95, 0xa6, 0xf8, 0x47, 0x87, 0x2a, 0x46, 0x19, 0xd9, 0x46,
+ 0xd9, 0x6b, 0x1f, 0x74, 0x7c, 0x1d, 0x31, 0xa5, 0x97, 0xbe, 0x6a, 0x2a,
+ 0x78, 0xa3, 0x34, 0x7d, 0xfe, 0xe7, 0x86, 0x6f, 0xcd, 0x91, 0x97, 0x02,
+ 0x6f, 0x98, 0x22, 0xcf, 0x95, 0x4d, 0xda, 0x53, 0x1a, 0x7c, 0xae, 0xd4,
+ 0xf0, 0x99, 0xe9, 0xab, 0x77, 0xcb, 0x82, 0x9f, 0x99, 0xc6, 0x3e, 0x97,
+ 0xfb, 0x9c, 0x39, 0xc4, 0x44, 0x1f, 0x4d, 0x0a, 0xe5, 0xa7, 0xff, 0xe9,
+ 0x6b, 0x73, 0xa8, 0x16, 0xd6, 0x98, 0xb0, 0xb6, 0xea, 0x5f, 0x6a, 0x18,
+ 0x88, 0x45, 0x88, 0xec, 0x29, 0x2d, 0xf8, 0xbb, 0xf7, 0xc3, 0xa3, 0x76,
+ 0xf4, 0x84, 0xcc, 0x41, 0x74, 0x86, 0xf1, 0x81, 0x14, 0x74, 0x0e, 0x3b,
+ 0x1e, 0x0a, 0x9d, 0x13, 0x2a, 0xdb, 0x8e, 0xc7, 0x43, 0xcd, 0x41, 0xec,
+ 0x9d, 0x64, 0x5c, 0xa8, 0x96, 0x07, 0xb1, 0x73, 0x42, 0xd0, 0x27, 0x41,
+ 0xec, 0x1c, 0x58, 0x79, 0x62, 0x04, 0x28, 0xa9, 0x23, 0x58, 0xb7, 0x94,
+ 0x07, 0xa1, 0x8b, 0xca, 0x83, 0x29, 0xe3, 0x61, 0x0d, 0x7c, 0x04, 0x17,
+ 0xcd, 0x50, 0x38, 0x53, 0x3b, 0x68, 0x4f, 0xdb, 0x50, 0x73, 0xd7, 0xa0,
+ 0x7f, 0x5c, 0x8c, 0x95, 0x5e, 0x04, 0x1d, 0xba, 0x28, 0xff, 0xe8, 0xf0,
+ 0xf2, 0x50, 0x25, 0xc6, 0x86, 0x40, 0x98, 0x8f, 0x29, 0xed, 0x83, 0xdb,
+ 0xcd, 0xc1, 0x05, 0x39, 0xb8, 0xb4, 0x2d, 0x35, 0xf4, 0x04, 0x17, 0xa4,
+ 0x94, 0x25, 0x57, 0xa6, 0x95, 0x06, 0x17, 0xa5, 0xb1, 0x43, 0x6a, 0xc7,
+ 0xc3, 0x7b, 0x93, 0x59, 0x6f, 0x9a, 0x43, 0xf7, 0x32, 0x95, 0x82, 0x79,
+ 0xe2, 0xc1, 0x64, 0x3a, 0xc1, 0x76, 0x3c, 0x3c, 0x39, 0x85, 0x23, 0x21,
+ 0xf5, 0xf2, 0x14, 0x35, 0xd5, 0x12, 0x4d, 0xad, 0x85, 0x28, 0xd3, 0x4f,
+ 0xb6, 0xeb, 0xb7, 0x10, 0x87, 0x6e, 0x57, 0xc6, 0x5f, 0x70, 0x41, 0xd4,
+ 0x35, 0xe8, 0x47, 0x63, 0xb8, 0x9e, 0xfc, 0x7b, 0x00, 0xe3, 0x0c, 0x3f,
+ 0x3a, 0x90, 0x8d, 0xe6, 0xc1, 0x33, 0x14, 0x75, 0x67, 0x3b, 0xa3, 0x22,
+ 0x78, 0xca, 0x7c, 0xcb, 0xd3, 0x38, 0x6a, 0xb4, 0x5b, 0xdb, 0xbf, 0x1c,
+ 0x20, 0x9f, 0xaa, 0x2c, 0x0f, 0x82, 0x8f, 0xf4, 0x15, 0x8c, 0xac, 0x70,
+ 0xe7, 0x40, 0x66, 0x7f, 0x4f, 0x96, 0x18, 0x0d, 0x81, 0x89, 0xa6, 0x93,
+ 0x0b, 0x20, 0x80, 0xf6, 0x4b, 0x7d, 0x60, 0x89, 0x18, 0xa6, 0xe0, 0x79,
+ 0xcb, 0xce, 0x3d, 0x6d, 0x0d, 0x4f, 0x4a, 0x61, 0xeb, 0x1b, 0x7e, 0x84,
+ 0x30, 0x7c, 0x49, 0x8a, 0x38, 0xf1, 0xc2, 0x98, 0x3e, 0x41, 0x05, 0x1e,
+ 0xc8, 0x8a, 0xb8, 0xd0, 0xd8, 0xf1, 0xbe, 0xa1, 0x7c, 0x40, 0xa5, 0xb1,
+ 0x3c, 0xb4, 0x88, 0x47, 0x2b, 0xa0, 0x8f, 0x62, 0x2d, 0x24, 0xdf, 0x30,
+ 0x03, 0x07, 0x7f, 0x12, 0x8e, 0x8d, 0x63, 0x6c, 0x9e, 0xdf, 0x17, 0x9e,
+ 0x35, 0x80, 0xbd, 0x2a, 0xd8, 0x8f, 0x95, 0x70, 0xb8, 0xba, 0xbb, 0x15,
+ 0x99, 0x30, 0x68, 0x09, 0x6e, 0xbf, 0x1c, 0x1d, 0x16, 0x2a, 0xc9, 0x0f,
+ 0x2d, 0x9c, 0x6b, 0x9e, 0xf4, 0x42, 0x47, 0x77, 0xff, 0x8e, 0x43, 0xa7,
+ 0xcc, 0x86, 0x83, 0xda, 0xe9, 0x9b, 0x66, 0xd9, 0x33, 0xb9, 0x27, 0xc3,
+ 0x03, 0x52, 0xd4, 0x95, 0xde, 0x95, 0x98, 0x43, 0xed, 0x00, 0x71, 0x7a,
+ 0x20, 0x7c, 0x24, 0x8d, 0x9f, 0x23, 0x1f, 0x8c, 0x0d, 0x18, 0x9d, 0x6a,
+ 0xd5, 0xe3, 0x9c, 0xdc, 0x42, 0xdd, 0x57, 0xa5, 0x9f, 0xba, 0x51, 0xe8,
+ 0x43, 0xc9, 0x7a, 0xa1, 0xa9, 0x51, 0xa1, 0x77, 0xf4, 0x49, 0xe8, 0xb5,
+ 0x71, 0x84, 0x5a, 0x24, 0xa1, 0x8f, 0xa7, 0xa9, 0x42, 0xe7, 0xf5, 0x49,
+ 0xe8, 0x80, 0x38, 0x42, 0x07, 0x4a, 0x42, 0x7d, 0x51, 0xa1, 0x9f, 0xf4,
+ 0xef, 0x8b, 0xd0, 0xc7, 0x17, 0x4b, 0x42, 0x99, 0x41, 0x08, 0xff, 0x57,
+ 0x92, 0x5e, 0xee, 0x80, 0xa8, 0xdc, 0xdb, 0xfb, 0x24, 0xd7, 0xb5, 0x58,
+ 0x38, 0x49, 0xd7, 0x43, 0x2c, 0xf7, 0x24, 0x73, 0x93, 0x7e, 0x9c, 0x2c,
+ 0x12, 0x57, 0x41, 0xe2, 0x93, 0xfc, 0x05, 0x51, 0x48, 0xdf, 0x90, 0x2c,
+ 0x3d, 0x77, 0x39, 0x36, 0x04, 0x66, 0xd2, 0x8a, 0xae, 0x4d, 0xef, 0x80,
+ 0xda, 0x45, 0x32, 0xf2, 0x17, 0xf3, 0xc5, 0x64, 0xe7, 0x61, 0x53, 0xa8,
+ 0xbf, 0x7f, 0x2c, 0x6e, 0x9f, 0x83, 0xc5, 0x0a, 0xbe, 0xb7, 0x30, 0x34,
+ 0xf7, 0x3b, 0x68, 0x83, 0x39, 0xc0, 0xbd, 0x30, 0x98, 0xf2, 0x5d, 0x64,
+ 0x6f, 0xa8, 0xec, 0x9d, 0x82, 0xbd, 0xde, 0x7f, 0xe2, 0x12, 0x33, 0xd9,
+ 0x14, 0xec, 0x07, 0x8b, 0x04, 0x3c, 0xd0, 0x91, 0xd0, 0x35, 0x00, 0x77,
+ 0xe3, 0x4c, 0x65, 0xc8, 0x63, 0xc4, 0xa7, 0xad, 0xf5, 0x30, 0xd3, 0xa4,
+ 0x28, 0xfe, 0xd9, 0x65, 0xb9, 0x90, 0xc9, 0x2a, 0xc5, 0x94, 0xfe, 0x27,
+ 0x58, 0xc6, 0xdd, 0x38, 0x26, 0x2d, 0xec, 0xe9, 0x8f, 0x16, 0xbc, 0x62,
+ 0x0c, 0x18, 0x8b, 0xda, 0x31, 0xa3, 0xd8, 0xb1, 0xc1, 0x67, 0xc3, 0x0b,
+ 0xfa, 0xe1, 0x84, 0xfe, 0x34, 0x32, 0x97, 0xcd, 0x71, 0xa4, 0x78, 0x5f,
+ 0x34, 0x9d, 0xec, 0x9f, 0xe2, 0x1f, 0x11, 0x5d, 0xe6, 0x97, 0x5f, 0xb1,
+ 0xc0, 0x78, 0x4b, 0x1a, 0xfe, 0x6c, 0x48, 0x02, 0xaf, 0x41, 0xe4, 0x5f,
+ 0x1e, 0xba, 0x3a, 0x13, 0x1d, 0xd0, 0x89, 0x66, 0x98, 0xd4, 0xfc, 0x63,
+ 0xff, 0xc2, 0xcc, 0x31, 0x18, 0x51, 0x7f, 0x0f, 0x6e, 0xb9, 0x86, 0x8f,
+ 0xc0, 0x72, 0x25, 0xf8, 0x77, 0x24, 0x8a, 0xec, 0x35, 0xcf, 0x49, 0xf3,
+ 0x7e, 0x14, 0xcf, 0x67, 0xa4, 0xea, 0x7c, 0xc9, 0xc4, 0x95, 0x8e, 0x2f,
+ 0x46, 0x79, 0x8b, 0x3b, 0xda, 0xa0, 0x3a, 0xe5, 0x60, 0x0c, 0x43, 0x69,
+ 0x50, 0x99, 0x97, 0xcd, 0x5d, 0x2b, 0xd3, 0xd2, 0x70, 0xa0, 0x75, 0x05,
+ 0x0e, 0x84, 0x37, 0xf5, 0xa3, 0x97, 0xe2, 0x66, 0x84, 0x2a, 0x0f, 0xb0,
+ 0xa1, 0xfe, 0x49, 0x78, 0x43, 0x2a, 0x76, 0xeb, 0xbf, 0xf0, 0xac, 0xc6,
+ 0xa7, 0xe1, 0x3f, 0xa6, 0x62, 0xfd, 0xf6, 0x31, 0x69, 0xa5, 0x73, 0xda,
+ 0x52, 0xbc, 0x8f, 0xc5, 0xa9, 0x86, 0xce, 0x7f, 0x33, 0xc3, 0xc4, 0x1c,
+ 0xfc, 0x96, 0x8d, 0xe7, 0xd1, 0xe6, 0x8e, 0xee, 0x4c, 0xd1, 0xb9, 0xea,
+ 0x56, 0xfa, 0xa0, 0x54, 0x9c, 0x8b, 0x7c, 0xf9, 0xa5, 0x21, 0xdb, 0xdc,
+ 0x8a, 0x49, 0x1f, 0x96, 0x77, 0x2d, 0xea, 0x6f, 0xfe, 0x2b, 0x36, 0x17,
+ 0x23, 0x1c, 0xfb, 0xb2, 0xd9, 0xb0, 0x8f, 0xab, 0xde, 0xe1, 0x14, 0xf5,
+ 0x85, 0x07, 0xbe, 0x6d, 0xb3, 0x04, 0x38, 0x17, 0x76, 0x5d, 0x3a, 0x51,
+ 0x9d, 0x61, 0x1f, 0x07, 0x8a, 0x85, 0xfb, 0x4a, 0xf1, 0xad, 0x53, 0x4c,
+ 0x48, 0xb4, 0x99, 0x63, 0x62, 0x2d, 0x82, 0xaf, 0x84, 0x6d, 0x7e, 0x8c,
+ 0xb5, 0x6a, 0x45, 0xf0, 0x8b, 0xa3, 0x17, 0x9a, 0x23, 0x7b, 0xca, 0x83,
+ 0xef, 0x55, 0x4e, 0xfa, 0xca, 0x1c, 0xd9, 0x7b, 0x5b, 0xf2, 0xdc, 0x2c,
+ 0xff, 0xf1, 0xcd, 0xdd, 0x81, 0x2f, 0x72, 0xbb, 0x2b, 0x71, 0x37, 0xfa,
+ 0x7d, 0x14, 0xd8, 0xf1, 0xb5, 0x21, 0xbd, 0xf3, 0x4d, 0x9c, 0x0e, 0x27,
+ 0x7d, 0x61, 0xee, 0x5a, 0x18, 0x29, 0x2f, 0x78, 0x39, 0xbd, 0x63, 0x1f,
+ 0xc0, 0x8b, 0xbb, 0x5c, 0x57, 0x19, 0x50, 0xeb, 0xbf, 0xda, 0x6f, 0x36,
+ 0xec, 0x2d, 0xef, 0x88, 0xa4, 0x06, 0x46, 0xc1, 0xca, 0xe4, 0xe5, 0x8b,
+ 0x60, 0x65, 0x92, 0xca, 0x0f, 0x12, 0x86, 0x7f, 0x91, 0xc2, 0xb6, 0x5b,
+ 0xab, 0xca, 0x36, 0x1f, 0xde, 0x8d, 0xbf, 0x6f, 0xf4, 0x58, 0x09, 0x3e,
+ 0x2d, 0x02, 0xff, 0xa6, 0x2b, 0xf5, 0x49, 0xa0, 0xab, 0xe8, 0xca, 0xa8,
+ 0x1e, 0x01, 0x01, 0x4b, 0xc9, 0xfb, 0x23, 0xee, 0x2b, 0x75, 0x6d, 0xda,
+ 0xbf, 0x1b, 0x2b, 0x52, 0x16, 0xc4, 0xdd, 0x9d, 0x4a, 0x98, 0x46, 0xab,
+ 0x4d, 0x75, 0x35, 0x35, 0xe1, 0xfd, 0xc9, 0xcc, 0xe5, 0x34, 0x1e, 0x5d,
+ 0x08, 0x06, 0x71, 0x61, 0x1c, 0x79, 0x6e, 0x2e, 0x2f, 0x49, 0xc8, 0xeb,
+ 0x38, 0x96, 0x06, 0x32, 0xaf, 0x26, 0x99, 0xb9, 0xdd, 0x26, 0x58, 0x7a,
+ 0x07, 0xff, 0x5e, 0x19, 0x3c, 0x62, 0xaa, 0x0e, 0x77, 0x70, 0x61, 0x43,
+ 0xd8, 0xce, 0x73, 0x02, 0x3f, 0x96, 0x0d, 0xbc, 0x1c, 0x93, 0xd8, 0xd3,
+ 0x49, 0xdf, 0xfc, 0x20, 0x3b, 0xdd, 0x93, 0x7a, 0x19, 0x93, 0x38, 0xe6,
+ 0x52, 0x08, 0xca, 0x36, 0x9f, 0x34, 0xa7, 0x97, 0x1d, 0x7c, 0x2c, 0x85,
+ 0x4e, 0xe6, 0xc0, 0xec, 0x66, 0x4d, 0xe1, 0x2f, 0x12, 0x7e, 0x9f, 0x9f,
+ 0x35, 0x7a, 0xd1, 0x0c, 0x5d, 0x38, 0x89, 0xbf, 0x75, 0xb6, 0x05, 0x1f,
+ 0x88, 0x83, 0x77, 0x36, 0x34, 0x37, 0x12, 0x6e, 0x48, 0xa6, 0xed, 0x80,
+ 0x22, 0x2f, 0xbe, 0x4b, 0xfb, 0x2a, 0xf6, 0xc6, 0x99, 0x70, 0x75, 0xb2,
+ 0x18, 0xd9, 0x81, 0x59, 0x15, 0xc1, 0x4d, 0x3a, 0xc1, 0x69, 0xbc, 0x25,
+ 0xe7, 0xc3, 0x88, 0x04, 0x7c, 0x65, 0x7a, 0xe9, 0xc7, 0xf8, 0x9e, 0xef,
+ 0x42, 0xde, 0x91, 0x6c, 0xef, 0x68, 0x44, 0x32, 0xcb, 0x72, 0x19, 0x66,
+ 0xf9, 0x78, 0x32, 0x1e, 0x91, 0xf8, 0x18, 0xf7, 0x86, 0x22, 0xdc, 0x30,
+ 0xe5, 0xa8, 0x6a, 0x51, 0xde, 0x65, 0x49, 0x01, 0x1f, 0xfb, 0x20, 0xea,
+ 0xce, 0x0e, 0xa4, 0xeb, 0xb2, 0xf7, 0x4f, 0x81, 0xa6, 0x5a, 0x3c, 0x32,
+ 0xfa, 0x78, 0x25, 0x7c, 0x77, 0x32, 0xcb, 0xee, 0x32, 0x68, 0xbb, 0x83,
+ 0xe6, 0xae, 0xba, 0x1e, 0x73, 0x17, 0x0e, 0x8d, 0x8f, 0xc2, 0x77, 0x28,
+ 0x6c, 0x37, 0x61, 0x73, 0x00, 0x9d, 0x9a, 0x8b, 0xa1, 0x39, 0x0e, 0x65,
+ 0x30, 0x4f, 0xbb, 0x67, 0x5f, 0xd9, 0x01, 0xec, 0xf4, 0xf2, 0xae, 0xab,
+ 0xfb, 0x01, 0x78, 0x90, 0xf8, 0xba, 0xf1, 0x05, 0x74, 0xe4, 0x5b, 0x49,
+ 0x7c, 0x45, 0x7c, 0x0b, 0xe7, 0x20, 0x34, 0x9d, 0x7f, 0x24, 0x64, 0xba,
+ 0x1b, 0xd8, 0xc3, 0xc6, 0x64, 0xde, 0x68, 0x78, 0x68, 0xf5, 0xe8, 0x80,
+ 0x8a, 0x82, 0x8f, 0xd3, 0x3b, 0x33, 0xd0, 0x1f, 0xab, 0x3b, 0x00, 0xae,
+ 0x4f, 0x4f, 0x29, 0x7b, 0x60, 0x50, 0x09, 0xa2, 0xf2, 0xfe, 0x84, 0x99,
+ 0x75, 0xad, 0x62, 0x4f, 0x32, 0xde, 0x0b, 0xe3, 0x1e, 0x3f, 0xb8, 0xc7,
+ 0x47, 0x8e, 0xd1, 0xae, 0x4f, 0x45, 0xa8, 0x3f, 0x74, 0x73, 0x7b, 0x7e,
+ 0x8e, 0xdf, 0xbe, 0x8f, 0xfd, 0x48, 0x57, 0x45, 0x30, 0xa9, 0xbc, 0xe0,
+ 0x84, 0xaf, 0x28, 0x17, 0xdc, 0xf5, 0x41, 0x7b, 0x26, 0x43, 0x87, 0xa5,
+ 0x3f, 0x39, 0xa4, 0xac, 0xf3, 0xd5, 0xb6, 0x29, 0x95, 0xb6, 0xb7, 0x4a,
+ 0x4e, 0x96, 0xde, 0x5d, 0x94, 0xe2, 0x37, 0x96, 0x47, 0x60, 0x19, 0x91,
+ 0xb4, 0xa6, 0x7b, 0x60, 0xd0, 0xd0, 0x3a, 0xd9, 0xd4, 0xf1, 0xd4, 0xfe,
+ 0x52, 0xc3, 0x7e, 0x88, 0x5e, 0x5e, 0x11, 0x42, 0x66, 0xef, 0x8b, 0xe6,
+ 0x6d, 0xe5, 0x06, 0xa0, 0xe8, 0x0f, 0x05, 0xfc, 0xe5, 0x1e, 0x48, 0x49,
+ 0xbf, 0xab, 0xdb, 0xd8, 0x73, 0x34, 0x29, 0xb7, 0x9b, 0xeb, 0x4a, 0xfa,
+ 0x05, 0xba, 0x79, 0x7d, 0x34, 0x16, 0x6c, 0x44, 0x12, 0xf5, 0xee, 0xbb,
+ 0xf4, 0x98, 0x6a, 0x0f, 0x7b, 0x8c, 0x22, 0xcd, 0xd9, 0xe2, 0xe5, 0x8f,
+ 0x6f, 0xc3, 0x87, 0x0d, 0xe4, 0x04, 0xdf, 0x8f, 0xad, 0x3f, 0x27, 0x75,
+ 0xa4, 0x19, 0x5f, 0x56, 0xfc, 0xa9, 0x82, 0xbf, 0xd3, 0xc9, 0x1f, 0xee,
+ 0x86, 0x7f, 0xa5, 0x70, 0x92, 0xce, 0x5b, 0xd8, 0x4e, 0x5d, 0xde, 0x25,
+ 0xa0, 0xf8, 0x8f, 0xf1, 0x03, 0x06, 0xb0, 0x92, 0x2c, 0x9b, 0xcc, 0x37,
+ 0x13, 0xbb, 0x1a, 0x0d, 0xe8, 0x3e, 0x8d, 0x33, 0x30, 0x9b, 0x81, 0xd3,
+ 0x52, 0x13, 0xd0, 0x7e, 0x35, 0x9f, 0x6d, 0x6d, 0x1a, 0x27, 0xe3, 0xcb,
+ 0xfe, 0xc4, 0xc3, 0x1e, 0x18, 0xbc, 0xcf, 0x8e, 0x01, 0x15, 0xfd, 0xe9,
+ 0x6a, 0x26, 0x32, 0xbf, 0x58, 0xbc, 0xd7, 0xf2, 0xd2, 0xfc, 0x28, 0xe5,
+ 0x3e, 0xfe, 0x68, 0x81, 0x5e, 0x70, 0x01, 0x9f, 0xec, 0x57, 0xdc, 0xca,
+ 0x48, 0xc3, 0x26, 0x8c, 0xbf, 0x14, 0x16, 0x99, 0x70, 0x6c, 0x12, 0xde,
+ 0x8f, 0xb3, 0xfb, 0x09, 0x76, 0xff, 0x9c, 0xdd, 0xbf, 0x64, 0xf7, 0x93,
+ 0xec, 0x7e, 0x8a, 0xdd, 0xbf, 0x61, 0xf7, 0xef, 0xd8, 0xfd, 0x0c, 0xbb,
+ 0xe3, 0x8f, 0x8d, 0x45, 0x26, 0x24, 0xb1, 0x7b, 0x0a, 0xbb, 0xf7, 0x63,
+ 0xf7, 0x34, 0x76, 0x1f, 0xc8, 0xee, 0x17, 0xb2, 0xfb, 0x60, 0x76, 0x1f,
+ 0xc2, 0xee, 0xc3, 0xd8, 0x7d, 0x04, 0xbb, 0x8f, 0x64, 0xf7, 0x51, 0xec,
+ 0x7e, 0x31, 0xbb, 0x5f, 0xca, 0xee, 0x97, 0xb1, 0xbb, 0x91, 0xdd, 0xc7,
+ 0xb1, 0xfb, 0x78, 0x76, 0xbf, 0x92, 0xdd, 0x33, 0xd9, 0x7d, 0x32, 0xbb,
+ 0x4f, 0x65, 0xf7, 0x2c, 0x76, 0xcf, 0x61, 0xf7, 0xe9, 0xec, 0x3e, 0x93,
+ 0xdd, 0x67, 0xb1, 0x7b, 0x3e, 0xbb, 0x17, 0xb2, 0xfb, 0x5c, 0x76, 0xbf,
+ 0x8a, 0xdd, 0x8b, 0xd9, 0x7d, 0x3e, 0xbb, 0x97, 0xb2, 0xfb, 0x02, 0x76,
+ 0x37, 0xb3, 0xfb, 0x35, 0xec, 0x5e, 0xc1, 0xee, 0x8b, 0xd8, 0xbd, 0x8a,
+ 0xdd, 0xab, 0xd9, 0xbd, 0x96, 0xdd, 0xaf, 0x65, 0xf7, 0x7a, 0x76, 0x5f,
+ 0xce, 0xee, 0x2b, 0xd9, 0xfd, 0x3a, 0x76, 0x5f, 0xcd, 0xee, 0x0d, 0xec,
+ 0x6e, 0x9f, 0x8c, 0xc6, 0x6e, 0xcc, 0xeb, 0x13, 0xa1, 0xa3, 0x6a, 0x22,
+ 0x13, 0x9e, 0x81, 0x70, 0x6b, 0x33, 0xfe, 0x50, 0xd8, 0x91, 0x8f, 0x60,
+ 0xe0, 0x34, 0x2f, 0xc0, 0xd8, 0x3b, 0x18, 0x3b, 0x86, 0xb1, 0x57, 0x31,
+ 0x96, 0x02, 0x4a, 0x71, 0xa4, 0x07, 0x63, 0x97, 0x61, 0xec, 0x49, 0x8c,
+ 0xe1, 0x61, 0xe7, 0x23, 0x0f, 0x61, 0xac, 0x1e, 0x63, 0xbf, 0xc3, 0xd8,
+ 0x3a, 0x8c, 0x6d, 0xc7, 0xd8, 0x36, 0x8c, 0xdd, 0x85, 0xb1, 0x87, 0x30,
+ 0xf6, 0x03, 0x8c, 0xed, 0xc7, 0xd8, 0xad, 0x18, 0xfb, 0x04, 0x63, 0xb8,
+ 0xd4, 0x68, 0xee, 0x07, 0xea, 0x7e, 0xc4, 0x8d, 0xb1, 0x36, 0x8c, 0xd9,
+ 0x31, 0xd6, 0x85, 0xb1, 0xe5, 0x18, 0x7b, 0x05, 0x63, 0x78, 0x7a, 0xb3,
+ 0xf9, 0x14, 0xc6, 0x16, 0x60, 0x6c, 0x34, 0x0c, 0xf8, 0x23, 0x73, 0x31,
+ 0x56, 0x80, 0xb1, 0xe9, 0x18, 0x5b, 0x8e, 0x31, 0x7c, 0xac, 0xd6, 0x7c,
+ 0x13, 0xc6, 0x2e, 0xc3, 0xd8, 0xbd, 0x18, 0x1b, 0x81, 0xb1, 0x27, 0x31,
+ 0x36, 0x10, 0x63, 0x07, 0x30, 0x86, 0xe7, 0xca, 0x9b, 0x8f, 0x63, 0xec,
+ 0x24, 0x0c, 0xfe, 0xe6, 0xfe, 0xa0, 0xab, 0xcc, 0x0c, 0x34, 0x4f, 0xc0,
+ 0xd8, 0x07, 0x18, 0x5b, 0x80, 0xb1, 0x83, 0x18, 0xc3, 0xc5, 0xc7, 0x91,
+ 0x97, 0x30, 0x76, 0x13, 0xc6, 0x9e, 0xc6, 0xd8, 0xbd, 0x18, 0x7b, 0x0c,
+ 0x63, 0x3d, 0x18, 0xc3, 0x23, 0xa9, 0xcd, 0x87, 0x30, 0xf6, 0x5b, 0x8c,
+ 0x7d, 0x85, 0xb1, 0x9f, 0x63, 0x6c, 0x0c, 0x18, 0xb5, 0x23, 0xb7, 0x63,
+ 0xac, 0x18, 0x63, 0x78, 0x88, 0xb5, 0xf9, 0xf7, 0x18, 0xbb, 0x09, 0x63,
+ 0xcb, 0xb0, 0x75, 0xfd, 0x18, 0x6b, 0xc1, 0xd8, 0xf5, 0x18, 0xfb, 0x1e,
+ 0xc6, 0xf0, 0x00, 0x6f, 0x33, 0x6e, 0xaf, 0x1f, 0xb9, 0x16, 0x63, 0xf8,
+ 0x73, 0xbb, 0x47, 0x2a, 0x30, 0xf6, 0x32, 0xc6, 0xe6, 0x63, 0xec, 0x1f,
+ 0x18, 0xc3, 0x43, 0xc8, 0xcd, 0x13, 0xb1, 0x5d, 0xb2, 0x30, 0x36, 0x13,
+ 0x63, 0xe3, 0x31, 0x66, 0xc2, 0xd8, 0xc5, 0x18, 0xab, 0xc3, 0xd8, 0x10,
+ 0x8c, 0x39, 0x31, 0xd6, 0x0f, 0x63, 0xf7, 0x63, 0xec, 0xbb, 0xd3, 0x10,
+ 0xfb, 0x33, 0xc6, 0x3e, 0xc7, 0xd8, 0x53, 0x18, 0x0b, 0x63, 0x6c, 0x30,
+ 0x96, 0xef, 0x5d, 0x8c, 0x35, 0x62, 0xec, 0x00, 0xc6, 0x6e, 0xc1, 0xd8,
+ 0xf3, 0x18, 0xfb, 0x05, 0xc6, 0xf0, 0x20, 0x75, 0xf3, 0x93, 0x18, 0x7b,
+ 0x18, 0x63, 0x7f, 0xc3, 0xd8, 0x0e, 0x8c, 0xbd, 0x83, 0xb1, 0x5f, 0x63,
+ 0xec, 0x32, 0x2c, 0xdf, 0x36, 0x8c, 0xa1, 0x29, 0x3d, 0xf2, 0x43, 0x88,
+ 0x29, 0x4a, 0xa3, 0x37, 0xeb, 0xfa, 0x80, 0xcb, 0xe9, 0x70, 0xb7, 0xb5,
+ 0x65, 0x79, 0x7c, 0xbe, 0x2c, 0xbf, 0xc3, 0xdb, 0xe2, 0x74, 0x5b, 0x5d,
+ 0xd3, 0xdc, 0x1e, 0xbf, 0xb3, 0xd1, 0xe9, 0xf0, 0x2a, 0x36, 0x4f, 0x4b,
+ 0x96, 0xb5, 0xb5, 0xd5, 0xe5, 0xc8, 0xe2, 0x49, 0x36, 0xf6, 0x93, 0x6e,
+ 0x36, 0x87, 0x1b, 0x48, 0x03, 0x4e, 0x65, 0xa5, 0xe2, 0x73, 0xb8, 0xed,
+ 0x3a, 0xba, 0x5a, 0x92, 0xa1, 0x94, 0x2c, 0x98, 0x1f, 0x70, 0xdb, 0x5d,
+ 0x8e, 0xb2, 0x36, 0x87, 0x2d, 0xe0, 0xb7, 0x36, 0xb8, 0x1c, 0x6a, 0x52,
+ 0x4d, 0xb3, 0xc7, 0xeb, 0xa7, 0x1f, 0x8c, 0xab, 0xe1, 0xbf, 0x0b, 0x3b,
+ 0xc1, 0x67, 0xcc, 0x9c, 0xe0, 0x9b, 0x64, 0x74, 0xfa, 0x8c, 0x56, 0x23,
+ 0xfe, 0xda, 0xa4, 0xd5, 0x6d, 0x9f, 0xe6, 0x72, 0xba, 0x1d, 0x46, 0xbf,
+ 0xc7, 0xe3, 0x82, 0x9b, 0x11, 0x73, 0x32, 0xb6, 0x58, 0x6d, 0x8b, 0x6b,
+ 0x8c, 0x75, 0x3e, 0x87, 0xd7, 0xb8, 0x48, 0x53, 0x20, 0x5f, 0xd6, 0xc0,
+ 0x81, 0x75, 0x3e, 0x6b, 0x93, 0xa3, 0xd0, 0x08, 0x82, 0xa6, 0xad, 0x68,
+ 0x71, 0xf8, 0x10, 0xba, 0x11, 0x7f, 0x2c, 0xf5, 0x46, 0xaf, 0xa3, 0xc5,
+ 0xb3, 0xce, 0xb1, 0xca, 0xb8, 0xe2, 0x5a, 0x53, 0x45, 0x5d, 0xd9, 0x8d,
+ 0xe5, 0xa5, 0xf0, 0x1f, 0x20, 0x4f, 0x2b, 0xe3, 0x5c, 0x35, 0x70, 0xa0,
+ 0xd1, 0x68, 0x2c, 0x73, 0xfa, 0x9b, 0x41, 0xa6, 0xa7, 0xd1, 0x08, 0xa1,
+ 0xcf, 0x81, 0xc5, 0xf0, 0x3a, 0xd6, 0x06, 0x9c, 0x5e, 0x87, 0xdd, 0x98,
+ 0x19, 0x70, 0xbb, 0x40, 0x9e, 0x91, 0x84, 0x1a, 0xf1, 0xb7, 0x35, 0x91,
+ 0xa0, 0xd5, 0xd9, 0x0a, 0x58, 0x28, 0x19, 0xb0, 0xb0, 0x52, 0x4e, 0x2a,
+ 0x64, 0xb2, 0xf0, 0x6f, 0x1a, 0xfe, 0x46, 0xb5, 0x51, 0xf7, 0x57, 0xea,
+ 0xf4, 0xb5, 0xba, 0xac, 0x1b, 0x80, 0x1a, 0x78, 0x19, 0xba, 0xc1, 0xea,
+ 0x76, 0x3b, 0xbc, 0x59, 0x2a, 0xcf, 0x3a, 0xde, 0x22, 0xf1, 0x78, 0xe4,
+ 0x8e, 0x31, 0x12, 0x6d, 0x94, 0x59, 0x94, 0x8e, 0x55, 0x92, 0x25, 0xd5,
+ 0x42, 0xb1, 0xb4, 0xbd, 0x26, 0x2a, 0x10, 0xe5, 0xe1, 0x2d, 0x63, 0x2c,
+ 0x2f, 0x55, 0x33, 0xac, 0x66, 0x29, 0xd8, 0x07, 0x3a, 0xce, 0xf5, 0xd0,
+ 0x3c, 0xac, 0x9a, 0xbe, 0x56, 0x87, 0x0d, 0x0b, 0x60, 0x37, 0x7e, 0xd0,
+ 0xbe, 0xad, 0xc9, 0xeb, 0x09, 0xb4, 0x7e, 0xd0, 0x7e, 0x37, 0x08, 0x88,
+ 0xca, 0xc4, 0x26, 0xd7, 0x4a, 0x34, 0x1a, 0xcb, 0x1b, 0x7b, 0x65, 0x35,
+ 0x3a, 0xda, 0x80, 0xc5, 0x67, 0xf4, 0x35, 0x7b, 0xd6, 0x1b, 0xd7, 0x37,
+ 0x3b, 0xdc, 0x46, 0xa7, 0xdf, 0xb8, 0xde, 0xea, 0x33, 0xda, 0x1d, 0x2e,
+ 0x27, 0x54, 0xd3, 0x61, 0x9f, 0x3a, 0xd0, 0x98, 0xf0, 0xcf, 0xe3, 0x35,
+ 0x06, 0xa0, 0xbf, 0x40, 0xa4, 0xa9, 0xa2, 0x02, 0x05, 0x02, 0x23, 0xc8,
+ 0x64, 0xfa, 0xe2, 0x30, 0x5a, 0x5d, 0x2e, 0x5d, 0x45, 0x7c, 0x59, 0xbd,
+ 0x88, 0xc2, 0xf6, 0xf2, 0x04, 0xfc, 0xad, 0x01, 0x3f, 0xd7, 0x42, 0xd0,
+ 0xd9, 0x69, 0x3e, 0x47, 0xab, 0xd5, 0x6b, 0xf5, 0x43, 0xa1, 0xb1, 0x5e,
+ 0x59, 0xac, 0x7f, 0x17, 0x33, 0xc5, 0xb1, 0xba, 0x34, 0xbd, 0xed, 0x77,
+ 0xfa, 0x5d, 0xda, 0xa6, 0x8f, 0xd3, 0xf8, 0x8c, 0x24, 0xcb, 0x58, 0xea,
+ 0x68, 0xb4, 0x06, 0x5c, 0x50, 0x5d, 0x28, 0x21, 0x14, 0x5a, 0x8c, 0x16,
+ 0x28, 0x79, 0xb4, 0x09, 0x7d, 0x81, 0x06, 0x49, 0x60, 0x8c, 0x34, 0x41,
+ 0xa2, 0x61, 0xc2, 0x1f, 0x5c, 0x34, 0x2e, 0x32, 0x55, 0x96, 0x69, 0xeb,
+ 0x83, 0xbf, 0x1a, 0x8e, 0x5a, 0x6d, 0x35, 0x72, 0x3c, 0xe4, 0xca, 0x14,
+ 0x8a, 0xb5, 0xb3, 0x5f, 0x96, 0x0a, 0x23, 0xd8, 0x61, 0xf5, 0xfa, 0xb2,
+ 0x54, 0x56, 0x68, 0x06, 0xaf, 0x83, 0x55, 0xdd, 0x61, 0xef, 0xa5, 0xe5,
+ 0x9c, 0x6e, 0x63, 0x0d, 0x13, 0x5f, 0xe5, 0x75, 0x34, 0x42, 0x8f, 0x81,
+ 0x81, 0x00, 0x21, 0x30, 0x4a, 0x8d, 0x13, 0xed, 0xbc, 0xbe, 0x13, 0x8d,
+ 0x8d, 0xd0, 0x53, 0x98, 0x21, 0x25, 0x48, 0xd5, 0x41, 0xee, 0x68, 0x5d,
+ 0x98, 0x76, 0xe8, 0x94, 0xc8, 0x64, 0xe4, 0xbf, 0x1f, 0x0d, 0x05, 0x77,
+ 0xda, 0x9a, 0x8d, 0x4e, 0x3b, 0x58, 0x20, 0x54, 0x26, 0x1f, 0x93, 0xc9,
+ 0xe9, 0xe5, 0xea, 0xf8, 0x8c, 0x0d, 0x0e, 0x97, 0x07, 0x78, 0xfc, 0x9e,
+ 0xde, 0xba, 0x7d, 0xb1, 0xcb, 0x2e, 0xb1, 0x45, 0xb5, 0x1d, 0x5b, 0x0f,
+ 0x8a, 0xb1, 0xde, 0x09, 0x7a, 0xd4, 0xe0, 0x30, 0xf2, 0xf1, 0xa2, 0x29,
+ 0xa8, 0xd5, 0xe6, 0x77, 0xae, 0x03, 0xf5, 0x88, 0x96, 0x15, 0x5b, 0xae,
+ 0x81, 0x19, 0xb9, 0x68, 0x21, 0x85, 0x5d, 0xc1, 0xf6, 0x75, 0xa9, 0xfa,
+ 0xe0, 0x31, 0xaa, 0xdc, 0x6a, 0x6f, 0x04, 0xd0, 0xb0, 0xd9, 0x80, 0x66,
+ 0x8d, 0x2f, 0xa6, 0x3a, 0x9a, 0xae, 0x66, 0x36, 0x57, 0xdb, 0x3e, 0x7d,
+ 0xcf, 0xb5, 0xd9, 0xea, 0xc7, 0x91, 0x16, 0x80, 0x4a, 0x43, 0x85, 0x70,
+ 0xcc, 0xb9, 0x71, 0xc8, 0xb0, 0xda, 0x32, 0xb1, 0x53, 0xa1, 0x37, 0x6d,
+ 0xae, 0x80, 0x1d, 0x1b, 0xdb, 0x09, 0x7a, 0xea, 0xb4, 0x69, 0xb3, 0x06,
+ 0x59, 0xe5, 0x90, 0x60, 0xac, 0xab, 0xae, 0xd0, 0x64, 0x8d, 0x10, 0x53,
+ 0x32, 0xf6, 0x8b, 0xd2, 0x58, 0x35, 0x3b, 0x19, 0x2e, 0xa7, 0x1b, 0x54,
+ 0xc7, 0x6a, 0x8f, 0x57, 0x14, 0x14, 0x6c, 0xcc, 0xac, 0xb4, 0xc2, 0x10,
+ 0xc7, 0xfa, 0x4e, 0x31, 0x7a, 0xdc, 0xae, 0x0d, 0x93, 0xd4, 0x9c, 0x00,
+ 0xeb, 0x87, 0x9a, 0x94, 0x33, 0x89, 0x2c, 0xbb, 0xde, 0x73, 0xb2, 0xfa,
+ 0xfd, 0x56, 0x5b, 0x73, 0xd4, 0x20, 0xeb, 0xf4, 0x2b, 0x71, 0x36, 0x9e,
+ 0x56, 0x87, 0xb6, 0x36, 0x72, 0x85, 0xbc, 0x0e, 0x50, 0x4d, 0xaf, 0x8d,
+ 0xe5, 0xc4, 0x48, 0xcf, 0xb1, 0xab, 0x1c, 0x6c, 0xf2, 0x73, 0x18, 0x4b,
+ 0x16, 0x57, 0x56, 0x9a, 0x16, 0x95, 0x72, 0x4d, 0x06, 0xe3, 0xef, 0x12,
+ 0x73, 0x1c, 0x1b, 0x91, 0x0e, 0x2f, 0x8c, 0x8e, 0x96, 0x73, 0x95, 0xed,
+ 0x6c, 0x72, 0x7b, 0xbc, 0x8e, 0x52, 0x77, 0x54, 0x0d, 0x6a, 0x70, 0x8a,
+ 0xd4, 0x55, 0xdc, 0xb1, 0x0e, 0xed, 0x69, 0xa3, 0xb1, 0xd4, 0x83, 0xf3,
+ 0x25, 0xce, 0x27, 0xfe, 0x80, 0xb7, 0x01, 0xed, 0x9b, 0xc3, 0x8d, 0x53,
+ 0x32, 0xe8, 0xf2, 0xc0, 0xa5, 0xba, 0x6c, 0x85, 0x52, 0xca, 0x73, 0xc0,
+ 0x54, 0x46, 0x02, 0xed, 0xc1, 0xac, 0x17, 0x33, 0x0b, 0x9e, 0xa6, 0xa6,
+ 0x68, 0x7b, 0xfb, 0xd8, 0x4f, 0xc6, 0x62, 0x22, 0x18, 0x59, 0x1c, 0xfa,
+ 0x25, 0x30, 0x94, 0x3c, 0x60, 0xa1, 0xa0, 0xcf, 0x91, 0x66, 0x9d, 0xd3,
+ 0xb1, 0x9e, 0x26, 0x57, 0x4e, 0x33, 0x10, 0x0a, 0xe4, 0xe0, 0x0a, 0xe9,
+ 0x44, 0x0b, 0x00, 0x43, 0xcd, 0xe6, 0xf4, 0xda, 0x02, 0x2d, 0x3e, 0xbf,
+ 0x15, 0x0d, 0x08, 0x93, 0xda, 0xe8, 0xf4, 0xc2, 0x74, 0x62, 0x6b, 0x06,
+ 0x23, 0x6c, 0xf3, 0x73, 0x95, 0xb6, 0xaa, 0x13, 0x71, 0xb3, 0x95, 0x99,
+ 0x51, 0xd0, 0x63, 0x87, 0xcf, 0x66, 0xc5, 0xc9, 0x18, 0x04, 0x79, 0xbc,
+ 0x38, 0x36, 0x78, 0xb2, 0xd7, 0x61, 0xf3, 0x34, 0xb9, 0x9d, 0x1b, 0xb1,
+ 0x9a, 0x26, 0x68, 0x8c, 0x36, 0x6b, 0x0b, 0xb8, 0x28, 0x5c, 0x19, 0xa1,
+ 0x09, 0xe0, 0x3f, 0x6b, 0xf2, 0x80, 0x0f, 0x95, 0xdd, 0xea, 0xe6, 0x3d,
+ 0xdc, 0x00, 0x59, 0xad, 0x71, 0xf8, 0xa7, 0x92, 0xa9, 0x89, 0xcd, 0xc4,
+ 0xe5, 0x5c, 0x03, 0xd5, 0xf5, 0x14, 0xa2, 0xfd, 0x5e, 0xb9, 0x82, 0x59,
+ 0xee, 0x81, 0x0b, 0xc0, 0xba, 0xb5, 0x40, 0x6f, 0x18, 0xf1, 0xe7, 0xd4,
+ 0xbd, 0x2d, 0x64, 0xd5, 0x60, 0x06, 0x6a, 0xf6, 0xfb, 0x5b, 0x7d, 0x85,
+ 0xd9, 0xd9, 0x4d, 0x60, 0x53, 0x02, 0x0d, 0x59, 0xd0, 0xeb, 0xd9, 0xdc,
+ 0xe5, 0xaa, 0xaf, 0xcf, 0x8e, 0x99, 0xd5, 0xb3, 0x06, 0xa2, 0x1f, 0x34,
+ 0x01, 0x1a, 0x47, 0x61, 0x0e, 0x84, 0x22, 0x5c, 0x02, 0x85, 0x0f, 0xee,
+ 0x72, 0x75, 0x6c, 0x2b, 0x2b, 0xc6, 0xae, 0x32, 0xd6, 0xb1, 0x2e, 0x64,
+ 0x1a, 0xe4, 0x81, 0x56, 0x92, 0xe6, 0x6c, 0x61, 0x70, 0x6d, 0x01, 0x2f,
+ 0x58, 0x64, 0x3f, 0xef, 0xdd, 0xcc, 0x09, 0xc5, 0x93, 0xa6, 0xe2, 0x80,
+ 0x87, 0x39, 0x16, 0x6b, 0xe6, 0xf6, 0x18, 0xbd, 0x01, 0xb7, 0x1b, 0xeb,
+ 0xaf, 0xf5, 0xa7, 0x4a, 0x98, 0x83, 0xc7, 0x46, 0x2f, 0xf6, 0x45, 0x96,
+ 0x22, 0xe6, 0x1b, 0x85, 0xda, 0x5e, 0xe1, 0xa6, 0x50, 0x61, 0xbf, 0x6f,
+ 0xcf, 0xac, 0xb7, 0x22, 0x14, 0x47, 0x94, 0xb5, 0x54, 0x61, 0x66, 0x99,
+ 0xdf, 0x01, 0xa2, 0xa1, 0xa0, 0x90, 0xe2, 0x2b, 0x64, 0x4a, 0x14, 0xed,
+ 0x40, 0x57, 0xb0, 0x07, 0x94, 0x89, 0x13, 0x8a, 0x27, 0x62, 0xe7, 0x40,
+ 0x75, 0xa0, 0x52, 0xeb, 0xac, 0x2e, 0xa7, 0x1d, 0x46, 0x64, 0x79, 0x96,
+ 0x12, 0x55, 0x79, 0x25, 0x1a, 0xe3, 0xe5, 0x52, 0xdd, 0xce, 0x09, 0xd3,
+ 0x67, 0x28, 0x57, 0x28, 0x16, 0x6e, 0x06, 0xfd, 0x1b, 0xb8, 0x58, 0x3d,
+ 0x68, 0xb6, 0xfa, 0xe6, 0x33, 0x35, 0x51, 0x68, 0x32, 0x02, 0x3c, 0x13,
+ 0xe7, 0x2b, 0xf5, 0x40, 0x2b, 0xd0, 0x20, 0x51, 0xc0, 0xa1, 0x50, 0x26,
+ 0x73, 0x8f, 0x08, 0xdb, 0xa7, 0xd5, 0xeb, 0x58, 0xe7, 0xf4, 0x04, 0x7c,
+ 0xae, 0x0d, 0x68, 0x29, 0xfd, 0xd2, 0xe0, 0xe0, 0xca, 0x82, 0x6e, 0x0b,
+ 0x43, 0x7a, 0xdc, 0xe8, 0x89, 0x42, 0x77, 0x16, 0x0f, 0xd0, 0xfc, 0x57,
+ 0xea, 0xb4, 0x23, 0x4c, 0x3f, 0x54, 0x0b, 0x15, 0xa3, 0x98, 0xf6, 0x80,
+ 0xb5, 0x58, 0xc1, 0xf1, 0xcc, 0xaa, 0xc6, 0x21, 0xd1, 0x01, 0x84, 0xa3,
+ 0x6e, 0x60, 0x10, 0x19, 0x7e, 0x95, 0x8f, 0x1a, 0x58, 0x95, 0xc2, 0xd4,
+ 0x9a, 0x41, 0x51, 0x85, 0x69, 0x74, 0x82, 0xa5, 0xb0, 0xba, 0x75, 0x06,
+ 0x39, 0x8e, 0x93, 0x27, 0xe6, 0x14, 0xb7, 0xaa, 0x78, 0x59, 0x4a, 0x76,
+ 0x83, 0xd3, 0x9d, 0xed, 0x6b, 0x56, 0xa6, 0xd9, 0x44, 0x57, 0x92, 0xd7,
+ 0x54, 0x38, 0x10, 0xb2, 0x00, 0xa5, 0x6a, 0x56, 0x6a, 0x97, 0x4c, 0xad,
+ 0x06, 0x95, 0x01, 0xbb, 0xc6, 0x7e, 0x22, 0x5f, 0xa9, 0xbd, 0x02, 0x60,
+ 0x3b, 0x8c, 0x1f, 0xf6, 0xf3, 0xdf, 0xd0, 0xe7, 0xb5, 0xc5, 0xe3, 0x16,
+ 0xd5, 0x70, 0xcf, 0x7f, 0xdc, 0xd4, 0xea, 0xa9, 0x25, 0x80, 0x6c, 0x08,
+ 0x34, 0x95, 0x6a, 0x28, 0x16, 0xd5, 0xf0, 0xa5, 0x82, 0xa2, 0xfd, 0xbb,
+ 0x9a, 0xab, 0xd2, 0x80, 0x5a, 0x6c, 0x89, 0x01, 0x35, 0xd4, 0x24, 0x03,
+ 0x2a, 0x79, 0x63, 0x0c, 0x28, 0x15, 0x0e, 0xa3, 0xd1, 0xe4, 0x07, 0x01,
+ 0xa6, 0x00, 0xfe, 0xda, 0xbf, 0xcb, 0x61, 0xf5, 0x39, 0xaa, 0xc0, 0x3b,
+ 0x57, 0xf8, 0x8f, 0xec, 0x5b, 0xf5, 0xa9, 0x55, 0x01, 0x28, 0x6f, 0x7c,
+ 0x8c, 0xa7, 0x55, 0x7c, 0x80, 0x44, 0xf3, 0xbb, 0xf2, 0x20, 0xd6, 0xeb,
+ 0xb5, 0x6e, 0x80, 0xb0, 0x92, 0x2f, 0x6a, 0x04, 0x58, 0xea, 0xb4, 0x31,
+ 0xb7, 0xd0, 0x8b, 0xc0, 0x62, 0xd4, 0x2e, 0x87, 0xbd, 0xc6, 0xe1, 0x8f,
+ 0x12, 0xc6, 0x4b, 0xd3, 0x30, 0x61, 0x19, 0x1c, 0x36, 0xbf, 0xc5, 0xe7,
+ 0xf0, 0x97, 0xd3, 0xb0, 0xbb, 0xd6, 0xea, 0x75, 0xb2, 0x75, 0x93, 0x16,
+ 0xb7, 0xce, 0xea, 0x55, 0x61, 0x9b, 0xa7, 0x75, 0x03, 0x15, 0xde, 0xeb,
+ 0xf0, 0x5b, 0x9d, 0x6e, 0x1d, 0x30, 0xdf, 0xe5, 0xb1, 0xad, 0x51, 0x53,
+ 0x58, 0xbd, 0x62, 0x6b, 0xaa, 0xe3, 0x30, 0xc5, 0xa4, 0x6b, 0x28, 0xab,
+ 0x1d, 0x30, 0x2a, 0xdc, 0xd7, 0x5a, 0x5d, 0x81, 0x84, 0x4c, 0x7d, 0x20,
+ 0xb1, 0xc7, 0xd2, 0xf8, 0x10, 0x09, 0xca, 0x00, 0xae, 0x1a, 0xb4, 0x4c,
+ 0x9d, 0xdb, 0xee, 0xa9, 0xb4, 0xba, 0xa1, 0x3f, 0xbd, 0x55, 0x5e, 0x4f,
+ 0x1b, 0xd4, 0xcf, 0x6f, 0xf5, 0x36, 0x39, 0xfc, 0x25, 0x4c, 0x93, 0x8a,
+ 0x0b, 0xaf, 0xc0, 0xd6, 0x63, 0x78, 0xfb, 0x62, 0xd6, 0x0a, 0x00, 0xe3,
+ 0x54, 0x03, 0x2d, 0xe6, 0xa7, 0xb5, 0xa4, 0x50, 0x2d, 0x88, 0x2c, 0x74,
+ 0x83, 0x83, 0xb3, 0xd0, 0xb1, 0xc1, 0x57, 0x09, 0x9a, 0x0e, 0x49, 0x80,
+ 0x80, 0x91, 0xd7, 0xb4, 0x21, 0x57, 0x8b, 0x8b, 0xf6, 0x42, 0xae, 0x5a,
+ 0x6c, 0xab, 0x9d, 0x65, 0x58, 0x65, 0x75, 0x7a, 0x45, 0x53, 0xb8, 0xa0,
+ 0x3d, 0x81, 0x59, 0x9f, 0x8e, 0xdd, 0xd0, 0x84, 0x5d, 0x66, 0x07, 0xfb,
+ 0x66, 0xc7, 0xde, 0xf1, 0x11, 0xbd, 0x5a, 0x66, 0x15, 0xac, 0x84, 0xc6,
+ 0x90, 0x92, 0xaa, 0x69, 0x91, 0xa9, 0x4d, 0x76, 0x79, 0x3c, 0x6b, 0xea,
+ 0x5a, 0x25, 0xc2, 0x2a, 0xfc, 0x76, 0x85, 0x0d, 0xb5, 0x98, 0x0d, 0x29,
+ 0x4c, 0x5a, 0xc4, 0x3e, 0x31, 0xd4, 0x4a, 0x88, 0x68, 0x0a, 0x7d, 0x8b,
+ 0xa3, 0x75, 0x03, 0x13, 0x81, 0x69, 0x3e, 0x98, 0x9e, 0xb8, 0x21, 0x5c,
+ 0x57, 0x5c, 0xa8, 0xd4, 0xac, 0x77, 0x36, 0x82, 0xc9, 0xab, 0xf5, 0x4f,
+ 0xb0, 0xd5, 0xf8, 0x26, 0x6c, 0x0c, 0x4c, 0xc8, 0x9a, 0xec, 0x9b, 0x00,
+ 0x59, 0xf1, 0x24, 0x91, 0x10, 0x4d, 0xaf, 0xf5, 0x57, 0xe1, 0xad, 0x44,
+ 0xa9, 0xf1, 0x29, 0x98, 0x96, 0x85, 0x37, 0xa5, 0x05, 0x35, 0x8c, 0x0f,
+ 0x51, 0x8b, 0x25, 0x66, 0x7a, 0xe2, 0x2d, 0x03, 0xd9, 0x42, 0xfb, 0x16,
+ 0x2a, 0xdc, 0x0a, 0x38, 0x7d, 0x0b, 0xc1, 0x90, 0x2c, 0x6e, 0x64, 0xc5,
+ 0x2a, 0x44, 0x4b, 0x81, 0xcb, 0x05, 0x67, 0x5b, 0x21, 0xce, 0x2e, 0xdc,
+ 0xbd, 0x5f, 0xe0, 0xf5, 0xb4, 0xb0, 0xa6, 0x2c, 0xd4, 0x49, 0x80, 0x51,
+ 0x03, 0x14, 0xcc, 0x36, 0x00, 0x31, 0xf4, 0xb4, 0xdd, 0xea, 0xb5, 0xa3,
+ 0x2d, 0x15, 0xab, 0x29, 0xc5, 0xae, 0x76, 0xe1, 0x52, 0xb0, 0x62, 0x5c,
+ 0x31, 0x7c, 0x85, 0x8d, 0x8c, 0xdb, 0x57, 0x68, 0x83, 0x09, 0x0a, 0x38,
+ 0xbd, 0x8e, 0x26, 0x5c, 0xc9, 0xa8, 0x5c, 0x9a, 0x4c, 0xca, 0x61, 0xda,
+ 0x8e, 0xaa, 0x01, 0x2b, 0x74, 0x5d, 0xed, 0x82, 0x7c, 0xd2, 0x23, 0x9c,
+ 0x3a, 0x91, 0x82, 0x45, 0x4c, 0xc2, 0x7c, 0x2f, 0xd2, 0x59, 0x6f, 0xe8,
+ 0x07, 0x70, 0x5a, 0x7c, 0x8c, 0x0c, 0x14, 0x36, 0xd0, 0x02, 0x6d, 0x01,
+ 0x75, 0xc6, 0xca, 0x2c, 0x6e, 0xe4, 0x05, 0x42, 0x22, 0xa7, 0xdb, 0x6f,
+ 0x86, 0x99, 0x7d, 0x3e, 0x5b, 0xfa, 0x73, 0x98, 0x36, 0x42, 0x14, 0x1f,
+ 0x78, 0x39, 0x0e, 0xfb, 0x52, 0xfc, 0x99, 0xfd, 0x56, 0xab, 0x0d, 0xa6,
+ 0x58, 0x3e, 0x31, 0x9b, 0xa2, 0x26, 0xda, 0xa7, 0xac, 0xc3, 0x71, 0x23,
+ 0x9a, 0xb5, 0xd1, 0xe9, 0x82, 0xb9, 0x0c, 0x5b, 0x1e, 0x2b, 0x5d, 0x43,
+ 0xed, 0x52, 0xee, 0x06, 0x5b, 0xac, 0xa0, 0x06, 0x97, 0x5a, 0xfd, 0xd6,
+ 0x5a, 0x4f, 0x19, 0xb6, 0xf9, 0x02, 0x20, 0x55, 0x70, 0xe3, 0x02, 0x29,
+ 0x31, 0xbd, 0x50, 0x61, 0xfa, 0x0c, 0x05, 0x74, 0xfa, 0xd5, 0x34, 0x58,
+ 0xb8, 0x79, 0xd0, 0xf1, 0x2f, 0x64, 0xf3, 0xba, 0xb6, 0x7e, 0x48, 0x42,
+ 0xd6, 0xb7, 0x90, 0xe6, 0xfe, 0x84, 0x68, 0x97, 0xc3, 0xdd, 0xe4, 0x6f,
+ 0xd6, 0x74, 0x89, 0x02, 0x76, 0x8b, 0x5a, 0xa0, 0x31, 0xb6, 0x3f, 0xc1,
+ 0xd7, 0xe6, 0xc5, 0xf7, 0xb2, 0x9c, 0x7d, 0xe0, 0xc4, 0x83, 0x16, 0x37,
+ 0x83, 0x47, 0x03, 0x1a, 0x83, 0xe5, 0x06, 0x02, 0xe6, 0x24, 0x80, 0xc2,
+ 0xf9, 0x44, 0x43, 0xba, 0x03, 0x2d, 0x0d, 0x0e, 0x2f, 0xf2, 0xcd, 0x07,
+ 0x53, 0x5d, 0xa8, 0xd0, 0x5e, 0x81, 0x5c, 0x26, 0x36, 0x51, 0x14, 0xaa,
+ 0x73, 0xa7, 0x98, 0x35, 0x69, 0xeb, 0xa7, 0x90, 0x39, 0x2e, 0xbc, 0x1d,
+ 0xa9, 0x14, 0x55, 0x56, 0x7f, 0x73, 0xa1, 0xda, 0x28, 0x25, 0xdc, 0x35,
+ 0xf1, 0x2d, 0x6e, 0x04, 0x34, 0x6a, 0x1e, 0x16, 0x71, 0xfe, 0x06, 0xe8,
+ 0x11, 0x70, 0xb4, 0xb9, 0x35, 0xe1, 0x65, 0x26, 0x44, 0xb5, 0x03, 0x96,
+ 0x22, 0x36, 0x88, 0x2e, 0xb6, 0x71, 0xaf, 0x0b, 0x34, 0x62, 0x71, 0x23,
+ 0x51, 0xad, 0xd7, 0x54, 0xd2, 0xed, 0x58, 0x8f, 0x8d, 0xc2, 0x8b, 0x87,
+ 0x31, 0x31, 0x97, 0x31, 0xa0, 0x5c, 0xf8, 0x90, 0xeb, 0x1c, 0xb5, 0x8e,
+ 0x36, 0x3f, 0x4b, 0xab, 0x23, 0x15, 0x2c, 0x54, 0xd0, 0xda, 0xe0, 0x58,
+ 0xc6, 0xb1, 0xc2, 0x8b, 0xe5, 0xf0, 0x33, 0x73, 0x4a, 0x8d, 0xab, 0x6d,
+ 0x9c, 0x72, 0x37, 0xe7, 0x2e, 0xd1, 0xf8, 0x58, 0x50, 0x3d, 0x5f, 0xd9,
+ 0xda, 0x80, 0xd5, 0x55, 0xeb, 0x51, 0xcb, 0x0f, 0x05, 0xc0, 0xa6, 0x40,
+ 0x5b, 0x51, 0x28, 0x9c, 0x22, 0xcc, 0x31, 0xd6, 0x27, 0x44, 0x5a, 0x98,
+ 0x67, 0x1d, 0x4d, 0x30, 0x02, 0x78, 0x67, 0xd9, 0x03, 0x2e, 0x87, 0x7e,
+ 0x28, 0xa8, 0x1b, 0x37, 0xba, 0x2d, 0x3a, 0x85, 0x8d, 0xc2, 0xf9, 0x1b,
+ 0xca, 0xa0, 0x78, 0x0e, 0xb0, 0xc2, 0x90, 0x33, 0xa9, 0x2d, 0x48, 0xf2,
+ 0xd0, 0x88, 0xa5, 0x91, 0x0a, 0x2e, 0x12, 0x14, 0x90, 0xe6, 0xf3, 0x0d,
+ 0xa5, 0xe8, 0x55, 0x6a, 0xdd, 0x07, 0xae, 0x80, 0xa5, 0xf1, 0xb2, 0x01,
+ 0x5e, 0x36, 0x21, 0x73, 0xaf, 0x50, 0x75, 0x5b, 0x9d, 0xfa, 0x26, 0xa5,
+ 0x1e, 0xc3, 0xfc, 0x17, 0xb0, 0x74, 0x60, 0xb3, 0xdb, 0x85, 0x72, 0xb1,
+ 0x42, 0xa8, 0xfe, 0x2c, 0xf4, 0x36, 0xd3, 0x33, 0xf2, 0x6a, 0x0b, 0x85,
+ 0x23, 0x5b, 0x83, 0xcb, 0xb8, 0x12, 0xf2, 0xb5, 0x98, 0xe3, 0xca, 0x7a,
+ 0x43, 0xe3, 0x51, 0x69, 0xd8, 0x54, 0xcb, 0x58, 0x18, 0xf5, 0x93, 0x71,
+ 0xff, 0x50, 0x33, 0x86, 0xa1, 0x20, 0xd5, 0x30, 0x68, 0xd1, 0xde, 0x40,
+ 0x1b, 0x57, 0x58, 0x03, 0x6e, 0x1b, 0xa9, 0x23, 0xab, 0x91, 0xd6, 0xae,
+ 0x51, 0x2b, 0x01, 0x99, 0x49, 0x58, 0x1a, 0xde, 0x89, 0x64, 0x02, 0x16,
+ 0x73, 0x7f, 0x4c, 0x9b, 0x54, 0xe6, 0xf5, 0x7a, 0x20, 0x73, 0x17, 0x13,
+ 0xcb, 0x2c, 0x81, 0x62, 0x5d, 0x67, 0x75, 0xba, 0x98, 0x17, 0xc2, 0x20,
+ 0xa6, 0xd4, 0xdc, 0x34, 0xac, 0xb7, 0x3a, 0xfd, 0x75, 0x50, 0x60, 0x57,
+ 0x59, 0x9b, 0xd3, 0xaf, 0xd0, 0x32, 0xc5, 0xcf, 0x36, 0x6b, 0xad, 0xfe,
+ 0x80, 0x8f, 0x8d, 0x0f, 0x27, 0xb8, 0xe5, 0x1b, 0x1d, 0x3a, 0x23, 0x4c,
+ 0x7a, 0x85, 0xf9, 0xba, 0x1a, 0x15, 0x5a, 0xd5, 0xd6, 0x80, 0xb2, 0xd8,
+ 0xfc, 0x98, 0xb7, 0x9c, 0xb0, 0x5e, 0xad, 0x51, 0xaf, 0x38, 0x2d, 0x99,
+ 0xd3, 0xc7, 0x7d, 0x02, 0xa7, 0xaf, 0xd2, 0x81, 0x3a, 0xae, 0x4e, 0x26,
+ 0x60, 0x1f, 0x90, 0xdf, 0x57, 0xeb, 0x11, 0x13, 0x25, 0x9a, 0x29, 0x5f,
+ 0xab, 0xc7, 0x6d, 0x87, 0xb4, 0x68, 0x19, 0xc8, 0x4d, 0x12, 0x4e, 0x8e,
+ 0xd6, 0x11, 0xe2, 0xa8, 0x12, 0xd6, 0xf7, 0x1b, 0x3d, 0x6e, 0x07, 0x77,
+ 0x65, 0x35, 0x5e, 0x6c, 0x8c, 0x8f, 0xaa, 0xe9, 0xea, 0x1a, 0xb6, 0xa5,
+ 0x42, 0x8b, 0x10, 0x1c, 0x19, 0x1a, 0x5c, 0x21, 0xe9, 0x86, 0x2f, 0x36,
+ 0x15, 0xcd, 0x5b, 0xfc, 0xd4, 0x38, 0xc4, 0xb5, 0x8e, 0x96, 0xd6, 0x18,
+ 0x06, 0x9e, 0xf1, 0x62, 0xcc, 0xc1, 0xcd, 0x54, 0xdd, 0x1e, 0x43, 0xd2,
+ 0x2b, 0x52, 0xcd, 0x10, 0xf5, 0x0b, 0xfc, 0xf8, 0xba, 0x72, 0x3d, 0x9a,
+ 0xcd, 0x50, 0xb1, 0x5c, 0x6a, 0xb2, 0x8f, 0xdb, 0x35, 0x87, 0x1f, 0xc7,
+ 0x33, 0x58, 0xd4, 0x66, 0xcf, 0xfa, 0x2a, 0xc4, 0x55, 0x59, 0xdd, 0x0e,
+ 0x97, 0x2f, 0x4e, 0x51, 0xd5, 0x36, 0x32, 0x35, 0x82, 0x62, 0x55, 0x58,
+ 0x7d, 0x60, 0x69, 0xc1, 0xe5, 0x5b, 0x5f, 0xe2, 0xf2, 0x80, 0x77, 0x18,
+ 0x87, 0x81, 0x8f, 0x8e, 0x6a, 0x07, 0x5b, 0xc5, 0x40, 0x9f, 0x5c, 0xeb,
+ 0xf4, 0x39, 0x1b, 0xb0, 0xbc, 0xc8, 0xa5, 0xcf, 0xa1, 0x14, 0x1c, 0xde,
+ 0x4a, 0x87, 0x3b, 0xa0, 0x2f, 0x2b, 0xee, 0xde, 0x81, 0xa7, 0x81, 0xeb,
+ 0x32, 0x1a, 0x05, 0x5a, 0xac, 0xdd, 0x09, 0x2e, 0x29, 0xf7, 0x0b, 0xd8,
+ 0x08, 0x6c, 0xf1, 0xf8, 0x75, 0xe6, 0xcc, 0xc7, 0x66, 0x47, 0x58, 0xfa,
+ 0xd9, 0x1c, 0xb5, 0x9e, 0x35, 0x0e, 0x77, 0x0c, 0xf7, 0x02, 0x18, 0x45,
+ 0xb5, 0x9e, 0xb3, 0xcb, 0x48, 0x94, 0xb7, 0xcd, 0x01, 0x46, 0x29, 0x96,
+ 0x27, 0xb6, 0x0e, 0x65, 0x38, 0x3b, 0x03, 0x25, 0xfa, 0xcb, 0x38, 0x6c,
+ 0xb9, 0xe5, 0x94, 0x05, 0x96, 0x3a, 0xce, 0x4a, 0x85, 0xc2, 0x70, 0x46,
+ 0x70, 0xba, 0x03, 0x6c, 0x00, 0x33, 0x8f, 0x06, 0x16, 0xc7, 0x6c, 0xc6,
+ 0xdc, 0xd0, 0x2a, 0x51, 0xdb, 0xe2, 0x50, 0x16, 0x7a, 0xb9, 0x7c, 0x24,
+ 0xe0, 0xfd, 0x13, 0x5b, 0x33, 0xde, 0x2e, 0xbd, 0xe6, 0xe3, 0x88, 0xdb,
+ 0x24, 0x75, 0xad, 0x60, 0x9e, 0xf4, 0xd9, 0xe9, 0x48, 0xd0, 0x09, 0x2b,
+ 0x75, 0xda, 0x4d, 0x36, 0x9b, 0xa3, 0x15, 0x5c, 0x6c, 0x4f, 0xc0, 0xbe,
+ 0xd0, 0xe9, 0xaf, 0x41, 0xe7, 0x09, 0x05, 0xa3, 0x93, 0x6d, 0xe7, 0x0e,
+ 0x8e, 0xd6, 0x12, 0xbb, 0x5c, 0x0b, 0xc0, 0x6a, 0xf9, 0x9a, 0xb9, 0x5d,
+ 0x65, 0xb3, 0x9e, 0x56, 0x71, 0xa0, 0xb8, 0xbd, 0xa0, 0x91, 0xdd, 0xec,
+ 0xb4, 0x3b, 0x64, 0x9e, 0x98, 0x34, 0x24, 0xac, 0x73, 0x37, 0xc7, 0x21,
+ 0x8d, 0x93, 0x8a, 0xc4, 0xf3, 0xa1, 0xb7, 0x5a, 0x1c, 0xac, 0x9e, 0x31,
+ 0x2c, 0x09, 0x71, 0xc8, 0x08, 0x1d, 0xec, 0x6c, 0x72, 0xc7, 0x67, 0x4c,
+ 0x88, 0x63, 0xc5, 0x63, 0xad, 0x1b, 0x53, 0xbc, 0xd8, 0x54, 0x24, 0x8e,
+ 0x6f, 0xd0, 0x80, 0xbe, 0xa4, 0xd9, 0xea, 0x6e, 0x72, 0xd4, 0xd8, 0xbc,
+ 0x0e, 0x87, 0xbb, 0xca, 0x8a, 0x1f, 0x81, 0x02, 0xdd, 0xf7, 0xc5, 0xa7,
+ 0x02, 0x67, 0xc8, 0x15, 0xf0, 0xd1, 0xec, 0x01, 0x92, 0x02, 0x71, 0x1d,
+ 0x0b, 0xae, 0xbb, 0x31, 0x5e, 0x5c, 0x6f, 0xe4, 0xc2, 0x13, 0xef, 0x13,
+ 0x3d, 0xdf, 0xf4, 0x26, 0x3b, 0x20, 0xfb, 0x2b, 0x38, 0x64, 0x16, 0x78,
+ 0xad, 0x4d, 0x38, 0x95, 0x96, 0xb3, 0x79, 0xbc, 0x91, 0xa0, 0xc2, 0xd8,
+ 0xad, 0x37, 0x97, 0xc7, 0x6a, 0x57, 0xec, 0x5e, 0x9c, 0x47, 0xb8, 0xdb,
+ 0x62, 0x12, 0xcb, 0x3f, 0xed, 0x2a, 0x45, 0x75, 0x79, 0xad, 0x71, 0xb0,
+ 0x3a, 0x3e, 0x9c, 0x95, 0xd0, 0x6f, 0x74, 0x2c, 0xd6, 0xa5, 0x6a, 0xe7,
+ 0xbd, 0x18, 0x69, 0x85, 0x31, 0x3e, 0xb5, 0x70, 0xcb, 0x17, 0xeb, 0x56,
+ 0x5e, 0x38, 0x53, 0x73, 0x4f, 0x9f, 0x99, 0x20, 0xb6, 0x07, 0x46, 0xae,
+ 0xff, 0x7c, 0xab, 0xdf, 0xd6, 0xcc, 0x72, 0xa1, 0x64, 0xf2, 0x2a, 0x1a,
+ 0xc1, 0x24, 0xb3, 0x3c, 0x50, 0x06, 0x2d, 0x91, 0x0b, 0xf9, 0x42, 0x46,
+ 0x48, 0x05, 0x5f, 0x09, 0x78, 0xbc, 0x4e, 0x58, 0x58, 0x82, 0x13, 0x1a,
+ 0x5d, 0x37, 0x15, 0x6a, 0x3c, 0x03, 0x5a, 0x06, 0x2c, 0x6e, 0x9c, 0xbf,
+ 0xc1, 0xef, 0xf0, 0xd5, 0xe1, 0x16, 0x6b, 0x99, 0xba, 0xbc, 0xc0, 0xb5,
+ 0x31, 0x39, 0x9f, 0x2d, 0xd6, 0xb6, 0x0a, 0x46, 0xa9, 0x59, 0x7d, 0x08,
+ 0xff, 0x9b, 0xb1, 0x16, 0xba, 0x64, 0xf4, 0x1a, 0x87, 0xea, 0x44, 0x7a,
+ 0xbc, 0xe0, 0x4b, 0xb7, 0x51, 0x4b, 0x28, 0x0b, 0xac, 0x6b, 0x1c, 0xb2,
+ 0xc3, 0xa5, 0xa8, 0xcd, 0x6e, 0x72, 0xc3, 0x28, 0xe4, 0x9b, 0xb8, 0x0a,
+ 0x38, 0x75, 0xc2, 0x8b, 0xc5, 0x2d, 0x1d, 0x8d, 0xd6, 0x46, 0x53, 0xd5,
+ 0xed, 0x85, 0xf8, 0x9e, 0xb0, 0x4a, 0x69, 0xb1, 0x98, 0xaa, 0x4b, 0x2a,
+ 0x9c, 0x7e, 0x87, 0xc5, 0x12, 0x8d, 0xcb, 0x7d, 0x0e, 0x05, 0xd7, 0xa2,
+ 0xf5, 0x8b, 0x20, 0x8e, 0x2c, 0xce, 0x9d, 0x55, 0x9c, 0x53, 0x98, 0xaf,
+ 0x14, 0x4f, 0x9f, 0x89, 0x21, 0x80, 0xca, 0x3a, 0x4a, 0xb2, 0x45, 0x93,
+ 0xae, 0xd0, 0x53, 0x15, 0x42, 0x52, 0xf1, 0x8c, 0xe9, 0x14, 0x85, 0x44,
+ 0xa5, 0x78, 0x66, 0x4e, 0x14, 0x02, 0x94, 0x62, 0xd3, 0x0b, 0x01, 0x01,
+ 0x22, 0x8a, 0xcc, 0xd7, 0x8a, 0x3c, 0x96, 0x50, 0x78, 0xdd, 0x0d, 0x96,
+ 0x45, 0x35, 0xcb, 0xc1, 0x01, 0x2a, 0xda, 0x24, 0xe5, 0x3e, 0x4e, 0xf8,
+ 0x56, 0xe3, 0x30, 0xd3, 0xe8, 0x0e, 0x9e, 0x10, 0xa0, 0x29, 0x37, 0x2f,
+ 0x51, 0x31, 0x2f, 0x91, 0x4d, 0x07, 0x2d, 0x99, 0x39, 0x33, 0x0a, 0x41,
+ 0xf9, 0x6c, 0x33, 0x73, 0x20, 0x87, 0x7c, 0x4a, 0xb3, 0x61, 0x0d, 0xf4,
+ 0xdc, 0xbc, 0x3e, 0x44, 0x3f, 0x0f, 0x2a, 0xb4, 0x4e, 0x97, 0x82, 0x09,
+ 0xd1, 0x9c, 0x45, 0x21, 0xc6, 0xe9, 0x7a, 0x75, 0x9c, 0xa6, 0x4c, 0x31,
+ 0x18, 0x96, 0x82, 0x2e, 0xf6, 0x38, 0x4d, 0x59, 0xe3, 0x52, 0x51, 0x7d,
+ 0x91, 0x2c, 0x61, 0x36, 0x9a, 0xca, 0xea, 0x38, 0x44, 0xb5, 0x7b, 0xcd,
+ 0x1e, 0xe3, 0xd1, 0xe1, 0x34, 0x4e, 0xdf, 0x38, 0x31, 0x9c, 0xac, 0xad,
+ 0x20, 0x15, 0x5d, 0x9e, 0x71, 0x09, 0x0b, 0x84, 0x49, 0xcc, 0xf7, 0x18,
+ 0xd7, 0x5b, 0xd5, 0x38, 0x05, 0x08, 0xec, 0xb5, 0x99, 0x70, 0x79, 0x70,
+ 0x56, 0xa2, 0x3e, 0x8a, 0x8a, 0x56, 0xf3, 0x6c, 0xa4, 0x25, 0x60, 0x9d,
+ 0x99, 0x40, 0xa1, 0x0a, 0x71, 0xa9, 0xb4, 0x0e, 0x03, 0xb6, 0xc6, 0xbc,
+ 0xb9, 0xeb, 0x8a, 0xe7, 0x45, 0x1b, 0xf7, 0x2a, 0x8d, 0xe2, 0xf4, 0xde,
+ 0xb9, 0xda, 0x06, 0xeb, 0xbd, 0x60, 0x52, 0x96, 0xbd, 0x11, 0x97, 0x2c,
+ 0x64, 0x1e, 0x8a, 0xf0, 0x4e, 0x18, 0x75, 0xb4, 0xcb, 0xb4, 0xd6, 0x45,
+ 0xd2, 0xd5, 0xf8, 0xc6, 0x47, 0x53, 0x00, 0x1d, 0xaf, 0x5e, 0x83, 0xcf,
+ 0x99, 0x77, 0x5d, 0xde, 0x2c, 0xdd, 0xc8, 0x42, 0x5b, 0x32, 0x33, 0x9f,
+ 0xed, 0x1a, 0x92, 0xbd, 0x59, 0xa2, 0x1b, 0xdd, 0x30, 0xda, 0xd4, 0xcd,
+ 0xf9, 0x13, 0xb7, 0x17, 0xe3, 0x31, 0xcd, 0x4b, 0x15, 0xfe, 0x7d, 0x6a,
+ 0x81, 0xc0, 0x90, 0x3e, 0xe3, 0x6a, 0x78, 0xa5, 0x3e, 0xd5, 0x30, 0xf4,
+ 0x82, 0x14, 0x83, 0x41, 0x31, 0x18, 0xac, 0x86, 0x64, 0xc3, 0x58, 0x25,
+ 0xc9, 0x80, 0xdf, 0x1e, 0xad, 0x50, 0xf8, 0xf5, 0xd7, 0x6b, 0x39, 0x21,
+ 0xc6, 0xf1, 0xfb, 0xb1, 0x17, 0x2a, 0x53, 0x95, 0xc7, 0x49, 0xce, 0x40,
+ 0x45, 0x49, 0x1d, 0x63, 0x50, 0x52, 0xde, 0x01, 0xe6, 0xed, 0x97, 0x29,
+ 0xa9, 0xc9, 0x97, 0x2b, 0x06, 0xff, 0x58, 0x45, 0xb9, 0x79, 0xac, 0x92,
+ 0x7a, 0x1f, 0x08, 0x7a, 0x62, 0x82, 0x92, 0xbc, 0xe0, 0x4a, 0x45, 0x59,
+ 0x7b, 0xa5, 0x62, 0x38, 0x96, 0xa9, 0x28, 0x67, 0x32, 0x95, 0x94, 0xd5,
+ 0x93, 0x14, 0xa5, 0x60, 0x8a, 0x92, 0x74, 0xfb, 0x14, 0xc5, 0x50, 0x97,
+ 0xa5, 0x28, 0x77, 0x66, 0x29, 0xc9, 0xdd, 0x10, 0xbe, 0x0a, 0xe1, 0x69,
+ 0xfc, 0xfd, 0xda, 0x6c, 0x25, 0xc9, 0x92, 0xad, 0x28, 0xd7, 0xe4, 0x2a,
+ 0xc9, 0x1d, 0xb9, 0x4a, 0xea, 0xc3, 0xb9, 0x8a, 0xf2, 0x4e, 0xae, 0x92,
+ 0x32, 0x7a, 0xba, 0x92, 0x64, 0x9b, 0xa1, 0x18, 0x8e, 0xe7, 0x2b, 0xc9,
+ 0xf3, 0x0b, 0x94, 0x94, 0xe3, 0x85, 0x8a, 0x72, 0xc9, 0x1c, 0x25, 0xe9,
+ 0xa6, 0x39, 0x8a, 0x21, 0x69, 0xae, 0x92, 0x52, 0x39, 0x57, 0x31, 0x3c,
+ 0x37, 0x57, 0x51, 0x5e, 0x9e, 0x0b, 0xfc, 0x45, 0x8a, 0xe1, 0x8e, 0xab,
+ 0x94, 0xa4, 0x85, 0xc5, 0x8a, 0xf2, 0x6c, 0xb1, 0x92, 0x7c, 0xb2, 0x38,
+ 0xe6, 0xf3, 0xb4, 0xff, 0x63, 0xfe, 0xee, 0xa0, 0xef, 0xdd, 0xdf, 0x26,
+ 0xbe, 0x7b, 0x5f, 0xcf, 0xc3, 0x05, 0x14, 0xfe, 0x71, 0x19, 0x0f, 0x77,
+ 0x53, 0xf8, 0x14, 0x85, 0x2f, 0x52, 0xf8, 0x06, 0x85, 0x87, 0x28, 0xfc,
+ 0x84, 0xc2, 0x2a, 0xe2, 0x5f, 0x4e, 0xa1, 0x9d, 0x42, 0x37, 0x85, 0x6d,
+ 0x14, 0xde, 0x4a, 0xe1, 0x0f, 0x28, 0xbc, 0x8b, 0xc2, 0xed, 0x14, 0xfe,
+ 0x8e, 0xc2, 0x87, 0x28, 0xfc, 0x92, 0xe4, 0x9f, 0xa1, 0x30, 0x8d, 0xca,
+ 0x3d, 0x8c, 0xc2, 0x4b, 0x29, 0x7c, 0x92, 0xe8, 0x7b, 0x28, 0xbc, 0x92,
+ 0xd2, 0x73, 0x28, 0x2c, 0xa4, 0xf0, 0x55, 0xc2, 0xbf, 0x43, 0xe1, 0x47,
+ 0x14, 0x9e, 0xa0, 0xf0, 0x1b, 0x0a, 0x53, 0x28, 0xbf, 0xc1, 0x14, 0x8e,
+ 0xa2, 0x70, 0x1c, 0x85, 0x53, 0x29, 0x9c, 0x45, 0x61, 0x31, 0x85, 0xd7,
+ 0x50, 0x58, 0x4b, 0xe1, 0x75, 0x14, 0x36, 0x53, 0xe8, 0xa5, 0xf0, 0x46,
+ 0x0a, 0xbf, 0x47, 0x61, 0x29, 0x95, 0x6f, 0x2b, 0xc1, 0xf7, 0x50, 0xb8,
+ 0x88, 0xd2, 0xeb, 0x29, 0x6c, 0xa0, 0xf0, 0x7e, 0xc2, 0xbb, 0x08, 0x5e,
+ 0x47, 0x61, 0x3b, 0x85, 0xe2, 0x7b, 0xeb, 0x3d, 0xb7, 0xea, 0xbf, 0x7f,
+ 0xdc, 0xd3, 0x9f, 0x87, 0xdb, 0x89, 0x6e, 0xac, 0xa4, 0x1f, 0x02, 0xff,
+ 0x14, 0xe1, 0x2f, 0x4b, 0x80, 0x7f, 0x7f, 0xb9, 0xf8, 0x62, 0x70, 0x7c,
+ 0xfc, 0x87, 0x84, 0xef, 0x97, 0x00, 0xff, 0x89, 0xe8, 0xc7, 0x04, 0xf8,
+ 0xd3, 0x67, 0xc1, 0x0f, 0x59, 0xc1, 0xf1, 0x17, 0x27, 0xc0, 0xcf, 0xb1,
+ 0x73, 0x7c, 0x6a, 0x02, 0xbc, 0xc9, 0x1e, 0xfb, 0x3d, 0x6b, 0x2d, 0xfe,
+ 0x1a, 0xbb, 0xfe, 0x7b, 0xe1, 0x32, 0x7e, 0x05, 0xe1, 0xdd, 0x09, 0xf0,
+ 0xcf, 0x9f, 0x45, 0xfe, 0x6b, 0x84, 0xef, 0x9f, 0x00, 0xff, 0xb6, 0xbd,
+ 0xf7, 0xf6, 0xfb, 0x80, 0xf0, 0x29, 0x09, 0xf0, 0x1f, 0x9f, 0xa5, 0xfe,
+ 0xff, 0x3a, 0x4b, 0xf9, 0x4e, 0x9e, 0x05, 0x1f, 0x39, 0x8b, 0x7c, 0xfc,
+ 0xa1, 0xb0, 0xde, 0xea, 0x37, 0xe8, 0x2c, 0xf8, 0x8c, 0xb3, 0xe0, 0xc7,
+ 0x9c, 0x05, 0x3f, 0x81, 0xf0, 0x17, 0x26, 0xc0, 0x4f, 0x77, 0xf4, 0xde,
+ 0x7e, 0xb3, 0x09, 0x3f, 0x2a, 0x01, 0xbe, 0x8a, 0xf0, 0x03, 0x13, 0xe0,
+ 0x57, 0x10, 0x7e, 0x40, 0x02, 0xbc, 0xc3, 0xd1, 0x7b, 0xfb, 0xad, 0x71,
+ 0xf4, 0xde, 0xfe, 0x7e, 0xc2, 0xcb, 0xdf, 0x74, 0x17, 0xf8, 0x36, 0x47,
+ 0xef, 0xe3, 0x73, 0x23, 0xe1, 0x07, 0x27, 0xc0, 0x07, 0x09, 0x7f, 0x51,
+ 0x02, 0xfc, 0xaf, 0xce, 0xd2, 0xfe, 0xff, 0x49, 0xf8, 0x11, 0x09, 0xf0,
+ 0x4f, 0x9e, 0xa5, 0xfc, 0x49, 0x8d, 0xbd, 0x97, 0x6f, 0x28, 0xe1, 0x2f,
+ 0x4d, 0x80, 0xcf, 0x22, 0xfc, 0xa0, 0x04, 0xf8, 0xb9, 0x67, 0xc1, 0x5f,
+ 0x73, 0x16, 0x7c, 0xfd, 0x59, 0xf0, 0x8d, 0x67, 0xc1, 0xfb, 0xcf, 0x82,
+ 0xbf, 0xf5, 0x2c, 0xf8, 0xad, 0x84, 0x2f, 0x4d, 0x80, 0x7f, 0xbd, 0xb1,
+ 0xf7, 0xfe, 0xf9, 0x07, 0xe1, 0x93, 0x12, 0xe0, 0x0f, 0x35, 0xea, 0xed,
+ 0xaf, 0xf9, 0x1e, 0x0e, 0x6f, 0xa3, 0xb0, 0x3e, 0x48, 0x7e, 0x02, 0x85,
+ 0xdd, 0x94, 0x6e, 0xfc, 0x19, 0xcd, 0x43, 0x14, 0x1e, 0xa2, 0xb0, 0xf8,
+ 0xe7, 0x51, 0x5d, 0x2c, 0x56, 0xf8, 0xb8, 0x42, 0xf8, 0xe3, 0xeb, 0x79,
+ 0x98, 0xb5, 0x91, 0x87, 0xa7, 0x46, 0xf0, 0x10, 0xbf, 0x3d, 0xa6, 0xd5,
+ 0xdd, 0xfc, 0x60, 0xac, 0x2e, 0xc7, 0xfb, 0x2b, 0xa6, 0x50, 0xc8, 0x9f,
+ 0xbb, 0x86, 0xe6, 0x69, 0x92, 0xdf, 0x9a, 0xc1, 0xc3, 0x4e, 0x49, 0xfe,
+ 0xb6, 0xff, 0xa6, 0xfc, 0x83, 0xad, 0x3c, 0x34, 0x91, 0xfc, 0x0b, 0x46,
+ 0x46, 0xed, 0xc6, 0x70, 0xb8, 0x3e, 0x25, 0x7c, 0xf9, 0x46, 0xbd, 0xfc,
+ 0x34, 0x2a, 0x57, 0xad, 0x94, 0x7e, 0xaa, 0x55, 0xdf, 0x1e, 0xe2, 0xef,
+ 0x34, 0xa5, 0xaf, 0x94, 0xd2, 0x07, 0xaf, 0xe5, 0x70, 0x93, 0x94, 0x3e,
+ 0x99, 0xd2, 0x03, 0x52, 0xfa, 0x12, 0x4a, 0xff, 0x9e, 0x2c, 0x87, 0xca,
+ 0xf3, 0x43, 0x29, 0x7d, 0xd9, 0xda, 0xf8, 0xe9, 0xd7, 0xaf, 0x8d, 0x5f,
+ 0xaf, 0x9b, 0x28, 0xfd, 0x6e, 0x29, 0xfd, 0xf6, 0xb5, 0xf1, 0xeb, 0x75,
+ 0x37, 0xa5, 0xdf, 0x2f, 0xa5, 0xff, 0x2a, 0x01, 0xfd, 0x1f, 0x28, 0xfd,
+ 0x0f, 0x52, 0xfa, 0xa3, 0x94, 0xbe, 0x4b, 0x4a, 0x7f, 0x32, 0x01, 0xfd,
+ 0xde, 0xb5, 0xf1, 0xdb, 0xbf, 0xc2, 0x13, 0x3f, 0x5f, 0xd1, 0xdf, 0x2f,
+ 0x25, 0x28, 0x17, 0xfa, 0x09, 0x38, 0x97, 0x7c, 0x41, 0xe3, 0xe6, 0x14,
+ 0x85, 0xa7, 0x29, 0x4c, 0x6b, 0xa2, 0xf1, 0x4c, 0xe1, 0x68, 0x0a, 0x27,
+ 0x4b, 0xb0, 0x68, 0x4f, 0x51, 0x2e, 0x91, 0x8f, 0xe8, 0x77, 0xd1, 0xcf,
+ 0xa2, 0x5f, 0x45, 0x3f, 0xfe, 0x50, 0x0a, 0xf7, 0x6d, 0xd4, 0xf7, 0x83,
+ 0x90, 0x73, 0xbf, 0x04, 0x8b, 0x76, 0xd9, 0x25, 0xc1, 0x22, 0xff, 0x77,
+ 0xa4, 0x50, 0xd4, 0x59, 0x8c, 0x77, 0x6d, 0xfb, 0x4c, 0x84, 0xeb, 0x3d,
+ 0x6a, 0x9f, 0xe3, 0x52, 0xfb, 0x7c, 0x4b, 0xe9, 0x5f, 0x4b, 0xe9, 0x43,
+ 0xbd, 0x64, 0xa7, 0x6e, 0xd0, 0xa7, 0x4f, 0xf4, 0xc6, 0xa7, 0xbf, 0x2a,
+ 0x01, 0x7d, 0xbd, 0x37, 0xbe, 0x3e, 0xde, 0x90, 0x20, 0x7d, 0x5b, 0x02,
+ 0x39, 0x8f, 0x24, 0x48, 0x7f, 0x89, 0xd2, 0x33, 0xa4, 0xf4, 0x64, 0x5f,
+ 0x7c, 0xf9, 0x33, 0x29, 0x7d, 0x92, 0x44, 0xef, 0xf0, 0xe9, 0xed, 0x91,
+ 0xf8, 0xdb, 0x48, 0xe9, 0xb3, 0x25, 0xfa, 0x6d, 0xbe, 0xf8, 0xed, 0xf0,
+ 0x46, 0x82, 0xf4, 0x11, 0xfe, 0x04, 0xed, 0x96, 0x20, 0xdd, 0x91, 0x20,
+ 0x3d, 0xe4, 0x8f, 0xdf, 0x0e, 0x8f, 0x52, 0x7a, 0x99, 0x94, 0x7e, 0x9c,
+ 0xd2, 0x97, 0xca, 0xfd, 0x18, 0x88, 0x2f, 0xff, 0x9a, 0x04, 0xe9, 0x37,
+ 0x51, 0x7a, 0xb3, 0x24, 0xe7, 0x17, 0x09, 0xd2, 0x9f, 0x48, 0x90, 0xfe,
+ 0x6a, 0x82, 0xf4, 0x8f, 0x12, 0xa4, 0x9f, 0x4e, 0x90, 0x3e, 0x7c, 0x5d,
+ 0xfc, 0xf4, 0x9c, 0x04, 0xe9, 0x15, 0x09, 0xd2, 0x9d, 0x09, 0xd2, 0x3b,
+ 0x13, 0xa4, 0xff, 0x3c, 0x41, 0xfa, 0x7f, 0x25, 0x48, 0x7f, 0x31, 0x41,
+ 0xfa, 0xe7, 0x09, 0xd2, 0x7d, 0x04, 0x77, 0x51, 0xf8, 0xe7, 0x04, 0xf0,
+ 0x5b, 0x52, 0xf8, 0xa5, 0x84, 0xbf, 0xf0, 0x46, 0x3d, 0x7e, 0x01, 0xc1,
+ 0x36, 0x0a, 0x3b, 0x29, 0x7c, 0x88, 0xc2, 0xbf, 0x53, 0x18, 0xa1, 0x70,
+ 0xf2, 0x26, 0x7d, 0x28, 0xe4, 0x56, 0x11, 0xbc, 0x95, 0xc2, 0xbd, 0x14,
+ 0x9e, 0xa0, 0xf0, 0xb2, 0x9b, 0xfe, 0xcf, 0x84, 0xbd, 0xd9, 0x3f, 0xf4,
+ 0x65, 0x47, 0xae, 0x8f, 0xaf, 0xd7, 0x65, 0x09, 0xd2, 0x03, 0xeb, 0xe3,
+ 0x8f, 0xb3, 0x02, 0xca, 0x4f, 0x84, 0x01, 0x0a, 0x85, 0xbf, 0x26, 0xfb,
+ 0x59, 0xe2, 0xef, 0xc7, 0x70, 0x65, 0xd2, 0xa5, 0xfd, 0xbb, 0x87, 0xfc,
+ 0x9d, 0x53, 0xe4, 0xe7, 0xb4, 0xde, 0xae, 0xe7, 0x93, 0xff, 0xb0, 0x3e,
+ 0xe8, 0x7b, 0x0e, 0x75, 0x71, 0x3a, 0xe1, 0xdf, 0x3c, 0x4f, 0xfe, 0xcd,
+ 0x58, 0x29, 0xfd, 0xb9, 0x8b, 0x78, 0x28, 0x8f, 0xd3, 0x67, 0x46, 0xf1,
+ 0xb0, 0xce, 0xad, 0xb7, 0x7b, 0x27, 0xc7, 0xf1, 0xf0, 0x3f, 0xd6, 0xeb,
+ 0xed, 0xde, 0xc7, 0x57, 0xf0, 0xf0, 0xfa, 0x16, 0x1e, 0x3e, 0x48, 0xf5,
+ 0x7e, 0x74, 0x3c, 0x0f, 0xdf, 0x74, 0xe9, 0xe5, 0xff, 0x30, 0x93, 0x87,
+ 0x8f, 0x49, 0xe9, 0x77, 0x4d, 0xe1, 0xe1, 0x2b, 0x6b, 0xf4, 0xe9, 0xbf,
+ 0xc8, 0xe1, 0xe1, 0x13, 0x34, 0xcf, 0x0b, 0xbb, 0xfd, 0xc3, 0x19, 0x3c,
+ 0x7c, 0x43, 0x4a, 0xff, 0x8c, 0xd2, 0xe5, 0x7e, 0x6a, 0x98, 0xc5, 0x43,
+ 0xb9, 0xbf, 0x5b, 0x28, 0xfd, 0x7f, 0x97, 0x3f, 0xb0, 0x55, 0xe1, 0x6b,
+ 0x40, 0x79, 0x1d, 0x28, 0xfa, 0xf3, 0xe0, 0xed, 0xbd, 0xf7, 0xe7, 0xa8,
+ 0x3b, 0x78, 0xfa, 0xf0, 0x04, 0x7a, 0xf1, 0x11, 0xc9, 0xc9, 0xbf, 0xb3,
+ 0x77, 0x7d, 0x10, 0x7f, 0xf2, 0x7e, 0x8c, 0x2c, 0xa7, 0xaf, 0x7f, 0xc2,
+ 0x9f, 0x7a, 0x83, 0xda, 0xaf, 0x87, 0xfa, 0xf9, 0xc7, 0xd4, 0x7e, 0x88,
+ 0x47, 0x5d, 0x7f, 0x9f, 0xf0, 0x2f, 0xde, 0xa4, 0x97, 0xff, 0x2d, 0xa5,
+ 0xbf, 0x29, 0xa5, 0x0b, 0x3a, 0x91, 0x2e, 0xe4, 0xc8, 0xeb, 0x00, 0xf1,
+ 0x97, 0xd6, 0x12, 0x7f, 0x5c, 0x0a, 0x3a, 0x91, 0xfe, 0x0e, 0xad, 0x53,
+ 0xc4, 0x7a, 0xe5, 0x1b, 0x0a, 0x85, 0x1f, 0x2f, 0xfc, 0xe7, 0x31, 0x14,
+ 0x66, 0x52, 0x58, 0x47, 0xe1, 0xf5, 0x14, 0xfe, 0x88, 0xc2, 0x5f, 0x51,
+ 0xf8, 0x04, 0x85, 0x3d, 0x14, 0x8a, 0x72, 0x0a, 0xbd, 0x3d, 0x46, 0xe1,
+ 0x29, 0x0a, 0x93, 0x48, 0xcf, 0xc5, 0xb8, 0x14, 0xe3, 0x30, 0x8b, 0xc2,
+ 0xab, 0x28, 0xac, 0xa6, 0xd0, 0x42, 0xe1, 0x0d, 0x14, 0xfe, 0x88, 0xc2,
+ 0x7b, 0x29, 0xbc, 0xcf, 0xa5, 0x1f, 0x3f, 0x62, 0x7c, 0x9d, 0xa4, 0xf0,
+ 0x34, 0x85, 0xa2, 0x9d, 0x26, 0x50, 0x38, 0x93, 0xc2, 0x39, 0x14, 0x16,
+ 0x53, 0x78, 0x0d, 0x85, 0xcb, 0x5b, 0xf4, 0xe3, 0xf8, 0x3f, 0x28, 0xdc,
+ 0x4d, 0xe1, 0xcb, 0x14, 0x86, 0x29, 0x1c, 0x4d, 0xf6, 0x61, 0x0c, 0x85,
+ 0x13, 0x29, 0x9c, 0x49, 0xa1, 0xd9, 0xad, 0xb7, 0x23, 0x8d, 0x14, 0xae,
+ 0xa7, 0xf0, 0x7b, 0x14, 0xfe, 0x94, 0xc2, 0x07, 0x28, 0x7c, 0x98, 0xc2,
+ 0x03, 0x14, 0xbe, 0x4f, 0xe1, 0x57, 0x14, 0x0e, 0xa6, 0xf1, 0x5e, 0x40,
+ 0xa1, 0xf0, 0xff, 0xeb, 0x29, 0x0c, 0x50, 0x78, 0x03, 0x85, 0xb7, 0x50,
+ 0x78, 0x1b, 0x85, 0xf7, 0x50, 0xb8, 0x83, 0xc2, 0x47, 0x3c, 0x7a, 0xfb,
+ 0x22, 0xec, 0xc9, 0x51, 0x0a, 0xbf, 0xa4, 0x30, 0x83, 0xd6, 0x73, 0x97,
+ 0x51, 0x78, 0x05, 0x85, 0xf9, 0x14, 0x5e, 0x4d, 0xa1, 0x85, 0xc2, 0x16,
+ 0x0a, 0xdb, 0x29, 0xbc, 0x9d, 0xc2, 0xbb, 0x29, 0xfc, 0x05, 0x85, 0x3b,
+ 0x28, 0xdc, 0x4d, 0xe1, 0xb3, 0x14, 0x3e, 0x43, 0xe3, 0xe5, 0x6d, 0x0a,
+ 0xc5, 0xb8, 0x12, 0xe3, 0x68, 0x74, 0x1b, 0xe9, 0x2d, 0x85, 0xe5, 0x14,
+ 0xae, 0xa4, 0xd0, 0x4d, 0xa1, 0x58, 0xc7, 0x89, 0x75, 0x9b, 0x58, 0xa7,
+ 0xdd, 0x4a, 0xf8, 0xef, 0x53, 0xb8, 0x8d, 0xc2, 0x5d, 0x14, 0xbe, 0x40,
+ 0xe1, 0x41, 0x0a, 0xc5, 0x3a, 0xf7, 0x73, 0x82, 0x4f, 0x53, 0x38, 0x5a,
+ 0xd8, 0x23, 0x0a, 0x97, 0x52, 0xe8, 0xa0, 0x30, 0xde, 0x7e, 0xc2, 0xff,
+ 0xe4, 0xbf, 0xad, 0x64, 0xb7, 0x8d, 0xf7, 0xf4, 0x5e, 0x9f, 0xd5, 0x64,
+ 0xc7, 0x5b, 0xa5, 0x7d, 0x18, 0xf9, 0xef, 0x01, 0x89, 0x2e, 0xd1, 0xdf,
+ 0x89, 0x3b, 0xf4, 0xf8, 0xc7, 0x25, 0xfb, 0x3d, 0xea, 0x36, 0x3d, 0x1c,
+ 0x0e, 0xe9, 0xe1, 0xb4, 0x1f, 0x70, 0x78, 0x35, 0xc1, 0x55, 0x3f, 0xe8,
+ 0x3d, 0xbf, 0xdf, 0x92, 0xfc, 0x13, 0x09, 0xe8, 0xd2, 0xba, 0xe2, 0xa7,
+ 0x0b, 0xf9, 0xbb, 0xb7, 0xf6, 0x2e, 0xff, 0x19, 0x21, 0xff, 0xc7, 0x09,
+ 0xe4, 0x27, 0x98, 0x1f, 0x85, 0xfc, 0xfa, 0xb3, 0xf8, 0x43, 0x9f, 0x4b,
+ 0xed, 0x53, 0xdf, 0xc7, 0xf9, 0x52, 0xc8, 0xdf, 0x7a, 0x16, 0xfa, 0xa1,
+ 0xd2, 0xfc, 0xb3, 0xfd, 0x1c, 0xe5, 0x1f, 0x4c, 0x40, 0xff, 0x1f, 0xbf,
+ 0xff, 0xdd, 0xf4, 0x3e, 0x88, 0x39, 0xff, 0x77, 0xfe, 0xef, 0xfc, 0xdf,
+ 0x7f, 0xe3, 0x6f, 0xe8, 0xb8, 0x9d, 0x86, 0xd5, 0xf3, 0xe6, 0xb7, 0xe7,
+ 0x8e, 0x6a, 0x4d, 0x5b, 0x36, 0xbf, 0xd6, 0xd4, 0x9a, 0x83, 0x57, 0x8d,
+ 0xa9, 0xba, 0x2f, 0xff, 0xe6, 0x57, 0xcf, 0x5f, 0x7d, 0xa9, 0xa9, 0x75,
+ 0x48, 0x9f, 0x88, 0xfb, 0xfc, 0x6f, 0xf5, 0x44, 0x55, 0x24, 0x94, 0xa3,
+ 0xb4, 0xa6, 0x14, 0x12, 0xea, 0x4b, 0x6a, 0xe6, 0xb7, 0x8e, 0xaa, 0xbe,
+ 0x5a, 0x5f, 0xb4, 0xd5, 0x81, 0x9c, 0x6e, 0x43, 0x35, 0xa0, 0xaa, 0x4b,
+ 0xda, 0x53, 0xd3, 0x00, 0x0f, 0x34, 0xe2, 0xde, 0x9a, 0xd6, 0x9a, 0xc9,
+ 0xef, 0x4b, 0x58, 0x3d, 0x8b, 0x2d, 0x8b, 0xe7, 0x5f, 0x53, 0x62, 0x29,
+ 0xa9, 0x30, 0xd5, 0xd4, 0x58, 0xc6, 0x5b, 0x6a, 0xe6, 0x6b, 0x8e, 0xbf,
+ 0x28, 0x4b, 0xbc, 0xa7, 0x66, 0x6c, 0x1d, 0x5e, 0x6c, 0x89, 0x3d, 0x72,
+ 0x42, 0x6f, 0x0e, 0xa8, 0xef, 0x9e, 0x28, 0xed, 0xdb, 0x5e, 0x8c, 0xf0,
+ 0x3f, 0xc3, 0x56, 0x49, 0xa6, 0xfa, 0x42, 0x68, 0x7b, 0xf7, 0xb0, 0xed,
+ 0xdb, 0x8c, 0xb1, 0xe8, 0x05, 0xea, 0x9b, 0x14, 0x4a, 0x7b, 0x4e, 0x2c,
+ 0x7a, 0x11, 0x7b, 0x29, 0x46, 0x69, 0x1f, 0x12, 0x8b, 0xaa, 0xc2, 0x17,
+ 0x31, 0xda, 0x33, 0xe3, 0x20, 0x34, 0xef, 0x74, 0xb5, 0x6f, 0x8b, 0x24,
+ 0x2e, 0x1a, 0xbd, 0x27, 0xd6, 0x7e, 0xa8, 0x17, 0x9a, 0x5a, 0xab, 0x6f,
+ 0x8d, 0xd2, 0xde, 0x16, 0x8b, 0x90, 0x5b, 0x45, 0x69, 0xdf, 0xdf, 0x8b,
+ 0x98, 0x04, 0xaf, 0xe5, 0x6c, 0x1d, 0x11, 0x43, 0x49, 0xe7, 0x17, 0xdb,
+ 0x57, 0x0b, 0x21, 0x95, 0x65, 0xb5, 0xa6, 0x58, 0x74, 0x4f, 0x34, 0x33,
+ 0x20, 0xe4, 0x6f, 0x0f, 0x3a, 0x5a, 0x5a, 0xfd, 0x1b, 0x2c, 0x36, 0xfc,
+ 0x41, 0x05, 0xa5, 0x3b, 0xd9, 0x28, 0xa5, 0xaf, 0xe3, 0xbf, 0xe6, 0xd3,
+ 0x7e, 0x50, 0xe5, 0x7c, 0x08, 0x28, 0xf4, 0xef, 0x25, 0xb6, 0x9f, 0x7a,
+ 0x5e, 0x53, 0x87, 0x04, 0x2f, 0x50, 0xb6, 0xa7, 0x6d, 0x35, 0x25, 0x7e,
+ 0x2b, 0x57, 0xf0, 0x25, 0x78, 0x95, 0x51, 0xa0, 0xd5, 0xf7, 0x2c, 0x35,
+ 0x09, 0xd1, 0x37, 0x2d, 0x35, 0x89, 0xea, 0x2b, 0x94, 0x9a, 0x34, 0xfd,
+ 0xfb, 0x97, 0x02, 0xa1, 0x7d, 0x03, 0x53, 0xa4, 0xb5, 0xf8, 0x9a, 0xf0,
+ 0xe7, 0x15, 0x14, 0x51, 0x62, 0xfd, 0x2b, 0xa2, 0x82, 0x4a, 0xbc, 0x4c,
+ 0x12, 0x85, 0xd9, 0xfb, 0x26, 0x1c, 0x8c, 0xf7, 0xae, 0x28, 0x60, 0x62,
+ 0xde, 0xe0, 0xdc, 0x9a, 0x01, 0xed, 0x4d, 0x63, 0xa3, 0x3a, 0xe0, 0x76,
+ 0x54, 0x40, 0xb3, 0x61, 0x7b, 0xe3, 0x57, 0x9c, 0xd5, 0x26, 0xb5, 0x58,
+ 0x7c, 0x7e, 0xab, 0x6d, 0x8d, 0xc5, 0xd6, 0xbc, 0xc6, 0xd2, 0x14, 0xb0,
+ 0x7a, 0xa1, 0x64, 0xc5, 0xf6, 0x0d, 0x2e, 0x3b, 0x24, 0x07, 0x1a, 0x2c,
+ 0x0d, 0x4e, 0xf6, 0xb3, 0x4c, 0x5a, 0x4d, 0x1a, 0x89, 0x23, 0x50, 0x33,
+ 0x2e, 0xf9, 0x51, 0x77, 0x59, 0x9d, 0x16, 0x82, 0x2f, 0x0d, 0xdd, 0x12,
+ 0xa3, 0x4c, 0xbc, 0xcd, 0xdb, 0xbb, 0x67, 0xc4, 0xa2, 0xa2, 0x6f, 0x2c,
+ 0x6a, 0x75, 0xe9, 0xa2, 0x18, 0x3a, 0xfe, 0xa6, 0x74, 0x54, 0x1d, 0xa3,
+ 0x18, 0xf6, 0x02, 0x52, 0xaf, 0x03, 0x4c, 0xf3, 0xa2, 0x74, 0xaf, 0x83,
+ 0x4c, 0xf7, 0x52, 0x76, 0x7b, 0x55, 0x42, 0x02, 0x9e, 0x63, 0x1c, 0x2b,
+ 0x12, 0xfb, 0x62, 0x76, 0xfb, 0xf6, 0xde, 0x46, 0x63, 0x75, 0x85, 0x12,
+ 0x7f, 0x8c, 0xaa, 0x6f, 0x45, 0xb5, 0x9f, 0x78, 0x4f, 0xf0, 0x6f, 0xef,
+ 0xb9, 0x9c, 0xf5, 0x5c, 0xc9, 0x02, 0xfd, 0x1b, 0xcb, 0x4c, 0x8f, 0xaa,
+ 0xc5, 0x4f, 0xe7, 0x28, 0xed, 0x5b, 0x5f, 0x15, 0x1c, 0xdd, 0xb9, 0xa3,
+ 0x80, 0x63, 0x0d, 0x32, 0x78, 0x1d, 0x0b, 0xd0, 0x4e, 0xb2, 0x5e, 0xa2,
+ 0x57, 0x46, 0x85, 0x4d, 0x0b, 0x1f, 0x57, 0x4b, 0xc8, 0xe6, 0x1d, 0xef,
+ 0x4e, 0x03, 0x34, 0x7f, 0xc9, 0x02, 0x2e, 0xfd, 0x6a, 0xf5, 0xb0, 0x75,
+ 0x95, 0x1f, 0x34, 0x55, 0xf1, 0xee, 0x36, 0xc8, 0xba, 0x50, 0xc9, 0x94,
+ 0x54, 0xf1, 0x76, 0x1b, 0x98, 0x9d, 0xae, 0xf0, 0x34, 0x21, 0xd4, 0x63,
+ 0x88, 0x5a, 0x6d, 0xa6, 0x97, 0x8a, 0x77, 0xbf, 0x01, 0x75, 0x93, 0xbd,
+ 0x59, 0xce, 0xdf, 0x3e, 0x87, 0xb4, 0x83, 0x2c, 0x4d, 0xa3, 0x8e, 0x8d,
+ 0x56, 0xa7, 0x0b, 0x11, 0x87, 0x18, 0x82, 0x29, 0xa5, 0x78, 0xf5, 0xd6,
+ 0xd2, 0x08, 0x4a, 0x67, 0x69, 0xf4, 0x78, 0x2d, 0x56, 0xbb, 0xdd, 0xe2,
+ 0xe4, 0x03, 0x59, 0xf1, 0x86, 0x91, 0xd2, 0xda, 0xe0, 0xf1, 0xfa, 0x11,
+ 0x3a, 0xc1, 0x20, 0x1f, 0x7b, 0xc7, 0xa8, 0x11, 0x13, 0x4e, 0x61, 0x42,
+ 0xc3, 0x46, 0x87, 0xd7, 0x83, 0x50, 0x7b, 0x12, 0x40, 0x36, 0xfe, 0xfa,
+ 0x2a, 0x80, 0x5b, 0x92, 0x46, 0x08, 0xe3, 0x03, 0x32, 0x61, 0xe4, 0x37,
+ 0x7b, 0xec, 0x98, 0xbe, 0x35, 0x69, 0x84, 0x29, 0x9a, 0x0e, 0x83, 0xbf,
+ 0xd5, 0xe1, 0xf5, 0xb3, 0x02, 0x6f, 0xd3, 0x71, 0x44, 0xcd, 0x82, 0xe2,
+ 0xdd, 0x1e, 0xc5, 0x34, 0x45, 0xdf, 0xc3, 0x8f, 0xca, 0x7c, 0x20, 0x2e,
+ 0xbe, 0x06, 0x8f, 0xbb, 0x03, 0x76, 0x67, 0x5c, 0xac, 0xfa, 0x16, 0x3f,
+ 0xb6, 0xbc, 0x9e, 0x02, 0x2c, 0x40, 0x85, 0x75, 0x83, 0x27, 0xc0, 0x6a,
+ 0xdd, 0xad, 0xc3, 0xd5, 0x44, 0xdf, 0x3b, 0xc3, 0x9e, 0x88, 0xe2, 0xf0,
+ 0xd5, 0x37, 0xd5, 0xb8, 0x41, 0x87, 0x44, 0x31, 0xf4, 0x16, 0x41, 0xb4,
+ 0xb4, 0x07, 0xb5, 0x38, 0xf9, 0x5d, 0x38, 0xd6, 0x41, 0xd8, 0x92, 0x0e,
+ 0x7c, 0xc7, 0x0f, 0xfb, 0x00, 0x81, 0x46, 0xaf, 0x83, 0x15, 0xf4, 0x04,
+ 0x02, 0xf8, 0x02, 0x9c, 0xc5, 0x06, 0x86, 0xce, 0xcf, 0xd2, 0x4e, 0xa9,
+ 0x69, 0x3e, 0x87, 0xd5, 0x6b, 0x6b, 0x66, 0x7d, 0x91, 0x0c, 0x69, 0x4e,
+ 0x9f, 0xd5, 0xcf, 0x5b, 0x76, 0x4b, 0x32, 0xe4, 0xe8, 0x84, 0x6a, 0x45,
+ 0x6d, 0x19, 0x74, 0x84, 0x36, 0x71, 0x71, 0x63, 0xa3, 0xcf, 0xc1, 0xf2,
+ 0xdb, 0x86, 0xac, 0x2d, 0x6a, 0x37, 0x6e, 0x67, 0xa0, 0xa3, 0xc5, 0xd6,
+ 0xd2, 0xca, 0x5a, 0x5a, 0x80, 0x5c, 0xc7, 0x76, 0xa2, 0x8c, 0x16, 0x56,
+ 0x33, 0x28, 0xb0, 0x8d, 0xbd, 0x57, 0x52, 0x8e, 0x3f, 0xe6, 0x82, 0xef,
+ 0x68, 0xd0, 0xfb, 0xa5, 0xd8, 0xbe, 0x1a, 0x32, 0x7c, 0x91, 0x56, 0x47,
+ 0xc1, 0x1a, 0x19, 0x09, 0x12, 0xfd, 0xda, 0x03, 0x36, 0x74, 0x42, 0x3c,
+ 0x9b, 0x91, 0xa0, 0xbd, 0xe3, 0x11, 0x68, 0x7f, 0xd3, 0x00, 0xdb, 0x5d,
+ 0xa5, 0xb1, 0xe1, 0x30, 0xf7, 0x06, 0x6c, 0xaa, 0x32, 0xb0, 0x56, 0x57,
+ 0xd1, 0x0e, 0xf1, 0x2a, 0x2c, 0x8c, 0xc0, 0x40, 0xb4, 0x90, 0x61, 0x95,
+ 0x20, 0x3a, 0xb7, 0x41, 0x97, 0x68, 0x53, 0x75, 0x3a, 0x70, 0x4a, 0x8b,
+ 0xd1, 0xaa, 0x73, 0x7b, 0xca, 0x88, 0x84, 0x53, 0x1d, 0x74, 0x96, 0x8a,
+ 0x8d, 0xbe, 0xb5, 0xa1, 0x99, 0xd1, 0xa0, 0xe3, 0x54, 0x02, 0xdd, 0x84,
+ 0x08, 0x5d, 0xa7, 0x22, 0xc4, 0xb8, 0xd6, 0xf1, 0x6d, 0xd7, 0xa0, 0xe5,
+ 0x9f, 0x95, 0xc0, 0xae, 0x4d, 0x8c, 0xb6, 0x4b, 0x2d, 0xb9, 0x93, 0x48,
+ 0x69, 0xe6, 0x54, 0x0b, 0xb0, 0x5b, 0x9f, 0xce, 0x7e, 0x14, 0x03, 0x7b,
+ 0x57, 0x93, 0xec, 0x8b, 0x26, 0xf7, 0xa4, 0x64, 0xe0, 0x2c, 0x2b, 0xac,
+ 0xc9, 0xfe, 0x14, 0x30, 0x0c, 0xad, 0x64, 0x0f, 0x98, 0x15, 0x33, 0xf9,
+ 0xc1, 0x3c, 0x36, 0x04, 0xfc, 0x8e, 0x0a, 0xfc, 0x39, 0x1b, 0xec, 0x41,
+ 0x14, 0xa4, 0x9d, 0x97, 0xf9, 0xa0, 0xd2, 0xbe, 0xfc, 0x89, 0x1d, 0xc9,
+ 0xe4, 0xfa, 0x9b, 0xd1, 0x15, 0xb0, 0xb4, 0x00, 0x7b, 0x9b, 0x85, 0xfd,
+ 0xe4, 0x06, 0x76, 0x61, 0x2c, 0x2a, 0xe0, 0x16, 0xc8, 0x13, 0x0c, 0x19,
+ 0xf0, 0xf3, 0xce, 0xc3, 0xac, 0x7c, 0x0e, 0x96, 0x4b, 0x9d, 0x93, 0x8d,
+ 0xdb, 0xf6, 0x54, 0xc0, 0x83, 0xde, 0xd0, 0x50, 0xd8, 0x42, 0xa0, 0xcb,
+ 0xc1, 0x72, 0xdd, 0x4a, 0xa0, 0x9b, 0xa3, 0xd9, 0x9f, 0xc1, 0x62, 0x69,
+ 0x69, 0xb6, 0xd0, 0x8b, 0xc9, 0x96, 0x66, 0xc8, 0x14, 0xa6, 0x85, 0x8b,
+ 0xd4, 0xe3, 0x3b, 0xc7, 0x27, 0x0d, 0x6c, 0xfb, 0x99, 0xe1, 0xaf, 0x86,
+ 0x88, 0xe1, 0x3b, 0xc3, 0x83, 0x23, 0x3e, 0x33, 0xbc, 0x6a, 0x78, 0xbd,
+ 0xff, 0x96, 0x7e, 0x5b, 0x06, 0x9e, 0x48, 0xb5, 0x7d, 0x96, 0x72, 0xc1,
+ 0xf8, 0x7b, 0xd2, 0x82, 0x86, 0xd1, 0xc3, 0xbe, 0x4d, 0x19, 0xd6, 0x30,
+ 0x6c, 0xd8, 0xb0, 0xcc, 0x6f, 0x93, 0x96, 0xed, 0x48, 0xfa, 0x69, 0xf2,
+ 0xb0, 0x81, 0xc3, 0x86, 0x4d, 0x81, 0x7f, 0x55, 0x47, 0x93, 0x0b, 0x66,
+ 0x0c, 0x1f, 0x5e, 0x54, 0x5d, 0x5d, 0x5d, 0xeb, 0xfc, 0xcf, 0xa4, 0xb7,
+ 0xfa, 0xfd, 0xd2, 0x50, 0x5b, 0x07, 0x7f, 0xf5, 0x19, 0xa3, 0x6c, 0x9b,
+ 0x0d, 0x0b, 0x6f, 0xec, 0xb7, 0xd5, 0xb0, 0x2b, 0xe9, 0x91, 0xe4, 0x00,
+ 0x7e, 0xf1, 0x74, 0x5a, 0x9a, 0xa2, 0xd8, 0x35, 0xeb, 0x1f, 0x87, 0x04,
+ 0xbb, 0x00, 0x6e, 0x4c, 0x36, 0x28, 0xbf, 0xff, 0xf2, 0xeb, 0x65, 0xac,
+ 0xd8, 0x70, 0x65, 0xc1, 0xed, 0x38, 0x9d, 0xeb, 0x39, 0x06, 0xf8, 0xf1,
+ 0x1a, 0x18, 0xaf, 0xf1, 0x4a, 0xf4, 0x1c, 0x1d, 0xc2, 0x8b, 0x0c, 0x7a,
+ 0xd8, 0xae, 0xd9, 0xd8, 0x90, 0xf3, 0xff, 0x5c, 0x82, 0xf1, 0xc0, 0x1d,
+ 0xe6, 0x7f, 0xdb, 0xbf, 0xf5, 0xf9, 0x8b, 0x73, 0x45, 0xdf, 0x1f, 0xc0,
+ 0xf3, 0x3f, 0x25, 0xe5, 0xdf, 0x26, 0xe5, 0xaf, 0x85, 0x91, 0x5f, 0x9c,
+ 0x1b, 0x7a, 0x9c, 0xf8, 0x05, 0x2c, 0xf8, 0x7f, 0x26, 0xf1, 0xff, 0x4c,
+ 0xe2, 0x17, 0xe7, 0x82, 0x4e, 0x13, 0xbf, 0x80, 0x05, 0xff, 0x5f, 0x25,
+ 0xfe, 0xbf, 0x4a, 0xfc, 0xe2, 0xb9, 0xdb, 0x15, 0x03, 0x39, 0xff, 0xf3,
+ 0x12, 0x7f, 0x44, 0xe2, 0x8f, 0x48, 0xfc, 0xe2, 0xf9, 0xdc, 0x7c, 0xe2,
+ 0x17, 0xb0, 0xe0, 0xff, 0x4e, 0xe2, 0xff, 0x4e, 0xe2, 0x17, 0xcf, 0xf1,
+ 0xae, 0x23, 0x7e, 0x01, 0x0b, 0xfe, 0xdc, 0x81, 0x7a, 0x7e, 0x2d, 0x8c,
+ 0xfc, 0xe2, 0x79, 0xdf, 0x0f, 0x88, 0x5f, 0xc0, 0x82, 0xff, 0x33, 0x29,
+ 0xff, 0xcf, 0xa4, 0xfc, 0xc5, 0x73, 0xc1, 0x1d, 0xc4, 0x2f, 0x60, 0xc1,
+ 0xff, 0xaa, 0xc4, 0xff, 0xaa, 0xc4, 0x2f, 0x9e, 0x1f, 0xfe, 0x9d, 0xf8,
+ 0x05, 0x2c, 0xf8, 0x5f, 0x4f, 0xd6, 0xf3, 0x6b, 0x61, 0xe4, 0x17, 0xcf,
+ 0x19, 0x27, 0x5c, 0xc0, 0xf9, 0x05, 0x2c, 0xf8, 0xd3, 0x24, 0xfe, 0x34,
+ 0x89, 0x5f, 0x3c, 0x8f, 0xac, 0x21, 0x7e, 0x01, 0xab, 0xfc, 0xa9, 0x12,
+ 0x7f, 0xaa, 0x9e, 0x5f, 0x3c, 0xb7, 0xbc, 0x99, 0xf8, 0x05, 0x2c, 0xf8,
+ 0x4f, 0x24, 0xe9, 0xf9, 0xb5, 0x30, 0x2b, 0x3f, 0x3d, 0xc7, 0xfc, 0x4f,
+ 0x51, 0xfe, 0x19, 0x7a, 0x7e, 0x9b, 0xd4, 0x7e, 0x5a, 0x18, 0xf9, 0xc5,
+ 0x73, 0xd0, 0x57, 0x88, 0xff, 0x33, 0x89, 0x7f, 0xad, 0x94, 0xff, 0x5a,
+ 0x29, 0x7f, 0xf1, 0xbc, 0xf4, 0xdf, 0xc4, 0x2f, 0x60, 0xc1, 0x7f, 0x81,
+ 0x94, 0xff, 0x05, 0x52, 0xfe, 0xe2, 0xb9, 0xea, 0xac, 0x0b, 0x39, 0x7f,
+ 0x8b, 0xc4, 0x3f, 0x5e, 0xe2, 0x17, 0xb0, 0x1f, 0xe8, 0x8d, 0x4a, 0xf4,
+ 0xef, 0x87, 0x12, 0xbc, 0x43, 0x82, 0x9f, 0x97, 0xe0, 0xc3, 0x12, 0x8c,
+ 0xf2, 0xb5, 0xf6, 0xe8, 0xdb, 0x0b, 0xf5, 0xf6, 0x67, 0xee, 0x20, 0x3d,
+ 0x7c, 0xf5, 0x20, 0x6e, 0x8f, 0x3e, 0xfb, 0xfb, 0x16, 0x9d, 0x3d, 0x12,
+ 0xcf, 0x39, 0xf7, 0x0c, 0xe2, 0xf5, 0xf9, 0xb1, 0x54, 0x9f, 0x8b, 0x53,
+ 0xf4, 0xf5, 0xd1, 0xc2, 0xc8, 0xff, 0xfb, 0x42, 0x1e, 0x3f, 0x48, 0xfc,
+ 0x02, 0x16, 0xfc, 0x41, 0xa9, 0x3d, 0xb4, 0x30, 0xf2, 0xcf, 0x9c, 0xc3,
+ 0xe3, 0x83, 0x06, 0x73, 0x7e, 0x01, 0x0b, 0xfe, 0xd1, 0x12, 0xff, 0x68,
+ 0x89, 0xbf, 0x92, 0xe8, 0x67, 0x13, 0x7f, 0xa5, 0xc4, 0x3f, 0x4c, 0xe2,
+ 0x1f, 0x26, 0xf1, 0x5b, 0x88, 0xde, 0x4a, 0xfc, 0x16, 0x89, 0xff, 0x06,
+ 0x49, 0x9f, 0x6e, 0x90, 0xf4, 0xe9, 0xad, 0x22, 0x1e, 0xbf, 0x83, 0xf8,
+ 0x05, 0xdc, 0xd7, 0xfc, 0x8f, 0x11, 0xfd, 0x7b, 0xc4, 0x7f, 0x4c, 0xe2,
+ 0x6f, 0x90, 0xf8, 0x1b, 0x24, 0xfe, 0x45, 0x57, 0xf1, 0xf8, 0xc2, 0x74,
+ 0xce, 0x2f, 0xe0, 0xbe, 0xe6, 0xbf, 0x9a, 0xe8, 0xff, 0x40, 0xfc, 0xab,
+ 0xcf, 0x91, 0xdf, 0x4b, 0xf4, 0xc9, 0x43, 0x38, 0xbf, 0xf7, 0x1c, 0xf9,
+ 0x37, 0x13, 0xfd, 0x06, 0xe2, 0xdf, 0x2c, 0xf1, 0x67, 0x4a, 0xfc, 0x99,
+ 0x12, 0xff, 0x0e, 0xa2, 0xff, 0x8c, 0xf8, 0x77, 0x48, 0xfc, 0x37, 0x18,
+ 0xa4, 0xfe, 0x33, 0xe8, 0xf9, 0xf1, 0xe3, 0x17, 0x18, 0xbf, 0x78, 0x28,
+ 0xe7, 0x17, 0xb0, 0xe0, 0x5f, 0x26, 0xe5, 0xbf, 0x4c, 0xca, 0xbf, 0x9d,
+ 0xe8, 0xeb, 0x89, 0xbf, 0x5d, 0xe2, 0x9f, 0x2a, 0xe5, 0x3f, 0x55, 0xca,
+ 0x7f, 0x87, 0x89, 0xc7, 0x7f, 0x42, 0xfc, 0x02, 0x16, 0xfc, 0x3f, 0x95,
+ 0xf8, 0x7f, 0x2a, 0xf1, 0x97, 0x94, 0xf0, 0xf8, 0x93, 0xc4, 0x2f, 0xe0,
+ 0xbe, 0xb6, 0x7f, 0x1d, 0xd1, 0x87, 0x89, 0xbf, 0x4e, 0xe2, 0xef, 0xcd,
+ 0x1f, 0x62, 0xe3, 0x87, 0xe8, 0x2f, 0x1a, 0x46, 0xe3, 0xe7, 0x1c, 0xf3,
+ 0x5f, 0x4b, 0xf4, 0xf3, 0x89, 0x7f, 0xed, 0x39, 0xf2, 0x77, 0x10, 0xfd,
+ 0x5a, 0xe2, 0xef, 0x90, 0xf8, 0xa7, 0x48, 0xfc, 0x53, 0x24, 0xfe, 0x3f,
+ 0x12, 0xfd, 0x6f, 0x89, 0xff, 0x8f, 0xe7, 0x98, 0x7f, 0x37, 0xd1, 0x1f,
+ 0x22, 0xfe, 0xee, 0x73, 0xcc, 0xff, 0x28, 0xd1, 0x1b, 0x87, 0x73, 0xfe,
+ 0xa3, 0xe7, 0x98, 0xff, 0x69, 0xa2, 0xb7, 0x12, 0xff, 0x69, 0x89, 0xbf,
+ 0x4a, 0xe2, 0xaf, 0x92, 0xf8, 0x2b, 0x4b, 0xc9, 0x7e, 0x11, 0xbf, 0x80,
+ 0x05, 0xff, 0x51, 0x49, 0xff, 0xb4, 0x30, 0xf2, 0xe7, 0x2f, 0xa0, 0xf9,
+ 0x83, 0xf8, 0x05, 0x2c, 0xf8, 0x0b, 0xa4, 0xfc, 0x0b, 0xa4, 0xfc, 0xd7,
+ 0x12, 0xfd, 0x98, 0x11, 0xd4, 0xff, 0x12, 0xff, 0x0c, 0x89, 0x7f, 0x86,
+ 0xc4, 0x7f, 0x3f, 0xd1, 0x5f, 0x4f, 0xfc, 0xf7, 0x4b, 0xfc, 0xc3, 0x25,
+ 0xfe, 0xe1, 0x12, 0xff, 0x23, 0x44, 0xff, 0x07, 0xe2, 0x7f, 0xe4, 0x1c,
+ 0xf9, 0x9f, 0x27, 0xfa, 0x33, 0xc4, 0xff, 0xbc, 0xc4, 0x5f, 0x24, 0xf1,
+ 0x17, 0x49, 0xfc, 0xfd, 0xaf, 0xe6, 0xf1, 0xc5, 0x19, 0x9c, 0x5f, 0xc0,
+ 0x82, 0xbf, 0x5a, 0xe2, 0xaf, 0x96, 0xf8, 0x97, 0x11, 0xfd, 0xcf, 0x89,
+ 0x7f, 0xd9, 0x39, 0xf2, 0xff, 0x9e, 0xe8, 0x0f, 0x11, 0xff, 0xef, 0xcf,
+ 0x91, 0xff, 0x34, 0xd1, 0x4f, 0x18, 0x49, 0xfa, 0x27, 0xf1, 0xd7, 0x4a,
+ 0xfc, 0xb5, 0x12, 0xff, 0x12, 0x33, 0x8f, 0xb7, 0x12, 0xbf, 0x80, 0x05,
+ 0xbf, 0x53, 0xe2, 0x77, 0x4a, 0xfc, 0x8f, 0x11, 0xfd, 0xe3, 0xc4, 0xff,
+ 0x98, 0xc4, 0x3f, 0x49, 0xd2, 0x5f, 0x2d, 0x8c, 0xfc, 0x1f, 0x96, 0xf3,
+ 0xf8, 0xe8, 0x8b, 0x38, 0xbf, 0x80, 0x05, 0xff, 0x72, 0xc9, 0x9f, 0x5e,
+ 0x2e, 0xf9, 0xd3, 0x45, 0x95, 0x3c, 0xbe, 0x92, 0xf8, 0x05, 0x2c, 0xf8,
+ 0x7f, 0x29, 0x95, 0x5f, 0x0b, 0x23, 0xff, 0x3b, 0x44, 0x7f, 0x07, 0xf1,
+ 0xbf, 0x53, 0x79, 0x6e, 0xed, 0x97, 0xb3, 0x88, 0xc7, 0x9f, 0x23, 0x7e,
+ 0x01, 0x0b, 0xfe, 0x3a, 0x89, 0xbf, 0x4e, 0xe2, 0xef, 0x24, 0xfa, 0x4f,
+ 0x88, 0xbf, 0xf3, 0x1c, 0xf9, 0xdf, 0x22, 0xfa, 0xf4, 0x51, 0xe4, 0xff,
+ 0x9c, 0x23, 0x7f, 0xf6, 0x62, 0x1e, 0xcf, 0x27, 0x7e, 0x01, 0xf7, 0x95,
+ 0x7f, 0x33, 0xd1, 0xaf, 0x24, 0xfe, 0xcd, 0x12, 0x7f, 0xbd, 0xc4, 0x5f,
+ 0x2f, 0xf1, 0xbf, 0x43, 0xf4, 0xed, 0xc4, 0xff, 0x8e, 0xc4, 0x9f, 0x21,
+ 0xf1, 0x67, 0x48, 0xfc, 0x9f, 0x11, 0xfd, 0xef, 0x89, 0xff, 0x33, 0x89,
+ 0x7f, 0x94, 0xc4, 0x3f, 0x4a, 0xe2, 0xc7, 0x8f, 0xd1, 0x61, 0xfc, 0x0d,
+ 0xe2, 0x17, 0xb0, 0xe0, 0x3f, 0xdb, 0x7a, 0xc8, 0x45, 0xf4, 0xfd, 0x47,
+ 0x73, 0x7e, 0x97, 0xc4, 0xbf, 0x59, 0xe2, 0xdf, 0x2c, 0xf1, 0x9f, 0x20,
+ 0xfa, 0xab, 0x88, 0xff, 0x84, 0xc4, 0xbf, 0x50, 0xe2, 0x5f, 0x28, 0xf1,
+ 0xcf, 0x59, 0xc2, 0xe3, 0xeb, 0x89, 0x5f, 0xc0, 0x82, 0xff, 0x46, 0x89,
+ 0xff, 0x46, 0x89, 0xff, 0x11, 0xa2, 0x7f, 0x90, 0xf8, 0x1f, 0x91, 0xf8,
+ 0xfb, 0x49, 0xfc, 0xfd, 0x24, 0xfe, 0x27, 0x88, 0xfe, 0x30, 0xf1, 0x3f,
+ 0x21, 0xf1, 0x6f, 0x95, 0xf8, 0xb7, 0x4a, 0xfc, 0x95, 0xd5, 0x3c, 0x3e,
+ 0xfc, 0x62, 0x9a, 0xff, 0xaa, 0xf5, 0xfc, 0x79, 0x06, 0x3d, 0xbf, 0x16,
+ 0x46, 0xfe, 0x5b, 0x6b, 0x78, 0x7c, 0x26, 0xf1, 0x0b, 0x58, 0xf0, 0x3f,
+ 0x22, 0xf1, 0x3f, 0x22, 0xf1, 0x17, 0xd4, 0xf1, 0x78, 0x05, 0xf1, 0x0b,
+ 0xd8, 0x73, 0x71, 0xb4, 0xaf, 0x14, 0x8d, 0xbc, 0x80, 0x54, 0x1f, 0x2d,
+ 0xcc, 0xfc, 0x19, 0xe2, 0x3f, 0x41, 0xf2, 0x04, 0xdc, 0xd7, 0xf6, 0x7c,
+ 0x88, 0xe8, 0x47, 0x5e, 0xc2, 0xf9, 0x1f, 0x92, 0xf8, 0x73, 0x24, 0xfe,
+ 0x1c, 0x89, 0xff, 0x30, 0xd1, 0xcf, 0x26, 0xfe, 0xc3, 0x12, 0xff, 0x5b,
+ 0x12, 0xbf, 0x80, 0x57, 0x03, 0xbd, 0x51, 0x53, 0x5f, 0x1f, 0xc0, 0x57,
+ 0x8e, 0x88, 0x9e, 0x23, 0xbb, 0x9b, 0x60, 0x71, 0x5e, 0xec, 0x2f, 0x04,
+ 0x8b, 0xf3, 0xc2, 0x1f, 0x48, 0xfc, 0xf8, 0x42, 0xe6, 0x95, 0xa3, 0xa2,
+ 0xe7, 0xd3, 0x2e, 0x47, 0x18, 0x74, 0x64, 0x3b, 0x9d, 0xd7, 0x9b, 0x8e,
+ 0x30, 0xf0, 0x9c, 0x20, 0xb8, 0x8a, 0x60, 0xe5, 0x5e, 0x0e, 0xff, 0x88,
+ 0x60, 0x23, 0xc1, 0xfb, 0x09, 0xce, 0x21, 0x38, 0x79, 0x0c, 0xf1, 0x13,
+ 0x9c, 0x4f, 0xf0, 0x29, 0x82, 0x57, 0x11, 0xac, 0xfc, 0x82, 0xc3, 0xb7,
+ 0x10, 0x9c, 0x46, 0xf0, 0x4e, 0x82, 0x87, 0x10, 0xfc, 0x16, 0xc1, 0xa3,
+ 0x08, 0xfe, 0x86, 0x60, 0x23, 0xc1, 0x17, 0x5d, 0xc6, 0xe1, 0x4c, 0x82,
+ 0xa7, 0x12, 0x9c, 0x43, 0xf0, 0x52, 0x82, 0xf3, 0x09, 0xde, 0x40, 0x70,
+ 0x31, 0xc1, 0x3f, 0x27, 0xd8, 0x4c, 0xf0, 0x33, 0x04, 0x57, 0x11, 0x7c,
+ 0x8c, 0xe0, 0x7a, 0x82, 0x2f, 0xb9, 0x9c, 0xc3, 0xab, 0x09, 0xae, 0x26,
+ 0x78, 0xc8, 0x2f, 0x39, 0x1c, 0x22, 0x78, 0x14, 0xc1, 0x0f, 0x12, 0x6c,
+ 0x24, 0xf8, 0x4d, 0x82, 0x33, 0x09, 0xfe, 0x92, 0xe0, 0x1c, 0x82, 0x33,
+ 0x8c, 0x54, 0x5e, 0x82, 0x0b, 0x09, 0x2e, 0x26, 0x78, 0x39, 0xc1, 0x66,
+ 0x82, 0x37, 0x12, 0x5c, 0x45, 0xf0, 0x4f, 0x09, 0xae, 0x27, 0xf8, 0x11,
+ 0x82, 0x57, 0x13, 0xfc, 0x01, 0xc1, 0xcd, 0xbf, 0x8c, 0xea, 0x9f, 0x76,
+ 0xbf, 0xe4, 0x33, 0xc0, 0xe3, 0xe7, 0xac, 0xc4, 0xfe, 0xef, 0x57, 0x00,
+ 0x0f, 0x36, 0x44, 0xf7, 0x63, 0xa7, 0x8e, 0xe5, 0xb0, 0xd8, 0x5f, 0x6d,
+ 0x21, 0x58, 0xec, 0x97, 0xfe, 0x84, 0x60, 0xb1, 0xff, 0xf9, 0x5f, 0x04,
+ 0x8b, 0xfd, 0xcc, 0x97, 0x08, 0x16, 0xfb, 0x93, 0xdf, 0x11, 0x2c, 0xf6,
+ 0x1b, 0x2f, 0x1d, 0xc7, 0x61, 0xb1, 0x7f, 0x58, 0x4e, 0xb0, 0xd8, 0x0f,
+ 0xbc, 0x93, 0x60, 0xb1, 0xbf, 0xb7, 0x97, 0x60, 0xb1, 0x5f, 0xf7, 0x29,
+ 0xc1, 0x62, 0xff, 0x6d, 0xf4, 0x15, 0x44, 0x4f, 0xfb, 0x61, 0x26, 0x82,
+ 0xc5, 0xfe, 0x98, 0x83, 0x60, 0xb1, 0xdf, 0xf5, 0x5b, 0x82, 0xc5, 0xfe,
+ 0xd5, 0x61, 0x82, 0xc5, 0xfe, 0xcf, 0xb7, 0x04, 0x8b, 0xfd, 0x9c, 0x9c,
+ 0xf1, 0x1c, 0x16, 0xfb, 0x33, 0xcb, 0x09, 0x16, 0xfb, 0x2d, 0x9b, 0x09,
+ 0x16, 0xfb, 0x27, 0x8f, 0x10, 0x2c, 0xf6, 0x43, 0x92, 0x26, 0x70, 0x58,
+ 0xec, 0x6f, 0xb8, 0x09, 0x16, 0xfb, 0x15, 0xfb, 0x09, 0x16, 0xfb, 0x0f,
+ 0x57, 0x5e, 0xc9, 0x61, 0xb1, 0x9f, 0xf0, 0x73, 0x82, 0xc5, 0xfe, 0xc0,
+ 0x88, 0x89, 0x1c, 0x16, 0xeb, 0xfd, 0x22, 0x82, 0xc5, 0xfa, 0xfd, 0x06,
+ 0x82, 0xc5, 0x7a, 0xfc, 0x61, 0x41, 0x6f, 0xe2, 0xf0, 0xfb, 0x04, 0x8b,
+ 0xf5, 0xf2, 0x05, 0x99, 0x1c, 0x16, 0xeb, 0xdf, 0x42, 0x82, 0xc5, 0x7a,
+ 0xd6, 0x41, 0xb0, 0x58, 0x9f, 0xde, 0x41, 0xb0, 0x58, 0x6f, 0x3e, 0x47,
+ 0xb0, 0x58, 0x3f, 0x26, 0x4f, 0xe2, 0xb0, 0x58, 0x0f, 0x96, 0x10, 0x2c,
+ 0xd6, 0x77, 0x9b, 0x09, 0x16, 0xeb, 0xb5, 0x47, 0x08, 0x16, 0xeb, 0xaf,
+ 0xc3, 0x04, 0x8b, 0xf5, 0x14, 0x7e, 0x23, 0x8e, 0xe5, 0x4f, 0x70, 0x17,
+ 0xc1, 0x62, 0xbd, 0xb3, 0x9f, 0x60, 0xb1, 0x7e, 0x19, 0x3b, 0x85, 0xf4,
+ 0x93, 0x60, 0x2f, 0xc1, 0x62, 0x7d, 0xf1, 0x57, 0x82, 0xc5, 0x7a, 0x21,
+ 0x79, 0x2a, 0xf5, 0x37, 0xc1, 0x66, 0x82, 0x85, 0x3f, 0xff, 0x13, 0x82,
+ 0x85, 0x7f, 0xfe, 0x1e, 0xc1, 0xc2, 0xdf, 0x9e, 0x3b, 0x8d, 0xc3, 0xc2,
+ 0x7f, 0xbe, 0x99, 0x60, 0xe1, 0x0f, 0x3f, 0x42, 0xb0, 0xf0, 0x6f, 0x8f,
+ 0x11, 0x2c, 0xfc, 0xd5, 0x41, 0x59, 0x1c, 0x16, 0xfe, 0xe7, 0x74, 0x82,
+ 0x85, 0x3f, 0xb9, 0x82, 0x60, 0xe1, 0x1f, 0xde, 0x4c, 0xb0, 0xf0, 0xf7,
+ 0xee, 0x23, 0x58, 0xf8, 0x6f, 0x2f, 0x11, 0x2c, 0xfc, 0xb1, 0xaf, 0x09,
+ 0x16, 0xfe, 0xd5, 0xe4, 0x6c, 0x0e, 0x0b, 0x7f, 0xc9, 0x4a, 0xb0, 0xf0,
+ 0x7f, 0xee, 0x21, 0x58, 0xf8, 0x33, 0x07, 0x08, 0x16, 0xfe, 0x49, 0xff,
+ 0x1c, 0x0e, 0x0b, 0x7f, 0x63, 0x16, 0xc1, 0xc2, 0x7f, 0x58, 0x4a, 0xb0,
+ 0xf0, 0x07, 0x3c, 0x04, 0x8b, 0xf9, 0xfd, 0x76, 0x82, 0xc5, 0xfc, 0xbc,
+ 0x9b, 0x60, 0x31, 0xdf, 0xfe, 0x9d, 0x60, 0x31, 0x7f, 0x26, 0xe5, 0x02,
+ 0x9c, 0x1a, 0x7d, 0x4f, 0xe5, 0x62, 0x84, 0xfb, 0x45, 0xdf, 0x77, 0x99,
+ 0x8a, 0x70, 0xff, 0xe8, 0xfb, 0x2b, 0xa5, 0x00, 0x5f, 0x36, 0x08, 0xe6,
+ 0x3f, 0xfa, 0xdd, 0x95, 0xeb, 0x08, 0xde, 0x4e, 0xf0, 0x8d, 0x08, 0x0f,
+ 0x81, 0xfa, 0x6e, 0xa1, 0xf9, 0x0e, 0xf9, 0x35, 0xf3, 0xed, 0x2e, 0x82,
+ 0xc5, 0x7c, 0xfb, 0x26, 0xc1, 0x62, 0xbe, 0x3d, 0x83, 0xfc, 0x60, 0xdb,
+ 0xc4, 0x79, 0xf1, 0x4b, 0xa7, 0x73, 0x58, 0xbc, 0x9f, 0x3f, 0x8b, 0x60,
+ 0x71, 0xfe, 0xbb, 0x16, 0xe0, 0xc1, 0x9a, 0xf9, 0xd8, 0x87, 0xb0, 0x66,
+ 0x3e, 0xfe, 0x1e, 0xd2, 0x83, 0xcf, 0x72, 0x88, 0xe0, 0x7b, 0x11, 0xaf,
+ 0x99, 0x9f, 0xff, 0x42, 0xb0, 0x98, 0x9f, 0xbf, 0x21, 0x58, 0xcc, 0xcf,
+ 0x73, 0x66, 0x70, 0x58, 0xcc, 0xcf, 0x6e, 0x82, 0xc5, 0xfc, 0x7c, 0x1f,
+ 0xc1, 0x62, 0x7e, 0xee, 0x21, 0x58, 0xcc, 0xcf, 0xc7, 0x08, 0x16, 0xf3,
+ 0xf3, 0x25, 0x33, 0x39, 0x2c, 0xe6, 0xe7, 0x32, 0x82, 0xc5, 0xfc, 0xec,
+ 0x20, 0x58, 0xcc, 0xcf, 0xb7, 0x12, 0x2c, 0xe6, 0xe7, 0x9f, 0x12, 0x2c,
+ 0xe6, 0xe7, 0xa7, 0x08, 0x16, 0xf3, 0xf3, 0x61, 0x82, 0xc5, 0xfc, 0xdc,
+ 0x3f, 0x8f, 0xc3, 0x62, 0x7e, 0xce, 0x21, 0x58, 0xcc, 0xcf, 0x4b, 0x09,
+ 0x16, 0xf3, 0xf3, 0xf7, 0x08, 0x16, 0xf3, 0xf3, 0x13, 0x04, 0x8b, 0xf9,
+ 0xf9, 0x24, 0xc1, 0x62, 0x7e, 0xbe, 0x74, 0x16, 0x95, 0x97, 0xe0, 0xf9,
+ 0x04, 0x8b, 0xf9, 0xd9, 0x42, 0xb0, 0x98, 0x9f, 0xdb, 0x09, 0x16, 0xf3,
+ 0xf3, 0x6f, 0x08, 0x16, 0xf3, 0xf3, 0x33, 0x04, 0x8b, 0xf9, 0xf9, 0x9f,
+ 0x04, 0x8b, 0xf9, 0x39, 0x69, 0x36, 0x95, 0x97, 0xe0, 0x71, 0x04, 0x8b,
+ 0xf9, 0xb9, 0x92, 0x60, 0x31, 0x3f, 0xe3, 0xb6, 0x7a, 0xba, 0x81, 0xff,
+ 0xca, 0x0d, 0xc2, 0x23, 0x79, 0xa8, 0xfe, 0x6c, 0xc4, 0x34, 0x0e, 0xab,
+ 0x3f, 0x43, 0x53, 0x27, 0xc1, 0xcd, 0x1c, 0x56, 0x7f, 0xc6, 0xc3, 0x23,
+ 0xc1, 0x37, 0x48, 0xf0, 0x2f, 0x25, 0xf9, 0xbb, 0x24, 0xfc, 0x8b, 0x12,
+ 0xfe, 0x7d, 0x09, 0xfe, 0x4e, 0xa2, 0xbf, 0xc8, 0xa0, 0x2f, 0xcf, 0x34,
+ 0x83, 0x9e, 0xfe, 0x1a, 0x09, 0x6e, 0x94, 0xe0, 0x2d, 0x06, 0xa9, 0x7c,
+ 0x1c, 0x56, 0x7f, 0x16, 0xe6, 0x61, 0x09, 0xff, 0x82, 0x04, 0x7f, 0x2c,
+ 0xc1, 0x67, 0x24, 0x78, 0x78, 0x92, 0x3e, 0xbf, 0x89, 0x12, 0x5c, 0x9a,
+ 0xa4, 0xa7, 0x77, 0x48, 0xf0, 0x0f, 0x92, 0xf4, 0xf5, 0xfb, 0x2d, 0x87,
+ 0x0d, 0x02, 0x7e, 0x2a, 0x49, 0x5f, 0xde, 0x7f, 0x70, 0x58, 0xfd, 0x59,
+ 0x99, 0x4f, 0x24, 0xf8, 0x8c, 0x94, 0x3f, 0x7e, 0xc9, 0x57, 0x8b, 0x9f,
+ 0x2e, 0xc1, 0x65, 0x12, 0xdc, 0x9c, 0xac, 0xcf, 0xef, 0x06, 0x09, 0xfe,
+ 0x91, 0x44, 0x7f, 0x97, 0x04, 0x6f, 0x97, 0xe0, 0xff, 0x90, 0xe0, 0x3f,
+ 0x49, 0xf2, 0xba, 0x19, 0x5c, 0xac, 0xc2, 0xaf, 0x49, 0xf8, 0x8f, 0x24,
+ 0x38, 0x22, 0xc1, 0x23, 0x53, 0xf4, 0x70, 0xae, 0x04, 0x2f, 0x90, 0xe0,
+ 0x3a, 0x09, 0xbe, 0x5e, 0x82, 0x37, 0x49, 0xf0, 0xed, 0x12, 0xbc, 0x23,
+ 0x45, 0x5f, 0x9f, 0xff, 0x92, 0xe0, 0xdd, 0x12, 0xfc, 0x8c, 0x04, 0xbf,
+ 0x2a, 0xc1, 0x6f, 0x49, 0xf2, 0xc3, 0x12, 0x7c, 0x2a, 0x45, 0xdf, 0x9f,
+ 0xa3, 0x52, 0xf5, 0xfc, 0x46, 0x09, 0xce, 0x94, 0xe0, 0x9c, 0x54, 0xbd,
+ 0xbc, 0x2a, 0x09, 0xbe, 0x5e, 0x82, 0x6f, 0x95, 0xe0, 0x9f, 0x49, 0xf0,
+ 0x2e, 0x09, 0x7e, 0x55, 0x82, 0x3f, 0x91, 0xe0, 0xfe, 0xfd, 0xf4, 0xf0,
+ 0x58, 0x09, 0xce, 0x91, 0xe0, 0x12, 0x09, 0xae, 0x93, 0x60, 0x97, 0x04,
+ 0x7f, 0x4f, 0x82, 0xb7, 0x49, 0xf0, 0x6f, 0xfb, 0xe9, 0xf5, 0xeb, 0x31,
+ 0x09, 0xff, 0xaa, 0x04, 0x1f, 0x92, 0xe0, 0x7f, 0x49, 0x70, 0x6a, 0x7f,
+ 0x3d, 0x3c, 0x49, 0x82, 0x0b, 0x25, 0xb8, 0x5a, 0x82, 0x1b, 0x24, 0xd8,
+ 0xdb, 0x5f, 0xdf, 0x5f, 0x1b, 0xfb, 0xeb, 0xcb, 0x7b, 0x97, 0x44, 0xbf,
+ 0x4b, 0x82, 0xf7, 0x49, 0xfc, 0x6f, 0x4b, 0xf0, 0x67, 0x12, 0xfc, 0x95,
+ 0xc4, 0x9f, 0x9c, 0xa6, 0xc7, 0x5f, 0x20, 0xc1, 0xc3, 0x25, 0xf8, 0x52,
+ 0x09, 0x7e, 0x17, 0x80, 0x43, 0x70, 0xbd, 0x0f, 0xd7, 0x07, 0x70, 0x7d,
+ 0x03, 0xd7, 0x69, 0xb8, 0x22, 0x70, 0x25, 0x81, 0x2d, 0x4a, 0x86, 0x2b,
+ 0x05, 0xae, 0x54, 0xb8, 0xf0, 0xb3, 0xc4, 0xfd, 0xe1, 0x4a, 0x83, 0x6b,
+ 0x00, 0x5c, 0x03, 0xe1, 0xba, 0x00, 0xae, 0x0b, 0xe1, 0x1a, 0x0c, 0x57,
+ 0x3a, 0x5c, 0x43, 0xe0, 0x1a, 0x0a, 0xd7, 0xb0, 0x24, 0x6e, 0x5b, 0xf1,
+ 0xcb, 0xdd, 0x19, 0x70, 0x8d, 0x84, 0x0b, 0x4f, 0x43, 0x8d, 0x82, 0xeb,
+ 0x62, 0xb8, 0x2e, 0x81, 0xeb, 0x52, 0xb8, 0xc6, 0xc0, 0x75, 0x19, 0x5c,
+ 0x46, 0xb8, 0xc6, 0xc2, 0x35, 0x0e, 0xae, 0x2b, 0xe0, 0x9a, 0x00, 0xd7,
+ 0x95, 0x49, 0xdc, 0x1e, 0x67, 0xc2, 0x35, 0x09, 0xae, 0xc9, 0x70, 0x4d,
+ 0x81, 0x2b, 0x0b, 0xae, 0x5c, 0xb8, 0xa6, 0xc3, 0x35, 0x03, 0xae, 0x3c,
+ 0xb8, 0x66, 0xc1, 0x35, 0x1b, 0xae, 0x7c, 0xb8, 0x0a, 0xe0, 0x9a, 0x03,
+ 0xd7, 0x5c, 0xb8, 0x8a, 0xe0, 0xba, 0x0a, 0xae, 0x79, 0x70, 0x15, 0xc3,
+ 0x85, 0x9f, 0x01, 0x9e, 0xcf, 0x9f, 0x55, 0x17, 0xbf, 0x07, 0x75, 0xfc,
+ 0x10, 0xae, 0x6f, 0x0d, 0x7c, 0x5e, 0x18, 0x04, 0xe9, 0xa3, 0xe1, 0xba,
+ 0x9c, 0xca, 0x32, 0x3e, 0x4e, 0x19, 0x30, 0xff, 0xa9, 0x70, 0x4d, 0x83,
+ 0x2b, 0x1b, 0xae, 0x1c, 0xb8, 0xf0, 0x23, 0xc3, 0x85, 0x49, 0xff, 0x6f,
+ 0xb6, 0xa5, 0x51, 0x89, 0x77, 0xee, 0x2d, 0xc1, 0xc1, 0xe7, 0xbe, 0x9e,
+ 0x7e, 0x8f, 0x73, 0x32, 0x9a, 0x8e, 0x44, 0x6b, 0xcf, 0x42, 0xf7, 0xe5,
+ 0x6d, 0x96, 0xf8, 0x07, 0xe0, 0x13, 0xbc, 0xd6, 0x12, 0xf7, 0x4c, 0x7c,
+ 0x2f, 0xc7, 0xe0, 0x7b, 0x79, 0xfd, 0x25, 0xfe, 0xd9, 0xfd, 0x5e, 0x8f,
+ 0xca, 0xf7, 0x76, 0x4c, 0xfe, 0xec, 0x47, 0xe4, 0x13, 0xbc, 0x6b, 0x93,
+ 0xe0, 0x85, 0x94, 0xb8, 0xaf, 0xdf, 0xf4, 0xf6, 0xea, 0x4d, 0x82, 0xb7,
+ 0x6d, 0xe2, 0xbe, 0x60, 0x13, 0xef, 0x80, 0x7e, 0xaf, 0xc7, 0xf3, 0xcf,
+ 0xfa, 0x36, 0x4e, 0x1f, 0x5f, 0xc0, 0x49, 0xfc, 0x56, 0x44, 0x6f, 0xef,
+ 0x46, 0xf5, 0xf2, 0x62, 0x8e, 0xee, 0x98, 0x7d, 0xbc, 0xf7, 0x41, 0xce,
+ 0xfe, 0x22, 0x41, 0xec, 0xa9, 0xfc, 0x38, 0xaf, 0x8d, 0xf4, 0xe1, 0x84,
+ 0x7e, 0x9c, 0xb7, 0x82, 0xe2, 0xbd, 0x10, 0x44, 0x27, 0xf8, 0xa3, 0x47,
+ 0xf7, 0xe9, 0xcc, 0xbe, 0x38, 0xac, 0x1f, 0x73, 0x4a, 0x3f, 0xce, 0xf1,
+ 0xfc, 0x38, 0xe7, 0xf2, 0x13, 0x1e, 0xc8, 0x4f, 0x70, 0x12, 0xbf, 0x97,
+ 0x23, 0xf8, 0x71, 0xcf, 0xde, 0xcb, 0x5f, 0x54, 0x8b, 0x77, 0x06, 0x3f,
+ 0xce, 0xe1, 0xfb, 0xb8, 0xa7, 0xee, 0x13, 0x1f, 0xb7, 0xe7, 0xe7, 0xec,
+ 0xf9, 0x01, 0x7b, 0xdd, 0xc9, 0x7a, 0xdd, 0x91, 0x7a, 0x71, 0x96, 0x5e,
+ 0x7f, 0x88, 0x5e, 0x3e, 0x3d, 0x7f, 0xb6, 0x17, 0x42, 0xc4, 0xb1, 0x7a,
+ 0x71, 0x9e, 0x5e, 0x1c, 0xa4, 0x3f, 0xdb, 0x09, 0xfa, 0xc4, 0x47, 0xe7,
+ 0x7b, 0xfb, 0x04, 0x5e, 0xfc, 0x2f, 0x27, 0xf6, 0xfd, 0x63, 0x8b, 0xb1,
+ 0x5f, 0x04, 0x8c, 0x3d, 0x36, 0xdf, 0xeb, 0x9b, 0x60, 0x89, 0x0f, 0xd3,
+ 0x9f, 0xc3, 0x97, 0xf8, 0xa2, 0xea, 0xd6, 0xdb, 0xb7, 0xf9, 0xe2, 0x9d,
+ 0x94, 0x4f, 0xf4, 0xd5, 0x3e, 0xf1, 0xc6, 0x58, 0xe2, 0x4f, 0x0a, 0xc6,
+ 0x9e, 0x9e, 0x8f, 0xf7, 0xb5, 0xc6, 0x38, 0x9f, 0x76, 0x8c, 0xfd, 0x50,
+ 0xe3, 0xd9, 0x3f, 0xb4, 0xa8, 0x3b, 0x43, 0xdf, 0xdb, 0xa7, 0x0b, 0xb5,
+ 0x87, 0xea, 0x63, 0xbe, 0x3c, 0x29, 0x46, 0x76, 0x2f, 0xe7, 0xe7, 0xcf,
+ 0x72, 0x70, 0x3e, 0xce, 0x17, 0x0b, 0xe3, 0x9c, 0xa1, 0x8f, 0x7f, 0x78,
+ 0x9e, 0x9f, 0x9a, 0xd7, 0x1e, 0x97, 0x17, 0xe7, 0xe4, 0xc5, 0x01, 0x79,
+ 0xf5, 0x64, 0x7c, 0xcc, 0xbb, 0x70, 0xd9, 0x68, 0xb8, 0x7d, 0xf4, 0xf5,
+ 0xdd, 0x6c, 0xfc, 0x4d, 0xf9, 0xd8, 0x0f, 0xf0, 0x66, 0x8b, 0xcf, 0xc8,
+ 0xd2, 0xd7, 0x70, 0x21, 0x85, 0x7d, 0xe8, 0x30, 0xab, 0xa5, 0x6f, 0xec,
+ 0x0d, 0x01, 0xa7, 0xcb, 0x1e, 0x2b, 0x24, 0x8b, 0xa7, 0x57, 0xf3, 0x9e,
+ 0x89, 0xf3, 0xdd, 0x5f, 0x8e, 0xa7, 0xcf, 0x7b, 0x41, 0xb2, 0x17, 0x06,
+ 0x70, 0x76, 0x5b, 0xfe, 0x2c, 0xcb, 0xac, 0x99, 0xd9, 0x2c, 0x7f, 0x0f,
+ 0x8e, 0x69, 0x50, 0x02, 0xcd, 0x77, 0x2b, 0xfe, 0x4f, 0x96, 0x49, 0x5b,
+ 0x0c, 0x8f, 0x32, 0x6d, 0x85, 0xf0, 0x62, 0x32, 0xe3, 0x7d, 0x81, 0x63,
+ 0x92, 0x31, 0xf6, 0x03, 0x91, 0xab, 0x18, 0x93, 0x76, 0x22, 0xce, 0x8c,
+ 0xf7, 0x9d, 0x8e, 0x49, 0xc6, 0x44, 0x9f, 0x81, 0x5c, 0xa5, 0x4c, 0x59,
+ 0xa1, 0x29, 0x85, 0x31, 0xfe, 0x27, 0xc9, 0x30, 0x1b, 0x2d, 0x95, 0xf4,
+ 0xfd, 0xc5, 0xb8, 0x68, 0x32, 0xa5, 0x32, 0xae, 0xf7, 0xaf, 0x05, 0xc9,
+ 0xd4, 0xf2, 0x47, 0xfa, 0x64, 0x7c, 0xaf, 0x9f, 0x9c, 0x89, 0x25, 0xfe,
+ 0xef, 0x7f, 0xdc, 0x50, 0x96, 0xd5, 0xfb, 0xb7, 0x1b, 0x65, 0xea, 0xde,
+ 0x3e, 0x03, 0x29, 0xd3, 0x26, 0xfe, 0x36, 0x66, 0x4c, 0x53, 0x26, 0xf8,
+ 0xb2, 0x9e, 0x4c, 0x17, 0xef, 0x43, 0x7b, 0xf1, 0x72, 0x3d, 0xa7, 0xaf,
+ 0xfd, 0xf4, 0x51, 0x40, 0x82, 0xaf, 0x11, 0xad, 0x52, 0x2c, 0x62, 0x24,
+ 0x89, 0x81, 0x24, 0x8a, 0x0f, 0x4b, 0x82, 0x18, 0x31, 0x75, 0xe5, 0x51,
+ 0x6c, 0x8c, 0xa7, 0xa7, 0xfd, 0x06, 0x8d, 0xde, 0x47, 0xd4, 0x61, 0xc0,
+ 0x71, 0x8b, 0xf3, 0x55, 0x9b, 0xec, 0x0a, 0x67, 0x83, 0x17, 0x7c, 0xef,
+ 0xec, 0x12, 0x74, 0xc7, 0x7c, 0xd9, 0x36, 0x4f, 0x0b, 0x7e, 0x69, 0xdd,
+ 0xe5, 0xc8, 0x6a, 0x6b, 0xf0, 0x65, 0xd7, 0xb0, 0x8f, 0xd6, 0xfb, 0xb2,
+ 0xc1, 0xa7, 0x70, 0x39, 0xfd, 0x0e, 0x11, 0x4e, 0x9b, 0x35, 0x2b, 0x9b,
+ 0x7f, 0xcf, 0x3e, 0x5b, 0xa1, 0xa4, 0xac, 0x16, 0x30, 0x23, 0xda, 0x4f,
+ 0x8c, 0x66, 0xd7, 0xa3, 0x66, 0xa2, 0xac, 0x6c, 0xf1, 0xf9, 0xcb, 0xec,
+ 0x52, 0xc7, 0x3a, 0x87, 0x0b, 0xed, 0x7d, 0x76, 0x2d, 0xcc, 0xe2, 0xe0,
+ 0x3b, 0x38, 0x05, 0x1d, 0x0d, 0xb4, 0xac, 0x36, 0xf0, 0x71, 0x08, 0x93,
+ 0x1d, 0xf0, 0x79, 0xb3, 0x5d, 0xce, 0x06, 0xcc, 0x14, 0x43, 0xca, 0x08,
+ 0xec, 0x97, 0xcd, 0xe3, 0x6b, 0xcb, 0xb2, 0x66, 0x8a, 0x9c, 0x3d, 0x93,
+ 0xa0, 0x72, 0xcb, 0x2b, 0x72, 0xf3, 0x34, 0x1f, 0xd0, 0xc1, 0x6f, 0x2b,
+ 0xad, 0x63, 0xc9, 0x33, 0x72, 0x54, 0xff, 0xd3, 0xd2, 0x0c, 0x73, 0xab,
+ 0xd6, 0x63, 0x68, 0x45, 0x5f, 0x62, 0x61, 0x6e, 0x2e, 0x88, 0x6c, 0xa6,
+ 0x55, 0x9f, 0x8b, 0x33, 0xcd, 0xb4, 0x58, 0x44, 0x7e, 0x89, 0x1c, 0x10,
+ 0x12, 0x3f, 0xe3, 0x2c, 0x94, 0x9e, 0xd6, 0x2a, 0x4e, 0x99, 0x5b, 0xd0,
+ 0x8a, 0x5f, 0x4a, 0xb2, 0xb8, 0xac, 0x1b, 0x37, 0x58, 0x5a, 0x3d, 0x4e,
+ 0xec, 0x57, 0x9f, 0x94, 0x7b, 0xd5, 0x6c, 0x4e, 0xe3, 0x6f, 0x61, 0x2c,
+ 0x33, 0xa7, 0x47, 0x85, 0xd3, 0xb2, 0xcf, 0x92, 0xe8, 0x53, 0x51, 0x55,
+ 0xb3, 0x89, 0xa2, 0x2a, 0x77, 0x06, 0xff, 0x1c, 0x32, 0x79, 0x8c, 0x5c,
+ 0x54, 0xde, 0x0c, 0xad, 0x28, 0xed, 0x9a, 0xcd, 0xa2, 0x7e, 0x01, 0xca,
+ 0x12, 0xfb, 0x89, 0xa9, 0xaa, 0xdc, 0x99, 0x7a, 0x6a, 0x59, 0x7a, 0x55,
+ 0x6e, 0x2e, 0x83, 0x79, 0xb1, 0xa8, 0xd8, 0xb3, 0xb4, 0x79, 0x45, 0xd7,
+ 0x77, 0x96, 0x04, 0x46, 0xb8, 0x2a, 0x77, 0xba, 0x96, 0xac, 0xf7, 0x2c,
+ 0x78, 0x0e, 0xb3, 0xb5, 0x39, 0x44, 0xbf, 0x88, 0x9d, 0xb8, 0x75, 0x30,
+ 0x8b, 0x28, 0x5d, 0x82, 0x36, 0xca, 0x8f, 0xd3, 0x46, 0x1a, 0xe1, 0xbd,
+ 0x37, 0x54, 0x41, 0x1c, 0x96, 0xbe, 0xb4, 0x56, 0xdc, 0x5c, 0x35, 0x8d,
+ 0xa6, 0xc9, 0x36, 0xe6, 0xab, 0xb7, 0xda, 0x5c, 0xfb, 0xda, 0x80, 0x35,
+ 0x33, 0x2d, 0x5c, 0x1f, 0xf3, 0xa5, 0x81, 0x01, 0x83, 0x27, 0xfe, 0x60,
+ 0x98, 0xa5, 0x53, 0xf1, 0x04, 0x1f, 0x17, 0xd7, 0x67, 0x52, 0xb5, 0xd0,
+ 0x46, 0x6a, 0x3f, 0x7d, 0x66, 0x5c, 0x6e, 0x70, 0x02, 0x25, 0x8e, 0x02,
+ 0xee, 0x18, 0x03, 0xa2, 0x26, 0x87, 0x97, 0x70, 0x7a, 0x6e, 0x0c, 0x2b,
+ 0x7a, 0x89, 0xf1, 0x1a, 0x51, 0x22, 0x15, 0x7e, 0x6c, 0x1c, 0xd5, 0x99,
+ 0x3e, 0x2b, 0x2e, 0x25, 0x5b, 0x23, 0xc7, 0x23, 0x9f, 0x1e, 0x43, 0xce,
+ 0xc7, 0x76, 0x1f, 0x24, 0x6b, 0x4d, 0x41, 0x2c, 0xf9, 0x8c, 0x58, 0xc9,
+ 0x92, 0xeb, 0x1d, 0x8f, 0x69, 0x76, 0xe2, 0x3c, 0x34, 0x8e, 0x7a, 0xbc,
+ 0x21, 0x23, 0x1b, 0xaa, 0xde, 0xbe, 0xba, 0x1e, 0x8f, 0x5f, 0x36, 0x89,
+ 0xbd, 0xae, 0x14, 0xfa, 0xd2, 0x3c, 0x9a, 0xef, 0xb5, 0x57, 0x49, 0x2a,
+ 0x2a, 0x14, 0x60, 0xba, 0xa4, 0xa2, 0x3e, 0xfc, 0xe4, 0xf8, 0xb5, 0xb9,
+ 0x71, 0xd5, 0x54, 0x6f, 0x2c, 0xe5, 0xcf, 0xbf, 0x5b, 0x74, 0x5f, 0x0d,
+ 0x97, 0x54, 0x2f, 0x66, 0xbc, 0xe4, 0xf0, 0x65, 0x22, 0x5f, 0xe2, 0xe0,
+ 0x58, 0x99, 0xa1, 0x5b, 0x9e, 0xeb, 0x08, 0x62, 0xb8, 0x17, 0xc4, 0x8c,
+ 0xb7, 0x9a, 0xe9, 0x96, 0x8d, 0x65, 0x55, 0x35, 0xb3, 0x2c, 0x34, 0x23,
+ 0xe9, 0x06, 0xbc, 0xf6, 0x1b, 0xf4, 0x6c, 0x5d, 0xd8, 0x7b, 0xe1, 0x78,
+ 0x5d, 0x73, 0x13, 0x8b, 0x90, 0xbe, 0xd2, 0xd7, 0xbb, 0x34, 0xd1, 0xd2,
+ 0x33, 0x66, 0x9d, 0x45, 0x20, 0xfb, 0xca, 0xdf, 0x59, 0x9a, 0x0d, 0x84,
+ 0xc1, 0xff, 0xeb, 0x63, 0x14, 0x75, 0x51, 0xcd, 0xc2, 0x85, 0x95, 0x35,
+ 0x96, 0x78, 0x1f, 0x04, 0xec, 0x5b, 0xe9, 0xa6, 0xe7, 0xc7, 0x08, 0xd3,
+ 0x7c, 0x47, 0xb0, 0x8f, 0x32, 0x0a, 0xf4, 0x32, 0x7c, 0xa5, 0xba, 0xe9,
+ 0xa8, 0x8f, 0xcd, 0x94, 0x17, 0x23, 0x24, 0xf6, 0x6b, 0x89, 0x7d, 0x14,
+ 0x35, 0x23, 0x46, 0x94, 0x6c, 0xe8, 0xcf, 0x2a, 0x48, 0xc8, 0xd2, 0xab,
+ 0x03, 0x93, 0x95, 0xe8, 0xd3, 0x8a, 0x67, 0xd3, 0xfc, 0xe9, 0xfa, 0xcd,
+ 0x61, 0xa9, 0xf1, 0x63, 0x77, 0x20, 0xf4, 0x43, 0x61, 0x61, 0x6e, 0x1e,
+ 0xb7, 0xe2, 0x6c, 0xc8, 0x3a, 0xd9, 0xa6, 0x6b, 0x3c, 0x53, 0x17, 0xb3,
+ 0x01, 0x24, 0x89, 0xb1, 0xb5, 0xc4, 0xe3, 0x8b, 0xb3, 0xd1, 0x10, 0xcf,
+ 0xce, 0xc8, 0x86, 0x4e, 0x6c, 0x56, 0x80, 0x58, 0x4e, 0x20, 0xdb, 0x50,
+ 0xed, 0x46, 0x8e, 0x20, 0x9a, 0x21, 0x4f, 0x28, 0xf2, 0x46, 0x8e, 0x2a,
+ 0x4d, 0x36, 0x6b, 0x9a, 0x0d, 0x9c, 0x84, 0x34, 0x9a, 0x7d, 0x22, 0x95,
+ 0x46, 0x53, 0x6c, 0xdd, 0x46, 0x62, 0xac, 0x35, 0xd2, 0x8a, 0x93, 0x37,
+ 0x41, 0xaa, 0xf2, 0xa3, 0x1b, 0x50, 0xf1, 0xe6, 0x8b, 0xf8, 0x5b, 0x5f,
+ 0x38, 0x5d, 0xf3, 0x71, 0x9b, 0x3b, 0xdb, 0xef, 0xb5, 0xba, 0xd1, 0xbb,
+ 0x68, 0x20, 0x63, 0xe7, 0x93, 0xac, 0x5d, 0x5e, 0x13, 0xd8, 0x77, 0xb1,
+ 0x3f, 0xe9, 0xb1, 0xf8, 0xc9, 0xb9, 0x8d, 0xb2, 0x89, 0x02, 0xf4, 0x89,
+ 0x71, 0x7a, 0x8e, 0x8e, 0x11, 0xf7, 0x82, 0x40, 0x67, 0xfb, 0x94, 0xe5,
+ 0xcc, 0xe8, 0x5a, 0x1d, 0x14, 0xae, 0xb5, 0x0f, 0x66, 0x13, 0x5c, 0x1e,
+ 0x52, 0xbc, 0x4a, 0xeb, 0x86, 0x06, 0x47, 0x0d, 0xce, 0x26, 0x55, 0xb9,
+ 0xf9, 0x4c, 0x3a, 0x9b, 0x5a, 0x28, 0x0f, 0xe1, 0x54, 0x4c, 0xc7, 0xd6,
+ 0xaa, 0xe1, 0x73, 0x0e, 0xd8, 0xc4, 0x26, 0x97, 0x83, 0x3d, 0x90, 0x81,
+ 0xd6, 0x6a, 0xa0, 0x69, 0xc1, 0xee, 0x68, 0x89, 0x97, 0x3e, 0xcb, 0x67,
+ 0xb3, 0xba, 0x89, 0x63, 0x81, 0xd3, 0xe1, 0xb2, 0x57, 0x03, 0x0e, 0x07,
+ 0x6c, 0xae, 0xa5, 0xda, 0x79, 0x2e, 0xeb, 0xa4, 0x2a, 0x97, 0xd5, 0xcf,
+ 0x3e, 0x48, 0x9e, 0x5d, 0x69, 0xb5, 0x2d, 0xae, 0xa9, 0xcf, 0x6a, 0xa5,
+ 0x04, 0x0d, 0x4d, 0x4d, 0xe9, 0x42, 0x81, 0xce, 0xcd, 0xc9, 0xca, 0x9d,
+ 0x91, 0x55, 0x8e, 0x4b, 0x0b, 0x58, 0x59, 0x66, 0xf9, 0xec, 0x6b, 0xd8,
+ 0x2a, 0xca, 0xe9, 0xb6, 0xb9, 0x02, 0x76, 0x47, 0xb6, 0xcd, 0xbf, 0xa1,
+ 0xd5, 0x91, 0xd5, 0x2c, 0xd6, 0x45, 0xa4, 0x17, 0x01, 0x77, 0xb4, 0x21,
+ 0xed, 0x6c, 0xdb, 0x1e, 0x0b, 0x46, 0x8b, 0x96, 0xe9, 0xb6, 0xb6, 0xb6,
+ 0x12, 0xb1, 0x8d, 0x1a, 0x6f, 0xb4, 0xe5, 0x34, 0x3a, 0xdb, 0xf8, 0x43,
+ 0x03, 0x50, 0x26, 0xdc, 0x4c, 0xc6, 0x67, 0x3d, 0x31, 0x84, 0x6e, 0x8f,
+ 0x9b, 0x2f, 0x7c, 0x58, 0x03, 0x3b, 0x7c, 0x34, 0xc6, 0xa4, 0xb5, 0x6c,
+ 0xf5, 0x62, 0x58, 0xb4, 0xea, 0x3f, 0x83, 0x8a, 0xc3, 0x55, 0xb3, 0xa6,
+ 0x8d, 0x4b, 0x31, 0x63, 0x3a, 0xa3, 0x18, 0x4f, 0x34, 0x20, 0xcf, 0xbc,
+ 0xb8, 0xb4, 0x46, 0x4f, 0x16, 0xb3, 0x6a, 0x8e, 0xc9, 0x66, 0xa6, 0x6e,
+ 0xe9, 0x2c, 0xa3, 0x73, 0xa7, 0x8b, 0xae, 0xae, 0x60, 0x1b, 0x88, 0x6c,
+ 0xc4, 0xc2, 0x8a, 0x4b, 0xbf, 0xda, 0x8b, 0x0e, 0xd2, 0x73, 0x5f, 0x78,
+ 0x96, 0xf1, 0xb5, 0x1f, 0x6f, 0x9b, 0xab, 0xaf, 0xfd, 0xff, 0x28, 0xa0,
+ 0x6f, 0xfe, 0x7d, 0x4c, 0x9e, 0xe7, 0xcc, 0x04, 0xa5, 0x8c, 0xe3, 0x6c,
+ 0xf9, 0xad, 0xde, 0xe8, 0x16, 0x31, 0x9b, 0x7c, 0x3d, 0x5e, 0x67, 0x13,
+ 0xee, 0x76, 0xc4, 0xf5, 0x78, 0xf8, 0x24, 0x96, 0x93, 0x90, 0x46, 0x72,
+ 0x69, 0x68, 0x2a, 0xee, 0x9d, 0x9c, 0x39, 0x2c, 0x3c, 0xf3, 0xbc, 0x78,
+ 0xcb, 0x2a, 0x8d, 0x39, 0x9d, 0x8e, 0x9f, 0x06, 0xd5, 0x3e, 0xfe, 0xd2,
+ 0x7a, 0x7e, 0x33, 0xc5, 0x73, 0x42, 0x4d, 0xe2, 0x8c, 0x59, 0x9a, 0xbc,
+ 0x13, 0xfa, 0x36, 0xa4, 0xbd, 0x32, 0xa9, 0xc6, 0x73, 0xa1, 0xf9, 0x55,
+ 0x47, 0x21, 0xf9, 0x25, 0xb4, 0x1d, 0x21, 0x93, 0xc4, 0x7a, 0x1d, 0x34,
+ 0x12, 0x64, 0x42, 0xd9, 0xa7, 0x88, 0x6d, 0xea, 0x5e, 0xdd, 0x05, 0xae,
+ 0x4a, 0x7d, 0xf5, 0xc3, 0x63, 0xd4, 0xe9, 0xbf, 0xc5, 0x08, 0x76, 0x41,
+ 0x2d, 0x5e, 0x7c, 0x6f, 0x21, 0x0e, 0x55, 0xdc, 0x87, 0x10, 0xac, 0x73,
+ 0xf5, 0xb2, 0xf4, 0x6a, 0x39, 0x2b, 0x06, 0xa9, 0x79, 0xa2, 0xc3, 0x94,
+ 0x3b, 0x86, 0x40, 0x7a, 0x9a, 0xc3, 0xf4, 0x4b, 0x4f, 0xa4, 0x7b, 0x82,
+ 0x13, 0x07, 0xaf, 0x7b, 0x48, 0xa4, 0x2f, 0xa2, 0xf4, 0x04, 0x51, 0xcf,
+ 0x1c, 0xfb, 0xbc, 0x43, 0xaf, 0x8a, 0xbd, 0xcc, 0xef, 0x8c, 0xb4, 0xa0,
+ 0x54, 0x4c, 0x56, 0xf4, 0x10, 0xe0, 0xfc, 0x7e, 0xfb, 0xf9, 0xfd, 0xf6,
+ 0xff, 0x77, 0xf6, 0xdb, 0xcf, 0x6f, 0x11, 0x9f, 0xdf, 0x22, 0x3e, 0xbf,
+ 0x45, 0x7c, 0x7e, 0x8b, 0xf8, 0xfc, 0x16, 0xf1, 0xf9, 0x2d, 0xe2, 0xf3,
+ 0x5b, 0xc4, 0xe7, 0xb7, 0x88, 0xcf, 0x6f, 0x11, 0x9f, 0xdf, 0x22, 0x3e,
+ 0xbf, 0x45, 0x7c, 0x7e, 0x8b, 0xf8, 0xff, 0xca, 0x2d, 0xe2, 0xff, 0xff,
+ 0x77, 0x68, 0xb1, 0x5f, 0xd9, 0x9a, 0x48, 0x1c, 0xde, 0x75, 0x8b, 0x2d,
+ 0x86, 0xdc, 0x5c, 0xaa, 0x73, 0x34, 0x45, 0x4f, 0x89, 0xbb, 0xca, 0xff,
+ 0xfd, 0xf3, 0x4c, 0xff, 0x17, 0xee, 0x0d, 0xf7, 0xf1, 0x44, 0xd5, 0xff,
+ 0xf6, 0x3d, 0xe5, 0xb8, 0x27, 0xb4, 0xce, 0x6f, 0x35, 0x9f, 0xdf, 0x6a,
+ 0x3e, 0xbf, 0xd5, 0x7c, 0x7e, 0xab, 0xf9, 0x7f, 0xe8, 0x56, 0x33, 0xfe,
+ 0xfd, 0x2f, 0x50, 0x4b, 0x07, 0x08, 0x5d, 0x9c, 0xb1, 0x3d, 0xe6, 0x52,
+ 0x00, 0x00, 0xc0, 0x0a, 0x01, 0x00, 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x09, 0x89, 0x53, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x20, 0x00,
+ 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x73, 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x41, 0xc8,
+ 0xb1, 0x61, 0x43, 0xc8, 0xb1, 0x61, 0x41, 0xc8, 0xb1, 0x61, 0x75, 0x78,
+ 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00,
+ 0x00, 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
+ 0x05, 0x89, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69,
+ 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x73, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f,
+ 0x65, 0x6e, 0x2e, 0x6c, 0x70, 0x72, 0x6f, 0x6a, 0x2f, 0x55, 0x54, 0x0d,
+ 0x00, 0x07, 0xd3, 0xc1, 0xb1, 0x61, 0xda, 0xc1, 0xb1, 0x61, 0xd3, 0xc1,
+ 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00,
+ 0x04, 0xe8, 0x03, 0x00, 0x00, 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x08,
+ 0x00, 0x08, 0x00, 0xc1, 0x4a, 0x61, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x20, 0x00, 0x74,
+ 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x73, 0x2f, 0x65, 0x6e, 0x2e, 0x6c, 0x70, 0x72, 0x6f, 0x6a,
+ 0x2f, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x2e, 0x72, 0x74, 0x66,
+ 0x55, 0x54, 0x0d, 0x00, 0x07, 0xab, 0xf4, 0xf9, 0x59, 0x42, 0xc2, 0xb1,
+ 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8,
+ 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x5d, 0x8e, 0xcb, 0x6e,
+ 0xc2, 0x30, 0x10, 0x45, 0xd7, 0xf5, 0x57, 0xf8, 0x13, 0x4c, 0x48, 0x52,
+ 0x28, 0x5b, 0x2a, 0xa5, 0x8b, 0xae, 0x5a, 0x89, 0xcd, 0x6c, 0x9c, 0x30,
+ 0x49, 0x2c, 0x1c, 0x4f, 0xb0, 0x27, 0x50, 0x84, 0xf8, 0xf7, 0x3a, 0xae,
+ 0xe8, 0x6b, 0x61, 0x9f, 0xab, 0xd1, 0xb9, 0xa3, 0xb9, 0x82, 0xe7, 0x56,
+ 0x81, 0x76, 0xc1, 0x5c, 0xa1, 0x25, 0xc7, 0x5c, 0x5b, 0x88, 0x83, 0x36,
+ 0x9c, 0x4d, 0x08, 0xb2, 0x42, 0x7b, 0x42, 0x36, 0x8d, 0xde, 0xdc, 0xc4,
+ 0x15, 0x1a, 0xb2, 0xe4, 0xa3, 0xb0, 0x01, 0x8f, 0xfb, 0xac, 0x28, 0xa0,
+ 0xf3, 0x88, 0x6e, 0x0e, 0xb5, 0x9d, 0x30, 0x32, 0x5a, 0x30, 0xea, 0x11,
+ 0xfd, 0x79, 0xbd, 0xca, 0xd5, 0x57, 0xec, 0x63, 0x52, 0xf3, 0xd8, 0xef,
+ 0x81, 0x3f, 0x8a, 0x52, 0xc5, 0x7f, 0xb1, 0xc8, 0x12, 0xca, 0xd5, 0x8c,
+ 0x2c, 0xcb, 0x13, 0x56, 0x6a, 0xc6, 0x72, 0x99, 0x94, 0xe5, 0x3a, 0x29,
+ 0x79, 0x9e, 0x94, 0x42, 0x25, 0x25, 0xb6, 0x67, 0x94, 0x8b, 0xa4, 0x94,
+ 0x8f, 0x51, 0x39, 0x5a, 0x38, 0x3a, 0xcd, 0x93, 0xd7, 0x56, 0x88, 0xf9,
+ 0xf2, 0x3a, 0xde, 0x9e, 0xe5, 0x12, 0x9a, 0x56, 0xc9, 0x67, 0xd7, 0x19,
+ 0x87, 0xe8, 0x8d, 0xeb, 0x9e, 0x04, 0xd4, 0x4a, 0x82, 0x78, 0x78, 0xa3,
+ 0x01, 0xe5, 0x88, 0x34, 0x5a, 0x04, 0x01, 0xb1, 0x53, 0xcb, 0x6a, 0x1a,
+ 0xb4, 0x93, 0x2f, 0x8e, 0xd1, 0xb7, 0xba, 0x41, 0xb9, 0xc5, 0x60, 0x3a,
+ 0xf7, 0xb7, 0x41, 0xdc, 0xa3, 0xff, 0xd7, 0x7b, 0xc7, 0xc0, 0xbf, 0x57,
+ 0x57, 0x34, 0x62, 0x3b, 0x59, 0x7b, 0x91, 0x8e, 0x38, 0xbe, 0x9a, 0xf6,
+ 0x97, 0xbb, 0xbb, 0xa5, 0x66, 0x1a, 0xd0, 0xb1, 0x66, 0x43, 0x3f, 0xab,
+ 0x77, 0x3d, 0xe1, 0x09, 0xfd, 0x5d, 0xda, 0x19, 0xee, 0x65, 0x18, 0xb1,
+ 0x31, 0xda, 0x4a, 0xee, 0xb5, 0x3b, 0x04, 0xc9, 0xf4, 0x6d, 0xbf, 0xd2,
+ 0x00, 0xe2, 0x26, 0x3e, 0x01, 0x50, 0x4b, 0x07, 0x08, 0x5f, 0x52, 0xc2,
+ 0x53, 0x11, 0x01, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x50, 0x4b, 0x03,
+ 0x04, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0xc1, 0x4a, 0x61, 0x4b, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x43,
+ 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d,
+ 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x52, 0x65,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x65, 0x6e, 0x2e, 0x6c,
+ 0x70, 0x72, 0x6f, 0x6a, 0x2f, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x6c, 0x69,
+ 0x73, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x54,
+ 0x0d, 0x00, 0x07, 0xab, 0xf4, 0xf9, 0x59, 0x42, 0xc2, 0xb1, 0x61, 0xd3,
+ 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00,
+ 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x1d, 0x8a, 0x51, 0x0a, 0x80, 0x20,
+ 0x10, 0x05, 0xe7, 0xdb, 0x53, 0xf8, 0xed, 0x87, 0x9e, 0x23, 0xe8, 0x12,
+ 0x91, 0x09, 0x91, 0x64, 0x64, 0x04, 0x76, 0xf8, 0xea, 0x21, 0x0b, 0x3b,
+ 0xbb, 0xc3, 0x7c, 0x6f, 0xc0, 0x61, 0x19, 0x29, 0xcc, 0x4c, 0x64, 0x56,
+ 0x1e, 0x16, 0xa2, 0xdc, 0x2d, 0x9e, 0x54, 0x99, 0xc2, 0x2e, 0x5a, 0x31,
+ 0x69, 0x0f, 0xfa, 0x92, 0x6e, 0xcf, 0xd1, 0xfb, 0xca, 0x25, 0xbb, 0xa9,
+ 0x6e, 0xbd, 0x72, 0x04, 0x8c, 0xe6, 0x07, 0x50, 0x4b, 0x07, 0x08, 0xf9,
+ 0x0d, 0xcc, 0x63, 0x49, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x50,
+ 0x4b, 0x03, 0x04, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0xc1, 0x4a, 0x61,
+ 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x64, 0x00,
+ 0x00, 0x3e, 0x00, 0x20, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
+ 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61,
+ 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f,
+ 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x65, 0x6e,
+ 0x2e, 0x6c, 0x70, 0x72, 0x6f, 0x6a, 0x2f, 0x4d, 0x61, 0x69, 0x6e, 0x4d,
+ 0x65, 0x6e, 0x75, 0x2e, 0x6e, 0x69, 0x62, 0x55, 0x54, 0x0d, 0x00, 0x07,
+ 0xab, 0xf4, 0xf9, 0x59, 0xd7, 0xc2, 0xb1, 0x61, 0xd3, 0xc1, 0xb1, 0x61,
+ 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8,
+ 0x03, 0x00, 0x00, 0xed, 0xbc, 0x77, 0x7c, 0x14, 0x55, 0xd4, 0x3f, 0x3c,
+ 0xf7, 0x6c, 0xcd, 0x4c, 0xda, 0xa4, 0xf7, 0x6c, 0x7a, 0x65, 0xd3, 0x7b,
+ 0xc2, 0x2e, 0xd9, 0x25, 0xdb, 0x42, 0x20, 0x24, 0xf4, 0xe6, 0x92, 0x2c,
+ 0x21, 0x10, 0x92, 0x90, 0x02, 0x84, 0xa2, 0x73, 0x51, 0x7a, 0x11, 0x29,
+ 0x4a, 0x91, 0x0e, 0xd2, 0xa4, 0x09, 0x52, 0x04, 0x05, 0x51, 0x7a, 0x95,
+ 0x22, 0x45, 0xa4, 0x09, 0xd8, 0x40, 0x40, 0x44, 0x44, 0x11, 0x7e, 0x77,
+ 0x66, 0x93, 0x25, 0x51, 0x8c, 0x3e, 0xcf, 0x1f, 0xef, 0xfb, 0x79, 0xdf,
+ 0xcf, 0xcf, 0x89, 0xd9, 0x99, 0xd9, 0x99, 0xef, 0xf7, 0xdc, 0x73, 0xcf,
+ 0x3d, 0x6d, 0x86, 0xf4, 0xaf, 0xae, 0x28, 0xaf, 0xad, 0x8b, 0x8f, 0x3f,
+ 0x4b, 0x21, 0x0a, 0x28, 0x11, 0x25, 0xa6, 0x24, 0x94, 0x94, 0xf9, 0x86,
+ 0xb9, 0xd9, 0x3d, 0x74, 0x98, 0xa5, 0xa6, 0xb6, 0xbc, 0xaa, 0xb2, 0x7b,
+ 0x68, 0x55, 0xff, 0x41, 0x96, 0x92, 0xba, 0xda, 0x1e, 0xa1, 0xe6, 0x9a,
+ 0x92, 0x81, 0xe5, 0xe4, 0x74, 0x71, 0x68, 0x5d, 0x55, 0xb5, 0x0b, 0x85,
+ 0xc6, 0x2f, 0xd9, 0xc8, 0xc2, 0x37, 0x94, 0x8c, 0x92, 0x53, 0x81, 0x54,
+ 0x08, 0x15, 0x4a, 0x45, 0x53, 0x4a, 0x2a, 0x91, 0x9a, 0x44, 0xbd, 0x45,
+ 0xcd, 0xa6, 0xe6, 0x50, 0x6f, 0x53, 0xf3, 0xa9, 0x45, 0xd4, 0x06, 0xea,
+ 0x43, 0x6a, 0x1b, 0xb5, 0x9d, 0xfa, 0x98, 0xfa, 0x84, 0xda, 0x43, 0xed,
+ 0xa3, 0x0e, 0x50, 0x07, 0xa9, 0x23, 0xd4, 0x51, 0xea, 0x24, 0x75, 0x86,
+ 0xba, 0x44, 0x7d, 0x45, 0x5d, 0xa6, 0xbe, 0xa6, 0x6e, 0x50, 0xdf, 0x53,
+ 0x3f, 0x51, 0xf7, 0xa8, 0xfb, 0xd4, 0x2f, 0xd4, 0x1f, 0xd4, 0x73, 0x44,
+ 0x21, 0x84, 0x00, 0x49, 0x91, 0x03, 0x72, 0x44, 0x4e, 0xc8, 0x19, 0xb9,
+ 0x21, 0x5f, 0xe4, 0x87, 0xfc, 0x51, 0x00, 0x0a, 0x46, 0xb1, 0xa8, 0x0d,
+ 0x52, 0xa2, 0x38, 0x94, 0x84, 0x32, 0x51, 0x16, 0xca, 0x46, 0x39, 0xa8,
+ 0x1d, 0xd2, 0x23, 0x03, 0x32, 0x22, 0x13, 0xea, 0x88, 0xba, 0xa2, 0x6e,
+ 0xa8, 0x3b, 0xea, 0x8d, 0x4a, 0xd0, 0x40, 0x54, 0x8e, 0x06, 0xa1, 0x4a,
+ 0x54, 0x8f, 0x86, 0xa1, 0xe1, 0x68, 0x04, 0x1a, 0x83, 0xde, 0x40, 0xe3,
+ 0xd0, 0x78, 0x34, 0x09, 0x4d, 0x46, 0x53, 0xd0, 0x9b, 0xe8, 0x1d, 0x34,
+ 0x17, 0xcd, 0x43, 0x0b, 0xd1, 0x0a, 0xb4, 0x12, 0xbd, 0x87, 0xd6, 0xa2,
+ 0xcd, 0xe8, 0x43, 0xb4, 0x0d, 0x6d, 0x47, 0xbb, 0xd0, 0x3e, 0xf4, 0x19,
+ 0xfa, 0x1c, 0x1d, 0x42, 0x27, 0xd1, 0x19, 0x74, 0x16, 0x9d, 0x43, 0x5f,
+ 0xa2, 0x4b, 0xe8, 0x3a, 0xba, 0x81, 0xbe, 0x41, 0x37, 0xd1, 0x77, 0xe8,
+ 0x1e, 0xba, 0x8f, 0x1e, 0xa0, 0x9f, 0xd1, 0xaf, 0xe8, 0x4f, 0x40, 0x00,
+ 0x20, 0x02, 0x31, 0xc8, 0xc1, 0x09, 0x9c, 0x81, 0x05, 0x77, 0xf0, 0x03,
+ 0x7f, 0x08, 0x80, 0x40, 0x08, 0x81, 0x68, 0x88, 0x81, 0x58, 0x68, 0x03,
+ 0x09, 0x90, 0x0e, 0x19, 0x90, 0x09, 0x59, 0xa0, 0x02, 0x3d, 0xe4, 0x43,
+ 0x07, 0x28, 0x80, 0x8e, 0x50, 0x04, 0xbd, 0xa0, 0x37, 0xf4, 0x01, 0x33,
+ 0x0c, 0x84, 0x72, 0x18, 0x04, 0x83, 0xa1, 0x0a, 0x86, 0xc3, 0x08, 0x68,
+ 0x80, 0x31, 0xf0, 0x06, 0x8c, 0x83, 0xf1, 0x30, 0x01, 0xa6, 0xc0, 0x4c,
+ 0x98, 0x05, 0xb3, 0x61, 0x2e, 0x2c, 0x81, 0xa5, 0xb0, 0x0c, 0xde, 0x83,
+ 0xf5, 0xb0, 0x01, 0x36, 0xc2, 0x16, 0xf8, 0x08, 0x3e, 0x81, 0x3d, 0xb0,
+ 0x17, 0x3e, 0x85, 0xfd, 0x70, 0x0c, 0x8e, 0xc3, 0x09, 0x38, 0x0d, 0x17,
+ 0xe1, 0x12, 0x7c, 0x05, 0x57, 0xe1, 0x36, 0xfc, 0x00, 0x3f, 0xc2, 0x1d,
+ 0xb8, 0x0f, 0x8f, 0xe1, 0x37, 0x78, 0x02, 0x7f, 0x8a, 0xc4, 0x22, 0x89,
+ 0x48, 0x2a, 0x62, 0x44, 0x2e, 0x22, 0x4f, 0x91, 0x97, 0xc8, 0x57, 0xe4,
+ 0x27, 0xf2, 0x17, 0x05, 0x8b, 0xa2, 0x44, 0xd1, 0xa2, 0x18, 0x51, 0xac,
+ 0x28, 0x41, 0x94, 0x2e, 0xca, 0x10, 0x65, 0x8a, 0xda, 0x8a, 0xda, 0x8b,
+ 0xf2, 0x44, 0x3a, 0x91, 0x5e, 0xd4, 0x41, 0x54, 0x2c, 0xea, 0x22, 0xea,
+ 0x2a, 0xea, 0x26, 0xea, 0x2d, 0x2a, 0x15, 0x59, 0x44, 0x03, 0x44, 0x83,
+ 0x44, 0x43, 0x45, 0x35, 0xa2, 0x5a, 0x51, 0x9d, 0x68, 0x84, 0xe8, 0x35,
+ 0x11, 0x27, 0xc2, 0xa2, 0x71, 0xa2, 0xa9, 0xa2, 0x69, 0xa2, 0xe9, 0xa2,
+ 0x99, 0xa2, 0x79, 0xa2, 0x85, 0xa2, 0x45, 0xa2, 0xc5, 0xa2, 0xe5, 0xa2,
+ 0xb5, 0xa2, 0x75, 0xa2, 0xf7, 0x45, 0x9b, 0x44, 0xdb, 0x45, 0x3b, 0x44,
+ 0x3b, 0x45, 0x1f, 0x8b, 0x3e, 0x17, 0xed, 0x17, 0x1d, 0x10, 0x1d, 0x11,
+ 0x7d, 0x21, 0x3a, 0x2d, 0x3a, 0x23, 0x3a, 0x2f, 0xba, 0x22, 0xba, 0x21,
+ 0xfa, 0x46, 0xf4, 0xad, 0xe8, 0x27, 0xd1, 0x3d, 0xd1, 0x7d, 0xd1, 0x2f,
+ 0xa2, 0x3f, 0x44, 0x4f, 0x45, 0x7f, 0x8a, 0x91, 0x58, 0x2e, 0xb6, 0x17,
+ 0x3b, 0x88, 0x59, 0xb1, 0x97, 0xd8, 0x5b, 0xec, 0x2f, 0x0e, 0x15, 0x87,
+ 0x89, 0xc3, 0xc5, 0xd1, 0xe2, 0x04, 0x71, 0xa2, 0x38, 0x49, 0x9c, 0x26,
+ 0x6e, 0x2b, 0xce, 0x15, 0x6b, 0xc4, 0x5a, 0xb1, 0x5e, 0xdc, 0x51, 0xdc,
+ 0x49, 0x5c, 0x28, 0xee, 0x22, 0xee, 0x2d, 0xee, 0x23, 0xee, 0x2b, 0xee,
+ 0x2f, 0x2e, 0x17, 0x0f, 0x12, 0x0f, 0x16, 0x57, 0x89, 0x87, 0x89, 0x87,
+ 0x8b, 0x47, 0x88, 0x47, 0x8b, 0x5f, 0x17, 0xbf, 0x21, 0x1e, 0x27, 0x9e,
+ 0x24, 0x9e, 0x21, 0x7e, 0x4b, 0x3c, 0x53, 0xfc, 0xb6, 0x78, 0xa1, 0x78,
+ 0x91, 0x78, 0xb1, 0x78, 0x89, 0x78, 0x85, 0x78, 0x9d, 0x78, 0x93, 0x78,
+ 0xb3, 0xf8, 0x03, 0xf1, 0x16, 0xf1, 0x76, 0xf1, 0x27, 0xe2, 0x7d, 0xe2,
+ 0xcf, 0xc4, 0x9f, 0x8b, 0xf7, 0x8b, 0x0f, 0x8b, 0x4f, 0x89, 0xbf, 0x10,
+ 0x9f, 0x16, 0x9f, 0x11, 0x9f, 0x17, 0x5f, 0x11, 0x5f, 0x15, 0x5f, 0x13,
+ 0xdf, 0x14, 0xff, 0x28, 0xbe, 0x23, 0xbe, 0x2b, 0xfe, 0x49, 0xfc, 0xb3,
+ 0xf8, 0x89, 0xf8, 0x77, 0xf1, 0x1f, 0xe2, 0xe7, 0x12, 0x99, 0x44, 0x2e,
+ 0xb1, 0x93, 0x38, 0x48, 0xdc, 0x24, 0xee, 0x12, 0x0f, 0x89, 0x8f, 0x24,
+ 0x48, 0x12, 0x26, 0x09, 0x97, 0x44, 0x48, 0x62, 0x24, 0x89, 0x92, 0x24,
+ 0x49, 0xb2, 0x24, 0x5d, 0xa2, 0x92, 0xa8, 0x25, 0xed, 0x24, 0xed, 0x25,
+ 0xf9, 0x92, 0x0e, 0x92, 0x42, 0x49, 0x77, 0x49, 0x0f, 0x49, 0x1f, 0x49,
+ 0xa9, 0xc4, 0x22, 0x29, 0x97, 0x0c, 0x95, 0xd4, 0x48, 0x86, 0x49, 0x1d,
+ 0xa4, 0x2e, 0x52, 0x57, 0xa9, 0xbf, 0x34, 0x5a, 0x1a, 0x23, 0x8d, 0x95,
+ 0x66, 0x4a, 0xdb, 0x4b, 0xf3, 0xa5, 0x1d, 0xa4, 0x05, 0xd2, 0x6e, 0x52,
+ 0xb3, 0xb4, 0xbf, 0xb4, 0x4c, 0x3a, 0x48, 0x3a, 0x58, 0x5a, 0x29, 0x1d,
+ 0x2e, 0xe5, 0xa4, 0x58, 0x3a, 0x45, 0x3a, 0x55, 0x3a, 0x4f, 0xba, 0x5c,
+ 0xba, 0x42, 0xba, 0x5a, 0xba, 0x46, 0xfa, 0x81, 0x74, 0x97, 0x74, 0xbf,
+ 0xf4, 0x80, 0xf4, 0x82, 0xf4, 0xba, 0xf4, 0x07, 0xe9, 0x2f, 0xd2, 0x47,
+ 0xd2, 0x67, 0x32, 0xb9, 0xcc, 0x4e, 0xe6, 0x22, 0xf3, 0x95, 0x85, 0xc9,
+ 0xc2, 0x65, 0xf1, 0xb2, 0x0c, 0x99, 0x46, 0xa6, 0x95, 0x19, 0x65, 0xc5,
+ 0xb2, 0x2e, 0xb2, 0x9e, 0xb2, 0x52, 0x99, 0x45, 0x56, 0x2e, 0xab, 0x94,
+ 0x8d, 0x90, 0x35, 0xc8, 0xa6, 0xca, 0xe6, 0xc8, 0x16, 0xc9, 0x56, 0xcb,
+ 0xd6, 0xc8, 0x36, 0xc9, 0x3e, 0x92, 0xed, 0x92, 0x7d, 0x2a, 0x3b, 0x2a,
+ 0x3b, 0x26, 0x3b, 0x2b, 0xfb, 0x5a, 0x76, 0x5b, 0xf6, 0xad, 0xec, 0x81,
+ 0xec, 0x67, 0xd9, 0x73, 0xb9, 0x5c, 0xee, 0x22, 0x77, 0x95, 0x07, 0xca,
+ 0x23, 0xe4, 0x91, 0xf2, 0x04, 0x79, 0x86, 0x3c, 0x53, 0xae, 0x91, 0x77,
+ 0x90, 0x17, 0xc8, 0x8b, 0xe4, 0x7d, 0xe4, 0x7d, 0xe5, 0x16, 0x79, 0xa5,
+ 0xbc, 0x4a, 0xde, 0x20, 0x1f, 0x29, 0x7f, 0x55, 0xfe, 0x9a, 0x9c, 0x93,
+ 0x8f, 0xb5, 0xf3, 0xa6, 0x25, 0xf4, 0x03, 0xfa, 0x67, 0xfa, 0x21, 0xfd,
+ 0x0b, 0xfd, 0x88, 0xfe, 0x95, 0x7e, 0x4c, 0xff, 0x46, 0x3f, 0xa1, 0x7f,
+ 0xa7, 0xff, 0xa0, 0x9f, 0xd2, 0x7f, 0xd2, 0xcf, 0xe8, 0xe7, 0x0c, 0xc5,
+ 0x20, 0x06, 0x18, 0x11, 0x23, 0x66, 0x24, 0x8c, 0x94, 0x91, 0x31, 0x72,
+ 0xc6, 0x8e, 0xa1, 0x19, 0x86, 0xb1, 0x67, 0x1c, 0x18, 0x47, 0xc6, 0x89,
+ 0x71, 0x66, 0x58, 0xc6, 0x85, 0x71, 0x65, 0xdc, 0x18, 0x77, 0xc6, 0x83,
+ 0xf1, 0x64, 0xbc, 0x18, 0x6f, 0xc6, 0x87, 0xf1, 0x65, 0xfc, 0x18, 0x7f,
+ 0x26, 0x80, 0x09, 0x64, 0x14, 0x4c, 0x10, 0x13, 0xcc, 0x84, 0x30, 0xa1,
+ 0x4c, 0x18, 0x13, 0xce, 0x44, 0x30, 0x91, 0x4c, 0x14, 0x13, 0xcd, 0xc4,
+ 0x30, 0xb1, 0x4c, 0x1b, 0x46, 0xc9, 0xc4, 0x31, 0xf1, 0x4c, 0x02, 0x93,
+ 0xc8, 0x24, 0x31, 0xc9, 0x4c, 0x0a, 0x93, 0xca, 0xa4, 0x31, 0xe9, 0x4c,
+ 0x06, 0x93, 0xc9, 0x64, 0x31, 0xd9, 0x4c, 0x0e, 0xd3, 0x96, 0x51, 0x31,
+ 0x6a, 0xa6, 0x1d, 0x93, 0xcb, 0x68, 0x18, 0x2d, 0xd3, 0x9e, 0xc9, 0x63,
+ 0x74, 0x8c, 0x9e, 0x31, 0x30, 0x46, 0xc6, 0xc4, 0xe4, 0x33, 0x1d, 0x98,
+ 0x02, 0xa6, 0x23, 0xd3, 0x89, 0x29, 0x64, 0x3a, 0x33, 0x45, 0x4c, 0x31,
+ 0xd3, 0x85, 0xe9, 0xca, 0x74, 0x63, 0xba, 0x33, 0x3d, 0x98, 0x9e, 0x4c,
+ 0x2f, 0xa6, 0x37, 0xd3, 0x87, 0xe9, 0xcb, 0xf4, 0x63, 0x5e, 0x61, 0xcc,
+ 0x4c, 0x7f, 0xa6, 0x84, 0x29, 0x65, 0x2c, 0xcc, 0x00, 0xa6, 0x8c, 0x19,
+ 0xc8, 0x94, 0x33, 0x83, 0x98, 0xc1, 0x4c, 0x05, 0x33, 0x84, 0xa9, 0x64,
+ 0xaa, 0x98, 0x6a, 0x66, 0x28, 0x53, 0xc3, 0xd4, 0x32, 0x75, 0x4c, 0x3d,
+ 0x33, 0x8c, 0x19, 0xce, 0x8c, 0x60, 0x1a, 0x98, 0x91, 0xcc, 0x28, 0x66,
+ 0x34, 0x33, 0x86, 0x79, 0x95, 0x79, 0x8d, 0xe1, 0x18, 0xcc, 0x8c, 0x65,
+ 0x5e, 0x67, 0xde, 0x60, 0xc6, 0x31, 0xe3, 0x99, 0x09, 0xcc, 0x44, 0x66,
+ 0x12, 0x33, 0x99, 0x99, 0xc2, 0x4c, 0x65, 0xa6, 0x31, 0xd3, 0x99, 0x37,
+ 0x99, 0x19, 0xcc, 0x5b, 0xcc, 0x4c, 0x66, 0x16, 0x33, 0x9b, 0x99, 0xc3,
+ 0xbc, 0xcd, 0xbc, 0xc3, 0xcc, 0x65, 0xe6, 0x31, 0xf3, 0x99, 0x05, 0xcc,
+ 0xbb, 0xcc, 0x42, 0x66, 0x11, 0xb3, 0x98, 0x59, 0xc2, 0x2c, 0x65, 0x96,
+ 0x31, 0xcb, 0x99, 0x15, 0xcc, 0x4a, 0xe6, 0x3d, 0x66, 0x15, 0xb3, 0x9a,
+ 0x59, 0xc3, 0xac, 0x65, 0xd6, 0x31, 0xef, 0x33, 0xeb, 0x99, 0x0d, 0xcc,
+ 0x46, 0x66, 0x13, 0xb3, 0x99, 0xf9, 0x80, 0xd9, 0xc2, 0x6c, 0x65, 0x3e,
+ 0x64, 0xb6, 0x31, 0xdb, 0x99, 0x1d, 0xcc, 0x4e, 0xe6, 0x23, 0x66, 0x17,
+ 0xb3, 0x9b, 0xf9, 0x98, 0xf9, 0x84, 0xd9, 0xc3, 0xec, 0x65, 0x3e, 0x65,
+ 0xf6, 0x31, 0x9f, 0x31, 0x9f, 0x33, 0xfb, 0x99, 0x03, 0xcc, 0x41, 0xe6,
+ 0x10, 0x73, 0x98, 0x39, 0xc2, 0x1c, 0x65, 0x8e, 0x31, 0xc7, 0x99, 0x13,
+ 0xcc, 0x49, 0xe6, 0x14, 0xf3, 0x05, 0x73, 0x9a, 0x39, 0xc3, 0x9c, 0x65,
+ 0xce, 0x31, 0x5f, 0x32, 0xe7, 0x99, 0x0b, 0xcc, 0x45, 0xe6, 0x12, 0xf3,
+ 0x35, 0x73, 0xad, 0x4b, 0x68, 0x65, 0x7d, 0x45, 0xc5, 0x57, 0x94, 0x1d,
+ 0x45, 0x53, 0x0c, 0x65, 0x4f, 0x39, 0x50, 0x8e, 0x94, 0x13, 0xe5, 0x4c,
+ 0xb1, 0x94, 0x0b, 0xe5, 0x4a, 0xb9, 0x51, 0xee, 0x94, 0x07, 0xe5, 0x49,
+ 0x79, 0x51, 0xde, 0x94, 0x0f, 0xf9, 0xdf, 0x8f, 0xf2, 0xa7, 0x02, 0xba,
+ 0x16, 0x14, 0x75, 0xae, 0xaa, 0xaa, 0xeb, 0x53, 0x50, 0xa4, 0xa9, 0xaa,
+ 0xac, 0x24, 0x21, 0x82, 0x44, 0x8b, 0xda, 0xde, 0x05, 0x45, 0x1d, 0xcb,
+ 0x4b, 0x6b, 0xbb, 0x9a, 0x2b, 0xea, 0x2d, 0xb5, 0xfd, 0x9c, 0x9d, 0xc8,
+ 0xa1, 0x35, 0x7c, 0x58, 0xcf, 0xf4, 0xb1, 0x1d, 0x9b, 0x2c, 0x0d, 0xe4,
+ 0x7b, 0xef, 0x82, 0xa2, 0x76, 0x25, 0x25, 0x96, 0xda, 0xda, 0xf2, 0xfe,
+ 0xe5, 0x15, 0xe5, 0x75, 0x0d, 0xcd, 0xef, 0x75, 0x2e, 0x28, 0xea, 0x5a,
+ 0x4e, 0xbe, 0xa8, 0xb0, 0x74, 0x2b, 0xaf, 0x2c, 0xad, 0x1a, 0x4e, 0x4e,
+ 0x79, 0xbe, 0xe4, 0xf2, 0x97, 0x03, 0x35, 0x8a, 0x54, 0x55, 0x53, 0xdb,
+ 0x35, 0xb4, 0xa4, 0xc2, 0x5c, 0x5b, 0xdb, 0xd3, 0x2a, 0x18, 0x7f, 0x35,
+ 0x07, 0x9c, 0x0c, 0xa3, 0x5f, 0x31, 0xfa, 0x05, 0xa3, 0x37, 0x31, 0x5c,
+ 0xe7, 0x24, 0xe4, 0x17, 0x86, 0x6b, 0x18, 0x6e, 0x60, 0xf4, 0xe8, 0x34,
+ 0xa5, 0x20, 0x63, 0x0e, 0xa2, 0x82, 0x7b, 0x91, 0x81, 0xf1, 0x77, 0x16,
+ 0x98, 0x87, 0x58, 0x38, 0x11, 0x27, 0x26, 0xb2, 0xb7, 0xab, 0x26, 0xf1,
+ 0xb2, 0xc4, 0xcc, 0x8f, 0xf4, 0x34, 0x15, 0x46, 0x85, 0x53, 0x11, 0x54,
+ 0x64, 0x4f, 0x2b, 0x7e, 0x25, 0xb9, 0xaa, 0xbb, 0x75, 0xd7, 0x52, 0xdb,
+ 0x97, 0xdc, 0x5a, 0x5f, 0x5b, 0x57, 0x35, 0xc4, 0x3a, 0xd8, 0x65, 0xe4,
+ 0xba, 0xa8, 0xee, 0x4d, 0x43, 0x3f, 0x4d, 0xc5, 0x10, 0x82, 0x58, 0xaa,
+ 0x0d, 0x11, 0x49, 0xd9, 0x18, 0x5c, 0x97, 0x70, 0x52, 0x2b, 0x60, 0x1c,
+ 0x15, 0x4f, 0x54, 0xd8, 0xa1, 0xbe, 0xce, 0x4c, 0xc6, 0x5d, 0x64, 0xa9,
+ 0x5b, 0x4e, 0xce, 0x24, 0x50, 0x51, 0x5d, 0x0a, 0x8a, 0xc8, 0x81, 0xf5,
+ 0xce, 0x24, 0x6a, 0xe2, 0x46, 0xe7, 0x62, 0x2a, 0x99, 0x4a, 0xa1, 0x52,
+ 0xa9, 0x34, 0x2a, 0x9d, 0xca, 0xa0, 0x32, 0xa9, 0x2c, 0x2a, 0x9b, 0xca,
+ 0xa1, 0xda, 0x52, 0x2a, 0x4a, 0x4d, 0xb5, 0xa3, 0x72, 0x29, 0x0d, 0xa5,
+ 0xa5, 0xda, 0x53, 0x79, 0x94, 0x8e, 0xd2, 0x53, 0x06, 0xca, 0x48, 0x99,
+ 0xa8, 0x7c, 0xaa, 0x03, 0x55, 0x40, 0x75, 0xa4, 0x3a, 0x51, 0x85, 0x54,
+ 0x67, 0xaa, 0x88, 0x2a, 0xa6, 0xba, 0x50, 0x5d, 0xa9, 0x6e, 0x54, 0x77,
+ 0xaa, 0x07, 0xd5, 0x93, 0xea, 0x45, 0xf5, 0xa6, 0xfa, 0x50, 0x7d, 0xa9,
+ 0x7e, 0xd4, 0x2b, 0x94, 0x99, 0xea, 0x4f, 0x95, 0x50, 0xa5, 0x94, 0x85,
+ 0x1a, 0x40, 0x95, 0x51, 0x03, 0xa9, 0x72, 0x6a, 0x10, 0x35, 0x98, 0xaa,
+ 0xa0, 0x86, 0x50, 0x95, 0x54, 0x15, 0x55, 0x4d, 0x0d, 0xa5, 0x6a, 0xa8,
+ 0x5a, 0xaa, 0x8e, 0xaa, 0xa7, 0x86, 0x51, 0xc3, 0xa9, 0x11, 0x54, 0x03,
+ 0x35, 0x92, 0x1a, 0x45, 0x8d, 0xa6, 0xc6, 0x50, 0xaf, 0x52, 0xaf, 0x51,
+ 0x1c, 0x85, 0xa9, 0xb1, 0xd4, 0xeb, 0xd4, 0x1b, 0xd4, 0x38, 0x6a, 0x3c,
+ 0x35, 0x81, 0x93, 0x73, 0x0e, 0x9c, 0x2f, 0xa7, 0xe0, 0xc2, 0xb8, 0x18,
+ 0x2e, 0x9e, 0x4b, 0xe1, 0x32, 0x39, 0x15, 0xa7, 0xe5, 0xf4, 0x5c, 0x07,
+ 0xae, 0x33, 0xd7, 0x83, 0xeb, 0xc3, 0x99, 0xb9, 0x01, 0xdc, 0x20, 0xae,
+ 0x9a, 0xab, 0xe7, 0x46, 0x72, 0x1c, 0xf7, 0x06, 0x37, 0x89, 0x9b, 0xce,
+ 0xcd, 0xe2, 0xe6, 0x71, 0x0b, 0xb9, 0x65, 0xdc, 0x7b, 0xdc, 0x3a, 0x6e,
+ 0x23, 0xb7, 0x85, 0xdb, 0xce, 0x7d, 0xcc, 0x7d, 0xca, 0xed, 0xe7, 0x8e,
+ 0x70, 0x27, 0xb8, 0xd3, 0xdc, 0x45, 0xee, 0x0a, 0x77, 0x83, 0xfb, 0x96,
+ 0xbb, 0xc3, 0xdd, 0xe7, 0x1e, 0x71, 0x4f, 0xb8, 0x3f, 0x31, 0x02, 0x8c,
+ 0xa4, 0x18, 0xd1, 0x18, 0x39, 0x62, 0xe4, 0x82, 0x91, 0x07, 0x46, 0x3e,
+ 0x18, 0x05, 0x60, 0x14, 0x8c, 0x51, 0x18, 0x46, 0x51, 0x18, 0xb5, 0xc1,
+ 0x28, 0x11, 0xa3, 0x54, 0x8c, 0x32, 0x31, 0x6a, 0x8b, 0x51, 0x2e, 0x46,
+ 0x79, 0x18, 0x19, 0x31, 0xea, 0x88, 0x51, 0x17, 0x8c, 0x7a, 0x61, 0xf4,
+ 0x0a, 0x46, 0xa5, 0x18, 0x95, 0x63, 0x34, 0x04, 0xa3, 0xa1, 0x18, 0xd5,
+ 0x63, 0x34, 0x12, 0xa3, 0x57, 0x31, 0x1a, 0x8b, 0xd1, 0x38, 0x8c, 0x26,
+ 0x62, 0x34, 0x05, 0xa3, 0xe9, 0x67, 0xa9, 0xc9, 0xd4, 0x14, 0x6a, 0x2a,
+ 0x99, 0x04, 0x37, 0x6a, 0x3a, 0xf5, 0x26, 0x35, 0x83, 0x4c, 0x6a, 0x51,
+ 0x55, 0x7d, 0x4d, 0x89, 0x85, 0x18, 0x87, 0xd6, 0x52, 0x5b, 0x57, 0x5e,
+ 0x29, 0x18, 0x47, 0xb7, 0x82, 0xa2, 0x7c, 0x73, 0x7f, 0x4b, 0x05, 0xb1,
+ 0x34, 0x3b, 0x8e, 0xe1, 0xec, 0xad, 0x36, 0x35, 0x93, 0x0a, 0xe6, 0x68,
+ 0x4e, 0xdc, 0x8b, 0x58, 0x91, 0xd6, 0x52, 0x61, 0x29, 0x33, 0xd7, 0x59,
+ 0xba, 0x97, 0x36, 0xee, 0x58, 0x67, 0xff, 0x1d, 0x6a, 0x6e, 0x3f, 0x67,
+ 0xb7, 0x82, 0xa2, 0x82, 0xf2, 0xfe, 0x1d, 0xeb, 0xeb, 0x2a, 0x2c, 0x75,
+ 0x36, 0x33, 0x5e, 0x4e, 0xbe, 0x9b, 0x47, 0x45, 0xf5, 0x15, 0xbe, 0xb3,
+ 0x9d, 0x3d, 0x43, 0xe4, 0xe1, 0xa5, 0x59, 0x40, 0xbd, 0x4b, 0x2d, 0xe4,
+ 0x1c, 0x39, 0x6f, 0xce, 0xe7, 0x02, 0xb5, 0x98, 0x5a, 0x42, 0x2d, 0x25,
+ 0x27, 0x97, 0x51, 0xcb, 0xa9, 0x15, 0xd4, 0x4a, 0xea, 0x3d, 0x6a, 0x15,
+ 0xb5, 0x9a, 0x5a, 0x43, 0xad, 0xa5, 0xd6, 0x51, 0xef, 0x53, 0xeb, 0x89,
+ 0xa4, 0x1d, 0x2a, 0x2d, 0x43, 0xaa, 0x2a, 0xcb, 0x4b, 0xf2, 0xab, 0x4a,
+ 0xc8, 0x22, 0xee, 0x60, 0xa9, 0xac, 0xef, 0xe7, 0xcc, 0x16, 0x14, 0x91,
+ 0xb5, 0xd1, 0x7e, 0x68, 0x7d, 0xf9, 0xb0, 0x0e, 0x55, 0xa5, 0x1d, 0xcc,
+ 0xb5, 0x83, 0x7b, 0x10, 0x83, 0xad, 0x34, 0x0c, 0x31, 0x97, 0x59, 0x7a,
+ 0xbe, 0xf8, 0x8e, 0x8c, 0xac, 0xb8, 0x9c, 0x48, 0xc6, 0x1b, 0x69, 0xf9,
+ 0x08, 0x4b, 0xa9, 0xf0, 0xbd, 0xcb, 0x6b, 0xcf, 0x9f, 0x3f, 0xe7, 0x9c,
+ 0x5c, 0x88, 0xbf, 0xa0, 0x38, 0x2f, 0xce, 0x85, 0x63, 0x39, 0x67, 0xce,
+ 0xe3, 0x2c, 0x91, 0x61, 0x23, 0x91, 0x60, 0x13, 0xb5, 0x99, 0xfa, 0x80,
+ 0xda, 0x42, 0x6d, 0xed, 0x65, 0xe5, 0x32, 0xd4, 0x59, 0x86, 0xd4, 0x12,
+ 0x5e, 0x7e, 0x5d, 0x61, 0xb4, 0x14, 0xa3, 0x1f, 0x31, 0xfa, 0x01, 0xa3,
+ 0xbb, 0xfd, 0x9c, 0x5d, 0x72, 0x6b, 0xca, 0x2b, 0xcb, 0x14, 0xed, 0x2a,
+ 0x2a, 0x14, 0x75, 0x55, 0x8a, 0xbc, 0x9a, 0xaa, 0xca, 0xba, 0x4e, 0x67,
+ 0xa8, 0x1d, 0x04, 0x67, 0x27, 0xf5, 0x11, 0xb5, 0x8b, 0xda, 0xdd, 0x7c,
+ 0x49, 0x12, 0x55, 0x74, 0xb6, 0xd4, 0x0a, 0xca, 0x17, 0x56, 0xa8, 0x2b,
+ 0xe7, 0xce, 0xb9, 0x11, 0xf1, 0x04, 0x89, 0x04, 0xcf, 0xc3, 0x93, 0x69,
+ 0x06, 0x5a, 0x4a, 0x06, 0x0f, 0x31, 0xd7, 0x0c, 0xb6, 0x2a, 0x78, 0x2f,
+ 0xf5, 0xa9, 0xe0, 0x58, 0xac, 0xab, 0xb3, 0xe9, 0xfe, 0x65, 0xe4, 0x7c,
+ 0x54, 0x73, 0xa2, 0xfd, 0x02, 0x9a, 0xa7, 0x70, 0x29, 0x8f, 0x22, 0x0c,
+ 0xb5, 0xa8, 0xce, 0x36, 0x4f, 0x87, 0xa8, 0xc3, 0x3d, 0x5f, 0x0c, 0x66,
+ 0x19, 0x39, 0x8e, 0x22, 0x8c, 0xe6, 0x9a, 0x1a, 0x73, 0x65, 0x99, 0xc5,
+ 0x50, 0x29, 0x48, 0x9e, 0x69, 0xbd, 0xf4, 0x18, 0x75, 0xbc, 0x9f, 0xb3,
+ 0x7b, 0xd3, 0xb4, 0xd5, 0xd5, 0x54, 0x55, 0x34, 0x9b, 0xd3, 0x63, 0xd4,
+ 0x89, 0x7f, 0x9c, 0xd3, 0x53, 0xd4, 0x17, 0x64, 0x4e, 0xfd, 0xb8, 0xc0,
+ 0xd6, 0xe7, 0xf4, 0x3c, 0x75, 0x81, 0x5a, 0xcf, 0x39, 0x09, 0x6a, 0x0f,
+ 0xe0, 0xfc, 0x39, 0x8f, 0xee, 0x1d, 0xca, 0x2b, 0xcb, 0x87, 0x94, 0x8f,
+ 0xb4, 0x14, 0x0e, 0xe9, 0xe7, 0xec, 0x5a, 0x6d, 0xa9, 0x19, 0x50, 0x55,
+ 0x33, 0x84, 0x3f, 0x67, 0xae, 0xab, 0xaf, 0x21, 0xa7, 0x33, 0x5f, 0x18,
+ 0xf1, 0x15, 0x62, 0xc6, 0xd7, 0x08, 0x49, 0x10, 0xb1, 0xd3, 0x50, 0xce,
+ 0xe7, 0x3c, 0x39, 0xb5, 0x84, 0x50, 0x35, 0x91, 0xac, 0xa1, 0x6e, 0x12,
+ 0x22, 0xde, 0x6c, 0xbe, 0x25, 0x14, 0x5e, 0x5c, 0xb0, 0x30, 0xb3, 0x21,
+ 0x2d, 0x67, 0xf6, 0x47, 0xea, 0x0e, 0x75, 0x57, 0x98, 0xc6, 0xb7, 0x31,
+ 0x9a, 0x8d, 0xd1, 0x0a, 0xe2, 0xa5, 0xdb, 0xf5, 0xaf, 0xaa, 0xaf, 0x53,
+ 0x14, 0x5b, 0x6a, 0x86, 0x90, 0xf5, 0x50, 0xa1, 0x28, 0xa8, 0xaa, 0x2b,
+ 0x1f, 0x50, 0x6e, 0xa9, 0xe9, 0xe7, 0xec, 0x5f, 0x55, 0x53, 0x6a, 0xa9,
+ 0x11, 0xd4, 0x43, 0xb4, 0x59, 0x59, 0x6a, 0xae, 0x29, 0x15, 0xae, 0xed,
+ 0x64, 0xae, 0xb4, 0x54, 0x64, 0x36, 0x8d, 0xfc, 0x01, 0xf5, 0x33, 0x11,
+ 0x2a, 0x9c, 0x8b, 0x7e, 0xf9, 0xc8, 0x1f, 0x35, 0x8e, 0xfc, 0x37, 0xea,
+ 0x09, 0x11, 0x2b, 0x42, 0x18, 0x79, 0x14, 0x17, 0xc9, 0x79, 0x9c, 0x21,
+ 0x17, 0x6c, 0x24, 0x97, 0x3e, 0xa5, 0xfe, 0xa4, 0x36, 0x63, 0xf4, 0x1e,
+ 0x46, 0xab, 0x88, 0x60, 0x16, 0xe2, 0xf3, 0xaa, 0x89, 0x2f, 0xab, 0x54,
+ 0x84, 0x17, 0x56, 0xf5, 0xa9, 0xaa, 0xb6, 0x54, 0x6a, 0xab, 0x4a, 0xea,
+ 0x87, 0x58, 0xc8, 0x0c, 0x35, 0x12, 0x22, 0x11, 0x12, 0x13, 0xc2, 0x58,
+ 0x2e, 0xae, 0x55, 0x42, 0x44, 0x23, 0xc6, 0x46, 0xa8, 0xe4, 0xda, 0x70,
+ 0x1e, 0x5d, 0x34, 0x15, 0x55, 0xb5, 0x96, 0xc2, 0xe1, 0x7d, 0x1a, 0xb5,
+ 0x2c, 0x1c, 0xda, 0x50, 0x59, 0xe4, 0x42, 0x50, 0x13, 0xb8, 0xe4, 0xd6,
+ 0x51, 0xbd, 0x90, 0xb7, 0x0d, 0x35, 0x89, 0x4b, 0xe4, 0x3c, 0x2c, 0xc4,
+ 0x39, 0x9b, 0x89, 0x6b, 0xb5, 0x10, 0x81, 0x6b, 0xfb, 0xd4, 0x9a, 0x87,
+ 0x59, 0xfe, 0x26, 0x70, 0x20, 0x52, 0x10, 0xe8, 0x54, 0x2e, 0x83, 0xf3,
+ 0xb9, 0xf8, 0x02, 0x1a, 0x85, 0xbc, 0x00, 0x47, 0x61, 0xd6, 0x15, 0x8f,
+ 0xa2, 0x50, 0x34, 0xb5, 0x9e, 0x2c, 0xe5, 0xe2, 0xaa, 0xaa, 0x8a, 0xe2,
+ 0xf2, 0x6a, 0x2e, 0xc2, 0x85, 0x5c, 0xda, 0xb4, 0x4a, 0xd3, 0xb9, 0x34,
+ 0xce, 0xa3, 0x4f, 0x27, 0xb2, 0x60, 0x14, 0x24, 0xbc, 0xd4, 0x57, 0x2b,
+ 0x95, 0xca, 0xc2, 0x4e, 0x7d, 0x6b, 0xea, 0x2b, 0xf9, 0x53, 0xf9, 0xe6,
+ 0x06, 0x32, 0x35, 0x36, 0xce, 0x78, 0x94, 0x40, 0x38, 0xb3, 0xb8, 0xb6,
+ 0xad, 0x0f, 0x27, 0x0d, 0xa5, 0xdb, 0x86, 0x93, 0xc3, 0x65, 0x73, 0x1e,
+ 0x03, 0x48, 0xc4, 0xa9, 0x21, 0x31, 0xa4, 0x92, 0xaa, 0x23, 0x03, 0xaa,
+ 0xee, 0x5a, 0x4d, 0xd6, 0xf8, 0x0b, 0xd4, 0xb6, 0x48, 0x45, 0x50, 0xd5,
+ 0x9c, 0xa6, 0x75, 0xd4, 0xf6, 0x28, 0xcf, 0x86, 0x9a, 0xcb, 0xb5, 0xe3,
+ 0x3c, 0x8a, 0x0a, 0x2c, 0xc3, 0x0b, 0x2b, 0x7b, 0x57, 0x5a, 0x86, 0xff,
+ 0x4d, 0x39, 0xf9, 0xa8, 0x03, 0x81, 0x6c, 0xcf, 0xe9, 0x5e, 0x66, 0xd1,
+ 0x8f, 0xac, 0x16, 0x8d, 0x8a, 0x05, 0x8b, 0x8e, 0x10, 0xb4, 0x90, 0xc7,
+ 0x79, 0x90, 0xd5, 0xdb, 0xd9, 0x42, 0x4a, 0xdb, 0x3a, 0xde, 0xf1, 0x14,
+ 0x11, 0x95, 0x97, 0xf6, 0x73, 0xf6, 0xa8, 0x11, 0xce, 0x34, 0xe1, 0x17,
+ 0x57, 0x09, 0xe7, 0x6d, 0x34, 0x3d, 0x50, 0x4f, 0x42, 0x63, 0xe0, 0xf2,
+ 0x5f, 0x2a, 0x39, 0xea, 0xd3, 0xe4, 0x73, 0x91, 0x99, 0x50, 0x19, 0x1b,
+ 0x15, 0x6e, 0x6a, 0xb1, 0x78, 0x90, 0x05, 0x0d, 0x40, 0x65, 0xc2, 0xe2,
+ 0x59, 0x8b, 0xd1, 0x1a, 0x8c, 0xd6, 0xf5, 0xd4, 0x54, 0x58, 0xcc, 0x35,
+ 0x0a, 0xab, 0x4b, 0x76, 0x2f, 0xe1, 0x0f, 0x3a, 0x5b, 0x4a, 0x08, 0x7b,
+ 0x93, 0x14, 0xb5, 0x36, 0xfe, 0xc1, 0xa8, 0x82, 0xf0, 0x17, 0x70, 0x85,
+ 0x2f, 0xd7, 0xdc, 0xcd, 0x46, 0xcd, 0xd5, 0xa0, 0x5a, 0xc2, 0x1f, 0x2c,
+ 0xf0, 0x77, 0xe2, 0x3a, 0xf2, 0x43, 0xf5, 0xd0, 0x97, 0x97, 0x5a, 0xfe,
+ 0xbe, 0x3c, 0x0b, 0x07, 0x76, 0x19, 0x48, 0xbe, 0x78, 0xe1, 0x1f, 0x50,
+ 0x03, 0x1a, 0x89, 0x46, 0x11, 0x92, 0x22, 0xae, 0x2b, 0xd7, 0xbd, 0x75,
+ 0x1a, 0x12, 0x28, 0x6d, 0x34, 0x5d, 0xb8, 0x62, 0x81, 0xa6, 0xb0, 0xbe,
+ 0xfc, 0x25, 0x5e, 0xa0, 0x70, 0xa8, 0x10, 0x0d, 0xd1, 0x04, 0x12, 0x0d,
+ 0xbb, 0xfd, 0x35, 0xab, 0xea, 0x59, 0x67, 0xbd, 0xbc, 0xee, 0xc5, 0x32,
+ 0x9a, 0x8a, 0xa6, 0x11, 0x11, 0x7a, 0x72, 0xbd, 0xff, 0x41, 0x00, 0xf4,
+ 0x56, 0xe3, 0x38, 0xe7, 0xf0, 0x02, 0xb8, 0x90, 0x1c, 0x95, 0x6a, 0x1c,
+ 0x6c, 0x2f, 0xce, 0xa3, 0x97, 0x30, 0xd4, 0x8e, 0x75, 0x03, 0x2d, 0x35,
+ 0x24, 0x49, 0xf4, 0xe0, 0xc7, 0x27, 0x1c, 0x34, 0xa3, 0x7c, 0xa1, 0xd1,
+ 0xf9, 0x68, 0x01, 0x61, 0xea, 0xcb, 0xbd, 0xd2, 0xea, 0x50, 0xc9, 0x8c,
+ 0x2e, 0xb3, 0x0d, 0x95, 0xe5, 0xfa, 0x11, 0x8f, 0x5b, 0x34, 0xb0, 0x6a,
+ 0x38, 0x1f, 0xb5, 0x08, 0x43, 0x7d, 0x25, 0xcf, 0x41, 0xf6, 0x5f, 0xca,
+ 0xb0, 0x0a, 0xad, 0x26, 0x0c, 0xfd, 0x39, 0xcb, 0xcb, 0x6d, 0x66, 0x9d,
+ 0x8d, 0x61, 0x23, 0x61, 0x28, 0x69, 0x64, 0x28, 0xb5, 0x79, 0x36, 0xf4,
+ 0x01, 0xda, 0xc2, 0x7b, 0xb6, 0x7d, 0x18, 0x7d, 0x46, 0xac, 0xa6, 0x4f,
+ 0x51, 0x5d, 0x55, 0xb5, 0xa2, 0xa8, 0xda, 0x62, 0x1e, 0x4c, 0xc2, 0x66,
+ 0x1f, 0x12, 0xd1, 0xaa, 0x9b, 0x0e, 0x6c, 0x8c, 0x3b, 0xd0, 0x4e, 0xc2,
+ 0x58, 0xc6, 0x95, 0xff, 0x1b, 0xe3, 0xde, 0x66, 0x8c, 0x03, 0x39, 0x8f,
+ 0xbe, 0xc4, 0x3f, 0x93, 0xd5, 0xd0, 0x84, 0xd7, 0xb7, 0x96, 0x3f, 0xfc,
+ 0x1b, 0xfa, 0x7e, 0x74, 0x80, 0xa0, 0x0f, 0xe6, 0xaa, 0x5e, 0x8e, 0x7e,
+ 0xb8, 0xd1, 0x38, 0x8e, 0xa1, 0xe3, 0x04, 0xbd, 0x42, 0x40, 0xaf, 0xe4,
+ 0x86, 0xbc, 0x18, 0xcf, 0x29, 0xf4, 0x05, 0x3f, 0x9e, 0x8d, 0x18, 0x6d,
+ 0x22, 0xe3, 0x29, 0xd6, 0x54, 0x55, 0x37, 0x14, 0x96, 0x74, 0x29, 0x21,
+ 0x1f, 0x36, 0x8a, 0xf3, 0xe8, 0x02, 0xa1, 0x18, 0xca, 0xd5, 0xb5, 0x4e,
+ 0x71, 0x05, 0x5d, 0xb5, 0x51, 0xd4, 0x72, 0x35, 0x9c, 0x47, 0xcf, 0x22,
+ 0x92, 0x59, 0x95, 0xd4, 0xf1, 0xd3, 0x52, 0x68, 0xee, 0x59, 0x2b, 0x1c,
+ 0x90, 0x7d, 0x1b, 0xee, 0x2d, 0x74, 0x9b, 0xe0, 0x0e, 0xe3, 0x1a, 0x5a,
+ 0xc7, 0xbd, 0x83, 0xee, 0xda, 0x70, 0x47, 0x70, 0xc3, 0x89, 0xe3, 0xd1,
+ 0xd4, 0xd7, 0x15, 0x8e, 0x28, 0x2e, 0x69, 0xe6, 0x19, 0x1f, 0xa2, 0x5f,
+ 0x08, 0xd4, 0x28, 0xee, 0xb5, 0x97, 0x43, 0x3d, 0x6e, 0x84, 0xfa, 0x1d,
+ 0xfd, 0x41, 0xa0, 0x46, 0x0b, 0x50, 0xaf, 0x72, 0x63, 0x5e, 0x68, 0xe1,
+ 0x19, 0x7a, 0xce, 0x6b, 0x61, 0x3b, 0x46, 0x3b, 0x88, 0x16, 0x48, 0x1a,
+ 0x24, 0x24, 0x2d, 0x8a, 0xa6, 0x25, 0x4f, 0x56, 0xce, 0xf0, 0xc2, 0xac,
+ 0xbe, 0x25, 0xfc, 0x49, 0x32, 0x03, 0x15, 0x15, 0xcd, 0x66, 0x00, 0x24,
+ 0x20, 0x25, 0xdc, 0x98, 0x7b, 0xbd, 0xd5, 0x61, 0x50, 0xeb, 0xc0, 0xc1,
+ 0x36, 0x0c, 0x96, 0x1b, 0xcb, 0x79, 0x74, 0xe5, 0x33, 0xd0, 0x3a, 0x4b,
+ 0xb7, 0x52, 0xe1, 0xc3, 0x06, 0xe7, 0x02, 0xae, 0x04, 0x6e, 0x1c, 0x37,
+ 0xb1, 0x55, 0x38, 0xf0, 0x06, 0x1f, 0x1b, 0xdc, 0x04, 0x6e, 0x3c, 0x89,
+ 0x84, 0x9d, 0xcc, 0xb5, 0x75, 0x96, 0xc2, 0x61, 0x5d, 0xab, 0xf9, 0x4f,
+ 0x1b, 0x9c, 0x02, 0x82, 0x08, 0xdc, 0x64, 0x6e, 0x5a, 0xab, 0x9a, 0x81,
+ 0x08, 0x88, 0xb4, 0x69, 0x66, 0x2a, 0x37, 0x85, 0x77, 0x1e, 0xde, 0xc2,
+ 0x9a, 0x6a, 0x1a, 0xae, 0x82, 0xe4, 0x0a, 0x0a, 0x5d, 0x8d, 0x79, 0x08,
+ 0xc9, 0xe4, 0x0a, 0x33, 0x89, 0xb3, 0xae, 0x25, 0xdf, 0xea, 0x48, 0x95,
+ 0x58, 0xdb, 0x22, 0x73, 0x00, 0x25, 0xc4, 0x11, 0xbe, 0x37, 0xb9, 0x99,
+ 0xad, 0x8b, 0x9f, 0x02, 0xa9, 0x36, 0xf1, 0xdf, 0xe2, 0x66, 0x70, 0x1e,
+ 0xc5, 0x5d, 0x48, 0x81, 0x59, 0x38, 0xb2, 0x4b, 0x3d, 0xf9, 0xb0, 0x81,
+ 0x65, 0x43, 0x0e, 0x01, 0x9b, 0xcd, 0xcd, 0x6d, 0x11, 0x64, 0xa9, 0xe5,
+ 0xa0, 0xb6, 0xc2, 0x41, 0xbb, 0x46, 0x38, 0x2d, 0xb4, 0x07, 0x12, 0x9e,
+ 0x48, 0x8d, 0x56, 0x6c, 0x2e, 0xe3, 0xe6, 0x08, 0xb0, 0xef, 0x38, 0x03,
+ 0xf7, 0xb6, 0x6d, 0x8a, 0xc1, 0x00, 0x46, 0x7e, 0x8a, 0xb7, 0x62, 0xf4,
+ 0x21, 0x99, 0xe2, 0x1e, 0x79, 0xa4, 0xa0, 0x55, 0x14, 0x58, 0x46, 0xd4,
+ 0x15, 0x96, 0x91, 0x74, 0xa9, 0x31, 0x7b, 0xe0, 0x4f, 0x0a, 0xc3, 0x69,
+ 0x27, 0x94, 0xd2, 0x36, 0x39, 0x3a, 0x09, 0x72, 0xcc, 0xff, 0x77, 0x39,
+ 0xba, 0x41, 0x77, 0xe8, 0x41, 0x06, 0x66, 0x95, 0xe0, 0x5d, 0x67, 0xc4,
+ 0x2d, 0xe0, 0xb3, 0x89, 0x3c, 0x21, 0xf8, 0x96, 0x92, 0xe0, 0x3b, 0xa0,
+ 0x09, 0xb2, 0x2f, 0xf4, 0x23, 0x90, 0x8b, 0xb8, 0xa5, 0x2f, 0xd5, 0x93,
+ 0x0d, 0xd0, 0x02, 0x03, 0x6c, 0x70, 0x4b, 0xb8, 0xc5, 0xfc, 0xbc, 0xb0,
+ 0xc6, 0xfa, 0x21, 0xd5, 0x42, 0x90, 0x14, 0x56, 0x14, 0x91, 0xb3, 0x70,
+ 0x10, 0xc9, 0xeb, 0xf8, 0x10, 0x65, 0xa9, 0xb1, 0x9d, 0x33, 0x54, 0x36,
+ 0x56, 0xee, 0xed, 0x6a, 0x2c, 0x66, 0xdb, 0x40, 0x2a, 0x84, 0x81, 0x2c,
+ 0x6f, 0x65, 0x20, 0xd6, 0xac, 0x05, 0x6a, 0xa1, 0x0e, 0xea, 0x6d, 0xcc,
+ 0x2b, 0x9d, 0x45, 0xdc, 0x0a, 0x92, 0xa6, 0x08, 0x4a, 0xeb, 0x44, 0x82,
+ 0x72, 0x79, 0x55, 0x7d, 0x6d, 0xa1, 0xae, 0x09, 0x75, 0x24, 0xf0, 0x21,
+ 0x6a, 0x15, 0xb7, 0xf6, 0x1f, 0xe6, 0xbc, 0x11, 0x13, 0xc3, 0x58, 0xdb,
+ 0x9c, 0xaf, 0xe1, 0x56, 0x93, 0x39, 0xef, 0x6c, 0x21, 0x73, 0xde, 0xb3,
+ 0x4b, 0x8d, 0xa5, 0xd9, 0x9c, 0x4f, 0x84, 0x49, 0x04, 0xec, 0x7d, 0x6e,
+ 0x43, 0xab, 0x06, 0x4b, 0x96, 0xd3, 0x0c, 0x9b, 0xc1, 0xb2, 0xdc, 0x7a,
+ 0x5e, 0x31, 0xbe, 0xd6, 0x45, 0x6b, 0xb3, 0xd8, 0x6e, 0x03, 0xcb, 0x2b,
+ 0x48, 0x90, 0x6d, 0xa8, 0x26, 0x07, 0xfd, 0x9c, 0x03, 0xea, 0xaa, 0xca,
+ 0xca, 0x2a, 0x2c, 0x7c, 0x05, 0x50, 0x5e, 0x59, 0x4f, 0xe4, 0x17, 0xae,
+ 0x13, 0x6e, 0x69, 0xbe, 0x9a, 0xe7, 0x08, 0x1a, 0xda, 0xf4, 0xef, 0x53,
+ 0xfd, 0x2e, 0x2c, 0x84, 0x45, 0x36, 0x0d, 0x7d, 0xe0, 0x2c, 0xe3, 0x36,
+ 0x0b, 0x21, 0xb7, 0x4b, 0xad, 0xe5, 0xc5, 0xcc, 0x28, 0x88, 0x55, 0x29,
+ 0x78, 0xad, 0x15, 0x5a, 0x9a, 0x08, 0x96, 0xc3, 0x0a, 0x42, 0xb0, 0x95,
+ 0xdb, 0xf6, 0x2f, 0x85, 0x22, 0xac, 0xb3, 0x15, 0x15, 0x2c, 0xf7, 0x21,
+ 0x51, 0x56, 0xcf, 0xaa, 0xaa, 0x21, 0xbd, 0x1b, 0x0d, 0x95, 0xdf, 0xb7,
+ 0x89, 0xbc, 0x09, 0x36, 0x13, 0xc4, 0x1d, 0xdc, 0xee, 0x97, 0x9b, 0xd2,
+ 0x56, 0x6b, 0x78, 0x86, 0xed, 0xb0, 0x83, 0x20, 0xee, 0x14, 0x10, 0x77,
+ 0x71, 0x1f, 0xbd, 0x58, 0x19, 0xbb, 0x60, 0x37, 0xbf, 0x32, 0xbe, 0xc5,
+ 0xe8, 0x3b, 0xb2, 0x32, 0x7a, 0x0b, 0xcb, 0x9e, 0xcf, 0x55, 0xfb, 0x93,
+ 0x95, 0x5e, 0x47, 0x0a, 0x18, 0xab, 0xe2, 0x1a, 0xcf, 0xf0, 0xdf, 0xbe,
+ 0x58, 0x18, 0xfb, 0xe0, 0x33, 0x42, 0xfd, 0x09, 0xb7, 0xf7, 0x1f, 0xa8,
+ 0x6d, 0x83, 0x39, 0x62, 0xa3, 0x66, 0xb9, 0x3d, 0x9c, 0x47, 0x95, 0xb3,
+ 0x0b, 0xa5, 0xa1, 0xea, 0x85, 0x1e, 0x46, 0x15, 0x35, 0x84, 0x2c, 0x8f,
+ 0x91, 0xa4, 0x3e, 0x50, 0x50, 0xc5, 0xe4, 0xa8, 0x8a, 0xaa, 0xa0, 0xfa,
+ 0x93, 0xf4, 0xbb, 0x46, 0x11, 0xde, 0xcf, 0x39, 0x90, 0x64, 0xc2, 0x8d,
+ 0xcc, 0xd6, 0x82, 0xb1, 0x7c, 0xa4, 0x10, 0xd0, 0x3b, 0x99, 0x89, 0xd3,
+ 0x6c, 0xe6, 0xe6, 0x4e, 0xc2, 0x29, 0x22, 0xc8, 0x3e, 0xee, 0xf3, 0x7f,
+ 0xb3, 0x9a, 0xf3, 0xcd, 0xac, 0xe6, 0xb3, 0x66, 0x56, 0xd3, 0xe8, 0xda,
+ 0x14, 0xdd, 0xca, 0xeb, 0x06, 0xda, 0x4c, 0x88, 0x4c, 0xa7, 0x75, 0xf0,
+ 0x8d, 0xdf, 0xfe, 0xcd, 0x5a, 0x2e, 0xc3, 0xd7, 0x84, 0xf6, 0x00, 0x77,
+ 0xf8, 0x9f, 0xac, 0xe5, 0x5a, 0x33, 0xc7, 0x70, 0x93, 0x50, 0x1f, 0xb4,
+ 0x3a, 0x06, 0xee, 0xd0, 0x0b, 0xf5, 0x7f, 0x0b, 0xdf, 0xf1, 0xea, 0xdf,
+ 0x85, 0xd1, 0x6e, 0x21, 0xf6, 0x38, 0x17, 0x0d, 0xe1, 0xe3, 0x3e, 0x1f,
+ 0x89, 0xe3, 0x04, 0x9f, 0xde, 0xcf, 0xd9, 0xcb, 0x2a, 0x85, 0xf0, 0x85,
+ 0xa1, 0xb2, 0x96, 0x4f, 0x89, 0x5b, 0x06, 0x8d, 0xbb, 0xf0, 0x13, 0x91,
+ 0xe3, 0x28, 0x77, 0xfc, 0xdf, 0xe4, 0xe0, 0x1d, 0xe5, 0x23, 0x9b, 0x1c,
+ 0xef, 0x70, 0xc7, 0x38, 0x8f, 0xde, 0x56, 0xbe, 0xc2, 0xfa, 0xaa, 0x3a,
+ 0xbe, 0xe7, 0x17, 0x64, 0xe5, 0x6a, 0x57, 0x4f, 0x94, 0x4d, 0x54, 0x5d,
+ 0x22, 0x9c, 0x2f, 0xaa, 0xef, 0x5f, 0x5b, 0x57, 0x5e, 0x57, 0xdf, 0xc2,
+ 0x2b, 0xfe, 0x0e, 0x7f, 0x10, 0xd2, 0x93, 0xdc, 0x17, 0xff, 0x48, 0xfa,
+ 0xc2, 0x99, 0x88, 0xc0, 0x46, 0xba, 0x92, 0x3b, 0x45, 0xb2, 0x42, 0x2b,
+ 0x69, 0x7e, 0x79, 0xe5, 0x60, 0xc2, 0xe9, 0xff, 0x17, 0x4e, 0xfe, 0xb4,
+ 0x96, 0x8c, 0xcf, 0xea, 0x85, 0x6d, 0xd9, 0xb0, 0x48, 0x26, 0x92, 0x8b,
+ 0xec, 0x08, 0xe7, 0x19, 0xee, 0x4b, 0xee, 0xc2, 0x4b, 0x67, 0x5a, 0x64,
+ 0xdf, 0x38, 0xd0, 0xed, 0x22, 0x67, 0xc2, 0x78, 0xb6, 0xd1, 0xda, 0xcf,
+ 0xb5, 0x48, 0xfa, 0x45, 0x6e, 0x22, 0x77, 0x91, 0x87, 0x90, 0xf4, 0x1f,
+ 0xc1, 0xe8, 0x30, 0x46, 0x17, 0x7a, 0x0a, 0x46, 0x9f, 0x47, 0x7c, 0x43,
+ 0xad, 0x90, 0x1a, 0x8b, 0xbc, 0x49, 0x6a, 0x7c, 0x5e, 0x48, 0x8d, 0xf9,
+ 0x93, 0x1d, 0xcc, 0x95, 0xa4, 0x1a, 0x23, 0xd5, 0xb3, 0xdb, 0x8b, 0xea,
+ 0x99, 0x3f, 0x6f, 0x0d, 0x7d, 0x2f, 0xe4, 0x0b, 0x20, 0xf2, 0xf1, 0x65,
+ 0xe1, 0x25, 0x22, 0xdf, 0xd7, 0xff, 0xa0, 0x95, 0x26, 0x09, 0x45, 0xe1,
+ 0xd0, 0x5e, 0x14, 0x61, 0x93, 0xf1, 0x32, 0xf7, 0x15, 0x59, 0xe3, 0xb9,
+ 0x55, 0x15, 0xa5, 0x85, 0xfd, 0xfb, 0x98, 0x4b, 0x4b, 0x79, 0xf8, 0xe2,
+ 0x1a, 0x73, 0x79, 0x5d, 0x33, 0xf8, 0x36, 0x8d, 0xf0, 0x57, 0xff, 0x0b,
+ 0x7c, 0x0a, 0x74, 0x17, 0xa5, 0xda, 0xe0, 0xaf, 0x73, 0xd7, 0x48, 0xc6,
+ 0x61, 0xa8, 0x33, 0x93, 0x8c, 0xb8, 0xb0, 0xbc, 0x71, 0x06, 0x45, 0x59,
+ 0xa2, 0x6c, 0x02, 0xf7, 0x0d, 0x77, 0xbb, 0x55, 0x5d, 0x8a, 0x72, 0x45,
+ 0x1a, 0x1b, 0xd0, 0x2d, 0xee, 0x26, 0xe7, 0xd1, 0x83, 0x04, 0x6b, 0x4b,
+ 0x0d, 0x59, 0x21, 0x96, 0xc2, 0xfa, 0x9e, 0xf5, 0x4d, 0xfb, 0xcd, 0x24,
+ 0x35, 0x10, 0x49, 0x4d, 0x04, 0xfa, 0x3b, 0x22, 0xe9, 0x8f, 0xff, 0x26,
+ 0x69, 0x21, 0x31, 0x8f, 0xce, 0x36, 0x82, 0x1f, 0xb8, 0xef, 0x89, 0xa4,
+ 0xb9, 0xe5, 0x65, 0x44, 0xe1, 0x85, 0x31, 0xbd, 0x86, 0x54, 0x95, 0x96,
+ 0x0f, 0x68, 0xe0, 0xb5, 0xd1, 0x0c, 0xbe, 0x7b, 0x23, 0xfc, 0xdd, 0xff,
+ 0x02, 0xff, 0x8a, 0xc8, 0x2c, 0xea, 0x6f, 0x83, 0xbf, 0xe7, 0x2c, 0xe6,
+ 0x7e, 0xe2, 0x3c, 0xba, 0x11, 0xfb, 0xab, 0xa8, 0x20, 0x0c, 0x6d, 0x9a,
+ 0x74, 0x51, 0x26, 0x1a, 0x48, 0x10, 0x1f, 0x70, 0xbf, 0xb4, 0xae, 0x8b,
+ 0x4a, 0x51, 0x95, 0x0d, 0xeb, 0x21, 0xf7, 0x33, 0x6f, 0xc9, 0xbc, 0xe9,
+ 0x68, 0xaa, 0x2a, 0xaa, 0x6a, 0x6a, 0x0b, 0x35, 0xa4, 0x64, 0x7c, 0x61,
+ 0x22, 0xc2, 0xc9, 0x16, 0xe9, 0x91, 0xa8, 0x5e, 0x34, 0x8c, 0xb0, 0xfc,
+ 0xca, 0xfd, 0xf6, 0x0f, 0x2c, 0x8d, 0xa5, 0xd4, 0x31, 0xd1, 0x18, 0x1b,
+ 0x4b, 0x25, 0xf7, 0x98, 0xe4, 0xd2, 0xbc, 0x3b, 0x50, 0x14, 0xd5, 0x35,
+ 0x54, 0x58, 0x7a, 0xf0, 0xc9, 0xb9, 0xa0, 0x90, 0x26, 0xd0, 0xb1, 0xa2,
+ 0xd7, 0x09, 0xe8, 0xef, 0xdc, 0xd3, 0x56, 0x41, 0xc1, 0x5b, 0x34, 0xd9,
+ 0x06, 0x3a, 0x81, 0xfb, 0x83, 0x88, 0x2e, 0xb8, 0x17, 0x2b, 0x6a, 0x4f,
+ 0x21, 0x6d, 0x6c, 0x01, 0xfb, 0xa6, 0x68, 0x06, 0x81, 0x7d, 0x86, 0x11,
+ 0x7a, 0x49, 0x19, 0x2f, 0x9a, 0x6d, 0x2d, 0xe3, 0x45, 0xef, 0x08, 0x65,
+ 0xfc, 0x73, 0xde, 0xa1, 0x62, 0x44, 0xd9, 0xdc, 0x9a, 0x68, 0xbe, 0x68,
+ 0x01, 0xef, 0xd6, 0xce, 0x62, 0x74, 0x8e, 0xac, 0xb4, 0x5e, 0x7c, 0x58,
+ 0xd4, 0x5a, 0x06, 0x98, 0xeb, 0x2b, 0xea, 0x7a, 0xd4, 0x57, 0xd6, 0x96,
+ 0xd4, 0x94, 0x57, 0xbf, 0x60, 0x5a, 0x22, 0x5a, 0x4a, 0x2d, 0xc4, 0x48,
+ 0x84, 0x91, 0xa4, 0x35, 0xaa, 0xd5, 0xcd, 0xa9, 0xc4, 0xbc, 0xea, 0xeb,
+ 0x49, 0x3c, 0xb4, 0x62, 0xf5, 0xae, 0x7d, 0xb1, 0x6f, 0xc3, 0x5d, 0x2f,
+ 0xda, 0xc0, 0xe3, 0xca, 0x30, 0xb2, 0x6b, 0x0d, 0xf7, 0xc3, 0xe6, 0xb8,
+ 0x72, 0x62, 0xde, 0xbc, 0xbb, 0x13, 0x90, 0x7a, 0xd6, 0x36, 0xed, 0xd9,
+ 0x30, 0x3f, 0x12, 0xed, 0xe2, 0x31, 0x19, 0x8c, 0x1c, 0x5a, 0xc3, 0xdc,
+ 0xd7, 0x1c, 0xd3, 0x9e, 0xa4, 0xe7, 0x9d, 0xcd, 0xe5, 0xb5, 0x96, 0xbe,
+ 0x35, 0xfc, 0xef, 0x5c, 0x33, 0x29, 0x86, 0xf8, 0x05, 0xd3, 0x84, 0x79,
+ 0x50, 0x74, 0x88, 0xc7, 0x74, 0xc2, 0x88, 0x6d, 0x0d, 0xf3, 0x64, 0x73,
+ 0x4c, 0x67, 0x82, 0x99, 0x5f, 0x35, 0xdc, 0x52, 0xd3, 0xb7, 0x82, 0xff,
+ 0xfd, 0x37, 0xcc, 0xb3, 0xa2, 0x73, 0x3c, 0xa6, 0x2b, 0x46, 0xee, 0x2f,
+ 0xc3, 0xbc, 0xd8, 0x7c, 0xfa, 0x30, 0x72, 0xfb, 0xdb, 0xfc, 0x5d, 0x15,
+ 0x5d, 0xe3, 0xe7, 0xef, 0x0b, 0x8c, 0x4e, 0x0b, 0x61, 0xc9, 0xbd, 0xbe,
+ 0xd6, 0xd2, 0xd4, 0x31, 0xcc, 0x2f, 0x2f, 0xe3, 0x5b, 0x99, 0x16, 0x5b,
+ 0x59, 0x2d, 0xba, 0x29, 0xba, 0xc5, 0xb3, 0x79, 0x62, 0xe4, 0xdd, 0x1a,
+ 0xdb, 0x9d, 0x16, 0x6c, 0x5e, 0xa4, 0x70, 0xe7, 0xed, 0xa2, 0xa0, 0xaa,
+ 0x92, 0x04, 0x39, 0x96, 0x20, 0x56, 0x76, 0x1c, 0x30, 0xe0, 0xef, 0xe0,
+ 0x0f, 0x44, 0x3f, 0xf3, 0xe0, 0xbe, 0x18, 0xf9, 0xb7, 0x06, 0xfe, 0xa4,
+ 0x05, 0xb8, 0x1f, 0x59, 0xe4, 0x3c, 0xb8, 0xd0, 0x14, 0x70, 0x26, 0xc2,
+ 0x93, 0x9d, 0xbf, 0x43, 0x3f, 0x13, 0x3d, 0xe7, 0xa1, 0x03, 0x31, 0x0a,
+ 0x7a, 0x09, 0xb4, 0x58, 0xd4, 0x52, 0x4b, 0x8a, 0xbf, 0x6a, 0x49, 0x6c,
+ 0x27, 0xa6, 0x79, 0x2d, 0x9d, 0xc0, 0xe8, 0xa4, 0xa0, 0x25, 0xd7, 0x66,
+ 0x5a, 0x32, 0x59, 0x6a, 0x2a, 0x9b, 0x25, 0x0b, 0x62, 0x47, 0xb1, 0x13,
+ 0xcf, 0x15, 0x82, 0xd1, 0xcb, 0x3a, 0xbd, 0x36, 0xae, 0x3b, 0x2d, 0xb8,
+ 0xbc, 0x84, 0xce, 0x58, 0xa3, 0x6a, 0xfe, 0x8a, 0xe8, 0x23, 0xf6, 0xe5,
+ 0x11, 0xc3, 0x31, 0x8a, 0x6c, 0x05, 0x51, 0x1c, 0xdc, 0x02, 0x31, 0x82,
+ 0x28, 0xa6, 0xb8, 0xbc, 0x6c, 0x60, 0x9d, 0xa5, 0x92, 0x47, 0xb6, 0xee,
+ 0xfd, 0x15, 0x39, 0x42, 0x1c, 0xc9, 0x23, 0x47, 0x63, 0x14, 0xdb, 0x1a,
+ 0x72, 0x5c, 0x0b, 0xe4, 0x18, 0xe2, 0xb8, 0xf3, 0xab, 0xaa, 0x6a, 0x2d,
+ 0x95, 0xc4, 0x26, 0xf9, 0x8f, 0xbf, 0xa2, 0x26, 0x8b, 0x53, 0x78, 0x54,
+ 0x25, 0x46, 0x09, 0x2f, 0x43, 0xcd, 0x68, 0x44, 0xcd, 0xb6, 0xa2, 0xc6,
+ 0x59, 0x51, 0xe3, 0x5f, 0x68, 0x5b, 0x25, 0x56, 0xf3, 0xda, 0xde, 0x83,
+ 0xd1, 0x5e, 0x41, 0xdb, 0x4e, 0x1d, 0xcc, 0x83, 0x2d, 0x8a, 0x2e, 0xd5,
+ 0x64, 0xe5, 0x2b, 0x34, 0x64, 0x01, 0xf4, 0xad, 0xe7, 0x77, 0x4b, 0xc8,
+ 0x5e, 0x37, 0xe2, 0x85, 0x6d, 0xb4, 0xed, 0xc5, 0x79, 0x3c, 0x6d, 0x12,
+ 0x46, 0x29, 0x2f, 0xa1, 0x25, 0xc9, 0xa1, 0x95, 0xb6, 0x83, 0xb0, 0xbc,
+ 0x46, 0x5b, 0x59, 0x93, 0x79, 0xbd, 0x07, 0x68, 0xaa, 0x6a, 0x6a, 0xf8,
+ 0x16, 0x86, 0xad, 0xa6, 0xb0, 0xa5, 0x28, 0x24, 0x7a, 0x34, 0xf4, 0x73,
+ 0x0e, 0xfe, 0x4b, 0xe2, 0xd2, 0x74, 0x5d, 0xe3, 0x7d, 0xcd, 0xb2, 0x25,
+ 0x71, 0x67, 0x71, 0x11, 0x2f, 0x44, 0x1a, 0x46, 0x19, 0x2f, 0x11, 0x82,
+ 0x24, 0x68, 0x56, 0x21, 0x7a, 0x0a, 0x42, 0x1c, 0xb4, 0x0a, 0x91, 0xce,
+ 0x0b, 0xe1, 0x62, 0xad, 0xc3, 0x9b, 0x65, 0x60, 0xb5, 0x2d, 0xdb, 0xf8,
+ 0xcd, 0xbf, 0x69, 0x11, 0x6d, 0xc4, 0xfd, 0xc4, 0xaf, 0xf0, 0x9c, 0x59,
+ 0x18, 0xe5, 0xb4, 0xc6, 0x59, 0xd6, 0x9c, 0x33, 0xdb, 0x96, 0x11, 0x6a,
+ 0xcd, 0xb5, 0x03, 0xf9, 0x8c, 0x50, 0xf1, 0x97, 0x41, 0xf2, 0xe7, 0x5f,
+ 0x96, 0x10, 0x8a, 0x2b, 0xc4, 0x43, 0x78, 0x3a, 0x15, 0x46, 0xed, 0x5a,
+ 0xa3, 0xab, 0x6b, 0x4e, 0xa7, 0xe6, 0x87, 0xe8, 0x5c, 0x4c, 0x0a, 0x71,
+ 0x45, 0x67, 0x4b, 0x75, 0x85, 0xb9, 0xc4, 0xc2, 0x37, 0x5c, 0x48, 0xe2,
+ 0xff, 0x17, 0x52, 0xfe, 0x8a, 0x66, 0x17, 0xd8, 0x38, 0x1b, 0xc4, 0x23,
+ 0x79, 0x4e, 0x0d, 0x46, 0xed, 0x5b, 0x33, 0x29, 0xdc, 0xc2, 0xa4, 0xb4,
+ 0xc2, 0xa2, 0x12, 0x8c, 0x47, 0x70, 0xa1, 0x56, 0xe3, 0x11, 0xfc, 0xe8,
+ 0xdf, 0x8c, 0x67, 0xbc, 0x78, 0x02, 0x4f, 0xa0, 0xc3, 0xc8, 0xd0, 0x1a,
+ 0xc1, 0xf4, 0x16, 0x04, 0x7a, 0x3e, 0x62, 0x9b, 0xab, 0xcb, 0xf9, 0x7c,
+ 0x6b, 0x24, 0xff, 0x28, 0xac, 0xc4, 0x76, 0xd0, 0x02, 0x7c, 0x96, 0x78,
+ 0x36, 0x0f, 0x6e, 0xc2, 0xa8, 0xe0, 0x9f, 0x6a, 0x67, 0x21, 0x76, 0x8b,
+ 0xe7, 0x8b, 0x17, 0x34, 0xd5, 0xce, 0x18, 0x75, 0xc0, 0x28, 0x9f, 0x1f,
+ 0x81, 0xbb, 0x35, 0x7e, 0xf3, 0x9d, 0x99, 0x0e, 0xe6, 0xba, 0x92, 0x81,
+ 0xd6, 0x48, 0x5e, 0xd8, 0x95, 0xf8, 0x52, 0x21, 0x9a, 0xb7, 0xab, 0xed,
+ 0x54, 0x61, 0x2e, 0xaf, 0xe4, 0x55, 0x67, 0x63, 0x5c, 0x2a, 0x5e, 0xc6,
+ 0x33, 0x76, 0xc2, 0xa8, 0xf8, 0xa5, 0x8c, 0xe2, 0x95, 0xd6, 0x44, 0x47,
+ 0xbc, 0x5a, 0xbc, 0x86, 0x5a, 0x8f, 0x51, 0xa1, 0x95, 0xb2, 0x08, 0xa3,
+ 0xce, 0x2d, 0x72, 0x68, 0xf1, 0x7a, 0xf1, 0x06, 0xf1, 0x46, 0x21, 0x87,
+ 0xbe, 0x8f, 0xd1, 0x3d, 0x8c, 0x1e, 0x90, 0x62, 0xe9, 0x6f, 0x9d, 0x66,
+ 0x85, 0xde, 0x52, 0x51, 0x5d, 0xa8, 0xea, 0xc1, 0x37, 0x8b, 0xf8, 0x5d,
+ 0x9b, 0x18, 0x5b, 0xc5, 0x1f, 0xf2, 0x62, 0x74, 0xc5, 0xa8, 0xe7, 0xcb,
+ 0xc5, 0xd8, 0xd1, 0x28, 0xc6, 0x2e, 0xf1, 0x6e, 0x5e, 0x8c, 0x6e, 0x56,
+ 0x31, 0x7a, 0x60, 0xd4, 0xfd, 0x85, 0x3b, 0xd8, 0x23, 0xde, 0xcb, 0xbb,
+ 0x83, 0x4b, 0x18, 0x7d, 0x45, 0x04, 0xe9, 0xd9, 0xae, 0xa2, 0xbc, 0xac,
+ 0x52, 0x91, 0x6f, 0x19, 0x50, 0x57, 0x38, 0xaa, 0xa7, 0x99, 0x3f, 0xe0,
+ 0xf7, 0x6d, 0x94, 0x07, 0xc4, 0x07, 0x79, 0xca, 0xde, 0x18, 0xf5, 0x6b,
+ 0x9d, 0xf2, 0xb8, 0xf8, 0x44, 0x33, 0xca, 0xbe, 0x18, 0xf5, 0x21, 0x7e,
+ 0x4d, 0x23, 0xb4, 0x57, 0x0a, 0x47, 0xf7, 0x16, 0x80, 0xad, 0x47, 0x36,
+ 0xe8, 0xb3, 0x62, 0x21, 0xd6, 0x9a, 0x31, 0x2a, 0x79, 0x99, 0x8d, 0xec,
+ 0x68, 0xb4, 0x91, 0xcb, 0x56, 0x1b, 0xe9, 0x66, 0xb5, 0x91, 0xfe, 0xc4,
+ 0x0f, 0x1b, 0x49, 0x4d, 0x4b, 0xd2, 0x5b, 0xfe, 0xc9, 0x25, 0x0f, 0x6b,
+ 0x3d, 0x2c, 0x7f, 0xf1, 0x88, 0x43, 0x7c, 0x5d, 0x7c, 0x83, 0x47, 0xb6,
+ 0x60, 0x34, 0xb0, 0x75, 0xa1, 0xbf, 0x13, 0x7f, 0xdf, 0x4c, 0xe8, 0x32,
+ 0x8c, 0x06, 0x90, 0xfc, 0xc8, 0xaa, 0x91, 0xce, 0xbc, 0x8b, 0x2f, 0x1c,
+ 0xd3, 0x4b, 0xa0, 0x10, 0x0e, 0x6c, 0xf0, 0xf7, 0xc4, 0xf7, 0x79, 0xf8,
+ 0x41, 0x18, 0x55, 0xb4, 0x26, 0xf8, 0xe3, 0x16, 0x82, 0x0f, 0xe6, 0x5b,
+ 0xbb, 0xbc, 0x4f, 0xea, 0x5c, 0x4f, 0x32, 0xe8, 0xde, 0xd6, 0x85, 0x2a,
+ 0xec, 0xdb, 0x70, 0x9f, 0x8a, 0xff, 0xe4, 0x71, 0x2b, 0x31, 0xaa, 0xfe,
+ 0x07, 0xb1, 0x25, 0xc8, 0x9a, 0xe8, 0x4a, 0x24, 0x82, 0xd8, 0xfc, 0xe3,
+ 0x7c, 0xeb, 0x43, 0x03, 0x72, 0x4f, 0x55, 0x53, 0xbe, 0x2b, 0x80, 0xf6,
+ 0xe4, 0xf3, 0xdd, 0x16, 0xf0, 0x12, 0x5a, 0xc2, 0xf0, 0xf0, 0x35, 0x18,
+ 0xbd, 0xbc, 0x27, 0xdd, 0x04, 0x0f, 0xde, 0x12, 0x17, 0x9b, 0x56, 0xb8,
+ 0x09, 0x18, 0xd5, 0xda, 0x92, 0x5e, 0x01, 0xb0, 0x97, 0xb0, 0x4c, 0x5a,
+ 0x62, 0x7b, 0x4a, 0xbc, 0x78, 0xec, 0x61, 0x18, 0x35, 0xbc, 0x44, 0x25,
+ 0x12, 0x3f, 0xab, 0x4a, 0x24, 0x81, 0x56, 0x95, 0x0c, 0xb7, 0xaa, 0x64,
+ 0x84, 0xcd, 0x28, 0x25, 0xc1, 0x92, 0x10, 0xde, 0x28, 0xaf, 0x60, 0x74,
+ 0x95, 0x18, 0x65, 0x77, 0xbb, 0xc6, 0xa4, 0x97, 0xb8, 0xd1, 0x21, 0xc4,
+ 0xdf, 0xf0, 0x69, 0x5a, 0xb7, 0x9a, 0xf2, 0x3a, 0x12, 0x23, 0xb4, 0xe5,
+ 0x8d, 0x21, 0xa2, 0x80, 0xcf, 0x49, 0xcc, 0x36, 0xaf, 0x2d, 0x89, 0x94,
+ 0x44, 0xf1, 0x12, 0x8c, 0xc2, 0x68, 0x4c, 0x6b, 0x12, 0xc4, 0xb7, 0x90,
+ 0x60, 0x34, 0xe7, 0xd1, 0xd7, 0x8e, 0xb7, 0x77, 0xbe, 0x33, 0x28, 0x4c,
+ 0x72, 0x3f, 0xe7, 0xd0, 0x7f, 0x62, 0xe4, 0xaf, 0x2b, 0xae, 0x6a, 0x61,
+ 0x0a, 0x92, 0x14, 0x49, 0x2a, 0xcf, 0xfa, 0x1a, 0x46, 0xb8, 0x35, 0xd6,
+ 0x9c, 0x16, 0xac, 0x1c, 0xcf, 0x2a, 0xe0, 0xf0, 0xb4, 0x3c, 0x6c, 0x2b,
+ 0xac, 0xc2, 0x75, 0xc5, 0x55, 0xcd, 0x17, 0xa5, 0x24, 0x57, 0xa2, 0xe1,
+ 0x59, 0x5f, 0xc7, 0xe8, 0x8d, 0xff, 0x91, 0xb6, 0x1b, 0xd5, 0xc9, 0xbb,
+ 0xb6, 0x7f, 0x53, 0x67, 0x81, 0xa4, 0x23, 0x4f, 0x31, 0x1e, 0xa3, 0x09,
+ 0xff, 0x23, 0x75, 0x36, 0x8e, 0xe4, 0x65, 0x14, 0x2f, 0xd3, 0x5f, 0x4f,
+ 0x49, 0x2f, 0x9e, 0x66, 0x12, 0x46, 0x93, 0xff, 0x47, 0xfa, 0x6b, 0x85,
+ 0xe6, 0x65, 0x0a, 0x1b, 0xc0, 0xf7, 0x27, 0x31, 0x9a, 0xda, 0x5a, 0x0b,
+ 0xd7, 0x5a, 0xee, 0x75, 0x93, 0x54, 0x4a, 0xaa, 0x9a, 0xf5, 0xa2, 0xed,
+ 0x31, 0x9a, 0xc6, 0x77, 0xde, 0xd8, 0xa6, 0x76, 0x34, 0xa5, 0xa0, 0xcc,
+ 0x8d, 0x9f, 0x9d, 0x29, 0x0b, 0x55, 0x4d, 0x55, 0x90, 0xe3, 0x12, 0xfe,
+ 0xa1, 0xb7, 0xf0, 0xde, 0x84, 0xa4, 0x56, 0x52, 0xd7, 0xd7, 0xf6, 0x22,
+ 0x54, 0xbb, 0x9a, 0x1a, 0x73, 0xc3, 0x72, 0x72, 0xae, 0x9e, 0x8a, 0xea,
+ 0x56, 0x50, 0x24, 0x1c, 0x0a, 0x2f, 0x43, 0x49, 0x86, 0x4b, 0xed, 0x37,
+ 0x3a, 0xcf, 0x46, 0x23, 0x25, 0x0d, 0x92, 0x91, 0xd4, 0x2a, 0xc9, 0x68,
+ 0x6a, 0x01, 0x2c, 0xa7, 0x4e, 0x49, 0x38, 0xea, 0x26, 0x75, 0x05, 0x0d,
+ 0x46, 0xf3, 0x51, 0x83, 0x64, 0xbc, 0x64, 0x82, 0x64, 0xa2, 0x64, 0x92,
+ 0x64, 0xb2, 0x64, 0x8a, 0x64, 0x2a, 0x9a, 0x2a, 0x99, 0x8e, 0x0e, 0x83,
+ 0x04, 0x9d, 0x07, 0xa5, 0x64, 0x16, 0xba, 0x05, 0x2e, 0x68, 0xbf, 0xe4,
+ 0x1d, 0x18, 0x29, 0x99, 0x07, 0xed, 0xa0, 0x02, 0xfa, 0xc2, 0x1c, 0xc8,
+ 0x86, 0x4e, 0x92, 0x01, 0x92, 0xa5, 0xe8, 0x31, 0x4c, 0x44, 0x0f, 0x41,
+ 0x01, 0x27, 0x25, 0xab, 0xc4, 0xed, 0x25, 0x6b, 0xd0, 0x3a, 0xb4, 0x0a,
+ 0xed, 0x90, 0xac, 0x87, 0x6b, 0x70, 0x19, 0xee, 0xc2, 0xef, 0xe2, 0xce,
+ 0x92, 0x2d, 0x24, 0xc7, 0xa9, 0x90, 0x6c, 0x13, 0x67, 0x90, 0xdc, 0xb2,
+ 0x81, 0xc4, 0xea, 0x59, 0x92, 0xdd, 0xd4, 0x23, 0xc4, 0xa2, 0x78, 0xea,
+ 0x01, 0x6a, 0x2b, 0xd9, 0x87, 0xfa, 0xa0, 0x1e, 0x28, 0x10, 0x89, 0x24,
+ 0x07, 0x51, 0xbe, 0xe4, 0xb0, 0xe4, 0x08, 0x6c, 0x85, 0x4d, 0xb0, 0x4f,
+ 0x72, 0x42, 0x72, 0x52, 0x72, 0x4a, 0x64, 0x2f, 0x92, 0x89, 0x02, 0x44,
+ 0x6d, 0x44, 0x59, 0x92, 0x2f, 0x45, 0x06, 0x51, 0x77, 0xc9, 0x45, 0xc9,
+ 0x25, 0xb1, 0x48, 0xf4, 0x8c, 0xe4, 0xe9, 0x3e, 0xe2, 0x08, 0xc9, 0x35,
+ 0xd1, 0x45, 0x52, 0x43, 0xdd, 0x14, 0x3d, 0x90, 0xdc, 0x12, 0xcd, 0x26,
+ 0xb5, 0xf0, 0x12, 0x52, 0x4d, 0x7e, 0x24, 0x3a, 0x28, 0xb9, 0x23, 0x2a,
+ 0x93, 0xfc, 0x44, 0xea, 0xf8, 0xb1, 0x92, 0x07, 0xe2, 0x1d, 0x24, 0x8e,
+ 0x1d, 0x20, 0xde, 0xff, 0xba, 0xe4, 0xb1, 0xe4, 0x37, 0x89, 0x9f, 0xe4,
+ 0x77, 0xe2, 0x3d, 0x22, 0xc9, 0x4a, 0x7a, 0x26, 0x79, 0x4e, 0x2c, 0xbb,
+ 0x40, 0xd2, 0x53, 0x2a, 0x22, 0x2e, 0xf6, 0xa9, 0x84, 0x96, 0xca, 0xc4,
+ 0x2b, 0xc5, 0x4b, 0xa9, 0xe9, 0x22, 0x39, 0x47, 0x42, 0xde, 0x0c, 0x8c,
+ 0xbe, 0xe7, 0x48, 0xb1, 0x77, 0x87, 0x73, 0xe4, 0xb6, 0x72, 0x7e, 0x18,
+ 0xcd, 0xe2, 0x82, 0xb9, 0x20, 0xae, 0x80, 0xeb, 0xcb, 0x91, 0x38, 0xbb,
+ 0x0c, 0xa3, 0xb9, 0x18, 0x2d, 0xc0, 0xe8, 0x1d, 0x8c, 0xde, 0xc5, 0x68,
+ 0x11, 0x46, 0xcb, 0xb9, 0x9e, 0x18, 0x6d, 0x20, 0xd1, 0x1f, 0x73, 0x43,
+ 0xb9, 0x37, 0x31, 0xfa, 0x80, 0x1b, 0xc6, 0x8d, 0xe3, 0x06, 0x63, 0xb4,
+ 0x99, 0x5b, 0x85, 0xd1, 0x16, 0x32, 0xc3, 0xcb, 0xb9, 0x45, 0xdc, 0x26,
+ 0x6e, 0x36, 0x37, 0x9f, 0x58, 0x06, 0x46, 0xdb, 0x48, 0x12, 0xfb, 0x3e,
+ 0x37, 0x8a, 0x9b, 0xcc, 0xed, 0xc3, 0x68, 0xa7, 0x90, 0xf8, 0x7e, 0xca,
+ 0x95, 0x70, 0xfd, 0x39, 0x12, 0x16, 0x3e, 0x22, 0x89, 0xd7, 0x01, 0xee,
+ 0x28, 0x77, 0x52, 0x48, 0x45, 0x3f, 0x16, 0x92, 0x43, 0x92, 0xb0, 0x7d,
+ 0x42, 0x52, 0x17, 0x21, 0x31, 0xd7, 0x08, 0xa9, 0x0e, 0x49, 0x48, 0x56,
+ 0x72, 0x11, 0x5c, 0x02, 0x97, 0xc5, 0x85, 0x73, 0x6a, 0x8c, 0x56, 0x73,
+ 0x46, 0xce, 0xc0, 0xa5, 0x72, 0xb1, 0x18, 0xbd, 0xcf, 0xb5, 0xc7, 0x88,
+ 0xf8, 0xd4, 0xdb, 0xdc, 0x4e, 0x6e, 0x07, 0x47, 0xee, 0xfb, 0x1c, 0xa3,
+ 0x03, 0x18, 0x1d, 0xe2, 0xce, 0x72, 0x67, 0xb8, 0x4b, 0xdc, 0x55, 0xee,
+ 0x1b, 0x8c, 0x8e, 0x72, 0xdf, 0x71, 0x77, 0x31, 0x3a, 0x86, 0xd1, 0x71,
+ 0x52, 0x1c, 0x08, 0xe5, 0x55, 0x88, 0x50, 0xa6, 0x90, 0x7a, 0xe2, 0x14,
+ 0xa9, 0xd0, 0x84, 0xb2, 0xd4, 0x53, 0xa8, 0xe8, 0xce, 0x90, 0x7a, 0xf6,
+ 0x99, 0x50, 0xfa, 0xcb, 0x84, 0xa2, 0x9a, 0xa8, 0xe5, 0x4b, 0xee, 0x01,
+ 0x46, 0xe7, 0xb9, 0x5f, 0xb9, 0xdf, 0x31, 0xba, 0x48, 0x9c, 0xb7, 0x90,
+ 0x26, 0xf4, 0x16, 0xc2, 0x2b, 0x89, 0x83, 0x97, 0x31, 0xfa, 0x9a, 0xac,
+ 0x1f, 0x8c, 0xae, 0x09, 0x4e, 0x7a, 0x94, 0xe0, 0xb2, 0x6e, 0x60, 0xf4,
+ 0x8d, 0xe0, 0x45, 0xc6, 0x0b, 0x2b, 0xf0, 0x96, 0x10, 0xd2, 0x2a, 0x85,
+ 0x08, 0xf1, 0x13, 0xc9, 0x61, 0x48, 0xbe, 0xc3, 0xd9, 0x71, 0x5f, 0x62,
+ 0xf4, 0xb0, 0x59, 0x06, 0x23, 0x75, 0x92, 0x3a, 0x4b, 0x59, 0x21, 0x83,
+ 0x99, 0x89, 0xd1, 0x5b, 0x18, 0xfd, 0xdc, 0xa3, 0x5d, 0x07, 0x92, 0x2e,
+ 0xf1, 0x4f, 0xfe, 0x05, 0xcb, 0x96, 0xba, 0x51, 0x13, 0x57, 0x49, 0x38,
+ 0xc9, 0x6e, 0xc9, 0x74, 0x62, 0x31, 0x47, 0x24, 0x23, 0xa5, 0x44, 0xc4,
+ 0x59, 0x44, 0x33, 0x64, 0x32, 0x84, 0x61, 0xdf, 0x26, 0xf3, 0x28, 0x10,
+ 0x4c, 0xff, 0xaa, 0xf9, 0x4a, 0x94, 0x06, 0x48, 0x03, 0xa9, 0x15, 0x52,
+ 0x05, 0xbf, 0x1a, 0x25, 0x0d, 0xb6, 0x17, 0xbf, 0x6e, 0x92, 0xed, 0x8e,
+ 0x34, 0x92, 0x5a, 0xdf, 0x9d, 0x7f, 0x4a, 0x55, 0x53, 0x66, 0xa9, 0xeb,
+ 0x51, 0x50, 0x44, 0xf2, 0x68, 0x92, 0xce, 0xd6, 0x77, 0xe7, 0xdf, 0x9d,
+ 0xe4, 0x97, 0x3c, 0x31, 0x8e, 0xc6, 0xe6, 0x74, 0x30, 0x17, 0x2c, 0xbc,
+ 0xcd, 0x33, 0x47, 0x78, 0xe6, 0xf3, 0xb7, 0xcc, 0xaa, 0x6f, 0xad, 0xf5,
+ 0xce, 0xc6, 0x27, 0x55, 0x56, 0x81, 0xdb, 0x50, 0x13, 0xd7, 0x51, 0x57,
+ 0xc8, 0x42, 0xe3, 0x97, 0xdb, 0x64, 0xc9, 0x78, 0xb2, 0xfc, 0xa6, 0xa2,
+ 0xf9, 0x64, 0xc9, 0x35, 0x70, 0x41, 0x82, 0x3d, 0x59, 0x0d, 0x8b, 0x58,
+ 0xd5, 0x32, 0x62, 0x6d, 0x3d, 0xb9, 0xbe, 0xbc, 0x6d, 0x11, 0x93, 0x9b,
+ 0x7e, 0xa9, 0x49, 0x7e, 0x69, 0x96, 0x30, 0x82, 0xec, 0xe6, 0x0f, 0xdc,
+ 0xa5, 0x2a, 0x5e, 0x7e, 0xf2, 0x7b, 0x9d, 0xf0, 0xea, 0x9a, 0xa1, 0xb6,
+ 0xc8, 0x52, 0x6d, 0xae, 0x31, 0xd7, 0x55, 0xd5, 0xf4, 0xe6, 0x8f, 0xb4,
+ 0xe5, 0xb5, 0xbc, 0x83, 0x28, 0xe5, 0x9f, 0xc7, 0xdb, 0xf1, 0xa2, 0xdb,
+ 0x11, 0xe9, 0x3d, 0x5a, 0x79, 0x7c, 0x2f, 0x35, 0x48, 0x8d, 0x4d, 0x8f,
+ 0xef, 0x31, 0x22, 0x26, 0x3b, 0x8f, 0xf3, 0xa8, 0x10, 0x5e, 0x51, 0xe1,
+ 0x5f, 0x77, 0xb4, 0x08, 0x9f, 0x95, 0xbc, 0x23, 0xa2, 0x6a, 0x15, 0xe1,
+ 0x85, 0xb1, 0xff, 0x59, 0xb6, 0x96, 0x02, 0xfc, 0xe3, 0x94, 0xbc, 0x78,
+ 0x8b, 0x80, 0x78, 0xa3, 0x29, 0xd2, 0xbe, 0xfc, 0x94, 0x34, 0xbd, 0x4b,
+ 0x20, 0x2c, 0x37, 0xf2, 0xb3, 0x50, 0xd0, 0x7b, 0xf7, 0x22, 0x4b, 0xcd,
+ 0xb0, 0xf2, 0x12, 0x4b, 0x6d, 0x73, 0xab, 0x29, 0x25, 0x77, 0x0c, 0x10,
+ 0xac, 0x66, 0xb1, 0x70, 0xdd, 0x12, 0xab, 0xea, 0x07, 0x52, 0x13, 0x97,
+ 0x10, 0x45, 0x92, 0x4c, 0xae, 0x1f, 0xff, 0xa2, 0xa8, 0xf5, 0x3e, 0xab,
+ 0x29, 0x11, 0x5f, 0x2a, 0xad, 0x90, 0x0e, 0x69, 0x7c, 0xcf, 0x6f, 0x99,
+ 0xb4, 0x82, 0x8a, 0xfa, 0x5f, 0x8e, 0xe9, 0x7f, 0x79, 0x5b, 0xef, 0x7e,
+ 0xd6, 0x37, 0x3c, 0x2c, 0x3c, 0xff, 0x7f, 0x31, 0xd5, 0x47, 0x64, 0x7b,
+ 0xca, 0xeb, 0xe5, 0x85, 0x39, 0x46, 0x70, 0x11, 0xc2, 0xfb, 0x5c, 0x44,
+ 0x2d, 0xc5, 0x79, 0xe5, 0x15, 0x16, 0xeb, 0xa8, 0xa7, 0x51, 0x13, 0xd7,
+ 0xa2, 0xb6, 0xd4, 0x03, 0xc9, 0x3e, 0xe2, 0x61, 0x45, 0xc4, 0xef, 0x12,
+ 0x2f, 0x4b, 0xfc, 0x6d, 0x3c, 0xa7, 0xe6, 0xc8, 0x6a, 0x5f, 0xcd, 0x7b,
+ 0x8b, 0x58, 0xe2, 0x45, 0x78, 0x8f, 0x41, 0xbc, 0x47, 0x56, 0x6b, 0x2b,
+ 0xc5, 0xf6, 0x52, 0xd9, 0x3a, 0xe2, 0xb4, 0xfb, 0xa0, 0x01, 0xc2, 0xb4,
+ 0x44, 0x34, 0xb2, 0x1b, 0x39, 0xa3, 0xf0, 0x76, 0x0e, 0x61, 0xef, 0xd5,
+ 0xb1, 0xda, 0x42, 0x72, 0x5a, 0xe1, 0x95, 0x1c, 0xab, 0x10, 0x2b, 0xa9,
+ 0x89, 0x4b, 0x51, 0x0f, 0xce, 0x20, 0xa8, 0xdf, 0xa3, 0x1f, 0xff, 0x52,
+ 0x62, 0x8b, 0xf7, 0x75, 0xf8, 0x51, 0xff, 0x93, 0xe6, 0x1e, 0xfd, 0x4d,
+ 0x73, 0x11, 0xff, 0x45, 0xe1, 0xff, 0x72, 0xdb, 0x7f, 0xd0, 0x31, 0xa9,
+ 0xec, 0x0e, 0xa3, 0x53, 0x2d, 0x75, 0x5c, 0xc1, 0x55, 0x08, 0x6f, 0x62,
+ 0xf0, 0x3a, 0x6e, 0x5f, 0x5a, 0xde, 0x38, 0xbc, 0x83, 0xfc, 0xcb, 0xc6,
+ 0x4e, 0xa0, 0x24, 0x11, 0xf2, 0x1d, 0x74, 0x0b, 0xed, 0x07, 0x52, 0x36,
+ 0xf2, 0xd1, 0x53, 0x32, 0x4b, 0x32, 0x4f, 0xb2, 0x54, 0xb2, 0x5e, 0xb2,
+ 0x4d, 0xb2, 0x86, 0x7b, 0x93, 0x8f, 0x04, 0x9b, 0x49, 0x5c, 0x18, 0xcc,
+ 0x8d, 0x23, 0xee, 0x9b, 0x8f, 0x14, 0x24, 0x4e, 0x90, 0xe0, 0x40, 0xa2,
+ 0x01, 0x71, 0xfa, 0x82, 0x83, 0xff, 0xf4, 0x9f, 0x17, 0xba, 0xf5, 0xb9,
+ 0x7c, 0x8b, 0x01, 0x55, 0xfc, 0x07, 0x3d, 0xfc, 0xdb, 0x6d, 0xff, 0xa8,
+ 0x87, 0x66, 0x6f, 0x45, 0xb4, 0x23, 0x9b, 0x41, 0x98, 0xec, 0xa6, 0x77,
+ 0x23, 0xe6, 0x70, 0x73, 0x84, 0xe7, 0xf4, 0x56, 0x53, 0xab, 0x2c, 0xb5,
+ 0xaa, 0xe1, 0x57, 0x6a, 0xe2, 0x7b, 0x7c, 0x5a, 0x40, 0x92, 0x83, 0x0a,
+ 0x92, 0x22, 0xf4, 0x15, 0x62, 0x1d, 0x09, 0x79, 0xcb, 0x49, 0xe0, 0x5b,
+ 0xd4, 0x9a, 0x61, 0xbd, 0xe0, 0x42, 0x8f, 0xc9, 0xf6, 0xac, 0x05, 0xd7,
+ 0x68, 0x6e, 0xb4, 0xf0, 0xda, 0x87, 0xe0, 0x65, 0xdd, 0x5e, 0xf6, 0xb2,
+ 0x83, 0xc0, 0x2e, 0xa3, 0x79, 0x76, 0x05, 0x7a, 0x28, 0x59, 0x05, 0x13,
+ 0xe1, 0xa4, 0xb8, 0x3d, 0x89, 0xad, 0x24, 0xf2, 0xec, 0x24, 0x61, 0x76,
+ 0x9f, 0x10, 0x5f, 0xa7, 0x5b, 0x73, 0x31, 0x42, 0x4e, 0x34, 0xf4, 0x42,
+ 0x3f, 0x8f, 0x05, 0x7f, 0xa7, 0xb2, 0x69, 0x47, 0x78, 0xf2, 0x68, 0xf7,
+ 0x3f, 0xd0, 0xce, 0x35, 0xb2, 0x7d, 0xdb, 0x42, 0xe2, 0x83, 0xdc, 0x41,
+ 0xe1, 0x61, 0x21, 0x91, 0xb8, 0x4f, 0x8b, 0xd6, 0x8f, 0x55, 0xd0, 0x08,
+ 0x12, 0xb3, 0xf8, 0xbc, 0x88, 0xcf, 0x90, 0xc4, 0xfd, 0x48, 0x8e, 0x54,
+ 0x61, 0x0d, 0xf4, 0x7c, 0xd0, 0x27, 0xc1, 0x9e, 0x8f, 0xfb, 0xaa, 0x7f,
+ 0x12, 0x17, 0xae, 0xfd, 0x45, 0xdc, 0x83, 0xcd, 0xc5, 0xbd, 0x24, 0x64,
+ 0xb4, 0x7f, 0x11, 0x96, 0x88, 0xfa, 0x9e, 0x55, 0x54, 0x92, 0x82, 0x65,
+ 0x88, 0x55, 0xcd, 0x45, 0x15, 0x52, 0x8a, 0x38, 0xa1, 0x5d, 0x27, 0xa8,
+ 0xd7, 0xa9, 0xb8, 0xc6, 0x5c, 0x59, 0xcb, 0x3f, 0xbe, 0x36, 0x37, 0x13,
+ 0xb8, 0x3d, 0x35, 0x71, 0xb9, 0x35, 0x79, 0x6b, 0x96, 0x7f, 0xfc, 0xa7,
+ 0xd9, 0xe4, 0xb7, 0x0f, 0x5a, 0xe8, 0xa6, 0x84, 0x2b, 0x11, 0x5e, 0xcd,
+ 0x22, 0x74, 0x5d, 0xc9, 0x5c, 0x5a, 0x4a, 0x06, 0x5a, 0x39, 0xba, 0x52,
+ 0x13, 0x97, 0xa1, 0x1d, 0x68, 0x15, 0x57, 0xc6, 0xf5, 0x17, 0x16, 0xc1,
+ 0x4b, 0x46, 0x42, 0x96, 0x66, 0xe3, 0x48, 0x48, 0x72, 0x78, 0x52, 0x66,
+ 0x6e, 0xb1, 0x34, 0x85, 0x14, 0x87, 0xfc, 0xec, 0xb7, 0x62, 0xe7, 0x09,
+ 0x63, 0x68, 0xac, 0xf8, 0x64, 0x66, 0x59, 0x19, 0x5f, 0xf1, 0x91, 0xef,
+ 0xc8, 0xcc, 0x2c, 0xb5, 0x32, 0x0e, 0x22, 0x8c, 0x92, 0x53, 0x12, 0x92,
+ 0xc8, 0x1c, 0x12, 0x92, 0x98, 0x7f, 0xe0, 0x3c, 0xd9, 0xc4, 0x49, 0x92,
+ 0x51, 0x7b, 0x91, 0xbb, 0x95, 0xf3, 0x40, 0xe3, 0x68, 0xce, 0x72, 0x67,
+ 0x85, 0xa7, 0x93, 0xc2, 0x3a, 0xa8, 0x6a, 0xf4, 0x76, 0xb2, 0x91, 0xbc,
+ 0x3b, 0x70, 0xfe, 0x7b, 0xea, 0x2a, 0xb9, 0x26, 0xb9, 0xf5, 0x22, 0x39,
+ 0xfd, 0x87, 0x5c, 0x8c, 0x24, 0x5f, 0x67, 0x5a, 0x26, 0x58, 0x2f, 0xb7,
+ 0x04, 0x91, 0xfd, 0x5f, 0x2c, 0xe1, 0x6c, 0x73, 0x4b, 0xf8, 0x5f, 0xdc,
+ 0xf2, 0xd2, 0xe1, 0x93, 0x5b, 0x9a, 0x8c, 0x47, 0x44, 0x36, 0x3b, 0x61,
+ 0x2e, 0xcf, 0x36, 0x69, 0x5c, 0x21, 0xfc, 0x9c, 0xb0, 0x8e, 0x9f, 0xef,
+ 0x24, 0x5b, 0xc7, 0xbf, 0x96, 0x9a, 0xb8, 0xa2, 0x29, 0x49, 0x6f, 0x99,
+ 0x59, 0xbe, 0x5c, 0xc7, 0x2f, 0x48, 0x48, 0x42, 0x7f, 0x51, 0x74, 0xb5,
+ 0x25, 0x89, 0x9b, 0xf0, 0xf3, 0x85, 0x40, 0xd2, 0xc3, 0xf6, 0x78, 0xc0,
+ 0xca, 0xb4, 0x9b, 0x58, 0xa6, 0xb5, 0x04, 0x68, 0x96, 0xaf, 0xfe, 0x2b,
+ 0xc9, 0x6c, 0xb2, 0xcd, 0x6f, 0x4e, 0x42, 0x12, 0xdc, 0xe7, 0xc2, 0x73,
+ 0x30, 0x3e, 0xa3, 0x68, 0x7a, 0x4c, 0x63, 0x65, 0x38, 0x4e, 0x4d, 0x5c,
+ 0xf9, 0xa2, 0xb4, 0xf8, 0x6b, 0x1e, 0xfc, 0xff, 0xd0, 0xd4, 0xf4, 0xea,
+ 0xd7, 0xf8, 0x90, 0x5b, 0x08, 0x93, 0xad, 0x5a, 0x29, 0x29, 0x78, 0x76,
+ 0x88, 0xf7, 0xb4, 0xb0, 0x52, 0x21, 0x3f, 0xef, 0x26, 0x34, 0xe1, 0xf8,
+ 0x79, 0xe2, 0xcb, 0x58, 0xeb, 0xd8, 0x1e, 0x92, 0xd4, 0xa0, 0x79, 0x79,
+ 0xd4, 0x54, 0x0a, 0xbd, 0x2c, 0x9b, 0x6f, 0x9e, 0xaf, 0xbf, 0x7c, 0xd4,
+ 0xe2, 0x1d, 0x2d, 0x87, 0xd0, 0xd8, 0xd3, 0x69, 0xd5, 0xbc, 0x84, 0xf6,
+ 0x95, 0x75, 0x45, 0xfb, 0x91, 0x2d, 0xd8, 0x2a, 0x77, 0xb7, 0x26, 0xb9,
+ 0x87, 0x0b, 0x3f, 0x57, 0x9a, 0x32, 0xec, 0xc6, 0xe2, 0x5b, 0x61, 0xab,
+ 0xbe, 0x85, 0x61, 0xc8, 0x49, 0x0d, 0xb0, 0xe6, 0xef, 0x75, 0x5d, 0xab,
+ 0xd5, 0xc7, 0xf4, 0x0b, 0x4d, 0x23, 0x78, 0x21, 0x3f, 0xa9, 0xff, 0xd7,
+ 0x58, 0xa3, 0xa4, 0x3c, 0x8c, 0x97, 0x62, 0xb8, 0x55, 0x0a, 0x3b, 0x8c,
+ 0xae, 0x13, 0xc3, 0xeb, 0x44, 0xd2, 0xe9, 0xb2, 0x1a, 0x73, 0xf5, 0xc0,
+ 0x97, 0x8e, 0xdd, 0x7a, 0x6f, 0xf3, 0xb1, 0x0f, 0x6f, 0x3e, 0xf6, 0xd6,
+ 0xd9, 0xd2, 0x5a, 0xb2, 0xf1, 0x0f, 0xef, 0x6d, 0x6f, 0x27, 0xfd, 0x6f,
+ 0x34, 0xfd, 0x1f, 0x52, 0x1b, 0x52, 0x64, 0x6f, 0x85, 0x5d, 0x2d, 0x53,
+ 0x9b, 0x9d, 0xdc, 0x4e, 0xe1, 0x0d, 0x23, 0xde, 0x46, 0xba, 0x96, 0x5b,
+ 0x86, 0x5b, 0x95, 0xdb, 0x91, 0x78, 0x49, 0xbe, 0x20, 0xb7, 0x16, 0x92,
+ 0xff, 0xa9, 0x8a, 0x5a, 0x45, 0xb6, 0x2d, 0x2d, 0xb1, 0x9d, 0xf8, 0x5a,
+ 0xfa, 0x07, 0xab, 0x67, 0xb6, 0xfe, 0x3b, 0x35, 0x2b, 0x7a, 0x3f, 0xe2,
+ 0x29, 0xa8, 0x53, 0xb0, 0x9c, 0x6f, 0x49, 0x70, 0x7e, 0xdc, 0x56, 0xa1,
+ 0xe0, 0x6e, 0xa5, 0xd8, 0x59, 0xf5, 0xb7, 0x64, 0xc6, 0xa9, 0x79, 0x32,
+ 0xd3, 0x97, 0xac, 0x93, 0xc6, 0x7f, 0x06, 0xf7, 0xcf, 0x4b, 0xc5, 0x16,
+ 0x44, 0x48, 0xbd, 0xbf, 0x52, 0xbc, 0xe1, 0x2f, 0x41, 0xa4, 0x50, 0xf8,
+ 0xb9, 0x67, 0x55, 0x03, 0xdf, 0x0f, 0xb7, 0x0a, 0x3a, 0x8a, 0x24, 0xb0,
+ 0xe2, 0xa5, 0x42, 0x53, 0x7e, 0x3a, 0xbf, 0x1a, 0xf9, 0x6f, 0x78, 0x0a,
+ 0x7e, 0xff, 0x45, 0x45, 0xca, 0xb7, 0x64, 0xea, 0xe5, 0x78, 0x19, 0xdf,
+ 0x81, 0xb1, 0xde, 0xf7, 0xba, 0xd0, 0x79, 0xa1, 0xdc, 0x28, 0x37, 0x6b,
+ 0xef, 0xc5, 0xba, 0x91, 0x7d, 0x4e, 0x28, 0x36, 0x5b, 0x6c, 0x92, 0xc9,
+ 0xc2, 0xef, 0x06, 0xbe, 0xf7, 0xf2, 0xf7, 0x4d, 0xe8, 0xbd, 0xd8, 0x36,
+ 0x72, 0xbc, 0x54, 0xc8, 0x95, 0x9a, 0xb6, 0xc3, 0x42, 0xef, 0x85, 0xe4,
+ 0xac, 0x42, 0xef, 0xa5, 0xd9, 0x46, 0xce, 0x6c, 0x13, 0x02, 0x7f, 0x06,
+ 0xd9, 0x6b, 0xe0, 0x7b, 0x2f, 0x4d, 0x1b, 0xdf, 0x7b, 0x69, 0x76, 0xd4,
+ 0x20, 0xf4, 0x5e, 0xb6, 0x92, 0xcf, 0xa6, 0xde, 0xcb, 0x5f, 0x36, 0xbe,
+ 0xf7, 0x62, 0xdd, 0xc8, 0xfe, 0x35, 0xc1, 0x55, 0x5f, 0x24, 0x7b, 0xb7,
+ 0x04, 0x7f, 0x6a, 0xdd, 0x5e, 0x5c, 0x7b, 0x52, 0xe8, 0xbd, 0xd8, 0x36,
+ 0xa1, 0xf7, 0xf2, 0x97, 0xcd, 0xf6, 0x5d, 0x03, 0xdf, 0x7b, 0xe1, 0x75,
+ 0xc4, 0x01, 0x07, 0x4d, 0xbd, 0x17, 0xeb, 0x26, 0x1c, 0xf1, 0xbd, 0x97,
+ 0xbf, 0x6c, 0xa4, 0x42, 0xb6, 0x7e, 0xcc, 0xb0, 0xb6, 0x5d, 0xfe, 0xb6,
+ 0x59, 0x9b, 0x2e, 0x2f, 0xb6, 0x0a, 0x6b, 0xcf, 0xe5, 0xc5, 0x56, 0x61,
+ 0xed, 0xb8, 0x94, 0xf0, 0x3b, 0x7c, 0xc7, 0xa5, 0xf9, 0x56, 0xd1, 0xd4,
+ 0x6d, 0xe1, 0x7f, 0xf8, 0xa3, 0x19, 0xd6, 0x66, 0x4b, 0xe3, 0x66, 0x6d,
+ 0xb6, 0x34, 0x3b, 0x9c, 0x61, 0xed, 0xb5, 0xec, 0x14, 0xf6, 0x5e, 0x34,
+ 0x5b, 0xfe, 0xb2, 0x35, 0xb5, 0x5a, 0x1a, 0x7f, 0xf8, 0x13, 0xa7, 0x9a,
+ 0xc2, 0x9b, 0x1b, 0x7f, 0xc4, 0x37, 0x5a, 0x9a, 0xb6, 0x66, 0x77, 0x1d,
+ 0x68, 0xea, 0xb1, 0xfc, 0xe5, 0xe7, 0xeb, 0x26, 0x07, 0xf9, 0xd2, 0x9f,
+ 0xe6, 0x57, 0xce, 0xb0, 0xf6, 0x58, 0xac, 0xea, 0x7d, 0x28, 0x58, 0xa6,
+ 0x9d, 0x0f, 0x6f, 0x99, 0xdf, 0x53, 0x6e, 0xff, 0xb7, 0x2b, 0xf8, 0xdf,
+ 0xba, 0x82, 0xff, 0x9f, 0xf9, 0xa7, 0xa4, 0xf0, 0x7f, 0xfb, 0x97, 0xff,
+ 0xef, 0xf5, 0x2f, 0xff, 0xff, 0xf4, 0x0f, 0x79, 0xad, 0x8e, 0x82, 0x96,
+ 0x0a, 0x8e, 0x82, 0x96, 0xd1, 0x72, 0xda, 0x8e, 0xa6, 0x69, 0x86, 0xb6,
+ 0xa7, 0x1d, 0x68, 0x47, 0xda, 0x89, 0x76, 0xa6, 0x59, 0xda, 0x85, 0x76,
+ 0xa5, 0xdd, 0x68, 0x77, 0xda, 0x83, 0xf6, 0xa4, 0xbd, 0x68, 0x6f, 0xda,
+ 0x87, 0xf6, 0xa5, 0xfd, 0x68, 0x7f, 0x3a, 0x80, 0x0e, 0xa4, 0x15, 0x74,
+ 0x10, 0x1d, 0x4c, 0x87, 0xd0, 0xa1, 0x74, 0x18, 0x1d, 0x4e, 0x47, 0xd0,
+ 0x91, 0x74, 0x14, 0x1d, 0x4d, 0xc7, 0xd0, 0xb1, 0x74, 0x1b, 0x5a, 0x49,
+ 0xc7, 0xd1, 0xf1, 0x74, 0x02, 0x9d, 0x48, 0x27, 0xd1, 0xc9, 0x74, 0x0a,
+ 0x9d, 0x4a, 0xa7, 0xd1, 0xe9, 0x74, 0x06, 0x9d, 0x49, 0x67, 0xd1, 0xd9,
+ 0x74, 0x0e, 0xdd, 0x96, 0x56, 0xd1, 0x6a, 0xba, 0x1d, 0x9d, 0x4b, 0x6b,
+ 0x68, 0x2d, 0xdd, 0x9e, 0xce, 0xa3, 0x75, 0xb4, 0x9e, 0x36, 0xd0, 0x46,
+ 0xda, 0x44, 0xe7, 0xd3, 0x1d, 0xe8, 0x02, 0xba, 0x23, 0xdd, 0x89, 0x2e,
+ 0xa4, 0x3b, 0xd3, 0x45, 0x74, 0x31, 0xdd, 0x85, 0xee, 0x4a, 0x77, 0xa3,
+ 0xbb, 0xd3, 0x3d, 0xe8, 0x9e, 0x74, 0x2f, 0xba, 0x37, 0xdd, 0x87, 0xee,
+ 0x4b, 0xf7, 0xa3, 0x5f, 0xa1, 0xcd, 0x74, 0x7f, 0xba, 0x84, 0x2e, 0xa5,
+ 0x2d, 0xf4, 0x00, 0xba, 0x8c, 0x1e, 0x48, 0x97, 0xd3, 0x83, 0xe8, 0xc1,
+ 0x74, 0x05, 0x3d, 0x84, 0xae, 0xa4, 0xab, 0xe8, 0x6a, 0x7a, 0x28, 0x5d,
+ 0x43, 0xd7, 0xd2, 0x75, 0x74, 0x3d, 0x3d, 0x8c, 0x1e, 0x4e, 0x8f, 0xa0,
+ 0x1b, 0xe8, 0x91, 0xf4, 0x28, 0x7a, 0x34, 0x3d, 0x86, 0x7e, 0x95, 0x7e,
+ 0x8d, 0xe6, 0x68, 0x4c, 0x8f, 0xa5, 0x5f, 0xa7, 0xdf, 0xa0, 0xc7, 0xd1,
+ 0xe3, 0xe9, 0x09, 0xf4, 0x44, 0x7a, 0x12, 0x3d, 0x99, 0x9e, 0x42, 0x4f,
+ 0xa5, 0xa7, 0xd1, 0xd3, 0xe9, 0x37, 0xe9, 0x19, 0xf4, 0x5b, 0xf4, 0x4c,
+ 0x7a, 0x16, 0x3d, 0x9b, 0x9e, 0x43, 0xbf, 0x4d, 0xbf, 0x43, 0xcf, 0xa5,
+ 0xe7, 0xd1, 0xf3, 0xe9, 0x05, 0xf4, 0xbb, 0xf4, 0x42, 0x7a, 0x11, 0xbd,
+ 0x98, 0x5e, 0x42, 0x2f, 0xa5, 0x97, 0xd1, 0xcb, 0xe9, 0x15, 0xf4, 0x4a,
+ 0xfa, 0x3d, 0x7a, 0x15, 0xbd, 0x9a, 0x5e, 0x43, 0xaf, 0xa5, 0xd7, 0xd1,
+ 0xef, 0xd3, 0xeb, 0xe9, 0x0d, 0xf4, 0x46, 0x7a, 0x13, 0xbd, 0x99, 0xfe,
+ 0x80, 0xde, 0x42, 0x6f, 0xa5, 0x3f, 0xa4, 0xb7, 0xd1, 0xdb, 0xe9, 0x1d,
+ 0xf4, 0x4e, 0xfa, 0x23, 0x7a, 0x17, 0xbd, 0x9b, 0xfe, 0x98, 0xfe, 0x84,
+ 0xde, 0x43, 0xef, 0xa5, 0x3f, 0xa5, 0xf7, 0xd1, 0x9f, 0xd1, 0x9f, 0xd3,
+ 0xfb, 0xe9, 0x03, 0xf4, 0x41, 0xfa, 0x10, 0x7d, 0x98, 0x3e, 0x42, 0x1f,
+ 0xa5, 0x8f, 0xd1, 0xc7, 0xe9, 0x13, 0xf4, 0x49, 0xfa, 0x14, 0xfd, 0x05,
+ 0x7d, 0x9a, 0x3e, 0x43, 0x9f, 0xa5, 0xcf, 0xd1, 0x5f, 0xd2, 0xe7, 0xe9,
+ 0x0b, 0xf4, 0x45, 0xfa, 0x12, 0xfd, 0x15, 0x7d, 0x99, 0xfe, 0x9a, 0xbe,
+ 0x42, 0x5f, 0xa5, 0xaf, 0xd1, 0xd7, 0xe9, 0x1b, 0xf4, 0x37, 0xf4, 0x4d,
+ 0xfa, 0x16, 0x7d, 0x9b, 0xfe, 0x96, 0xfe, 0x8e, 0xfe, 0x9e, 0xfe, 0x81,
+ 0xfe, 0x91, 0xbe, 0x43, 0xdf, 0xa5, 0x7f, 0xa2, 0x49, 0x8a, 0xf3, 0x18,
+ 0xa3, 0xdf, 0x30, 0x7a, 0x82, 0x11, 0x59, 0x05, 0x7f, 0x60, 0xf4, 0x14,
+ 0x23, 0x62, 0x5b, 0x64, 0xa5, 0x3c, 0xc7, 0x40, 0x61, 0x40, 0x18, 0x00,
+ 0x83, 0x08, 0x83, 0x18, 0x83, 0x04, 0x83, 0x14, 0x83, 0x0c, 0x83, 0x1c,
+ 0x83, 0x1d, 0x06, 0x1a, 0x03, 0x83, 0xc1, 0x1e, 0x83, 0x03, 0x06, 0x47,
+ 0x0c, 0x4e, 0x18, 0x9c, 0x31, 0xb0, 0x18, 0x5c, 0x30, 0xb8, 0x62, 0x70,
+ 0xc3, 0xe0, 0x8e, 0xc1, 0x03, 0x83, 0x27, 0x06, 0x2f, 0x0c, 0xde, 0x18,
+ 0x7c, 0x30, 0xf8, 0x62, 0xf0, 0xc3, 0xe0, 0x8f, 0x21, 0x00, 0x43, 0x20,
+ 0x06, 0x05, 0x86, 0x20, 0x0c, 0xc1, 0x18, 0x42, 0x30, 0x84, 0x62, 0x08,
+ 0xc3, 0x10, 0x8e, 0x21, 0x02, 0x43, 0x24, 0x86, 0x28, 0x0c, 0xd1, 0x18,
+ 0x62, 0x30, 0xc4, 0x62, 0x68, 0x83, 0x41, 0x89, 0x21, 0x0e, 0x43, 0x3c,
+ 0x86, 0x04, 0x0c, 0x89, 0x18, 0x92, 0x30, 0x24, 0x63, 0x48, 0xc1, 0x90,
+ 0x8a, 0x21, 0x0d, 0x43, 0x3a, 0x86, 0x0c, 0x0c, 0x99, 0x18, 0xb2, 0x30,
+ 0x64, 0x63, 0xc8, 0xc1, 0xd0, 0x16, 0x83, 0x0a, 0x83, 0x1a, 0x43, 0x3b,
+ 0x0c, 0xb9, 0x18, 0x34, 0x18, 0xb4, 0x18, 0xda, 0x63, 0xc8, 0xc3, 0xa0,
+ 0xc3, 0xa0, 0xc7, 0x60, 0xc0, 0x60, 0xc4, 0x60, 0xc2, 0x90, 0x8f, 0xa1,
+ 0x03, 0x86, 0x02, 0x0c, 0x1d, 0x31, 0x74, 0xc2, 0x50, 0x88, 0xa1, 0x33,
+ 0x86, 0x22, 0x0c, 0xc5, 0x18, 0xba, 0x60, 0xe8, 0x8a, 0xa1, 0x1b, 0x86,
+ 0xee, 0x18, 0x7a, 0x60, 0xe8, 0x89, 0xa1, 0x17, 0x86, 0xde, 0x18, 0xfa,
+ 0x60, 0xe8, 0x8b, 0xa1, 0x1f, 0x86, 0x57, 0x30, 0x98, 0x31, 0xf4, 0xc7,
+ 0x50, 0x82, 0xa1, 0x14, 0x83, 0x05, 0xc3, 0x00, 0x0c, 0x65, 0x18, 0x06,
+ 0x62, 0x28, 0xc7, 0x30, 0x08, 0xc3, 0x60, 0x0c, 0x15, 0x18, 0x86, 0x60,
+ 0xa8, 0xc4, 0x50, 0x85, 0xa1, 0x1a, 0xc3, 0x50, 0x0c, 0x35, 0x18, 0x6a,
+ 0x31, 0xd4, 0x61, 0xa8, 0xc7, 0x30, 0x0c, 0xc3, 0x70, 0x0c, 0x23, 0x30,
+ 0x34, 0x60, 0x18, 0x89, 0x61, 0x14, 0x86, 0xd1, 0x18, 0xc6, 0x60, 0x78,
+ 0x15, 0xc3, 0x6b, 0x18, 0x38, 0x0c, 0x18, 0xc3, 0x58, 0x0c, 0xaf, 0x63,
+ 0x78, 0x03, 0xc3, 0x38, 0x0c, 0xe3, 0x31, 0x4c, 0xc0, 0x30, 0x11, 0xc3,
+ 0x24, 0x0c, 0x93, 0x31, 0x4c, 0xc1, 0x30, 0x15, 0xc3, 0x34, 0x0c, 0xd3,
+ 0x31, 0xbc, 0x89, 0x61, 0x06, 0x86, 0xb7, 0x30, 0xcc, 0xc4, 0x30, 0x0b,
+ 0xc3, 0x6c, 0x0c, 0x73, 0x30, 0xbc, 0x8d, 0xe1, 0x1d, 0x0c, 0x73, 0x31,
+ 0xcc, 0xc3, 0x30, 0x1f, 0xc3, 0x02, 0x0c, 0xef, 0x62, 0x58, 0x88, 0x61,
+ 0x11, 0x86, 0xc5, 0x18, 0x96, 0x60, 0x58, 0x8a, 0x61, 0x19, 0x86, 0xe5,
+ 0x18, 0x56, 0x60, 0x58, 0x89, 0xe1, 0x3d, 0x0c, 0xab, 0x30, 0xac, 0xc6,
+ 0xb0, 0x06, 0xc3, 0x5a, 0x0c, 0xeb, 0x30, 0xbc, 0x8f, 0x61, 0x3d, 0x86,
+ 0x0d, 0x18, 0x36, 0x62, 0xd8, 0x84, 0x61, 0x33, 0x86, 0x0f, 0x30, 0x6c,
+ 0xc1, 0xb0, 0x15, 0xc3, 0x87, 0x18, 0xb6, 0x61, 0xd8, 0x8e, 0x61, 0x07,
+ 0x86, 0x9d, 0x18, 0x3e, 0xc2, 0xb0, 0x0b, 0xc3, 0x6e, 0x0c, 0x1f, 0x63,
+ 0xf8, 0x04, 0xc3, 0x1e, 0x0c, 0x7b, 0x31, 0x7c, 0x8a, 0x61, 0x1f, 0x86,
+ 0xcf, 0x30, 0x7c, 0x8e, 0x61, 0x3f, 0x86, 0x03, 0x18, 0x0e, 0x62, 0x38,
+ 0x84, 0xe1, 0x30, 0x86, 0x23, 0x18, 0x8e, 0x62, 0x38, 0x86, 0xe1, 0x38,
+ 0x86, 0x13, 0x18, 0x4e, 0x62, 0x38, 0x85, 0xe1, 0x0b, 0x0c, 0xa7, 0x31,
+ 0x9c, 0xc1, 0x70, 0x16, 0xc3, 0x39, 0x0c, 0x5f, 0x62, 0x38, 0x8f, 0xe1,
+ 0x02, 0x86, 0x8b, 0x18, 0x2e, 0x61, 0xf8, 0x0a, 0xc3, 0x65, 0x0c, 0x5f,
+ 0x63, 0xb8, 0x82, 0xe1, 0x2a, 0xf1, 0x4d, 0x2c, 0x78, 0xb1, 0xe0, 0xcd,
+ 0x82, 0x0f, 0x0b, 0xbe, 0x2c, 0xf8, 0xb1, 0xe0, 0xcf, 0x42, 0x00, 0x0b,
+ 0x81, 0x2c, 0x28, 0x58, 0x08, 0x62, 0x21, 0x98, 0x85, 0x10, 0x16, 0x42,
+ 0x59, 0x08, 0x63, 0x21, 0x9c, 0x85, 0x08, 0x16, 0x22, 0x59, 0x88, 0x62,
+ 0x21, 0x9a, 0x85, 0x18, 0x16, 0x62, 0x59, 0x68, 0xc3, 0x82, 0x92, 0x85,
+ 0x38, 0x16, 0xe2, 0x59, 0x48, 0x60, 0x21, 0x91, 0x85, 0x24, 0x16, 0x92,
+ 0x59, 0x48, 0x61, 0x21, 0x95, 0x85, 0x34, 0x16, 0xd2, 0x59, 0xc8, 0x60,
+ 0x21, 0x93, 0x85, 0x2c, 0x16, 0xb2, 0x59, 0xc8, 0x61, 0xa1, 0x2d, 0x0b,
+ 0x2a, 0x16, 0xd4, 0x2c, 0xb4, 0x63, 0x21, 0x97, 0x05, 0x0d, 0x0b, 0x5a,
+ 0x16, 0xda, 0xb3, 0x90, 0xc7, 0x82, 0x8e, 0x05, 0x3d, 0x0b, 0x06, 0x16,
+ 0x8c, 0x2c, 0x98, 0x58, 0xc8, 0x67, 0xa1, 0x03, 0x0b, 0x05, 0x2c, 0x74,
+ 0x64, 0xa1, 0x13, 0x0b, 0x85, 0x2c, 0x74, 0x66, 0xa1, 0x88, 0x85, 0x62,
+ 0x16, 0xba, 0xb0, 0xd0, 0x95, 0x85, 0x6e, 0x2c, 0x74, 0x67, 0xa1, 0x07,
+ 0x0b, 0x3d, 0x59, 0xe8, 0xc5, 0x42, 0x6f, 0x16, 0xfa, 0xb0, 0xd0, 0x97,
+ 0x85, 0x7e, 0x2c, 0xbc, 0xc2, 0x82, 0x99, 0x85, 0xfe, 0x2c, 0x94, 0xb0,
+ 0x50, 0xca, 0x82, 0x85, 0x85, 0x01, 0x2c, 0x94, 0xb1, 0x30, 0x90, 0x85,
+ 0x72, 0x16, 0x06, 0xb1, 0x30, 0x98, 0x85, 0x0a, 0x16, 0x86, 0xb0, 0x50,
+ 0xc9, 0x42, 0x15, 0x0b, 0xd5, 0x2c, 0x0c, 0x65, 0xa1, 0x86, 0x85, 0x5a,
+ 0x16, 0xea, 0x58, 0xa8, 0x67, 0x61, 0x18, 0x0b, 0xc3, 0x59, 0x18, 0xc1,
+ 0x42, 0x03, 0x0b, 0x23, 0x59, 0x18, 0xc5, 0xc2, 0x68, 0x16, 0xc6, 0xb0,
+ 0xf0, 0x2a, 0x0b, 0xaf, 0xb1, 0xc0, 0xb1, 0x80, 0x59, 0x18, 0xcb, 0xc2,
+ 0xeb, 0x2c, 0xbc, 0xc1, 0xc2, 0x38, 0x16, 0xc6, 0xb3, 0x30, 0x81, 0x85,
+ 0x89, 0x2c, 0x4c, 0x62, 0x61, 0x32, 0x0b, 0x53, 0x58, 0x98, 0xca, 0xc2,
+ 0x34, 0x16, 0xa6, 0xb3, 0xf0, 0x26, 0x0b, 0x33, 0x58, 0x78, 0x8b, 0x85,
+ 0x99, 0x2c, 0xcc, 0x62, 0x61, 0x36, 0x0b, 0x73, 0x58, 0x78, 0x9b, 0x85,
+ 0x77, 0x58, 0x98, 0xcb, 0xc2, 0x3c, 0x16, 0xe6, 0xb3, 0xb0, 0x80, 0x85,
+ 0x77, 0x59, 0x58, 0xc8, 0xc2, 0x22, 0x16, 0x16, 0xb3, 0xb0, 0x84, 0x85,
+ 0xa5, 0x2c, 0x2c, 0x63, 0x61, 0x39, 0x0b, 0x2b, 0x58, 0x58, 0xc9, 0xc2,
+ 0x7b, 0x2c, 0xac, 0x62, 0x61, 0x35, 0x0b, 0x6b, 0x58, 0x58, 0xcb, 0xc2,
+ 0x3a, 0x16, 0xde, 0x67, 0x61, 0x3d, 0x0b, 0x1b, 0x58, 0xd8, 0xc8, 0xc2,
+ 0x26, 0x16, 0x36, 0xb3, 0xf0, 0x01, 0x0b, 0x5b, 0x58, 0xd8, 0xca, 0xc2,
+ 0x87, 0x2c, 0x6c, 0x63, 0x61, 0x3b, 0x0b, 0x3b, 0x58, 0xd8, 0xc9, 0xc2,
+ 0x47, 0x2c, 0xec, 0x62, 0x61, 0x37, 0x0b, 0x1f, 0xb3, 0xf0, 0x09, 0x0b,
+ 0x7b, 0x58, 0xd8, 0xcb, 0xc2, 0xa7, 0x2c, 0xec, 0x63, 0xe1, 0x33, 0x16,
+ 0x3e, 0x67, 0x61, 0x3f, 0x0b, 0x07, 0x58, 0x38, 0xc8, 0xc2, 0x21, 0x16,
+ 0x0e, 0xb3, 0x70, 0x84, 0x85, 0xa3, 0x2c, 0x1c, 0x63, 0xe1, 0x38, 0x0b,
+ 0x27, 0x58, 0x38, 0xc9, 0xc2, 0x29, 0x16, 0xbe, 0x60, 0xe1, 0x34, 0x0b,
+ 0x67, 0x58, 0x38, 0xcb, 0xc2, 0x39, 0x16, 0xbe, 0x64, 0xe1, 0x3c, 0x0b,
+ 0x17, 0x58, 0xb8, 0xc8, 0xc2, 0x25, 0x16, 0xbe, 0x62, 0xe1, 0x32, 0x0b,
+ 0x5f, 0xb3, 0x70, 0x85, 0x85, 0xab, 0x2c, 0x5c, 0x63, 0xe1, 0x3a, 0x0b,
+ 0x37, 0x58, 0xf8, 0x86, 0x85, 0x9b, 0x2c, 0xdc, 0x62, 0xe1, 0x36, 0x0b,
+ 0xdf, 0xb2, 0xf0, 0x1d, 0x0b, 0xdf, 0xb3, 0xf0, 0x03, 0x0b, 0x3f, 0xb2,
+ 0x70, 0x87, 0x85, 0xbb, 0x2c, 0xfc, 0xc4, 0xc2, 0x3d, 0x16, 0xee, 0xb3,
+ 0xf0, 0x80, 0x85, 0x9f, 0x59, 0x20, 0x36, 0xf9, 0x0b, 0x0b, 0x8f, 0x58,
+ 0xf8, 0x95, 0x85, 0xc7, 0x2c, 0xfc, 0xc6, 0xc2, 0x13, 0x16, 0x7e, 0x67,
+ 0xe1, 0x0f, 0x16, 0x9e, 0xb2, 0xf0, 0x27, 0x0b, 0xcf, 0x58, 0x78, 0xce,
+ 0x8a, 0x28, 0x21, 0xac, 0x32, 0x5f, 0x59, 0x9f, 0x46, 0x59, 0x0f, 0xae,
+ 0x48, 0xed, 0x97, 0x08, 0x01, 0x97, 0x54, 0x90, 0xcc, 0x75, 0xe6, 0x46,
+ 0xdf, 0x82, 0x22, 0x43, 0xae, 0xf5, 0x0f, 0xa1, 0x68, 0xcd, 0x75, 0xe6,
+ 0x65, 0xcc, 0x75, 0xe1, 0x6f, 0x27, 0x08, 0x7f, 0x61, 0xc2, 0x52, 0xda,
+ 0xae, 0xf1, 0x4f, 0x8c, 0x9d, 0x66, 0x6e, 0x31, 0xb7, 0xa1, 0x3b, 0xf3,
+ 0x6d, 0x3f, 0x67, 0x1f, 0x43, 0xae, 0xb2, 0xb6, 0xa1, 0xb6, 0xce, 0x32,
+ 0x84, 0xef, 0x13, 0x75, 0xa9, 0x2e, 0x35, 0xd7, 0x59, 0xba, 0x5a, 0xff,
+ 0x36, 0x59, 0x1f, 0xf2, 0x95, 0xf5, 0x0f, 0xa8, 0x90, 0x93, 0x66, 0x0e,
+ 0x51, 0x72, 0xca, 0x9b, 0x0a, 0x26, 0xb4, 0x29, 0x24, 0x8d, 0x55, 0x49,
+ 0xed, 0xa4, 0x4e, 0xd2, 0x6c, 0xa9, 0x46, 0x5a, 0x28, 0xed, 0x2b, 0xad,
+ 0x96, 0xbe, 0x2a, 0x9d, 0x2f, 0x5d, 0x2f, 0x3d, 0x28, 0xfd, 0x46, 0xfa,
+ 0x83, 0xf4, 0x91, 0xf4, 0xb1, 0xf4, 0x89, 0xf4, 0xa9, 0xf4, 0xb9, 0x0c,
+ 0x64, 0x12, 0x99, 0x4c, 0x46, 0xcb, 0x1c, 0x64, 0xce, 0x32, 0x57, 0x99,
+ 0x9f, 0x2c, 0x52, 0x16, 0x2d, 0x8b, 0x95, 0x65, 0xca, 0x34, 0xb2, 0x02,
+ 0x59, 0x37, 0xd9, 0x00, 0xd9, 0x60, 0x59, 0x9d, 0x6c, 0x8c, 0x6c, 0xa2,
+ 0x6c, 0x92, 0x6c, 0x8a, 0x6c, 0xb6, 0x6c, 0xa9, 0x6c, 0xb5, 0x6c, 0x83,
+ 0x6c, 0xbb, 0xbc, 0xbf, 0xbc, 0x54, 0x3e, 0x40, 0x3e, 0x50, 0x3e, 0x48,
+ 0x5e, 0x21, 0xaf, 0x94, 0x57, 0xcb, 0x6b, 0xe4, 0x75, 0xf2, 0x61, 0xf2,
+ 0x11, 0xf2, 0x91, 0xf2, 0xd1, 0xf2, 0x57, 0xf9, 0x3f, 0x95, 0x24, 0x7f,
+ 0x43, 0x3e, 0x5e, 0x3e, 0x51, 0x3e, 0x59, 0x3e, 0x55, 0x3e, 0x5d, 0x3e,
+ 0x43, 0x3e, 0x53, 0x3e, 0x5b, 0xfe, 0xb6, 0x7c, 0xae, 0x7c, 0xbe, 0xfc,
+ 0x5d, 0xf9, 0x22, 0xf9, 0x12, 0xf9, 0x32, 0xf9, 0x0a, 0xf9, 0x7b, 0xf2,
+ 0xd5, 0xf2, 0xb5, 0xf2, 0xf7, 0xe5, 0x1b, 0xe4, 0x9b, 0xe4, 0x1f, 0xc8,
+ 0xb7, 0xca, 0xb7, 0xc9, 0x77, 0xc8, 0x3f, 0x92, 0xef, 0x96, 0x7f, 0x22,
+ 0xdf, 0x2b, 0xdf, 0x27, 0xff, 0x5c, 0x7e, 0x40, 0x7e, 0x58, 0x7e, 0x4c,
+ 0x7e, 0x52, 0x7e, 0x5a, 0x7e, 0x4e, 0x7e, 0x41, 0xfe, 0x95, 0xfc, 0x8a,
+ 0xfc, 0xba, 0xfc, 0xa6, 0xfc, 0x5b, 0xf9, 0x0f, 0xf2, 0xbb, 0xf2, 0xfb,
+ 0xf2, 0x87, 0xf2, 0x5f, 0xe5, 0x4f, 0xe4, 0x4f, 0xe5, 0xcf, 0xed, 0xc0,
+ 0x4e, 0x62, 0x27, 0xb7, 0x63, 0xec, 0x1c, 0xed, 0x58, 0x3b, 0x37, 0x3b,
+ 0x4f, 0x3b, 0x1f, 0x3b, 0x7f, 0x3b, 0x85, 0x5d, 0x88, 0x5d, 0xb8, 0x5d,
+ 0x94, 0x5d, 0xac, 0x5d, 0x9c, 0x9d, 0xda, 0xce, 0x60, 0xd7, 0xcd, 0xae,
+ 0x9f, 0x9d, 0xd9, 0xae, 0xc4, 0xce, 0x62, 0x57, 0x66, 0x57, 0x6d, 0x57,
+ 0x63, 0x57, 0x67, 0xc7, 0xd9, 0x4d, 0xb2, 0x9b, 0x69, 0xb7, 0xc6, 0x6e,
+ 0x93, 0xdd, 0x1e, 0xbb, 0x63, 0x76, 0x27, 0xec, 0x4e, 0xd9, 0x9d, 0xb6,
+ 0x7b, 0x48, 0x23, 0x92, 0x09, 0xf9, 0x91, 0x8c, 0x26, 0x81, 0xe4, 0x2b,
+ 0x79, 0x24, 0x1f, 0xe9, 0x40, 0xb2, 0x90, 0x62, 0x92, 0x81, 0x74, 0x27,
+ 0xd9, 0x47, 0x6f, 0x92, 0x5b, 0x34, 0x90, 0xcc, 0xe1, 0x75, 0x92, 0x31,
+ 0x4c, 0x22, 0x99, 0x02, 0x9f, 0x01, 0x6c, 0x24, 0x31, 0xfd, 0x08, 0x89,
+ 0xda, 0x27, 0x48, 0xc4, 0xbe, 0x40, 0x22, 0xf0, 0x43, 0x46, 0xca, 0x30,
+ 0x8c, 0x17, 0xe3, 0xc3, 0xf8, 0x31, 0x01, 0x4c, 0x02, 0x93, 0xc9, 0xb4,
+ 0x67, 0x8c, 0x4c, 0x6f, 0xc6, 0xc2, 0x8c, 0x61, 0xde, 0x60, 0x66, 0x31,
+ 0x4b, 0x98, 0x65, 0xcc, 0x0a, 0xe6, 0x3d, 0xe6, 0x20, 0x73, 0x98, 0x39,
+ 0xca, 0x1c, 0x67, 0x4e, 0x32, 0x5f, 0x30, 0x67, 0x98, 0xcb, 0xcc, 0x15,
+ 0xe6, 0x17, 0x7b, 0x89, 0xbd, 0xcc, 0xde, 0xce, 0x9e, 0xb1, 0x77, 0xb0,
+ 0x8f, 0xb6, 0x8f, 0xb5, 0x57, 0xda, 0xc7, 0xdb, 0x27, 0xda, 0x27, 0xdb,
+ 0xa7, 0xda, 0xeb, 0xec, 0x8d, 0xf6, 0x1d, 0xec, 0x3b, 0xd9, 0x17, 0xd9,
+ 0x0f, 0xb1, 0x9f, 0x66, 0x3f, 0xdf, 0xfe, 0x5d, 0xfb, 0x45, 0xf6, 0x4b,
+ 0xec, 0x3f, 0xb5, 0xff, 0xcc, 0x7e, 0xbf, 0xfd, 0x41, 0xfb, 0xc3, 0xf6,
+ 0x47, 0xed, 0x8f, 0xdb, 0x5f, 0xb2, 0xff, 0xda, 0xfe, 0x9a, 0xfd, 0x37,
+ 0xf6, 0x3f, 0xd9, 0xdf, 0xb7, 0x7f, 0xe6, 0xc0, 0x38, 0x38, 0x38, 0x38,
+ 0x39, 0xb0, 0x0e, 0x89, 0x0e, 0xc9, 0x0e, 0xa9, 0x0e, 0xe9, 0x0e, 0x99,
+ 0x0e, 0xd9, 0x0e, 0x6d, 0x1d, 0xb4, 0x0e, 0x79, 0x0e, 0xc5, 0x0e, 0x66,
+ 0x87, 0x12, 0x07, 0x8b, 0x43, 0x99, 0xc3, 0x44, 0x87, 0xc9, 0x0e, 0x53,
+ 0x1d, 0xa6, 0x3b, 0xcc, 0x70, 0x98, 0xe9, 0x30, 0xdb, 0x61, 0xb1, 0xc3,
+ 0x52, 0x87, 0x8d, 0x0e, 0xbb, 0x1d, 0x3e, 0x71, 0xd8, 0xeb, 0xb0, 0xcf,
+ 0xe1, 0x5b, 0x87, 0x07, 0x0e, 0x0f, 0x1d, 0x7e, 0x73, 0xf8, 0xdd, 0xe1,
+ 0xa9, 0xc3, 0x33, 0x47, 0xca, 0x11, 0x1c, 0xc5, 0x8e, 0x2e, 0x8e, 0x6e,
+ 0x8e, 0x21, 0x8e, 0xf1, 0x8e, 0x89, 0x8e, 0xc9, 0x8e, 0xa9, 0x8e, 0xdd,
+ 0x1c, 0x7b, 0x38, 0xf6, 0x72, 0xec, 0xe3, 0xd8, 0xcf, 0xd1, 0xec, 0x58,
+ 0xe2, 0x58, 0xed, 0x58, 0xe3, 0xd8, 0xe0, 0x38, 0xde, 0x71, 0xa2, 0xe3,
+ 0x64, 0xc7, 0xa9, 0x8e, 0xeb, 0x1d, 0x37, 0x3a, 0x6e, 0x76, 0xdc, 0xe2,
+ 0xf8, 0xa1, 0xe3, 0x76, 0xc7, 0x9d, 0x8e, 0x1f, 0x3b, 0xee, 0x71, 0x3c,
+ 0xe6, 0x78, 0xd1, 0xf1, 0x2b, 0xc7, 0xaf, 0x1d, 0xaf, 0x3a, 0x3e, 0x75,
+ 0x7c, 0xe6, 0x44, 0x39, 0x81, 0x93, 0xd8, 0x49, 0xea, 0x24, 0x77, 0xf2,
+ 0x71, 0x4a, 0x72, 0x52, 0x3b, 0xe5, 0x3a, 0x69, 0x9d, 0xf2, 0x9c, 0xca,
+ 0x9c, 0xca, 0x9d, 0x06, 0x3b, 0x0d, 0x71, 0xaa, 0x72, 0x1a, 0xea, 0x54,
+ 0xeb, 0xf4, 0x86, 0xd3, 0x04, 0xa7, 0xc9, 0x4e, 0xd3, 0x9c, 0x66, 0x38,
+ 0x2d, 0x70, 0xda, 0xe2, 0xb4, 0xd7, 0x69, 0x9f, 0xd3, 0xe7, 0x4e, 0x07,
+ 0x9c, 0xbe, 0x75, 0xfa, 0xde, 0xe9, 0x47, 0xa7, 0xbb, 0x4e, 0xf7, 0x9c,
+ 0x1e, 0x38, 0x3d, 0x74, 0xb6, 0x77, 0x76, 0x74, 0x76, 0x73, 0x0e, 0x73,
+ 0x8e, 0x70, 0x8e, 0x72, 0x8e, 0x71, 0x6e, 0xe3, 0x5c, 0xe0, 0xdc, 0xc9,
+ 0xb9, 0xb3, 0x73, 0xb1, 0x73, 0x57, 0xe7, 0xee, 0xce, 0x3d, 0x9d, 0x6b,
+ 0x9d, 0xeb, 0x9d, 0x5f, 0x75, 0xe6, 0x9c, 0xc7, 0x3a, 0xcf, 0x70, 0x5e,
+ 0xe0, 0xbc, 0xda, 0x79, 0xad, 0xf3, 0xfb, 0xce, 0x1b, 0x9c, 0x4f, 0x3a,
+ 0x7f, 0xe1, 0xfc, 0xa5, 0xf3, 0x05, 0xe7, 0x4b, 0xce, 0x97, 0x9d, 0xaf,
+ 0x38, 0x5f, 0x73, 0xbe, 0xc3, 0x4a, 0x58, 0x17, 0xd6, 0x8d, 0xf5, 0x60,
+ 0xbd, 0xd8, 0x0c, 0x36, 0x8b, 0xcd, 0x61, 0x55, 0x6c, 0x3b, 0x56, 0xc3,
+ 0xb6, 0x67, 0x0b, 0xd8, 0x32, 0xb6, 0x8e, 0x1d, 0xc6, 0x8e, 0x60, 0x47,
+ 0xb2, 0x0b, 0xd8, 0x85, 0xec, 0x62, 0x76, 0x29, 0xbb, 0x9c, 0x5d, 0xc9,
+ 0xae, 0x62, 0xb7, 0xb2, 0xdb, 0xd9, 0x8f, 0xd8, 0x8f, 0xd9, 0xa3, 0xec,
+ 0x45, 0xf6, 0x36, 0xfb, 0x1d, 0xfb, 0x03, 0x7b, 0xc7, 0xc5, 0xc1, 0xc5,
+ 0xc9, 0x85, 0x75, 0x71, 0x75, 0x71, 0x77, 0xf1, 0x74, 0xf1, 0x76, 0x89,
+ 0x74, 0x49, 0x73, 0xd1, 0xba, 0xe4, 0xb9, 0xe8, 0x5d, 0x8c, 0x2e, 0x83,
+ 0x5d, 0x86, 0xb8, 0x54, 0xb9, 0x0c, 0x75, 0xa9, 0x75, 0xa9, 0x77, 0x19,
+ 0xee, 0xf2, 0x86, 0xcb, 0x04, 0x97, 0xc9, 0x2e, 0xd3, 0x5c, 0x66, 0xba,
+ 0xcc, 0x76, 0x99, 0xef, 0xb2, 0xca, 0x65, 0x8d, 0xcb, 0x3a, 0x97, 0xf5,
+ 0x2e, 0x27, 0x5c, 0x4e, 0xb9, 0x9c, 0x76, 0x39, 0xeb, 0xf2, 0xa5, 0xcb,
+ 0x05, 0x97, 0x4b, 0x2e, 0xb7, 0x5c, 0xbe, 0x75, 0xf9, 0xd9, 0xe5, 0xb9,
+ 0x2b, 0x72, 0x15, 0xb9, 0x4a, 0x5c, 0xc3, 0x5d, 0x23, 0x5d, 0xa3, 0x5d,
+ 0x63, 0x5d, 0x95, 0xae, 0xf1, 0xae, 0x89, 0xae, 0xa9, 0xae, 0xe9, 0xae,
+ 0x39, 0xae, 0x46, 0xd7, 0x7c, 0xd7, 0x02, 0xd7, 0x4e, 0xae, 0x43, 0x5d,
+ 0x6b, 0x5d, 0xeb, 0x5d, 0x87, 0xbb, 0x36, 0xb8, 0x8e, 0x72, 0x1d, 0xe3,
+ 0x3a, 0xd9, 0x75, 0x9a, 0xeb, 0x0c, 0xd7, 0x59, 0xae, 0xab, 0x5d, 0xd7,
+ 0xba, 0xee, 0x74, 0x3d, 0xe0, 0x7a, 0xc8, 0xf5, 0x88, 0xeb, 0x31, 0xd7,
+ 0xbb, 0xae, 0xf7, 0x5c, 0x1f, 0xb8, 0x3e, 0x74, 0x7d, 0xe4, 0xfa, 0xd8,
+ 0xf5, 0x89, 0x1b, 0xe5, 0x26, 0x77, 0x73, 0x77, 0xf3, 0x74, 0xf3, 0x76,
+ 0xf3, 0x75, 0xcb, 0x76, 0x6b, 0xeb, 0xa6, 0x76, 0xcb, 0x75, 0xd3, 0xba,
+ 0xe5, 0xb9, 0xe9, 0xdd, 0x0a, 0xdc, 0x3a, 0xb9, 0x75, 0x73, 0x2b, 0x75,
+ 0x1b, 0xe0, 0x36, 0xd0, 0x6d, 0x90, 0xdb, 0x14, 0xb7, 0x69, 0x6e, 0x6f,
+ 0xba, 0xbd, 0xe5, 0x36, 0xcb, 0x6d, 0x8e, 0xdb, 0x3b, 0x6e, 0x5b, 0xdc,
+ 0x3e, 0x74, 0x3b, 0xe8, 0x76, 0xd6, 0xed, 0x4b, 0xb7, 0x0b, 0x6e, 0x97,
+ 0xdc, 0xfe, 0x70, 0xfb, 0xd3, 0xed, 0xb9, 0x3b, 0x72, 0x17, 0xb9, 0x4b,
+ 0xdc, 0x65, 0xee, 0xf6, 0xee, 0x8e, 0xee, 0x6e, 0xee, 0x41, 0xee, 0x21,
+ 0xee, 0x61, 0xee, 0x11, 0xee, 0xf9, 0xee, 0x9d, 0xdd, 0x8b, 0xdd, 0xbb,
+ 0xba, 0x77, 0x77, 0xef, 0xe9, 0xde, 0xdb, 0xbd, 0xaf, 0xfb, 0x2b, 0xee,
+ 0x43, 0xdc, 0xab, 0xdd, 0x6b, 0xdd, 0x87, 0xb9, 0x73, 0xee, 0x63, 0xdd,
+ 0xdf, 0x75, 0x5f, 0xe3, 0xbe, 0xce, 0x7d, 0xbd, 0xfb, 0x46, 0xf7, 0xb3,
+ 0xee, 0x5f, 0xba, 0x5f, 0x70, 0xbf, 0xe4, 0x7e, 0xd9, 0xfd, 0x8a, 0xfb,
+ 0x35, 0xf7, 0x1b, 0xee, 0x77, 0xdd, 0xef, 0xb9, 0x3f, 0x75, 0x7f, 0xe6,
+ 0x41, 0x79, 0x80, 0x47, 0x88, 0x47, 0x98, 0x47, 0x84, 0x47, 0x94, 0x47,
+ 0x8c, 0x47, 0x1b, 0x8f, 0x38, 0x0f, 0x8d, 0x47, 0x7b, 0x0f, 0x8b, 0x47,
+ 0x8d, 0x47, 0x9d, 0xc7, 0x30, 0x8f, 0x11, 0x1e, 0x0b, 0x3d, 0x16, 0x7b,
+ 0x2c, 0xf5, 0x58, 0xee, 0xb1, 0xd2, 0x63, 0x95, 0xc7, 0x1a, 0x8f, 0x75,
+ 0x1e, 0x3b, 0x3d, 0x76, 0x79, 0x1c, 0xf2, 0x38, 0xe2, 0x71, 0xcc, 0xe3,
+ 0x84, 0xc7, 0x3d, 0x8f, 0x07, 0x1e, 0x0f, 0x3d, 0x1e, 0x79, 0x3c, 0xf6,
+ 0x78, 0xe2, 0xf1, 0x87, 0x27, 0xe5, 0x09, 0x9e, 0x72, 0x4f, 0x77, 0x4f,
+ 0x4f, 0x4f, 0x6f, 0x4f, 0x5f, 0xcf, 0x6c, 0xcf, 0xb6, 0x9e, 0x6a, 0xcf,
+ 0x5c, 0x4f, 0xad, 0x67, 0x9e, 0xa7, 0xde, 0x73, 0x80, 0xe7, 0x04, 0xcf,
+ 0xd9, 0x9e, 0x6f, 0x7b, 0xce, 0xf5, 0x9c, 0xef, 0xb9, 0xc7, 0xf3, 0x53,
+ 0xcf, 0xcf, 0x3c, 0xf7, 0x7b, 0x1e, 0xf4, 0x3c, 0xec, 0x79, 0xd4, 0xf3,
+ 0xb8, 0xe7, 0x6d, 0xcf, 0xef, 0x3c, 0x1f, 0x79, 0x3e, 0xf6, 0x7c, 0xe2,
+ 0xf9, 0x87, 0x97, 0x9f, 0x57, 0x80, 0x97, 0xc2, 0x2b, 0xd8, 0x2b, 0xd4,
+ 0x2b, 0xdc, 0x2b, 0xd2, 0xab, 0x8d, 0x57, 0xa6, 0x97, 0xce, 0xcb, 0xe0,
+ 0x65, 0xf2, 0xea, 0xe0, 0x55, 0xe9, 0x55, 0xed, 0x55, 0xe3, 0x55, 0xe7,
+ 0x35, 0xcc, 0x6b, 0x84, 0xd7, 0x48, 0xaf, 0x09, 0x5e, 0x93, 0xbd, 0xa6,
+ 0x79, 0xcd, 0xf0, 0x5a, 0xe8, 0xb5, 0xd8, 0xeb, 0x43, 0xaf, 0x7d, 0x5e,
+ 0x9f, 0x7b, 0x1d, 0xf0, 0x3a, 0xe4, 0xf5, 0xbd, 0xd7, 0x8f, 0x5e, 0x77,
+ 0xbd, 0xee, 0x79, 0x3d, 0xf0, 0x7a, 0xe8, 0xf5, 0xc8, 0xdb, 0xcf, 0xbb,
+ 0xad, 0xb7, 0xc9, 0xbb, 0x83, 0x77, 0x47, 0xef, 0x42, 0xef, 0x1a, 0xef,
+ 0x3a, 0xef, 0x61, 0xde, 0x23, 0xbc, 0x47, 0x7a, 0x8f, 0xf6, 0x7e, 0xd5,
+ 0xfb, 0x5d, 0xef, 0x0f, 0xbd, 0xf7, 0x79, 0x7f, 0xee, 0x7d, 0xc0, 0xfb,
+ 0x90, 0xf7, 0x5d, 0xef, 0x7b, 0xde, 0x0f, 0xbc, 0x1f, 0x7a, 0x3f, 0xf2,
+ 0x7e, 0xec, 0xfd, 0xc4, 0x47, 0xea, 0x63, 0xe7, 0x63, 0xef, 0xe3, 0xe4,
+ 0x13, 0xec, 0x93, 0xe3, 0x63, 0xf4, 0xc9, 0xf7, 0x29, 0xf0, 0xe9, 0xe4,
+ 0x53, 0xef, 0x33, 0xdc, 0xa7, 0xc1, 0x67, 0x94, 0xcf, 0x18, 0x9f, 0xd7,
+ 0x7c, 0xb0, 0xcf, 0x74, 0x9f, 0x0f, 0x7c, 0xf6, 0xf8, 0x7c, 0xea, 0xf3,
+ 0x99, 0xcf, 0x7e, 0x9f, 0x1f, 0x7c, 0xee, 0xf8, 0xfc, 0xe4, 0x73, 0xdf,
+ 0xe7, 0x67, 0x9f, 0x5f, 0x7c, 0x7e, 0xf5, 0x05, 0xdf, 0x60, 0xdf, 0x24,
+ 0xdf, 0x14, 0xdf, 0x34, 0xdf, 0x0c, 0xdf, 0x2c, 0xdf, 0xde, 0xbe, 0x7d,
+ 0x7d, 0x5f, 0xf1, 0xed, 0xef, 0x5b, 0xea, 0x3b, 0xc0, 0x77, 0xa0, 0x6f,
+ 0x83, 0xef, 0x68, 0xdf, 0xd7, 0x7c, 0xc7, 0xfa, 0x8e, 0xf3, 0x9d, 0xe1,
+ 0x3b, 0xcf, 0x77, 0x81, 0xef, 0x42, 0xdf, 0x75, 0xbe, 0xfb, 0x7c, 0xcf,
+ 0xf8, 0x9e, 0xf3, 0x3d, 0xef, 0x7b, 0xd1, 0xf7, 0x2b, 0x3f, 0xca, 0x0f,
+ 0xfc, 0xc4, 0x7e, 0x52, 0x3f, 0xb9, 0x1f, 0xed, 0x67, 0xef, 0xc7, 0xfa,
+ 0xb9, 0xfa, 0x05, 0xf9, 0x25, 0xfa, 0x25, 0xfb, 0xa5, 0xfa, 0xa5, 0xfb,
+ 0x65, 0xfa, 0xf5, 0xf3, 0x33, 0xfb, 0x95, 0xf8, 0x59, 0xfc, 0xca, 0xfc,
+ 0xca, 0xfd, 0x06, 0xfb, 0xd5, 0xf8, 0xd5, 0xf9, 0x61, 0xbf, 0xd7, 0xfd,
+ 0xc6, 0xf9, 0x4d, 0xf0, 0x5b, 0xed, 0xb7, 0xd6, 0xef, 0x7d, 0xbf, 0x0d,
+ 0x7e, 0x9b, 0xfc, 0x3e, 0xf0, 0xdb, 0xea, 0xf7, 0x89, 0xdf, 0x5e, 0xbf,
+ 0xa3, 0x7e, 0x97, 0xfd, 0xae, 0xf8, 0x5d, 0xf3, 0xbb, 0xe1, 0x77, 0xd3,
+ 0xdf, 0xce, 0x9f, 0xf1, 0x77, 0xf0, 0x77, 0xf2, 0x67, 0xfd, 0x5d, 0xfd,
+ 0xdd, 0xfd, 0xfd, 0xfc, 0x03, 0xfc, 0xa3, 0xfd, 0xb3, 0xfc, 0x73, 0xfc,
+ 0x55, 0xfe, 0xed, 0xfc, 0x35, 0xfe, 0x03, 0xfd, 0x07, 0xf9, 0x57, 0xf8,
+ 0x57, 0xfa, 0x57, 0xfb, 0xd7, 0xf8, 0xd7, 0xf9, 0x0f, 0xf3, 0x7f, 0xd5,
+ 0x9f, 0xf3, 0x9f, 0xe6, 0xff, 0xa6, 0xff, 0x5b, 0xfe, 0xb3, 0xfc, 0xb7,
+ 0xfa, 0x6f, 0xf3, 0xdf, 0xe1, 0xff, 0x91, 0xff, 0x6e, 0xff, 0x4f, 0xfc,
+ 0xf7, 0xfa, 0x1f, 0xf3, 0x3f, 0xe1, 0x7f, 0xdb, 0xff, 0xa1, 0xff, 0x23,
+ 0xff, 0xc7, 0xfe, 0x4f, 0x02, 0x7c, 0x02, 0xfc, 0x02, 0x02, 0x02, 0x14,
+ 0x01, 0xc1, 0x01, 0xa1, 0x01, 0xe1, 0x01, 0x09, 0x01, 0x59, 0x01, 0xfa,
+ 0x00, 0x63, 0x40, 0x7e, 0x40, 0x41, 0x40, 0x55, 0xc0, 0xd0, 0x80, 0xda,
+ 0x80, 0xfa, 0x80, 0xe1, 0x01, 0x0d, 0x01, 0xa3, 0x02, 0x26, 0x04, 0xcc,
+ 0x0c, 0x58, 0x1c, 0xb0, 0x34, 0x60, 0x45, 0xc0, 0x7b, 0x01, 0x9f, 0x05,
+ 0xec, 0x0f, 0x38, 0x18, 0x70, 0x38, 0xe0, 0x68, 0xc0, 0x89, 0x80, 0x53,
+ 0x01, 0x5f, 0x07, 0x5c, 0x0b, 0xf8, 0x26, 0xe0, 0x76, 0xc0, 0xcf, 0x01,
+ 0x4f, 0x03, 0xed, 0x02, 0xed, 0x03, 0x9d, 0x02, 0xd9, 0x40, 0x65, 0x60,
+ 0x7c, 0x60, 0x62, 0x60, 0x72, 0x60, 0x6a, 0x60, 0x46, 0x60, 0x56, 0xa0,
+ 0x2e, 0xb0, 0x38, 0xd0, 0x1c, 0x58, 0x1a, 0x58, 0x16, 0x58, 0x1e, 0x38,
+ 0x3e, 0x70, 0x62, 0xe0, 0xe4, 0xc0, 0xa9, 0x81, 0xd3, 0x03, 0xdf, 0x0a,
+ 0x9c, 0x15, 0xb8, 0x30, 0x70, 0x75, 0xe0, 0x87, 0x81, 0x3b, 0x02, 0x77,
+ 0x05, 0x7e, 0x1c, 0x78, 0x29, 0xf0, 0x72, 0xe0, 0x95, 0xc0, 0x6b, 0x81,
+ 0x37, 0x02, 0x6f, 0x05, 0x7e, 0x1b, 0x78, 0x37, 0xf0, 0xa9, 0xc2, 0x4e,
+ 0x61, 0xaf, 0x70, 0x52, 0xb0, 0x0a, 0xa5, 0x22, 0x5e, 0x91, 0xa8, 0x48,
+ 0x56, 0xa4, 0x2a, 0x32, 0x14, 0x59, 0x8a, 0x76, 0x8a, 0x4e, 0x8a, 0x3e,
+ 0x8a, 0x57, 0x14, 0x25, 0x0a, 0x8b, 0x62, 0xac, 0xe2, 0x0d, 0xc5, 0x04,
+ 0xc5, 0x24, 0xc5, 0x14, 0xc5, 0x74, 0xc5, 0x0c, 0xc5, 0x42, 0xc5, 0x12,
+ 0xc5, 0x72, 0xc5, 0x7b, 0x8a, 0x4f, 0x14, 0x47, 0x15, 0x27, 0x14, 0x5f,
+ 0x28, 0xce, 0x28, 0xee, 0x2b, 0x7e, 0x56, 0x3c, 0x52, 0x3c, 0x56, 0x3c,
+ 0x51, 0x3c, 0x55, 0x3c, 0x0b, 0x92, 0x05, 0xf9, 0x06, 0x45, 0x06, 0xc5,
+ 0x04, 0x29, 0x83, 0xe2, 0x83, 0x3a, 0x04, 0x75, 0x0c, 0xea, 0x1c, 0x54,
+ 0x1c, 0xd4, 0x35, 0xa8, 0x47, 0x50, 0xaf, 0xa0, 0x92, 0xa0, 0x61, 0x41,
+ 0xaf, 0x07, 0x8d, 0x0f, 0x9a, 0x14, 0x34, 0x25, 0x68, 0x75, 0xd0, 0xda,
+ 0xa0, 0xf5, 0x41, 0x1b, 0x83, 0x36, 0x07, 0x6d, 0x0d, 0xda, 0x16, 0xf4,
+ 0x59, 0xd0, 0x81, 0xa0, 0xc3, 0x41, 0xc7, 0x82, 0x6e, 0x04, 0xdd, 0x0b,
+ 0xfa, 0x39, 0xe8, 0x51, 0xd0, 0xe3, 0x60, 0xb7, 0x60, 0x8f, 0x60, 0xef,
+ 0x60, 0xdf, 0x60, 0xff, 0x60, 0x45, 0x70, 0x70, 0x70, 0x72, 0x70, 0xbb,
+ 0x60, 0x6d, 0xb0, 0x2e, 0xd8, 0x10, 0x3c, 0x20, 0x78, 0x60, 0xf0, 0xe0,
+ 0xe0, 0x21, 0xc1, 0x55, 0xc1, 0x35, 0xc1, 0x75, 0xc1, 0xa3, 0x83, 0xa7,
+ 0x07, 0x2f, 0x08, 0x5e, 0x14, 0xbc, 0x34, 0x78, 0x79, 0xf0, 0xde, 0xe0,
+ 0x7d, 0xc1, 0xfb, 0x83, 0x0f, 0x06, 0x1f, 0x0e, 0x3e, 0x16, 0x7c, 0x22,
+ 0xf8, 0x5c, 0xf0, 0xcd, 0xe0, 0x07, 0xc1, 0xbf, 0x04, 0x3f, 0x0e, 0x7e,
+ 0x12, 0xe2, 0x11, 0xe2, 0x15, 0xe2, 0x1b, 0xe2, 0x1f, 0x12, 0x18, 0x12,
+ 0x1c, 0x12, 0x1a, 0x92, 0x10, 0x92, 0x1c, 0x92, 0x16, 0x92, 0x19, 0x92,
+ 0x1f, 0xd2, 0x2b, 0x64, 0x60, 0xc8, 0xe0, 0x90, 0xca, 0x90, 0xea, 0x90,
+ 0x69, 0x21, 0x6f, 0x86, 0xbc, 0x15, 0x32, 0x2b, 0x64, 0x4e, 0xc8, 0xdc,
+ 0x90, 0xf9, 0x21, 0xbb, 0x42, 0xae, 0x85, 0xdc, 0x0d, 0xb9, 0x1f, 0xf2,
+ 0x30, 0xe4, 0x51, 0xa8, 0x4b, 0xa8, 0x5b, 0xa8, 0x47, 0xa8, 0x57, 0xa8,
+ 0x4f, 0xa8, 0x7f, 0x68, 0x60, 0x68, 0x72, 0x68, 0x71, 0xa8, 0x39, 0xb4,
+ 0x34, 0xb4, 0x2c, 0xb4, 0x3c, 0x74, 0x7c, 0xe8, 0xc4, 0xd0, 0xc9, 0xa1,
+ 0x53, 0x43, 0xa7, 0x87, 0xbe, 0x15, 0x3a, 0x2b, 0x74, 0x49, 0xe8, 0x67,
+ 0xa1, 0xa7, 0x42, 0xcf, 0x84, 0x7e, 0x19, 0x7a, 0x21, 0xf4, 0x51, 0xe8,
+ 0xe3, 0xd0, 0x27, 0xa1, 0x7f, 0x84, 0xfe, 0x19, 0x46, 0x85, 0x41, 0x98,
+ 0x7b, 0x58, 0x5a, 0x98, 0x36, 0x4c, 0x17, 0x66, 0x0c, 0xcb, 0x0f, 0x2b,
+ 0x0f, 0x1b, 0x1c, 0x56, 0x19, 0x56, 0x1d, 0x56, 0x13, 0x56, 0x1f, 0x36,
+ 0x3c, 0x6c, 0x52, 0xd8, 0xdc, 0xb0, 0x95, 0x61, 0xab, 0xc3, 0xd6, 0x85,
+ 0xad, 0x0f, 0x3b, 0x12, 0x76, 0x2c, 0xec, 0x64, 0xd8, 0x17, 0x61, 0x67,
+ 0xc2, 0xbe, 0x0c, 0xbb, 0x10, 0xf6, 0x4d, 0xd8, 0xa3, 0x70, 0x08, 0x97,
+ 0x84, 0xcb, 0xc3, 0xe9, 0xf0, 0x98, 0xf0, 0x36, 0xe1, 0x71, 0xe1, 0x09,
+ 0xe1, 0xc9, 0xe1, 0x69, 0xe1, 0x19, 0xe1, 0x85, 0xe1, 0x45, 0xe1, 0x65,
+ 0xe1, 0x75, 0xe1, 0xc3, 0xc3, 0x47, 0x86, 0x8f, 0x0e, 0x5f, 0x18, 0xbe,
+ 0x24, 0x7c, 0x59, 0xf8, 0x8a, 0xf0, 0x55, 0xe1, 0x6b, 0xc3, 0xdf, 0x0f,
+ 0xff, 0x38, 0x7c, 0x6f, 0xf8, 0x67, 0xe1, 0x07, 0xc2, 0x0f, 0x87, 0xdf,
+ 0x08, 0xbf, 0x19, 0xfe, 0x53, 0xf8, 0x1f, 0xe1, 0xcf, 0x22, 0x50, 0x84,
+ 0x28, 0x22, 0x34, 0x22, 0x22, 0x22, 0x2a, 0x22, 0x26, 0x42, 0x19, 0x91,
+ 0x10, 0x91, 0x14, 0xa1, 0x8e, 0xd0, 0x44, 0xe4, 0x45, 0x18, 0x22, 0x8a,
+ 0x23, 0xba, 0x46, 0x98, 0x23, 0x2a, 0x23, 0x86, 0x46, 0xd4, 0x45, 0x0c,
+ 0x8b, 0x78, 0x27, 0x62, 0x7e, 0xc4, 0xbb, 0x11, 0x8b, 0x22, 0x96, 0x46,
+ 0xac, 0x88, 0x78, 0x2f, 0x62, 0x7d, 0xc4, 0xc6, 0x88, 0xdd, 0x11, 0x87,
+ 0x23, 0x8e, 0x45, 0x9c, 0x8c, 0xf8, 0x22, 0xe2, 0xa7, 0x88, 0xfb, 0x11,
+ 0x0f, 0x23, 0x1e, 0x45, 0x3c, 0x8e, 0xf8, 0x3d, 0xe2, 0x69, 0xa4, 0x38,
+ 0xd2, 0x23, 0x32, 0x24, 0x32, 0x3c, 0x32, 0x2a, 0x32, 0x26, 0x32, 0x3f,
+ 0xb2, 0x63, 0x64, 0x61, 0x64, 0x51, 0x64, 0xd7, 0xc8, 0x1e, 0x91, 0xbd,
+ 0x22, 0xcb, 0x22, 0xcb, 0x23, 0xeb, 0x23, 0xc7, 0x46, 0x8e, 0x8b, 0x9c,
+ 0x18, 0x39, 0x39, 0x72, 0x55, 0xe4, 0x9a, 0xc8, 0xf7, 0x23, 0x37, 0x44,
+ 0x6e, 0x8a, 0xdc, 0x12, 0xf9, 0x61, 0xe4, 0xde, 0xc8, 0xe3, 0x91, 0x97,
+ 0x22, 0xbf, 0x8e, 0xbc, 0x16, 0x79, 0x23, 0x4a, 0x14, 0x25, 0x8d, 0x62,
+ 0xa2, 0x1c, 0xa2, 0x9c, 0xa2, 0xd8, 0x28, 0xb7, 0x28, 0x8f, 0xa8, 0xa0,
+ 0xa8, 0xd8, 0xa8, 0x8c, 0xa8, 0xec, 0x28, 0x55, 0x54, 0xbb, 0xa8, 0xfe,
+ 0x51, 0x96, 0xa8, 0xb2, 0xa8, 0xf2, 0xa8, 0xc1, 0x51, 0x95, 0x51, 0xd5,
+ 0x51, 0xa3, 0xa3, 0x26, 0x46, 0xcd, 0x89, 0x9a, 0x1b, 0xb5, 0x20, 0x6a,
+ 0x61, 0xd4, 0x47, 0x51, 0xbb, 0xa3, 0xf6, 0x44, 0x7d, 0x1a, 0xf5, 0x59,
+ 0xd4, 0x81, 0xa8, 0x43, 0x51, 0xe7, 0xa2, 0x2e, 0x44, 0x7d, 0x15, 0x75,
+ 0x25, 0xea, 0xdb, 0x68, 0x3a, 0xda, 0x33, 0xda, 0x27, 0xda, 0x3f, 0x3a,
+ 0x30, 0x3a, 0x3b, 0xba, 0x6d, 0x74, 0xbb, 0x68, 0x4d, 0x74, 0xfb, 0x68,
+ 0x7d, 0xb4, 0x31, 0xba, 0x47, 0x34, 0x17, 0x3d, 0x2d, 0x7a, 0x46, 0xf4,
+ 0xac, 0xe8, 0x39, 0xd1, 0x1f, 0x44, 0x6f, 0x8d, 0xde, 0x1e, 0xbd, 0x33,
+ 0x7a, 0x57, 0xf4, 0x27, 0xd1, 0x7b, 0xa3, 0x4f, 0x46, 0xff, 0x1a, 0x23,
+ 0x8a, 0x91, 0xc6, 0xd8, 0xc5, 0x30, 0x31, 0x91, 0x31, 0xd1, 0x31, 0x6d,
+ 0x62, 0xe2, 0x62, 0x12, 0x62, 0x92, 0x63, 0x52, 0x63, 0x7a, 0xc4, 0x0c,
+ 0x88, 0x29, 0x8f, 0xa9, 0x88, 0xa9, 0x8c, 0x99, 0x12, 0x33, 0x2d, 0x66,
+ 0x46, 0xcc, 0xcc, 0x98, 0xd9, 0x31, 0xef, 0xc4, 0xcc, 0x8b, 0xd9, 0x1b,
+ 0x73, 0x3c, 0xe6, 0x54, 0xcc, 0x99, 0x98, 0x73, 0x31, 0x3f, 0xc7, 0xfc,
+ 0x12, 0xf3, 0x38, 0xe6, 0x49, 0xcc, 0x1f, 0x31, 0xcf, 0x62, 0xa9, 0xd8,
+ 0x88, 0xd8, 0xe4, 0xd8, 0xb4, 0xd8, 0x8c, 0xd8, 0xac, 0xd8, 0x57, 0x62,
+ 0xfb, 0xc7, 0x96, 0xc6, 0x0e, 0x88, 0x1d, 0x18, 0x3b, 0x28, 0x76, 0x48,
+ 0x6c, 0x55, 0xec, 0xec, 0xd8, 0x85, 0xb1, 0xef, 0xc7, 0x6e, 0x89, 0xdd,
+ 0x15, 0xfb, 0x79, 0x9b, 0x7b, 0x6d, 0x1e, 0xb4, 0xf9, 0xa5, 0xcd, 0xe3,
+ 0x36, 0x4f, 0xda, 0x3c, 0x6d, 0xf3, 0x4c, 0x49, 0x29, 0x41, 0x29, 0x51,
+ 0xca, 0x94, 0x76, 0x4a, 0x46, 0xe9, 0xa0, 0x74, 0x52, 0xba, 0x28, 0xdd,
+ 0x95, 0x5e, 0x4a, 0x5f, 0x65, 0x80, 0x32, 0x48, 0x19, 0xaa, 0x0c, 0x57,
+ 0x46, 0x29, 0x63, 0x94, 0x6d, 0x94, 0x71, 0xca, 0x04, 0x65, 0xb2, 0x32,
+ 0x55, 0x99, 0xae, 0xcc, 0x54, 0xe6, 0x28, 0x55, 0xca, 0x5c, 0xa5, 0x56,
+ 0x99, 0xa7, 0xd4, 0x2b, 0x8d, 0xca, 0x7c, 0x65, 0x81, 0xb2, 0x50, 0x59,
+ 0xac, 0xec, 0xaa, 0xec, 0xae, 0xec, 0xa9, 0xec, 0xad, 0xec, 0xab, 0x34,
+ 0x2b, 0x4b, 0x95, 0x65, 0xca, 0x72, 0xe5, 0x60, 0xe5, 0x10, 0x65, 0xb5,
+ 0xb2, 0x46, 0x59, 0xa7, 0x1c, 0xa6, 0x1c, 0xa1, 0x1c, 0xa5, 0x7c, 0x55,
+ 0x89, 0x95, 0x6f, 0x28, 0x27, 0x28, 0x27, 0x2b, 0xa7, 0x29, 0x67, 0x28,
+ 0x67, 0x29, 0xdf, 0x56, 0xce, 0x53, 0x2e, 0x50, 0x2e, 0x54, 0x2e, 0x56,
+ 0x2e, 0x55, 0x2e, 0x57, 0xbe, 0xa7, 0x5c, 0xad, 0x5c, 0xab, 0x7c, 0x5f,
+ 0xb9, 0x41, 0xb9, 0x59, 0xb9, 0x45, 0xb9, 0x4d, 0xb9, 0x53, 0xb9, 0x4b,
+ 0xf9, 0xb1, 0x72, 0x8f, 0x72, 0x9f, 0x72, 0xbf, 0xf2, 0x90, 0xf2, 0x88,
+ 0xf2, 0x98, 0xf2, 0x84, 0xf2, 0x94, 0xf2, 0xb4, 0xf2, 0x9c, 0xf2, 0xbc,
+ 0xf2, 0xa2, 0xf2, 0xb2, 0xf2, 0xaa, 0xf2, 0x86, 0xf2, 0x96, 0xf2, 0x3b,
+ 0xe5, 0x8f, 0xca, 0x9f, 0x94, 0x0f, 0x94, 0xbf, 0x28, 0x1f, 0x2b, 0x7f,
+ 0x57, 0xfe, 0x19, 0x47, 0xc5, 0x41, 0x9c, 0x38, 0x4e, 0x16, 0x47, 0xc7,
+ 0x39, 0xc4, 0x39, 0xc7, 0xb9, 0xc6, 0xb9, 0xc7, 0x79, 0xc5, 0xf9, 0xc4,
+ 0xf9, 0xc5, 0x05, 0xc6, 0x05, 0xc7, 0x85, 0xc5, 0x45, 0xc6, 0xc5, 0xc4,
+ 0x29, 0xe3, 0x12, 0xe2, 0x92, 0xe3, 0xd2, 0xe2, 0x32, 0xe3, 0x72, 0xe2,
+ 0xd4, 0x71, 0x9a, 0xb8, 0xbc, 0x38, 0x43, 0x5c, 0x7e, 0x5c, 0xc7, 0xb8,
+ 0xce, 0x71, 0x5d, 0xe2, 0xba, 0xc7, 0xf5, 0x8a, 0xeb, 0x1b, 0x67, 0x8e,
+ 0x2b, 0x8d, 0x2b, 0x8b, 0x2b, 0x8f, 0x1b, 0x1c, 0x57, 0x19, 0xf7, 0x5a,
+ 0xdc, 0xd8, 0xb8, 0x71, 0x71, 0x13, 0xe3, 0xa6, 0xc4, 0xcd, 0x89, 0x5b,
+ 0x14, 0xb7, 0x3e, 0x6e, 0x53, 0xdc, 0x96, 0xb8, 0x6d, 0x71, 0x3b, 0xe3,
+ 0x76, 0xc7, 0xed, 0x89, 0xdb, 0x17, 0xb7, 0x3f, 0xee, 0xe7, 0xb8, 0x3f,
+ 0xe2, 0x25, 0xf1, 0x8e, 0xf1, 0x6c, 0xbc, 0x6b, 0xbc, 0x7b, 0xbc, 0x67,
+ 0xbc, 0x77, 0xbc, 0x6f, 0x7c, 0x40, 0x7c, 0x50, 0x7c, 0x48, 0x7c, 0x5a,
+ 0x7c, 0x5e, 0x7c, 0xc7, 0xf8, 0x01, 0xf1, 0x03, 0xe3, 0x07, 0xc7, 0x57,
+ 0xc6, 0x0f, 0x8d, 0xaf, 0x8b, 0x1f, 0x1e, 0xdf, 0x10, 0x3f, 0x2a, 0x7e,
+ 0x4c, 0x3c, 0x17, 0x3f, 0x36, 0x7e, 0x5c, 0xfc, 0x86, 0xf8, 0xdd, 0xf1,
+ 0x87, 0xe3, 0x8f, 0xc6, 0x1f, 0x8f, 0x3f, 0x11, 0x7f, 0x2a, 0xfe, 0x74,
+ 0xfc, 0x99, 0xf8, 0x73, 0xf1, 0xe7, 0xe3, 0x7f, 0x8b, 0xff, 0x3d, 0xfe,
+ 0x69, 0xfc, 0xb3, 0x04, 0x94, 0x20, 0x4e, 0x90, 0x26, 0x04, 0x26, 0x04,
+ 0x25, 0x18, 0x13, 0xf2, 0x13, 0x0a, 0x12, 0x3a, 0x26, 0x14, 0x26, 0x14,
+ 0x25, 0x14, 0x27, 0x74, 0x4d, 0xe8, 0x9e, 0x30, 0x2e, 0x61, 0x42, 0xc2,
+ 0xa4, 0x84, 0x29, 0x09, 0xd3, 0x12, 0x66, 0x24, 0xcc, 0x4a, 0x78, 0x3b,
+ 0x61, 0x5e, 0xc2, 0x82, 0x84, 0x15, 0x09, 0x1f, 0x26, 0xec, 0x48, 0xd8,
+ 0x95, 0xf0, 0x49, 0xc2, 0xa7, 0x09, 0x47, 0x12, 0x8e, 0x26, 0x9c, 0x48,
+ 0xb8, 0x96, 0xf0, 0x7d, 0xc2, 0xfd, 0x84, 0x47, 0x89, 0x01, 0x89, 0x8a,
+ 0xc4, 0xe0, 0xc4, 0x90, 0xc4, 0xb0, 0xc4, 0x88, 0xc4, 0xc8, 0xc4, 0xe8,
+ 0xc4, 0xd8, 0xc4, 0x2e, 0x89, 0xdd, 0x12, 0x7b, 0x24, 0xf6, 0x4c, 0xec,
+ 0x9d, 0xd8, 0x37, 0xb1, 0x5f, 0xa2, 0x39, 0xb1, 0x24, 0xb1, 0x3a, 0x71,
+ 0x61, 0xe2, 0x92, 0xc4, 0x65, 0x89, 0x2b, 0x12, 0xdf, 0x4b, 0x5c, 0x9d,
+ 0xb8, 0x36, 0x71, 0x7d, 0xe2, 0xa6, 0xc4, 0x0f, 0x12, 0xb7, 0x27, 0xee,
+ 0x4d, 0x3c, 0x97, 0x78, 0x3e, 0xf1, 0x62, 0xe2, 0xe5, 0xc4, 0xab, 0x89,
+ 0xd7, 0x13, 0xbf, 0x49, 0xbc, 0x95, 0xf8, 0x5d, 0xe2, 0x0f, 0x89, 0x77,
+ 0x12, 0xef, 0x25, 0xf9, 0x25, 0x05, 0x24, 0x29, 0x92, 0x82, 0x93, 0x42,
+ 0x93, 0xc2, 0x93, 0x22, 0x93, 0x62, 0x92, 0x94, 0x49, 0xf1, 0x49, 0xd9,
+ 0x49, 0xed, 0x93, 0xf4, 0x49, 0xc6, 0xa4, 0x0e, 0x49, 0x03, 0x92, 0xde,
+ 0x4c, 0x7a, 0x2b, 0x69, 0x56, 0xd2, 0xec, 0xa4, 0xb7, 0x93, 0xe6, 0x26,
+ 0xcd, 0x4b, 0x5a, 0x90, 0xb4, 0x30, 0xe9, 0x40, 0xd2, 0xa1, 0xa4, 0x23,
+ 0x49, 0x47, 0x93, 0x8e, 0x27, 0x9d, 0x4c, 0x3a, 0x95, 0x74, 0x3a, 0xe9,
+ 0x6c, 0x32, 0x4a, 0x16, 0x27, 0x4b, 0x93, 0xe5, 0xc9, 0x74, 0xb2, 0x7d,
+ 0xb2, 0x63, 0x32, 0x9b, 0xec, 0x96, 0xec, 0x91, 0xec, 0x9b, 0x1c, 0x9a,
+ 0xdc, 0x3e, 0x59, 0x97, 0x6c, 0x48, 0xce, 0x4f, 0x2e, 0x48, 0xee, 0x94,
+ 0xdc, 0x39, 0xb9, 0x4b, 0x72, 0xb7, 0xe4, 0x1e, 0xc9, 0xbd, 0x93, 0xfb,
+ 0x25, 0xf7, 0x4f, 0xb6, 0x24, 0x0f, 0x4c, 0x1e, 0x9c, 0x5c, 0x99, 0xfc,
+ 0x4e, 0xf2, 0xbc, 0xe4, 0x05, 0xc9, 0xef, 0x26, 0x2f, 0x4a, 0x5e, 0x92,
+ 0xbc, 0x34, 0x79, 0x79, 0xf2, 0xca, 0xe4, 0x13, 0xc9, 0xa7, 0x92, 0x4f,
+ 0x27, 0x9f, 0x49, 0x3e, 0x97, 0x7c, 0x3e, 0xf9, 0x42, 0xf2, 0xa5, 0xe4,
+ 0xcb, 0x29, 0x76, 0x29, 0x4c, 0x8a, 0x43, 0x8a, 0x53, 0x0a, 0x9b, 0xe2,
+ 0x9a, 0xe2, 0x9e, 0xe2, 0x95, 0xe2, 0x9b, 0xe2, 0x9f, 0x12, 0x9c, 0x12,
+ 0x93, 0x92, 0x9e, 0x92, 0x99, 0x92, 0x93, 0xa2, 0x4a, 0x69, 0x97, 0xa2,
+ 0x49, 0x69, 0x9f, 0xa2, 0x4f, 0xa9, 0x4f, 0x19, 0x9e, 0xd2, 0x90, 0x32,
+ 0x2a, 0x65, 0x4c, 0xca, 0x6b, 0x29, 0x38, 0xe5, 0x8d, 0x94, 0x09, 0x29,
+ 0x93, 0x52, 0x96, 0xa4, 0xac, 0x49, 0xd9, 0x96, 0xb2, 0x23, 0xe5, 0xa3,
+ 0x94, 0x8f, 0x53, 0xf6, 0xa4, 0x7c, 0x9a, 0xf2, 0x79, 0xca, 0xc1, 0x94,
+ 0x3b, 0x29, 0x3f, 0xa5, 0xdc, 0x4f, 0xf9, 0x39, 0xe5, 0x61, 0xca, 0xa3,
+ 0x94, 0x5f, 0x53, 0x7e, 0x4b, 0xf9, 0x3d, 0x35, 0x22, 0x35, 0x2a, 0x35,
+ 0x26, 0xb5, 0x4d, 0x6a, 0x5c, 0x6a, 0x42, 0x6a, 0x52, 0x6a, 0x6a, 0x6a,
+ 0x46, 0x6a, 0x56, 0xaa, 0x21, 0xb5, 0x73, 0xaa, 0x39, 0xb5, 0x34, 0xb5,
+ 0x2c, 0xb5, 0x3c, 0x75, 0x70, 0x6a, 0x65, 0x6a, 0x75, 0x6a, 0x6d, 0xea,
+ 0xb0, 0xd4, 0x05, 0xa9, 0x0b, 0x53, 0x17, 0xa7, 0x2e, 0x4d, 0x5d, 0x96,
+ 0xba, 0x22, 0x75, 0x65, 0xea, 0xaa, 0xd4, 0x35, 0xa9, 0xa7, 0x53, 0xcf,
+ 0xa6, 0x7e, 0x99, 0x7a, 0x21, 0xf5, 0x52, 0xea, 0xd7, 0xa9, 0xd7, 0x52,
+ 0xbf, 0x49, 0xbd, 0x9d, 0xfa, 0x5d, 0xea, 0xef, 0x69, 0xa2, 0x34, 0x3a,
+ 0xcd, 0x21, 0xcd, 0x39, 0xcd, 0x35, 0xcd, 0x23, 0x4d, 0x93, 0xd6, 0x3e,
+ 0x4d, 0x97, 0x66, 0x48, 0x33, 0xa5, 0x75, 0x48, 0xeb, 0x98, 0xd6, 0x39,
+ 0xad, 0x4b, 0x5a, 0xb7, 0xb4, 0xbe, 0x69, 0x65, 0x69, 0x15, 0x69, 0x95,
+ 0x69, 0xd5, 0x69, 0xb5, 0x69, 0xef, 0xa6, 0x2d, 0x4e, 0x5b, 0x9a, 0xb6,
+ 0x3c, 0x6d, 0x65, 0xda, 0xea, 0xb4, 0x75, 0x69, 0x1b, 0xd2, 0x36, 0xa7,
+ 0x6d, 0x49, 0xfb, 0x28, 0xed, 0x60, 0xda, 0x91, 0xb4, 0xe3, 0x69, 0xa7,
+ 0xd2, 0x2e, 0xa6, 0x5d, 0x49, 0xbb, 0x9e, 0x76, 0x33, 0xed, 0xdb, 0x74,
+ 0xe7, 0x74, 0xd7, 0x74, 0xf7, 0x74, 0xcf, 0x74, 0xef, 0x74, 0xdf, 0x74,
+ 0xff, 0x74, 0x45, 0x7a, 0x48, 0x7a, 0x58, 0x7a, 0x74, 0x7a, 0x52, 0x7a,
+ 0xd7, 0xf4, 0xee, 0xe9, 0x3d, 0xd3, 0x7b, 0xa7, 0xf7, 0x4d, 0x37, 0xa7,
+ 0x97, 0xa4, 0x5b, 0xd2, 0x07, 0xa6, 0x0f, 0x4e, 0xaf, 0x4c, 0x1f, 0x9a,
+ 0x5e, 0x97, 0x3e, 0x2c, 0xbd, 0x21, 0x7d, 0x54, 0xfa, 0x98, 0x74, 0x2e,
+ 0x7d, 0x65, 0xfa, 0xaa, 0xf4, 0x35, 0xe9, 0xeb, 0xd2, 0xdf, 0x4f, 0xdf,
+ 0x90, 0xbe, 0x31, 0x7d, 0x73, 0xfa, 0x96, 0xf4, 0x0b, 0xe9, 0x97, 0xd2,
+ 0x2f, 0xa7, 0x5f, 0x49, 0xbf, 0x9a, 0x7e, 0x3d, 0xfd, 0x46, 0xfa, 0xcd,
+ 0xf4, 0xdb, 0x19, 0x4e, 0x19, 0x6c, 0x86, 0x6b, 0x86, 0x7b, 0x86, 0x67,
+ 0x86, 0x4f, 0x86, 0x7f, 0x86, 0x22, 0x23, 0x24, 0x23, 0x2c, 0x23, 0x3a,
+ 0x23, 0x29, 0x23, 0x3b, 0x43, 0x95, 0x91, 0x9b, 0xd1, 0x3e, 0x43, 0x9f,
+ 0x61, 0xca, 0xa8, 0xcb, 0x18, 0x96, 0x31, 0x22, 0x63, 0x64, 0xc6, 0xe8,
+ 0x8c, 0xd7, 0x32, 0xc6, 0x66, 0x8c, 0xcb, 0x98, 0x98, 0x31, 0x39, 0x63,
+ 0x76, 0xc6, 0xc2, 0x8c, 0x15, 0x19, 0xab, 0x32, 0xd6, 0x66, 0xac, 0xcf,
+ 0xd8, 0x94, 0x71, 0x31, 0xe3, 0xab, 0x8c, 0xaf, 0x33, 0xae, 0x66, 0x5c,
+ 0xcf, 0xf8, 0x26, 0xe3, 0x56, 0xc6, 0x77, 0x19, 0x3f, 0x66, 0xdc, 0xcd,
+ 0xf8, 0x35, 0xe3, 0x79, 0x26, 0x9d, 0x69, 0x9f, 0xe9, 0x94, 0xe9, 0x92,
+ 0xe9, 0x9e, 0xe9, 0x95, 0xe9, 0x9b, 0xa9, 0xce, 0xcc, 0xcd, 0xd4, 0x66,
+ 0xe6, 0x65, 0xea, 0x32, 0x0d, 0x99, 0xc6, 0xcc, 0xfc, 0xcc, 0x82, 0xcc,
+ 0xda, 0xcc, 0xfa, 0xcc, 0xe1, 0x99, 0x0d, 0x99, 0x23, 0x33, 0x47, 0x67,
+ 0x8e, 0xc9, 0x7c, 0x2d, 0x13, 0x67, 0x4e, 0xcb, 0xdc, 0x96, 0xb9, 0x33,
+ 0x73, 0x57, 0xe6, 0xc7, 0x99, 0x7b, 0x32, 0xf7, 0x65, 0xee, 0xcf, 0x3c,
+ 0x94, 0x79, 0x34, 0xf3, 0x78, 0xe6, 0xe9, 0xcc, 0xaf, 0x32, 0xef, 0x67,
+ 0x3e, 0xcc, 0xfc, 0x35, 0xf3, 0x49, 0xe6, 0xd3, 0xcc, 0xe7, 0x59, 0x90,
+ 0x25, 0xc9, 0x92, 0x67, 0x31, 0x59, 0x8e, 0x59, 0x6c, 0x56, 0x6a, 0x56,
+ 0x46, 0x56, 0x56, 0x56, 0x4e, 0x56, 0xdb, 0x2c, 0x75, 0x56, 0xbb, 0x2c,
+ 0x4d, 0x56, 0xfb, 0xac, 0xca, 0xac, 0xa1, 0x59, 0xb5, 0x59, 0xf5, 0x59,
+ 0xc3, 0xb3, 0x46, 0x66, 0x8d, 0xc9, 0xe2, 0xb2, 0x5e, 0xcf, 0x1a, 0x97,
+ 0x35, 0x2f, 0x6b, 0x59, 0xd6, 0x87, 0x59, 0x3b, 0xb2, 0x76, 0x65, 0x7d,
+ 0x92, 0xf5, 0x69, 0xd6, 0xe7, 0x59, 0x07, 0xb3, 0x8e, 0x64, 0x1d, 0xcf,
+ 0x3a, 0x95, 0x75, 0x26, 0xeb, 0x97, 0xac, 0xc7, 0x59, 0x4f, 0xb2, 0xfe,
+ 0xc8, 0xfa, 0x33, 0xeb, 0x59, 0x36, 0xca, 0x16, 0x65, 0x3b, 0x64, 0x27,
+ 0x66, 0xa7, 0x64, 0xa7, 0x65, 0x67, 0x64, 0x67, 0x66, 0x67, 0x67, 0xe7,
+ 0x64, 0xab, 0xb2, 0xdb, 0x65, 0xf7, 0xcf, 0xb6, 0x64, 0x97, 0x65, 0x97,
+ 0x67, 0x0f, 0xce, 0xae, 0xc8, 0xae, 0xca, 0x1e, 0x9a, 0x3d, 0x2a, 0x7b,
+ 0x49, 0xf6, 0xf2, 0xec, 0x95, 0xd9, 0xab, 0xb2, 0x57, 0x67, 0xaf, 0xcd,
+ 0x5e, 0x97, 0xbd, 0x3e, 0x7b, 0x63, 0xf6, 0xe5, 0xec, 0xab, 0xd9, 0xd7,
+ 0xb3, 0xbf, 0xc9, 0xbe, 0x95, 0xfd, 0x6d, 0xf6, 0xf7, 0xd9, 0x77, 0xb2,
+ 0xef, 0x65, 0x3f, 0xc8, 0xfe, 0x35, 0xfb, 0x79, 0x8e, 0x38, 0x47, 0x9a,
+ 0x23, 0xcf, 0x61, 0x72, 0xd2, 0x73, 0xb2, 0x72, 0x72, 0x72, 0x54, 0x39,
+ 0xed, 0x72, 0x34, 0x39, 0xed, 0x73, 0xf4, 0x39, 0xa6, 0x9c, 0x0e, 0x39,
+ 0xc5, 0x39, 0x7d, 0x72, 0x06, 0xe4, 0x0c, 0xcc, 0x19, 0x94, 0x33, 0x24,
+ 0xa7, 0x2a, 0xa7, 0x26, 0x67, 0x41, 0xce, 0xc2, 0x9c, 0xc5, 0x39, 0x4b,
+ 0x72, 0x96, 0xe5, 0xac, 0xc8, 0x59, 0x99, 0xb3, 0x2a, 0x67, 0x4d, 0xce,
+ 0x8e, 0x9c, 0xeb, 0x39, 0x37, 0x73, 0x6e, 0xe7, 0x7c, 0x97, 0xf3, 0x43,
+ 0xce, 0xdd, 0x9c, 0xfb, 0x39, 0x0f, 0x73, 0x7e, 0xcd, 0xf9, 0x2d, 0xe7,
+ 0xcf, 0xb6, 0xd2, 0xb6, 0x76, 0x6d, 0xed, 0xdb, 0x3a, 0xb5, 0xf5, 0x6d,
+ 0x1b, 0xd1, 0x36, 0xbe, 0x6d, 0x4a, 0xdb, 0xb6, 0xaa, 0x72, 0xd5, 0x60,
+ 0xd5, 0x10, 0x55, 0xb5, 0xaa, 0x56, 0x55, 0xaf, 0x1a, 0xae, 0x6a, 0x50,
+ 0x8d, 0x52, 0xbd, 0xaa, 0xc2, 0xaa, 0xd7, 0x55, 0xe3, 0x54, 0x13, 0x54,
+ 0x93, 0x54, 0x53, 0x54, 0xd3, 0x54, 0x6f, 0xaa, 0xde, 0x52, 0xcd, 0x52,
+ 0xbd, 0xad, 0x9a, 0xab, 0x9a, 0xaf, 0x5a, 0xa8, 0x5a, 0xa2, 0x5a, 0xa6,
+ 0x5a, 0xa1, 0x7a, 0x4f, 0xb5, 0x5a, 0xb5, 0x56, 0xf5, 0xbe, 0x6a, 0x83,
+ 0x6a, 0x93, 0xea, 0x03, 0xd5, 0x56, 0xd5, 0x76, 0xd5, 0x4e, 0xd5, 0x2e,
+ 0xd5, 0xc7, 0xaa, 0x3d, 0xaa, 0x4f, 0x55, 0x9f, 0xa9, 0xf6, 0xab, 0x0e,
+ 0xa9, 0x8e, 0xa8, 0x8e, 0xa9, 0x4e, 0xa8, 0x4e, 0xa9, 0x4e, 0xab, 0xce,
+ 0xaa, 0xbe, 0x54, 0x5d, 0x54, 0x7d, 0xa5, 0xfa, 0x5a, 0x75, 0x55, 0x75,
+ 0x43, 0x75, 0x53, 0x75, 0x5b, 0xf5, 0x9d, 0xea, 0x07, 0xd5, 0x1d, 0xd5,
+ 0x4f, 0xaa, 0xfb, 0xaa, 0x9f, 0x55, 0x8f, 0x54, 0xbf, 0xa9, 0xfe, 0x50,
+ 0x3d, 0x53, 0x53, 0x6a, 0x91, 0x5a, 0xaa, 0x96, 0xab, 0x69, 0xb5, 0xbd,
+ 0xda, 0x51, 0xed, 0xac, 0x76, 0x55, 0xbb, 0xab, 0x3d, 0xd5, 0xde, 0x6a,
+ 0x5f, 0xb5, 0xbf, 0x3a, 0x50, 0x1d, 0xac, 0x0e, 0x53, 0x47, 0xa8, 0xa3,
+ 0xd4, 0xb1, 0xea, 0x38, 0x75, 0xa2, 0x3a, 0x45, 0x9d, 0xa6, 0xce, 0x50,
+ 0x67, 0xa9, 0x73, 0xd4, 0x2a, 0x75, 0x3b, 0xb5, 0x46, 0xdd, 0x5e, 0xad,
+ 0x53, 0x1b, 0xd5, 0x1d, 0xd4, 0x9d, 0xd4, 0x45, 0xea, 0xae, 0xea, 0xee,
+ 0xea, 0x5e, 0xea, 0xbe, 0x6a, 0xb3, 0xba, 0x54, 0x3d, 0x40, 0x5d, 0xae,
+ 0x1e, 0xac, 0x1e, 0xa2, 0xae, 0x52, 0x0f, 0x55, 0xd7, 0xaa, 0xeb, 0xd5,
+ 0xc3, 0xd5, 0x0d, 0xea, 0x51, 0xea, 0x31, 0x6a, 0x4e, 0xfd, 0xba, 0x7a,
+ 0xbc, 0x7a, 0x92, 0x7a, 0xaa, 0xfa, 0x4d, 0xf5, 0x4c, 0xf5, 0x1c, 0xf5,
+ 0x5c, 0xf5, 0x02, 0xf5, 0x22, 0xf5, 0x52, 0xf5, 0x0a, 0xf5, 0x2a, 0xf5,
+ 0x5a, 0xf5, 0x7a, 0xf5, 0x26, 0xf5, 0x16, 0xf5, 0x36, 0xf5, 0x4e, 0xf5,
+ 0x6e, 0xf5, 0x1e, 0xf5, 0x3e, 0xf5, 0x7e, 0xf5, 0x21, 0xf5, 0x11, 0xf5,
+ 0x31, 0xf5, 0x49, 0xf5, 0x85, 0xdc, 0xf5, 0xb9, 0x1b, 0x73, 0x37, 0xe7,
+ 0x6e, 0xcd, 0xdd, 0x9e, 0xbb, 0x33, 0x77, 0x77, 0xee, 0x27, 0xb9, 0x7b,
+ 0x73, 0xf7, 0xe5, 0xee, 0xcf, 0x3d, 0x98, 0x7b, 0x38, 0xf7, 0x68, 0xee,
+ 0xf1, 0xdc, 0x93, 0xb9, 0xa7, 0x73, 0xcf, 0xe5, 0x5e, 0xc8, 0xfd, 0x2a,
+ 0xf7, 0x4a, 0xee, 0xf5, 0xdc, 0x9b, 0xb9, 0xb7, 0x73, 0xbf, 0xcf, 0xfd,
+ 0x31, 0xf7, 0x6e, 0xee, 0xbd, 0xdc, 0x07, 0xb9, 0xbf, 0xe4, 0xfe, 0x9a,
+ 0xfb, 0x5b, 0xee, 0xef, 0xb9, 0x7f, 0xe6, 0x3e, 0xd7, 0x80, 0x46, 0xac,
+ 0x91, 0x6a, 0xe4, 0x1a, 0x5a, 0x63, 0xaf, 0x71, 0xd4, 0xb0, 0x1a, 0x37,
+ 0x8d, 0x87, 0xc6, 0x4b, 0xe3, 0xa3, 0xf1, 0xd3, 0x04, 0x68, 0x82, 0x34,
+ 0xa1, 0x9a, 0x08, 0x4d, 0x94, 0x26, 0x46, 0xd3, 0x46, 0x13, 0xaf, 0x49,
+ 0xd4, 0x24, 0x6b, 0x52, 0x35, 0xe9, 0x9a, 0x2c, 0x4d, 0x5b, 0x4d, 0x3b,
+ 0x8d, 0x56, 0xa3, 0xd3, 0x18, 0x35, 0x1d, 0x34, 0x9d, 0x34, 0x45, 0x9a,
+ 0xae, 0x9a, 0x1e, 0x9a, 0x5e, 0x9a, 0x3e, 0x9a, 0x7e, 0x1a, 0xb3, 0xa6,
+ 0x44, 0x33, 0x40, 0x33, 0x50, 0x33, 0x48, 0x53, 0xa1, 0xa9, 0xd4, 0x0c,
+ 0xd5, 0xd4, 0x6a, 0x86, 0x69, 0x1a, 0x34, 0xa3, 0x34, 0x63, 0x34, 0xaf,
+ 0x69, 0xc6, 0x6a, 0xc6, 0x69, 0x26, 0x6a, 0x26, 0x6b, 0xa6, 0x6a, 0xa6,
+ 0x6b, 0x66, 0x68, 0x66, 0x6a, 0xe6, 0x68, 0xde, 0xd1, 0xcc, 0xd3, 0xbc,
+ 0xab, 0x59, 0xac, 0x59, 0xa6, 0x59, 0xa9, 0x59, 0xad, 0x59, 0xa7, 0xd9,
+ 0xa0, 0xd9, 0xac, 0xd9, 0xaa, 0xd9, 0xae, 0xf9, 0x48, 0xf3, 0xb1, 0x66,
+ 0xaf, 0x66, 0x9f, 0xe6, 0x73, 0xcd, 0x41, 0xcd, 0x11, 0xcd, 0x71, 0xcd,
+ 0x29, 0xcd, 0x19, 0xcd, 0x39, 0xcd, 0x05, 0xcd, 0x25, 0xcd, 0x65, 0xcd,
+ 0x55, 0xcd, 0x0d, 0xcd, 0x2d, 0xcd, 0x77, 0x9a, 0x1f, 0x35, 0x3f, 0x69,
+ 0x1e, 0x68, 0x7e, 0xd1, 0x3c, 0xd6, 0xfc, 0xae, 0xf9, 0x53, 0x4b, 0x69,
+ 0x45, 0x5a, 0xa9, 0xd6, 0x4e, 0x6b, 0xaf, 0x75, 0xd2, 0xba, 0x68, 0xdd,
+ 0xb5, 0x5e, 0x5a, 0x5f, 0x6d, 0x80, 0x36, 0x48, 0x1b, 0xaa, 0x8d, 0xd0,
+ 0x46, 0x69, 0x63, 0xb4, 0x6d, 0xb4, 0x71, 0xda, 0x04, 0x6d, 0x92, 0x36,
+ 0x45, 0x9b, 0xa6, 0xcd, 0xd0, 0x66, 0x69, 0x73, 0xb4, 0x2a, 0x6d, 0x3b,
+ 0xad, 0x46, 0xdb, 0x5e, 0xab, 0xd3, 0x1a, 0xb4, 0x26, 0x6d, 0x07, 0x6d,
+ 0x47, 0x6d, 0xa1, 0xb6, 0x48, 0xdb, 0x45, 0xdb, 0x4d, 0xdb, 0x43, 0xdb,
+ 0x4b, 0xdb, 0x47, 0xdb, 0x4f, 0x6b, 0xd6, 0x96, 0x68, 0x2d, 0xda, 0x32,
+ 0x6d, 0xb9, 0x76, 0xb0, 0x76, 0x88, 0xb6, 0x4a, 0x3b, 0x54, 0x5b, 0xab,
+ 0xad, 0xd7, 0x0e, 0xd7, 0x36, 0x68, 0x47, 0x69, 0xc7, 0x68, 0x5f, 0xd3,
+ 0x62, 0xed, 0xeb, 0xda, 0x71, 0xda, 0x09, 0xda, 0x49, 0xda, 0x29, 0xda,
+ 0x69, 0xda, 0x37, 0xb5, 0x33, 0xb5, 0x73, 0xb4, 0x73, 0xb5, 0x0b, 0xb4,
+ 0x8b, 0xb4, 0x4b, 0xb5, 0x2b, 0xb4, 0xab, 0xb4, 0x6b, 0xb5, 0xeb, 0xb5,
+ 0x9b, 0xb4, 0x5b, 0xb4, 0xdb, 0xb4, 0x3b, 0xb5, 0xbb, 0xb5, 0x7b, 0xb4,
+ 0xfb, 0xb4, 0xfb, 0xb5, 0x87, 0xb4, 0x47, 0xb5, 0x27, 0xb4, 0x5f, 0x68,
+ 0xcf, 0x6a, 0xcf, 0x6b, 0x2f, 0x69, 0xbf, 0xd6, 0x5e, 0xd3, 0x7e, 0xa3,
+ 0xbd, 0xad, 0xfd, 0x5e, 0x7b, 0x47, 0x7b, 0x4f, 0xfb, 0xb3, 0xf6, 0x91,
+ 0xf6, 0xb7, 0xf6, 0x28, 0xef, 0xcb, 0xbc, 0x8b, 0x79, 0x97, 0xf3, 0xae,
+ 0xe6, 0xdd, 0xc8, 0xbb, 0x95, 0xf7, 0x5d, 0xde, 0x8f, 0x79, 0x3f, 0xe5,
+ 0x3d, 0xc8, 0xfb, 0x25, 0xef, 0x71, 0xde, 0xef, 0x79, 0x7f, 0xea, 0x28,
+ 0x9d, 0x48, 0x27, 0xd5, 0xd9, 0xe9, 0xec, 0x75, 0x4e, 0x3a, 0x17, 0x9d,
+ 0xbb, 0xce, 0x4b, 0xe7, 0xab, 0x0b, 0xd0, 0x05, 0xe9, 0x42, 0x75, 0x11,
+ 0xba, 0x68, 0x5d, 0x1b, 0x5d, 0xbc, 0x2e, 0x49, 0x97, 0xaa, 0xcb, 0xd0,
+ 0x65, 0xeb, 0x54, 0xba, 0x5c, 0x5d, 0x7b, 0x9d, 0x5e, 0x67, 0xd2, 0x15,
+ 0xe8, 0x0a, 0x75, 0xc5, 0xba, 0x6e, 0xba, 0x9e, 0xba, 0x3e, 0xba, 0x57,
+ 0x74, 0x25, 0xba, 0x01, 0xba, 0x72, 0x5d, 0x85, 0xae, 0x4a, 0x57, 0xa3,
+ 0xab, 0xd7, 0x8d, 0xd0, 0x8d, 0xd2, 0xbd, 0xaa, 0xc3, 0xba, 0x37, 0x74,
+ 0x13, 0x74, 0x93, 0x75, 0xd3, 0x74, 0x33, 0x74, 0xb3, 0x74, 0x6f, 0xeb,
+ 0xe6, 0xe9, 0xde, 0xd5, 0x2d, 0xd6, 0x2d, 0xd3, 0xad, 0xd4, 0xad, 0xd6,
+ 0xad, 0xd3, 0x6d, 0xd0, 0x6d, 0xd6, 0x6d, 0xd5, 0x6d, 0xd7, 0x7d, 0xa4,
+ 0xfb, 0x58, 0xb7, 0x57, 0xf7, 0x99, 0xee, 0x80, 0xee, 0xb0, 0xee, 0x98,
+ 0xee, 0xa4, 0xee, 0xb4, 0xee, 0x9c, 0xee, 0x82, 0xee, 0x2b, 0xdd, 0x15,
+ 0xdd, 0x75, 0xdd, 0x4d, 0xdd, 0xb7, 0xba, 0x1f, 0x74, 0x77, 0x75, 0xf7,
+ 0x75, 0x0f, 0x75, 0xbf, 0xea, 0x9e, 0xe8, 0x9e, 0xea, 0x9e, 0xeb, 0x41,
+ 0x2f, 0xd1, 0xcb, 0xf5, 0x8c, 0xde, 0x51, 0xcf, 0xea, 0xdd, 0xf4, 0x9e,
+ 0x7a, 0x1f, 0xbd, 0xbf, 0x5e, 0xa1, 0x0f, 0xd1, 0x87, 0xeb, 0xa3, 0xf4,
+ 0xb1, 0xfa, 0x38, 0x7d, 0xa2, 0x3e, 0x45, 0x9f, 0xae, 0xcf, 0xd2, 0xb7,
+ 0xd5, 0xb7, 0xd3, 0x6b, 0xf5, 0x3a, 0xbd, 0x51, 0xdf, 0x41, 0xdf, 0x49,
+ 0x5f, 0xa4, 0xef, 0xaa, 0xef, 0xa1, 0xef, 0xad, 0xef, 0xa7, 0xef, 0xaf,
+ 0xb7, 0xe8, 0x07, 0xea, 0x07, 0xeb, 0x2b, 0xf5, 0x43, 0xf5, 0x75, 0xfa,
+ 0xe1, 0xfa, 0x91, 0xfa, 0x31, 0x7a, 0x4e, 0xff, 0xba, 0x7e, 0xbc, 0x7e,
+ 0x92, 0x7e, 0xaa, 0xfe, 0x4d, 0xfd, 0x4c, 0xfd, 0x1c, 0xfd, 0x5c, 0xfd,
+ 0x02, 0xfd, 0x22, 0xfd, 0x52, 0xfd, 0x0a, 0xfd, 0x2a, 0xfd, 0x5a, 0xfd,
+ 0x7a, 0xfd, 0x26, 0xfd, 0x16, 0xfd, 0x36, 0xfd, 0x4e, 0xfd, 0x6e, 0xfd,
+ 0x1e, 0xfd, 0x3e, 0xfd, 0x7e, 0xfd, 0x21, 0xfd, 0x51, 0xfd, 0x09, 0xfd,
+ 0x17, 0xfa, 0xb3, 0xfa, 0xf3, 0xfa, 0x4b, 0xfa, 0xaf, 0xf5, 0xd7, 0xf4,
+ 0xdf, 0xe8, 0x6f, 0xeb, 0xbf, 0xd7, 0xdf, 0xd1, 0xdf, 0xd3, 0xff, 0xac,
+ 0x7f, 0xa4, 0xff, 0x4d, 0xff, 0x87, 0xfe, 0x99, 0x01, 0x19, 0xc4, 0x06,
+ 0x99, 0x81, 0x36, 0x38, 0x18, 0x9c, 0x0d, 0xae, 0x06, 0x0f, 0x83, 0xb7,
+ 0xc1, 0xcf, 0x10, 0x68, 0x08, 0x36, 0x84, 0x19, 0x22, 0x0d, 0x31, 0x06,
+ 0xa5, 0x21, 0xc1, 0x90, 0x6c, 0x48, 0x33, 0x64, 0x1a, 0x72, 0x0c, 0x6a,
+ 0x83, 0xc6, 0x90, 0x67, 0x30, 0x18, 0xf2, 0x0d, 0x1d, 0x0d, 0x9d, 0x0d,
+ 0x5d, 0x0c, 0xdd, 0x0d, 0xbd, 0x0c, 0x7d, 0x0d, 0x66, 0x43, 0xa9, 0xa1,
+ 0xcc, 0x30, 0xc8, 0x30, 0xc4, 0x50, 0x6d, 0xa8, 0x35, 0x0c, 0x33, 0x34,
+ 0x18, 0x46, 0x1b, 0x5e, 0x33, 0x8c, 0x35, 0x8c, 0x33, 0x4c, 0x34, 0x4c,
+ 0x31, 0x4c, 0x37, 0xbc, 0x65, 0x98, 0x6d, 0x78, 0xc7, 0x30, 0xdf, 0xb0,
+ 0xd0, 0xb0, 0xc4, 0xb0, 0xdc, 0xf0, 0x9e, 0x61, 0x8d, 0xe1, 0x7d, 0xc3,
+ 0x46, 0xc3, 0x07, 0x86, 0x0f, 0x0d, 0x3b, 0x0c, 0xbb, 0x0c, 0x9f, 0x18,
+ 0x3e, 0x35, 0x7c, 0x6e, 0x38, 0x68, 0x38, 0x62, 0x38, 0x6e, 0x38, 0x65,
+ 0x38, 0x63, 0xf8, 0xd2, 0x70, 0xd1, 0x70, 0xd9, 0x70, 0xd5, 0x70, 0xc3,
+ 0x70, 0xcb, 0xf0, 0x9d, 0xe1, 0x47, 0xc3, 0x4f, 0x86, 0x07, 0x86, 0x5f,
+ 0x0c, 0x8f, 0x0d, 0xbf, 0x1b, 0xfe, 0x34, 0x52, 0x46, 0x91, 0x51, 0x6a,
+ 0xb4, 0x33, 0xda, 0x1b, 0x9d, 0x8c, 0x2e, 0x46, 0x77, 0xa3, 0x97, 0xd1,
+ 0xd7, 0x18, 0x60, 0x0c, 0x32, 0x86, 0x1a, 0x23, 0x8c, 0xd1, 0xc6, 0x36,
+ 0xc6, 0x78, 0x63, 0x92, 0x31, 0xd5, 0x98, 0x61, 0xcc, 0x36, 0xaa, 0x8c,
+ 0xb9, 0xc6, 0xf6, 0x46, 0xbd, 0xd1, 0x64, 0x2c, 0x30, 0x16, 0x1a, 0x8b,
+ 0x8d, 0xdd, 0x8c, 0x3d, 0x8d, 0x7d, 0x8c, 0xaf, 0x18, 0x4b, 0x8c, 0x03,
+ 0x8c, 0xe5, 0xc6, 0x0a, 0x63, 0x95, 0xb1, 0xc6, 0x58, 0x6f, 0x1c, 0x61,
+ 0x1c, 0x65, 0x7c, 0xd5, 0x88, 0x8d, 0x6f, 0x18, 0x27, 0x18, 0x27, 0x1b,
+ 0xa7, 0x19, 0x67, 0x18, 0x67, 0x19, 0xdf, 0x36, 0xce, 0x33, 0xbe, 0x6b,
+ 0x5c, 0x6c, 0x5c, 0x66, 0x5c, 0x69, 0x5c, 0x6d, 0x5c, 0x67, 0xdc, 0x60,
+ 0xdc, 0x6c, 0xdc, 0x6a, 0xdc, 0x6e, 0xfc, 0xc8, 0xf8, 0xb1, 0x71, 0xaf,
+ 0xf1, 0x33, 0xe3, 0x01, 0xe3, 0x61, 0xe3, 0x31, 0xe3, 0x49, 0xe3, 0x69,
+ 0xe3, 0x39, 0xe3, 0x05, 0xe3, 0x57, 0xc6, 0x2b, 0xc6, 0xeb, 0xc6, 0x9b,
+ 0xc6, 0x6f, 0x8d, 0x3f, 0x18, 0xef, 0x1a, 0xef, 0x1b, 0x1f, 0x1a, 0x7f,
+ 0x35, 0x3e, 0x31, 0x3e, 0x35, 0x3e, 0x37, 0x81, 0x49, 0x62, 0x92, 0x9b,
+ 0x18, 0x93, 0xa3, 0x89, 0x35, 0xb9, 0x99, 0x3c, 0x4d, 0x3e, 0x26, 0x7f,
+ 0x93, 0xc2, 0x14, 0x62, 0x0a, 0x37, 0x45, 0x99, 0x62, 0x4d, 0x71, 0xa6,
+ 0x44, 0x53, 0x8a, 0x29, 0xdd, 0x94, 0x65, 0x6a, 0x6b, 0x6a, 0x67, 0xd2,
+ 0x9a, 0x74, 0x26, 0xa3, 0xa9, 0x83, 0xa9, 0x93, 0xa9, 0xc8, 0xd4, 0xd5,
+ 0xd4, 0xc3, 0xd4, 0xdb, 0xd4, 0xcf, 0xd4, 0xdf, 0x64, 0x31, 0x0d, 0x34,
+ 0x0d, 0x36, 0x55, 0x9a, 0x86, 0x9a, 0xea, 0x4c, 0xc3, 0x4d, 0x23, 0x4d,
+ 0x63, 0x4c, 0x9c, 0xe9, 0x75, 0xd3, 0x78, 0xd3, 0x24, 0xd3, 0x54, 0xd3,
+ 0x9b, 0xa6, 0x99, 0xa6, 0x39, 0xa6, 0xb9, 0xa6, 0x05, 0xa6, 0x45, 0xa6,
+ 0xa5, 0xa6, 0x15, 0xa6, 0x55, 0xa6, 0xb5, 0xa6, 0xf5, 0xa6, 0x4d, 0xa6,
+ 0x2d, 0xa6, 0x6d, 0xa6, 0x9d, 0xa6, 0xdd, 0xa6, 0x3d, 0xa6, 0x7d, 0xa6,
+ 0xfd, 0xa6, 0x43, 0xa6, 0xa3, 0xa6, 0x13, 0xa6, 0x2f, 0x4c, 0x67, 0x4d,
+ 0xe7, 0x4d, 0x97, 0x4c, 0x5f, 0x9b, 0xae, 0x99, 0xbe, 0x31, 0xdd, 0x36,
+ 0x7d, 0x6f, 0xba, 0x63, 0xba, 0x67, 0xfa, 0xd9, 0xf4, 0xc8, 0xf4, 0x9b,
+ 0xe9, 0x0f, 0xd3, 0xb3, 0x7c, 0x94, 0x2f, 0xce, 0x97, 0xe5, 0xd3, 0xf9,
+ 0x0e, 0xf9, 0xce, 0xf9, 0xae, 0xf9, 0x1e, 0xf9, 0xde, 0xf9, 0x7e, 0xf9,
+ 0x81, 0xf9, 0xc1, 0xf9, 0x61, 0xf9, 0x91, 0xf9, 0x31, 0xf9, 0xca, 0xfc,
+ 0x84, 0xfc, 0xe4, 0xfc, 0xb4, 0xfc, 0xcc, 0xfc, 0x9c, 0x7c, 0x75, 0xbe,
+ 0x26, 0x3f, 0x2f, 0xdf, 0x90, 0x9f, 0x9f, 0xdf, 0x31, 0xbf, 0x7b, 0x7e,
+ 0x8f, 0xfc, 0xde, 0xf9, 0x96, 0xfc, 0x01, 0xf9, 0xe5, 0xf9, 0x35, 0xf9,
+ 0x38, 0x7f, 0x7c, 0xfe, 0xdc, 0xfc, 0xa5, 0xf9, 0x9f, 0xe4, 0x1f, 0xa3,
+ 0x84, 0xff, 0x00, 0xac, 0x9f, 0xcc, 0x77, 0x54, 0x8b, 0xff, 0xf2, 0x4f,
+ 0xfc, 0x1f, 0x50, 0x4b, 0x07, 0x08, 0xcf, 0x3e, 0x6f, 0x7f, 0xf3, 0x3e,
+ 0x00, 0x00, 0xbe, 0x64, 0x00, 0x00, 0x50, 0x4b, 0x01, 0x02, 0x14, 0x03,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x89, 0x53, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c,
+ 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70,
+ 0x70, 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x59, 0xc1, 0xb1, 0x61, 0xc1,
+ 0xc1, 0xb1, 0x61, 0x59, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01,
+ 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x50, 0x4b,
+ 0x01, 0x02, 0x14, 0x03, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x09,
+ 0x89, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xed, 0x41, 0x54, 0x00, 0x00, 0x00, 0x74, 0x65, 0x72, 0x6d,
+ 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x73, 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x3c, 0xc8, 0xb1, 0x61,
+ 0x43, 0xc8, 0xb1, 0x61, 0x3c, 0xc8, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00,
+ 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x50,
+ 0x4b, 0x01, 0x02, 0x14, 0x03, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x6c,
+ 0x09, 0x89, 0x53, 0x33, 0xf2, 0xe4, 0x12, 0x9d, 0x02, 0x00, 0x00, 0xdc,
+ 0x06, 0x00, 0x00, 0x29, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xa4, 0x81, 0xb1, 0x00, 0x00, 0x00, 0x74, 0x65, 0x72,
+ 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x73, 0x2f, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x6c, 0x69,
+ 0x73, 0x74, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x3c, 0xc8, 0xb1, 0x61, 0x3c,
+ 0xc8, 0xb1, 0x61, 0x3c, 0xc8, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01,
+ 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x50, 0x4b,
+ 0x01, 0x02, 0x14, 0x03, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x37, 0x4b,
+ 0x61, 0x4b, 0x49, 0x04, 0x8a, 0x5b, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x26, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xa4, 0x81, 0xc5, 0x03, 0x00, 0x00, 0x74, 0x65, 0x72, 0x6d,
+ 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x73, 0x2f, 0x50, 0x6b, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x54,
+ 0x0d, 0x00, 0x07, 0x8a, 0xf5, 0xf9, 0x59, 0x42, 0xc2, 0xb1, 0x61, 0xd3,
+ 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00,
+ 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x50, 0x4b, 0x01, 0x02, 0x14, 0x03,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x05, 0x89, 0x53, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x41,
+ 0x41, 0x04, 0x00, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c,
+ 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70,
+ 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x4d,
+ 0x61, 0x63, 0x4f, 0x53, 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0xd3, 0xc1,
+ 0xb1, 0x61, 0xd6, 0xc1, 0xb1, 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78,
+ 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00,
+ 0x00, 0x50, 0x4b, 0x01, 0x02, 0x14, 0x03, 0x14, 0x00, 0x08, 0x00, 0x08,
+ 0x00, 0x37, 0x4b, 0x61, 0x4b, 0x5d, 0x9c, 0xb1, 0x3d, 0xe6, 0x52, 0x00,
+ 0x00, 0xc0, 0x0a, 0x01, 0x00, 0x36, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x81, 0xa4, 0x04, 0x00, 0x00, 0x74,
+ 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x4d, 0x61, 0x63, 0x4f, 0x53, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x8a, 0xf5,
+ 0xf9, 0x59, 0xd7, 0xc2, 0xb1, 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78,
+ 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00,
+ 0x00, 0x50, 0x4b, 0x01, 0x02, 0x14, 0x03, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6e, 0x09, 0x89, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x41, 0x0e, 0x58, 0x00, 0x00, 0x74,
+ 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x73, 0x2f, 0x55, 0x54, 0x0d, 0x00, 0x07, 0x41, 0xc8, 0xb1,
+ 0x61, 0x43, 0xc8, 0xb1, 0x61, 0x41, 0xc8, 0xb1, 0x61, 0x75, 0x78, 0x0b,
+ 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00,
+ 0x50, 0x4b, 0x01, 0x02, 0x14, 0x03, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x81, 0x05, 0x89, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xed, 0x41, 0x75, 0x58, 0x00, 0x00, 0x74, 0x65,
+ 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x73, 0x2f, 0x65, 0x6e, 0x2e, 0x6c, 0x70, 0x72, 0x6f, 0x6a, 0x2f,
+ 0x55, 0x54, 0x0d, 0x00, 0x07, 0xd3, 0xc1, 0xb1, 0x61, 0xda, 0xc1, 0xb1,
+ 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8,
+ 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x50, 0x4b, 0x01, 0x02,
+ 0x14, 0x03, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0xc1, 0x4a, 0x61, 0x4b,
+ 0x5f, 0x52, 0xc2, 0x53, 0x11, 0x01, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00,
+ 0x3d, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa4, 0x81, 0xe5, 0x58, 0x00, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x61, 0x6c, 0x2d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e,
+ 0x61, 0x70, 0x70, 0x2f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73,
+ 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x65,
+ 0x6e, 0x2e, 0x6c, 0x70, 0x72, 0x6f, 0x6a, 0x2f, 0x43, 0x72, 0x65, 0x64,
+ 0x69, 0x74, 0x73, 0x2e, 0x72, 0x74, 0x66, 0x55, 0x54, 0x0d, 0x00, 0x07,
+ 0xab, 0xf4, 0xf9, 0x59, 0x42, 0xc2, 0xb1, 0x61, 0xd3, 0xc1, 0xb1, 0x61,
+ 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8,
+ 0x03, 0x00, 0x00, 0x50, 0x4b, 0x01, 0x02, 0x14, 0x03, 0x14, 0x00, 0x08,
+ 0x00, 0x08, 0x00, 0xc1, 0x4a, 0x61, 0x4b, 0xf9, 0x0d, 0xcc, 0x63, 0x49,
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x43, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x81, 0x81, 0x5a, 0x00,
+ 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e, 0x6f,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x52, 0x65, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x65, 0x6e, 0x2e, 0x6c, 0x70, 0x72,
+ 0x6f, 0x6a, 0x2f, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x6c, 0x69, 0x73, 0x74,
+ 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x54, 0x0d, 0x00,
+ 0x07, 0xab, 0xf4, 0xf9, 0x59, 0x42, 0xc2, 0xb1, 0x61, 0xd3, 0xc1, 0xb1,
+ 0x61, 0x75, 0x78, 0x0b, 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04,
+ 0xe8, 0x03, 0x00, 0x00, 0x50, 0x4b, 0x01, 0x02, 0x14, 0x03, 0x14, 0x00,
+ 0x08, 0x00, 0x08, 0x00, 0xc1, 0x4a, 0x61, 0x4b, 0xcf, 0x3e, 0x6f, 0x7f,
+ 0xf3, 0x3e, 0x00, 0x00, 0xbe, 0x64, 0x00, 0x00, 0x3e, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x81, 0x5b, 0x5b,
+ 0x00, 0x00, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x6e,
+ 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x52, 0x65, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x65, 0x6e, 0x2e, 0x6c, 0x70,
+ 0x72, 0x6f, 0x6a, 0x2f, 0x4d, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x6e, 0x75,
+ 0x2e, 0x6e, 0x69, 0x62, 0x55, 0x54, 0x0d, 0x00, 0x07, 0xab, 0xf4, 0xf9,
+ 0x59, 0xd7, 0xc2, 0xb1, 0x61, 0xd3, 0xc1, 0xb1, 0x61, 0x75, 0x78, 0x0b,
+ 0x00, 0x01, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00,
+ 0x50, 0x4b, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0b, 0x00,
+ 0x52, 0x05, 0x00, 0x00, 0xda, 0x9a, 0x00, 0x00, 0x00, 0x00,
+ }
+
+ return zipFile
+}
diff --git a/vendor/github.com/kermieisinthehouse/gosx-notifier/terminal-app-zip.go b/vendor/github.com/kermieisinthehouse/gosx-notifier/terminal-app-zip.go
new file mode 100644
index 000000000..685bf5ecd
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/gosx-notifier/terminal-app-zip.go
@@ -0,0 +1,116 @@
+package gosxnotifier
+
+import (
+ "archive/zip"
+ "bytes"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "path/filepath"
+ "runtime"
+)
+
+const (
+ zipPath = "terminal-notifier.temp.zip"
+ executablePath = "terminal-notifier.app/Contents/MacOS/terminal-notifier"
+ tempDirSuffix = "gosxnotifier"
+)
+
+var (
+ rootPath string
+ FinalPath string
+)
+
+func supportedOS() bool {
+ if runtime.GOOS == "darwin" {
+ return true
+ } else {
+ log.Print("OS does not support terminal-notifier")
+ return false
+ }
+}
+
+func init() {
+ if supportedOS() {
+ err := installTerminalNotifier()
+ if err != nil {
+ log.Fatalf("Could not install Terminal Notifier to a temp directory: %s", err)
+ } else {
+ FinalPath = filepath.Join(rootPath, executablePath)
+ }
+ }
+}
+
+func exists(file string) bool {
+ if _, err := os.Stat(file); os.IsNotExist(err) {
+ return false
+ }
+ return true
+}
+
+func installTerminalNotifier() error {
+ rootPath = filepath.Join(os.TempDir(), tempDirSuffix)
+
+ //if terminal-notifier.app already installed no-need to re-install
+ if exists(filepath.Join(rootPath, executablePath)) {
+ return nil
+ }
+ buf := bytes.NewReader(terminalnotifier())
+ reader, err := zip.NewReader(buf, int64(buf.Len()))
+ if err != nil {
+ return err
+ }
+ err = unpackZip(reader, rootPath)
+ if err != nil {
+ return fmt.Errorf("could not unpack zip terminal-notifier file: %s", err)
+ }
+
+ err = os.Chmod(filepath.Join(rootPath, executablePath), 0755)
+ if err != nil {
+ return fmt.Errorf("could not make terminal-notifier executable: %s", err)
+ }
+
+ return nil
+}
+
+func unpackZip(reader *zip.Reader, tempPath string) error {
+ for _, zipFile := range reader.File {
+ name := zipFile.Name
+ mode := zipFile.Mode()
+ if mode.IsDir() {
+ if err := os.MkdirAll(filepath.Join(tempPath, name), 0755); err != nil {
+ return err
+ }
+ } else {
+ if err := unpackZippedFile(name, tempPath, zipFile); err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
+
+func unpackZippedFile(filename, tempPath string, zipFile *zip.File) error {
+ writer, err := os.Create(filepath.Join(tempPath, filename))
+
+ if err != nil {
+ return err
+ }
+
+ defer writer.Close()
+
+ reader, err := zipFile.Open()
+ if err != nil {
+ return err
+ }
+
+ defer reader.Close()
+
+ if _, err = io.Copy(writer, reader); err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/kermieisinthehouse/systray/.gitignore b/vendor/github.com/kermieisinthehouse/systray/.gitignore
new file mode 100644
index 000000000..2e85ef697
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/.gitignore
@@ -0,0 +1,12 @@
+example/example
+webview_example/webview_example
+*~
+*.swp
+**/*.exe
+Release
+Debug
+*.sdf
+dll/systray_unsigned.dll
+out.txt
+.vs
+on_exit*.txt
diff --git a/vendor/github.com/kermieisinthehouse/systray/CHANGELOG.md b/vendor/github.com/kermieisinthehouse/systray/CHANGELOG.md
new file mode 100644
index 000000000..58e7fc8b3
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/CHANGELOG.md
@@ -0,0 +1,125 @@
+# Changelog
+
+## [v1.1.0](https://github.com/getlantern/systray/tree/v1.1.0) (2020-11-18)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/v1.0.5...v1.1.0)
+
+**Merged pull requests:**
+
+- Add submenu support for Linux [\#183](https://github.com/getlantern/systray/pull/183) ([fbrinker](https://github.com/fbrinker))
+- Add checkbox support for Linux [\#181](https://github.com/getlantern/systray/pull/181) ([fbrinker](https://github.com/fbrinker))
+- fix SetTitle documentation [\#179](https://github.com/getlantern/systray/pull/179) ([delthas](https://github.com/delthas))
+
+## [v1.0.5](https://github.com/getlantern/systray/tree/v1.0.5) (2020-10-19)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/v1.0.4...v1.0.5)
+
+**Merged pull requests:**
+
+- start menu ID with positive, and change the type to uint32 [\#173](https://github.com/getlantern/systray/pull/173) ([joesis](https://github.com/joesis))
+- Allows disabling items in submenu on macOS [\#172](https://github.com/getlantern/systray/pull/172) ([joesis](https://github.com/joesis))
+- Does not use the template icon for regular icons [\#171](https://github.com/getlantern/systray/pull/171) ([sithembiso](https://github.com/sithembiso))
+
+## [v1.0.4](https://github.com/getlantern/systray/tree/v1.0.4) (2020-07-21)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/1.0.3...v1.0.4)
+
+**Merged pull requests:**
+
+- protect shared data structures with proper mutexes [\#162](https://github.com/getlantern/systray/pull/162) ([joesis](https://github.com/joesis))
+
+## [1.0.3](https://github.com/getlantern/systray/tree/1.0.3) (2020-06-11)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/v1.0.3...1.0.3)
+
+## [v1.0.3](https://github.com/getlantern/systray/tree/v1.0.3) (2020-06-11)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/v1.0.2...v1.0.3)
+
+**Merged pull requests:**
+
+- have a workaround to avoid crash on old macOS versions [\#153](https://github.com/getlantern/systray/pull/153) ([joesis](https://github.com/joesis))
+- Fix bug on darwin of setting icon for menu [\#147](https://github.com/getlantern/systray/pull/147) ([mangalaman93](https://github.com/mangalaman93))
+
+## [v1.0.2](https://github.com/getlantern/systray/tree/v1.0.2) (2020-05-19)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/v1.0.1...v1.0.2)
+
+**Merged pull requests:**
+
+- remove unused dependencies [\#145](https://github.com/getlantern/systray/pull/145) ([joesis](https://github.com/joesis))
+
+## [v1.0.1](https://github.com/getlantern/systray/tree/v1.0.1) (2020-05-18)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/1.0.1...v1.0.1)
+
+## [1.0.1](https://github.com/getlantern/systray/tree/1.0.1) (2020-05-18)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/1.0.0...1.0.1)
+
+**Merged pull requests:**
+
+- Unlock menuItemsLock before changing UI [\#144](https://github.com/getlantern/systray/pull/144) ([joesis](https://github.com/joesis))
+
+## [1.0.0](https://github.com/getlantern/systray/tree/1.0.0) (2020-05-18)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/v1.0.0...1.0.0)
+
+## [v1.0.0](https://github.com/getlantern/systray/tree/v1.0.0) (2020-05-18)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/0.9.0...v1.0.0)
+
+**Merged pull requests:**
+
+- Check if the menu item is nil [\#137](https://github.com/getlantern/systray/pull/137) ([myleshorton](https://github.com/myleshorton))
+
+## [0.9.0](https://github.com/getlantern/systray/tree/0.9.0) (2020-03-24)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/v0.9.0...0.9.0)
+
+## [v0.9.0](https://github.com/getlantern/systray/tree/v0.9.0) (2020-03-24)
+
+[Full Changelog](https://github.com/getlantern/systray/compare/8e63b37ef27d94f6db79c4ffb941608e8f0dc2f9...v0.9.0)
+
+**Merged pull requests:**
+
+- Backport all features and fixes from master [\#140](https://github.com/getlantern/systray/pull/140) ([joesis](https://github.com/joesis))
+- Nested menu windows [\#132](https://github.com/getlantern/systray/pull/132) ([joesis](https://github.com/joesis))
+- Support for nested sub-menus on OS X [\#131](https://github.com/getlantern/systray/pull/131) ([oxtoacart](https://github.com/oxtoacart))
+- Use temp directory for walk resource manager [\#129](https://github.com/getlantern/systray/pull/129) ([max-b](https://github.com/max-b))
+- Added support for template icons on macOS [\#119](https://github.com/getlantern/systray/pull/119) ([oxtoacart](https://github.com/oxtoacart))
+- When launching app window on macOS, make application a foreground app… [\#118](https://github.com/getlantern/systray/pull/118) ([oxtoacart](https://github.com/oxtoacart))
+- Include stdlib.h in systray\_browser\_linux to explicitly declare funct… [\#114](https://github.com/getlantern/systray/pull/114) ([oxtoacart](https://github.com/oxtoacart))
+- Fix panic when resources root path is not the working directory [\#112](https://github.com/getlantern/systray/pull/112) ([ksubileau](https://github.com/ksubileau))
+- Don't print close reason to console [\#111](https://github.com/getlantern/systray/pull/111) ([ksubileau](https://github.com/ksubileau))
+- Systray icon could not be changed dynamically [\#110](https://github.com/getlantern/systray/pull/110) ([ksubileau](https://github.com/ksubileau))
+- Preventing deadlock on menu item ClickeCh when no one is listening, c… [\#105](https://github.com/getlantern/systray/pull/105) ([oxtoacart](https://github.com/oxtoacart))
+- Reverted deadlock fix \(Affected other receivers\) [\#104](https://github.com/getlantern/systray/pull/104) ([ldstein](https://github.com/ldstein))
+- Fix Deadlock and item ordering in Windows [\#103](https://github.com/getlantern/systray/pull/103) ([ldstein](https://github.com/ldstein))
+- Minor README improvements \(go modules, example app, screenshot\) [\#98](https://github.com/getlantern/systray/pull/98) ([tstromberg](https://github.com/tstromberg))
+- Add support for app window [\#97](https://github.com/getlantern/systray/pull/97) ([oxtoacart](https://github.com/oxtoacart))
+- systray\_darwin.m: Compare Mac OS min version with value instead of macro [\#94](https://github.com/getlantern/systray/pull/94) ([teddywing](https://github.com/teddywing))
+- Attempt to fix https://github.com/getlantern/systray/issues/75 [\#92](https://github.com/getlantern/systray/pull/92) ([mikeschinkel](https://github.com/mikeschinkel))
+- Fix application path for MacOS in README [\#91](https://github.com/getlantern/systray/pull/91) ([zereraz](https://github.com/zereraz))
+- Document cross-platform console window details [\#81](https://github.com/getlantern/systray/pull/81) ([michaelsanford](https://github.com/michaelsanford))
+- Fix bad-looking system tray icon in Windows [\#78](https://github.com/getlantern/systray/pull/78) ([juja256](https://github.com/juja256))
+- Add the separator to the visible items [\#76](https://github.com/getlantern/systray/pull/76) ([meskio](https://github.com/meskio))
+- keep track of hidden items [\#74](https://github.com/getlantern/systray/pull/74) ([kalikaneko](https://github.com/kalikaneko))
+- Support macOS older than 10.13 [\#73](https://github.com/getlantern/systray/pull/73) ([swznd](https://github.com/swznd))
+- define ERROR\_SUCCESS as syscall.Errno [\#69](https://github.com/getlantern/systray/pull/69) ([joesis](https://github.com/joesis))
+- Bug/fix broken menuitem show [\#68](https://github.com/getlantern/systray/pull/68) ([kalikaneko](https://github.com/kalikaneko))
+- Fix mac deprecations [\#66](https://github.com/getlantern/systray/pull/66) ([jefvel](https://github.com/jefvel))
+- Made it possible to add icons to menu items on Mac [\#65](https://github.com/getlantern/systray/pull/65) ([jefvel](https://github.com/jefvel))
+- linux: delete temp files as soon as they are not needed [\#63](https://github.com/getlantern/systray/pull/63) ([meskio](https://github.com/meskio))
+- Merge changes from amkulikov to remove DLL for windows [\#56](https://github.com/getlantern/systray/pull/56) ([oxtoacart](https://github.com/oxtoacart))
+- Revert "Use templated icons for the menu bar in macOS" [\#51](https://github.com/getlantern/systray/pull/51) ([stoggi](https://github.com/stoggi))
+- Use templated icons for the menu bar in macOS [\#46](https://github.com/getlantern/systray/pull/46) ([stoggi](https://github.com/stoggi))
+- Syscalls instead of custom DLLs [\#44](https://github.com/getlantern/systray/pull/44) ([amkulikov](https://github.com/amkulikov))
+- On quit exit main loop on linux [\#41](https://github.com/getlantern/systray/pull/41) ([meskio](https://github.com/meskio))
+- Fixed hide show in linux \(\#37\) [\#39](https://github.com/getlantern/systray/pull/39) ([meskio](https://github.com/meskio))
+- fix: linux compilation warning [\#36](https://github.com/getlantern/systray/pull/36) ([novln](https://github.com/novln))
+- Added separator functionality [\#32](https://github.com/getlantern/systray/pull/32) ([oxtoacart](https://github.com/oxtoacart))
+
+
+
+\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
diff --git a/vendor/github.com/kermieisinthehouse/systray/LICENSE b/vendor/github.com/kermieisinthehouse/systray/LICENSE
new file mode 100644
index 000000000..3ee01626e
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2014 Brave New Software Project, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/vendor/github.com/kermieisinthehouse/systray/Makefile b/vendor/github.com/kermieisinthehouse/systray/Makefile
new file mode 100644
index 000000000..12f3d221f
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/Makefile
@@ -0,0 +1,18 @@
+tag-changelog: require-version require-gh-token
+ echo "Tagging..." && \
+ git tag -a "$$VERSION" -f --annotate -m"Tagged $$VERSION" && \
+ git push --tags -f && \
+ git checkout master && \
+ git pull && \
+ github_changelog_generator --no-issues --max-issues 100 --token "${GH_TOKEN}" --user getlantern --project systray && \
+ git add CHANGELOG.md && \
+ git commit -m "Updated changelog for $$VERSION" && \
+ git push origin HEAD && \
+ git checkout -
+
+guard-%:
+ @ if [ -z '${${*}}' ]; then echo 'Environment variable $* not set' && exit 1; fi
+
+require-version: guard-VERSION
+
+require-gh-token: guard-GH_TOKEN
diff --git a/vendor/github.com/kermieisinthehouse/systray/README.md b/vendor/github.com/kermieisinthehouse/systray/README.md
new file mode 100644
index 000000000..900802d6a
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/README.md
@@ -0,0 +1,122 @@
+systray is a cross-platform Go library to place an icon and menu in the notification area.
+
+This is a fork of the abandoned https://github.com/getlantern/systray with pull requests reviewed and merged, and bugs fixed.
+
+## Features
+
+* Supported on Windows, macOS, and Linux
+* Menu items can be checked and/or disabled
+* Methods may be called from any Goroutine
+
+## API
+
+```go
+func main() {
+ systray.Run(onReady, onExit)
+}
+
+func onReady() {
+ systray.SetIcon(icon.Data)
+ systray.SetTitle("Awesome App")
+ systray.SetTooltip("Pretty awesome超级棒")
+ mQuit := systray.AddMenuItem("Quit", "Quit the whole app")
+
+ // Sets the icon of a menu item. Only available on Mac and Windows.
+ mQuit.SetIcon(icon.Data)
+}
+
+func onExit() {
+ // clean up here
+}
+```
+
+See [full API](https://pkg.go.dev/github.com/getlantern/systray?tab=doc) as well as [CHANGELOG](https://github.com/getlantern/systray/tree/master/CHANGELOG.md).
+
+## Try the example app!
+
+Have go v1.12+ or higher installed? Here's an example to get started on macOS:
+
+```sh
+git clone https://github.com/getlantern/systray
+cd example
+env GO111MODULE=on go build
+./example
+```
+
+On Windows, you should build like this:
+
+```
+env GO111MODULE=on go build -ldflags "-H=windowsgui"
+```
+
+The following text will then appear on the console:
+
+
+```sh
+go: finding github.com/skratchdot/open-golang latest
+go: finding github.com/getlantern/systray latest
+go: finding github.com/getlantern/golog latest
+```
+
+Now look for *Awesome App* in your menu bar!
+
+
+
+## The Webview example
+
+The code under `webview_example` is to demostrate how it can co-exist with other UI elements. Note that the example doesn't work on macOS versions older than 10.15 Catalina.
+
+## Platform notes
+
+### Linux
+
+* Building apps requires gcc as well as the `gtk3` and `libayatana-appindicator` development headers to be installed. For Debian or Ubuntu, you may install these using:
+
+```sh
+sudo apt-get install gcc libgtk-3-dev libappindicator3-dev
+```
+
+On Linux Mint, `libxapp-dev` is also required .
+
+To build `webview_example`, you also need to install `libwebkit2gtk-4.0-dev` and remove `webview_example/rsrc.syso` which is required on Windows.
+
+### Windows
+
+* To avoid opening a console at application startup, use these compile flags:
+
+```sh
+go build -ldflags -H=windowsgui
+```
+
+### macOS
+
+On macOS, you will need to create an application bundle to wrap the binary; simply folders with the following minimal structure and assets:
+
+```
+SystrayApp.app/
+ Contents/
+ Info.plist
+ MacOS/
+ go-executable
+ Resources/
+ SystrayApp.icns
+```
+
+When running as an app bundle, you may want to add one or both of the following to your Info.plist:
+
+```xml
+
+ NSHighResolutionCapable
+ True
+
+
+ LSUIElement
+ 1
+```
+
+Consult the [Official Apple Documentation here](https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1).
+
+## Credits
+
+- https://github.com/xilp/systray
+- https://github.com/cratonica/trayhost
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray.go b/vendor/github.com/kermieisinthehouse/systray/systray.go
new file mode 100644
index 000000000..5324a86b4
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray.go
@@ -0,0 +1,244 @@
+/*
+Package systray is a cross-platform Go library to place an icon and menu in the notification area.
+*/
+package systray
+
+import (
+ "fmt"
+ "log"
+ "runtime"
+ "sync"
+ "sync/atomic"
+)
+
+var (
+ systrayReady func()
+ systrayExit func()
+ menuItems = make(map[uint32]*MenuItem)
+ menuItemsLock sync.RWMutex
+
+ currentID = uint32(0)
+ quitOnce sync.Once
+)
+
+func init() {
+ runtime.LockOSThread()
+}
+
+// MenuItem is used to keep track each menu item of systray.
+// Don't create it directly, use the one systray.AddMenuItem() returned
+type MenuItem struct {
+ // ClickedCh is the channel which will be notified when the menu item is clicked
+ ClickedCh chan struct{}
+
+ // id uniquely identify a menu item, not supposed to be modified
+ id uint32
+ // title is the text shown on menu item
+ title string
+ // tooltip is the text shown when pointing to menu item
+ tooltip string
+ // disabled menu item is grayed out and has no effect when clicked
+ disabled bool
+ // checked menu item has a tick before the title
+ checked bool
+ // has the menu item a checkbox (Linux)
+ isCheckable bool
+ // parent item, for sub menus
+ parent *MenuItem
+}
+
+func (item *MenuItem) String() string {
+ if item.parent == nil {
+ return fmt.Sprintf("MenuItem[%d, %q]", item.id, item.title)
+ }
+ return fmt.Sprintf("MenuItem[%d, parent %d, %q]", item.id, item.parent.id, item.title)
+}
+
+// newMenuItem returns a populated MenuItem object
+func newMenuItem(title string, tooltip string, parent *MenuItem) *MenuItem {
+ return &MenuItem{
+ ClickedCh: make(chan struct{}),
+ id: atomic.AddUint32(¤tID, 1),
+ title: title,
+ tooltip: tooltip,
+ disabled: false,
+ checked: false,
+ isCheckable: false,
+ parent: parent,
+ }
+}
+
+// Run initializes GUI and starts the event loop, then invokes the onReady
+// callback. It blocks until systray.Quit() is called.
+func Run(onReady func(), onExit func()) {
+ Register(onReady, onExit)
+ nativeLoop()
+}
+
+// Register initializes GUI and registers the callbacks but relies on the
+// caller to run the event loop somewhere else. It's useful if the program
+// needs to show other UI elements, for example, webview.
+// To overcome some OS weirdness, On macOS versions before Catalina, calling
+// this does exactly the same as Run().
+func Register(onReady func(), onExit func()) {
+ if onReady == nil {
+ systrayReady = func() {}
+ } else {
+ // Run onReady on separate goroutine to avoid blocking event loop
+ readyCh := make(chan interface{})
+ go func() {
+ <-readyCh
+ onReady()
+ }()
+ systrayReady = func() {
+ close(readyCh)
+ }
+ }
+ // unlike onReady, onExit runs in the event loop to make sure it has time to
+ // finish before the process terminates
+ if onExit == nil {
+ onExit = func() {}
+ }
+ systrayExit = onExit
+ registerSystray()
+}
+
+// Quit the systray
+func Quit() {
+ quitOnce.Do(quit)
+}
+
+// AddMenuItem adds a menu item with the designated title and tooltip.
+// It can be safely invoked from different goroutines.
+// Created menu items are checkable on Windows and OSX by default. For Linux you have to use AddMenuItemCheckbox
+func AddMenuItem(title string, tooltip string) *MenuItem {
+ item := newMenuItem(title, tooltip, nil)
+ item.update()
+ return item
+}
+
+// AddMenuItemCheckbox adds a menu item with the designated title and tooltip and a checkbox for Linux.
+// It can be safely invoked from different goroutines.
+// On Windows and OSX this is the same as calling AddMenuItem
+func AddMenuItemCheckbox(title string, tooltip string, checked bool) *MenuItem {
+ item := newMenuItem(title, tooltip, nil)
+ item.isCheckable = true
+ item.checked = checked
+ item.update()
+ return item
+}
+
+// AddSeparator adds a separator bar to the menu
+func AddSeparator() {
+ addSeparator(atomic.AddUint32(¤tID, 1))
+}
+
+// AddSubMenuItem adds a nested sub-menu item with the designated title and tooltip.
+// It can be safely invoked from different goroutines.
+// Created menu items are checkable on Windows and OSX by default. For Linux you have to use AddSubMenuItemCheckbox
+func (item *MenuItem) AddSubMenuItem(title string, tooltip string) *MenuItem {
+ child := newMenuItem(title, tooltip, item)
+ child.update()
+ return child
+}
+
+// AddSubMenuItemCheckbox adds a nested sub-menu item with the designated title and tooltip and a checkbox for Linux.
+// It can be safely invoked from different goroutines.
+// On Windows and OSX this is the same as calling AddSubMenuItem
+func (item *MenuItem) AddSubMenuItemCheckbox(title string, tooltip string, checked bool) *MenuItem {
+ child := newMenuItem(title, tooltip, item)
+ child.isCheckable = true
+ child.checked = checked
+ child.update()
+ return child
+}
+
+// SetTitle set the text to display on a menu item
+func (item *MenuItem) SetTitle(title string) {
+ item.title = title
+ item.update()
+}
+
+// Title returns the text displayed on a menu item
+func (item *MenuItem) Title() string {
+ return item.title
+}
+
+// SetTooltip set the tooltip to show when mouse hover
+func (item *MenuItem) SetTooltip(tooltip string) {
+ item.tooltip = tooltip
+ item.update()
+}
+
+// Tooltip returns the tooltip shown when mouse hover
+func (item *MenuItem) Tooltip() string {
+ return item.tooltip
+}
+
+// Disabled checks if the menu item is disabled
+func (item *MenuItem) Disabled() bool {
+ return item.disabled
+}
+
+// Enable a menu item regardless if it's previously enabled or not
+func (item *MenuItem) Enable() {
+ item.disabled = false
+ item.update()
+}
+
+// Disable a menu item regardless if it's previously disabled or not
+func (item *MenuItem) Disable() {
+ item.disabled = true
+ item.update()
+}
+
+// Hide hides a menu item
+func (item *MenuItem) Hide() {
+ hideMenuItem(item)
+}
+
+// Show shows a previously hidden menu item
+func (item *MenuItem) Show() {
+ showMenuItem(item)
+}
+
+// Checked returns if the menu item has a check mark
+func (item *MenuItem) Checked() bool {
+ return item.checked
+}
+
+// Check a menu item regardless if it's previously checked or not
+func (item *MenuItem) Check() {
+ item.checked = true
+ item.update()
+}
+
+// Uncheck a menu item regardless if it's previously unchecked or not
+func (item *MenuItem) Uncheck() {
+ item.checked = false
+ item.update()
+}
+
+// update propagates changes on a menu item to systray
+func (item *MenuItem) update() {
+ menuItemsLock.Lock()
+ menuItems[item.id] = item
+ menuItemsLock.Unlock()
+ addOrUpdateMenuItem(item)
+}
+
+func systrayMenuItemSelected(id uint32) {
+ menuItemsLock.RLock()
+ item, ok := menuItems[id]
+ menuItemsLock.RUnlock()
+ if !ok {
+ log.Printf("No menu item with ID %v", id)
+ return
+ }
+
+ select {
+ case item.ClickedCh <- struct{}{}:
+ // in case no one waiting for the channel
+ default:
+ }
+}
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray.h b/vendor/github.com/kermieisinthehouse/systray/systray.h
new file mode 100644
index 000000000..888c82905
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray.h
@@ -0,0 +1,17 @@
+#include "stdbool.h"
+
+extern void systray_ready();
+extern void systray_on_exit();
+extern void systray_menu_item_selected(int menu_id);
+void registerSystray(void);
+int nativeLoop(void);
+
+void setIcon(const char* iconBytes, int length, bool template);
+void setMenuItemIcon(const char* iconBytes, int length, int menuId, bool template);
+void setTitle(char* title);
+void setTooltip(char* tooltip);
+void add_or_update_menu_item(int menuId, int parentMenuId, char* title, char* tooltip, short disabled, short checked, short isCheckable);
+void add_separator(int menuId);
+void hide_menu_item(int menuId);
+void show_menu_item(int menuId);
+void quit();
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray_darwin.go b/vendor/github.com/kermieisinthehouse/systray/systray_darwin.go
new file mode 100644
index 000000000..740ec5b5e
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray_darwin.go
@@ -0,0 +1,38 @@
+package systray
+
+/*
+#cgo darwin CFLAGS: -DDARWIN -x objective-c -fobjc-arc
+#cgo darwin LDFLAGS: -framework Cocoa -framework WebKit
+
+#include "systray.h"
+*/
+import "C"
+
+import (
+ "unsafe"
+)
+
+// SetTemplateIcon sets the systray icon as a template icon (on Mac), falling back
+// to a regular icon on other platforms.
+// templateIconBytes and regularIconBytes should be the content of .ico for windows and
+// .ico/.jpg/.png for other platforms.
+func SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
+ cstr := (*C.char)(unsafe.Pointer(&templateIconBytes[0]))
+ C.setIcon(cstr, (C.int)(len(templateIconBytes)), true)
+}
+
+// SetIcon sets the icon of a menu item. Only works on macOS and Windows.
+// iconBytes should be the content of .ico/.jpg/.png
+func (item *MenuItem) SetIcon(iconBytes []byte) {
+ cstr := (*C.char)(unsafe.Pointer(&iconBytes[0]))
+ C.setMenuItemIcon(cstr, (C.int)(len(iconBytes)), C.int(item.id), false)
+}
+
+// SetTemplateIcon sets the icon of a menu item as a template icon (on macOS). On Windows, it
+// falls back to the regular icon bytes and on Linux it does nothing.
+// templateIconBytes and regularIconBytes should be the content of .ico for windows and
+// .ico/.jpg/.png for other platforms.
+func (item *MenuItem) SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
+ cstr := (*C.char)(unsafe.Pointer(&templateIconBytes[0]))
+ C.setMenuItemIcon(cstr, (C.int)(len(templateIconBytes)), C.int(item.id), true)
+}
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray_darwin.m b/vendor/github.com/kermieisinthehouse/systray/systray_darwin.m
new file mode 100644
index 000000000..34f198236
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray_darwin.m
@@ -0,0 +1,294 @@
+#import
+#include "systray.h"
+
+#if __MAC_OS_X_VERSION_MIN_REQUIRED < 101400
+
+ #ifndef NSControlStateValueOff
+ #define NSControlStateValueOff NSOffState
+ #endif
+
+ #ifndef NSControlStateValueOn
+ #define NSControlStateValueOn NSOnState
+ #endif
+
+#endif
+
+@interface MenuItem : NSObject
+{
+ @public
+ NSNumber* menuId;
+ NSNumber* parentMenuId;
+ NSString* title;
+ NSString* tooltip;
+ short disabled;
+ short checked;
+}
+-(id) initWithId: (int)theMenuId
+withParentMenuId: (int)theParentMenuId
+ withTitle: (const char*)theTitle
+ withTooltip: (const char*)theTooltip
+ withDisabled: (short)theDisabled
+ withChecked: (short)theChecked;
+ @end
+ @implementation MenuItem
+ -(id) initWithId: (int)theMenuId
+ withParentMenuId: (int)theParentMenuId
+ withTitle: (const char*)theTitle
+ withTooltip: (const char*)theTooltip
+ withDisabled: (short)theDisabled
+ withChecked: (short)theChecked
+{
+ menuId = [NSNumber numberWithInt:theMenuId];
+ parentMenuId = [NSNumber numberWithInt:theParentMenuId];
+ title = [[NSString alloc] initWithCString:theTitle
+ encoding:NSUTF8StringEncoding];
+ tooltip = [[NSString alloc] initWithCString:theTooltip
+ encoding:NSUTF8StringEncoding];
+ disabled = theDisabled;
+ checked = theChecked;
+ return self;
+}
+@end
+
+@interface AppDelegate: NSObject
+ - (void) add_or_update_menu_item:(MenuItem*) item;
+ - (IBAction)menuHandler:(id)sender;
+ @property (assign) IBOutlet NSWindow *window;
+ @end
+
+ @implementation AppDelegate
+{
+ NSStatusItem *statusItem;
+ NSMenu *menu;
+ NSCondition* cond;
+}
+
+@synthesize window = _window;
+
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
+{
+ self->statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
+ self->menu = [[NSMenu alloc] init];
+ [self->menu setAutoenablesItems: FALSE];
+ [self->statusItem setMenu:self->menu];
+ systray_ready();
+}
+
+- (void)applicationWillTerminate:(NSNotification *)aNotification
+{
+ systray_on_exit();
+}
+
+- (void)setIcon:(NSImage *)image {
+ statusItem.button.image = image;
+ [self updateTitleButtonStyle];
+}
+
+- (void)setTitle:(NSString *)title {
+ statusItem.button.title = title;
+ [self updateTitleButtonStyle];
+}
+
+-(void)updateTitleButtonStyle {
+ if (statusItem.button.image != nil) {
+ if ([statusItem.button.title length] == 0) {
+ statusItem.button.imagePosition = NSImageOnly;
+ } else {
+ statusItem.button.imagePosition = NSImageLeft;
+ }
+ } else {
+ statusItem.button.imagePosition = NSNoImage;
+ }
+}
+
+
+- (void)setTooltip:(NSString *)tooltip {
+ statusItem.button.toolTip = tooltip;
+}
+
+- (IBAction)menuHandler:(id)sender
+{
+ NSNumber* menuId = [sender representedObject];
+ systray_menu_item_selected(menuId.intValue);
+}
+
+- (void)add_or_update_menu_item:(MenuItem *)item {
+ NSMenu *theMenu = self->menu;
+ NSMenuItem *parentItem;
+ if ([item->parentMenuId integerValue] > 0) {
+ parentItem = find_menu_item(menu, item->parentMenuId);
+ if (parentItem.hasSubmenu) {
+ theMenu = parentItem.submenu;
+ } else {
+ theMenu = [[NSMenu alloc] init];
+ [theMenu setAutoenablesItems:NO];
+ [parentItem setSubmenu:theMenu];
+ }
+ }
+
+ NSMenuItem *menuItem;
+ menuItem = find_menu_item(theMenu, item->menuId);
+ if (menuItem == NULL) {
+ menuItem = [theMenu addItemWithTitle:item->title
+ action:@selector(menuHandler:)
+ keyEquivalent:@""];
+ [menuItem setRepresentedObject:item->menuId];
+ }
+ [menuItem setTitle:item->title];
+ [menuItem setTag:[item->menuId integerValue]];
+ [menuItem setTarget:self];
+ [menuItem setToolTip:item->tooltip];
+ if (item->disabled == 1) {
+ menuItem.enabled = FALSE;
+ } else {
+ menuItem.enabled = TRUE;
+ }
+ if (item->checked == 1) {
+ menuItem.state = NSControlStateValueOn;
+ } else {
+ menuItem.state = NSControlStateValueOff;
+ }
+}
+
+NSMenuItem *find_menu_item(NSMenu *ourMenu, NSNumber *menuId) {
+ NSMenuItem *foundItem = [ourMenu itemWithTag:[menuId integerValue]];
+ if (foundItem != NULL) {
+ return foundItem;
+ }
+ NSArray *menu_items = ourMenu.itemArray;
+ int i;
+ for (i = 0; i < [menu_items count]; i++) {
+ NSMenuItem *i_item = [menu_items objectAtIndex:i];
+ if (i_item.hasSubmenu) {
+ foundItem = find_menu_item(i_item.submenu, menuId);
+ if (foundItem != NULL) {
+ return foundItem;
+ }
+ }
+ }
+
+ return NULL;
+};
+
+- (void) add_separator:(NSNumber*) menuId
+{
+ [menu addItem: [NSMenuItem separatorItem]];
+}
+
+- (void) hide_menu_item:(NSNumber*) menuId
+{
+ NSMenuItem* menuItem = find_menu_item(menu, menuId);
+ if (menuItem != NULL) {
+ [menuItem setHidden:TRUE];
+ }
+}
+
+- (void) setMenuItemIcon:(NSArray*)imageAndMenuId {
+ NSImage* image = [imageAndMenuId objectAtIndex:0];
+ NSNumber* menuId = [imageAndMenuId objectAtIndex:1];
+
+ NSMenuItem* menuItem;
+ menuItem = find_menu_item(menu, menuId);
+ if (menuItem == NULL) {
+ return;
+ }
+ menuItem.image = image;
+}
+
+- (void) show_menu_item:(NSNumber*) menuId
+{
+ NSMenuItem* menuItem = find_menu_item(menu, menuId);
+ if (menuItem != NULL) {
+ [menuItem setHidden:FALSE];
+ }
+}
+
+- (void) quit
+{
+ [NSApp stop:self];
+ [NSApp abortModal];
+}
+
+@end
+
+void registerSystray(void) {
+ AppDelegate *delegate = [[AppDelegate alloc] init];
+ [[NSApplication sharedApplication] setDelegate:delegate];
+ // A workaround to avoid crashing on macOS versions before Catalina. Somehow
+ // SIGSEGV would happen inside AppKit if [NSApp run] is called from a
+ // different function, even if that function is called right after this.
+ if (floor(NSAppKitVersionNumber) <= /*NSAppKitVersionNumber10_14*/ 1671){
+ [NSApp run];
+ }
+}
+
+int nativeLoop(void) {
+ if (floor(NSAppKitVersionNumber) > /*NSAppKitVersionNumber10_14*/ 1671){
+ [NSApp run];
+ }
+ return EXIT_SUCCESS;
+}
+
+void runInMainThread(SEL method, id object) {
+ [(AppDelegate*)[NSApp delegate]
+ performSelectorOnMainThread:method
+ withObject:object
+ waitUntilDone: YES];
+}
+
+void setIcon(const char* iconBytes, int length, bool template) {
+ NSData* buffer = [NSData dataWithBytes: iconBytes length:length];
+ NSImage *image = [[NSImage alloc] initWithData:buffer];
+ [image setSize:NSMakeSize(16, 16)];
+ image.template = template;
+ runInMainThread(@selector(setIcon:), (id)image);
+}
+
+void setMenuItemIcon(const char* iconBytes, int length, int menuId, bool template) {
+ NSData* buffer = [NSData dataWithBytes: iconBytes length:length];
+ NSImage *image = [[NSImage alloc] initWithData:buffer];
+ [image setSize:NSMakeSize(16, 16)];
+ image.template = template;
+ NSNumber *mId = [NSNumber numberWithInt:menuId];
+ runInMainThread(@selector(setMenuItemIcon:), @[image, (id)mId]);
+}
+
+void setTitle(char* ctitle) {
+ NSString* title = [[NSString alloc] initWithCString:ctitle
+ encoding:NSUTF8StringEncoding];
+ free(ctitle);
+ runInMainThread(@selector(setTitle:), (id)title);
+}
+
+void setTooltip(char* ctooltip) {
+ NSString* tooltip = [[NSString alloc] initWithCString:ctooltip
+ encoding:NSUTF8StringEncoding];
+ free(ctooltip);
+ runInMainThread(@selector(setTooltip:), (id)tooltip);
+}
+
+void add_or_update_menu_item(int menuId, int parentMenuId, char* title, char* tooltip, short disabled, short checked, short isCheckable) {
+ MenuItem* item = [[MenuItem alloc] initWithId: menuId withParentMenuId: parentMenuId withTitle: title withTooltip: tooltip withDisabled: disabled withChecked: checked];
+ free(title);
+ free(tooltip);
+ runInMainThread(@selector(add_or_update_menu_item:), (id)item);
+}
+
+void add_separator(int menuId) {
+ NSNumber *mId = [NSNumber numberWithInt:menuId];
+ runInMainThread(@selector(add_separator:), (id)mId);
+}
+
+void hide_menu_item(int menuId) {
+ NSNumber *mId = [NSNumber numberWithInt:menuId];
+ runInMainThread(@selector(hide_menu_item:), (id)mId);
+}
+
+void show_menu_item(int menuId) {
+ NSNumber *mId = [NSNumber numberWithInt:menuId];
+ runInMainThread(@selector(show_menu_item:), (id)mId);
+}
+
+void quit() {
+ runInMainThread(@selector(quit), nil);
+}
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray_linux.c b/vendor/github.com/kermieisinthehouse/systray/systray_linux.c
new file mode 100644
index 000000000..0510bff96
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray_linux.c
@@ -0,0 +1,269 @@
+#include
+#include
+#include
+#include
+#include
+#include "systray.h"
+
+static AppIndicator *global_app_indicator;
+static GtkWidget *global_tray_menu = NULL;
+static GList *global_menu_items = NULL;
+static char temp_file_name[PATH_MAX] = "";
+
+typedef struct {
+ GtkWidget *menu_item;
+ int menu_id;
+ long signalHandlerId;
+} MenuItemNode;
+
+typedef struct {
+ int menu_id;
+ int parent_menu_id;
+ char* title;
+ char* tooltip;
+ short disabled;
+ short checked;
+ short isCheckable;
+} MenuItemInfo;
+
+void registerSystray(void) {
+ gtk_init(0, NULL);
+ global_app_indicator = app_indicator_new("systray", "", APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
+ app_indicator_set_status(global_app_indicator, APP_INDICATOR_STATUS_ACTIVE);
+ global_tray_menu = gtk_menu_new();
+ app_indicator_set_menu(global_app_indicator, GTK_MENU(global_tray_menu));
+ systray_ready();
+}
+
+int nativeLoop(void) {
+ gtk_main();
+ systray_on_exit();
+ return 0;
+}
+
+void _unlink_temp_file() {
+ if (strlen(temp_file_name) != 0) {
+ int ret = unlink(temp_file_name);
+ if (ret == -1) {
+ printf("failed to remove temp icon file %s: %s\n", temp_file_name, strerror(errno));
+ }
+ temp_file_name[0] = '\0';
+ }
+}
+
+// runs in main thread, should always return FALSE to prevent gtk to execute it again
+gboolean do_set_icon(gpointer data) {
+ _unlink_temp_file();
+ char *tmpdir = getenv("TMPDIR");
+ if (NULL == tmpdir) {
+ tmpdir = "/tmp";
+ }
+ strncpy(temp_file_name, tmpdir, PATH_MAX-1);
+ strncat(temp_file_name, "/systray_XXXXXX", PATH_MAX-1);
+ temp_file_name[PATH_MAX-1] = '\0';
+
+ GBytes* bytes = (GBytes*)data;
+ int fd = mkstemp(temp_file_name);
+ if (fd == -1) {
+ printf("failed to create temp icon file %s: %s\n", temp_file_name, strerror(errno));
+ return FALSE;
+ }
+ gsize size = 0;
+ gconstpointer icon_data = g_bytes_get_data(bytes, &size);
+ ssize_t written = write(fd, icon_data, size);
+ close(fd);
+ if(written != size) {
+ printf("failed to write temp icon file %s: %s\n", temp_file_name, strerror(errno));
+ return FALSE;
+ }
+ app_indicator_set_icon_full(global_app_indicator, temp_file_name, "");
+ app_indicator_set_attention_icon_full(global_app_indicator, temp_file_name, "");
+ g_bytes_unref(bytes);
+ return FALSE;
+}
+
+void _systray_menu_item_selected(int *id) {
+ systray_menu_item_selected(*id);
+}
+
+GtkMenuItem* find_menu_by_id(int id) {
+ GList* it;
+ for(it = global_menu_items; it != NULL; it = it->next) {
+ MenuItemNode* item = (MenuItemNode*)(it->data);
+ if(item->menu_id == id) {
+ return GTK_MENU_ITEM(item->menu_item);
+ }
+ }
+ return NULL;
+}
+
+// runs in main thread, should always return FALSE to prevent gtk to execute it again
+gboolean do_add_or_update_menu_item(gpointer data) {
+ MenuItemInfo *mii = (MenuItemInfo*)data;
+ GList* it;
+ for(it = global_menu_items; it != NULL; it = it->next) {
+ MenuItemNode* item = (MenuItemNode*)(it->data);
+ if(item->menu_id == mii->menu_id) {
+ gtk_menu_item_set_label(GTK_MENU_ITEM(item->menu_item), mii->title);
+
+ if (mii->isCheckable) {
+ // We need to block the "activate" event, to emulate the same behaviour as in the windows version
+ // A Check/Uncheck does change the checkbox, but does not trigger the checkbox menuItem channel
+ g_signal_handler_block(GTK_CHECK_MENU_ITEM(item->menu_item), item->signalHandlerId);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item->menu_item), mii->checked == 1);
+ g_signal_handler_unblock(GTK_CHECK_MENU_ITEM(item->menu_item), item->signalHandlerId);
+ }
+ break;
+ }
+ }
+
+ // menu id doesn't exist, add new item
+ if(it == NULL) {
+ GtkWidget *menu_item;
+ if (mii->isCheckable) {
+ menu_item = gtk_check_menu_item_new_with_label(mii->title);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), mii->checked == 1);
+ } else {
+ menu_item = gtk_menu_item_new_with_label(mii->title);
+ }
+ int *id = malloc(sizeof(int));
+ *id = mii->menu_id;
+ long signalHandlerId = g_signal_connect_swapped(
+ G_OBJECT(menu_item),
+ "activate",
+ G_CALLBACK(_systray_menu_item_selected),
+ id
+ );
+
+ if (mii->parent_menu_id == 0) {
+ gtk_menu_shell_append(GTK_MENU_SHELL(global_tray_menu), menu_item);
+ } else {
+ GtkMenuItem* parentMenuItem = find_menu_by_id(mii->parent_menu_id);
+ GtkWidget* parentMenu = gtk_menu_item_get_submenu(parentMenuItem);
+
+ if(parentMenu == NULL) {
+ parentMenu = gtk_menu_new();
+ gtk_menu_item_set_submenu(parentMenuItem, parentMenu);
+ }
+
+ gtk_menu_shell_append(GTK_MENU_SHELL(parentMenu), menu_item);
+ }
+
+ MenuItemNode* new_item = malloc(sizeof(MenuItemNode));
+ new_item->menu_id = mii->menu_id;
+ new_item->signalHandlerId = signalHandlerId;
+ new_item->menu_item = menu_item;
+ GList* new_node = malloc(sizeof(GList));
+ new_node->data = new_item;
+ new_node->next = global_menu_items;
+ if(global_menu_items != NULL) {
+ global_menu_items->prev = new_node;
+ }
+ global_menu_items = new_node;
+ it = new_node;
+ }
+ GtkWidget* menu_item = GTK_WIDGET(((MenuItemNode*)(it->data))->menu_item);
+ gtk_widget_set_sensitive(menu_item, mii->disabled != 1);
+ gtk_widget_show(menu_item);
+
+ free(mii->title);
+ free(mii->tooltip);
+ free(mii);
+ return FALSE;
+}
+
+gboolean do_add_separator(gpointer data) {
+ GtkWidget *separator = gtk_separator_menu_item_new();
+ gtk_menu_shell_append(GTK_MENU_SHELL(global_tray_menu), separator);
+ gtk_widget_show(separator);
+ return FALSE;
+}
+
+// runs in main thread, should always return FALSE to prevent gtk to execute it again
+gboolean do_hide_menu_item(gpointer data) {
+ MenuItemInfo *mii = (MenuItemInfo*)data;
+ GList* it;
+ for(it = global_menu_items; it != NULL; it = it->next) {
+ MenuItemNode* item = (MenuItemNode*)(it->data);
+ if(item->menu_id == mii->menu_id){
+ gtk_widget_hide(GTK_WIDGET(item->menu_item));
+ break;
+ }
+ }
+ return FALSE;
+}
+
+// runs in main thread, should always return FALSE to prevent gtk to execute it again
+gboolean do_show_menu_item(gpointer data) {
+ MenuItemInfo *mii = (MenuItemInfo*)data;
+ GList* it;
+ for(it = global_menu_items; it != NULL; it = it->next) {
+ MenuItemNode* item = (MenuItemNode*)(it->data);
+ if(item->menu_id == mii->menu_id){
+ gtk_widget_show(GTK_WIDGET(item->menu_item));
+ break;
+ }
+ }
+ return FALSE;
+}
+
+// runs in main thread, should always return FALSE to prevent gtk to execute it again
+gboolean do_quit(gpointer data) {
+ _unlink_temp_file();
+ // app indicator doesn't provide a way to remove it, hide it as a workaround
+ app_indicator_set_status(global_app_indicator, APP_INDICATOR_STATUS_PASSIVE);
+ gtk_main_quit();
+ return FALSE;
+}
+
+void setIcon(const char* iconBytes, int length, bool template) {
+ GBytes* bytes = g_bytes_new_static(iconBytes, length);
+ g_idle_add(do_set_icon, bytes);
+}
+
+void setTitle(char* ctitle) {
+ app_indicator_set_title(global_app_indicator,ctitle);
+ app_indicator_set_label(global_app_indicator, ctitle, "");
+ free(ctitle);
+}
+
+void setTooltip(char* ctooltip) {
+ free(ctooltip);
+}
+
+void setMenuItemIcon(const char* iconBytes, int length, int menuId, bool template) {
+}
+
+void add_or_update_menu_item(int menu_id, int parent_menu_id, char* title, char* tooltip, short disabled, short checked, short isCheckable) {
+ MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
+ mii->menu_id = menu_id;
+ mii->parent_menu_id = parent_menu_id;
+ mii->title = title;
+ mii->tooltip = tooltip;
+ mii->disabled = disabled;
+ mii->checked = checked;
+ mii->isCheckable = isCheckable;
+ g_idle_add(do_add_or_update_menu_item, mii);
+}
+
+void add_separator(int menu_id) {
+ MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
+ mii->menu_id = menu_id;
+ g_idle_add(do_add_separator, mii);
+}
+
+void hide_menu_item(int menu_id) {
+ MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
+ mii->menu_id = menu_id;
+ g_idle_add(do_hide_menu_item, mii);
+}
+
+void show_menu_item(int menu_id) {
+ MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
+ mii->menu_id = menu_id;
+ g_idle_add(do_show_menu_item, mii);
+}
+
+void quit() {
+ g_idle_add(do_quit, NULL);
+}
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray_linux.go b/vendor/github.com/kermieisinthehouse/systray/systray_linux.go
new file mode 100644
index 000000000..1f508c7b4
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray_linux.go
@@ -0,0 +1,29 @@
+package systray
+
+/*
+#cgo darwin CFLAGS: -DDARWIN -x objective-c -fobjc-arc
+#cgo darwin LDFLAGS: -framework Cocoa -framework WebKit
+
+#include "systray.h"
+*/
+import "C"
+
+// SetTemplateIcon sets the systray icon as a template icon (on macOS), falling back
+// to a regular icon on other platforms.
+// templateIconBytes and iconBytes should be the content of .ico for windows and
+// .ico/.jpg/.png for other platforms.
+func SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
+ SetIcon(regularIconBytes)
+}
+
+// SetIcon sets the icon of a menu item. Only works on macOS and Windows.
+// iconBytes should be the content of .ico/.jpg/.png
+func (item *MenuItem) SetIcon(iconBytes []byte) {
+}
+
+// SetTemplateIcon sets the icon of a menu item as a template icon (on macOS). On Windows, it
+// falls back to the regular icon bytes and on Linux it does nothing.
+// templateIconBytes and regularIconBytes should be the content of .ico for windows and
+// .ico/.jpg/.png for other platforms.
+func (item *MenuItem) SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
+}
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray_nonwindows.go b/vendor/github.com/kermieisinthehouse/systray/systray_nonwindows.go
new file mode 100644
index 000000000..6f6e42929
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray_nonwindows.go
@@ -0,0 +1,107 @@
+//go:build !windows
+// +build !windows
+
+package systray
+
+/*
+#cgo linux pkg-config: gtk+-3.0 ayatana-appindicator3-0.1
+#cgo darwin CFLAGS: -DDARWIN -x objective-c -fobjc-arc
+#cgo darwin LDFLAGS: -framework Cocoa
+
+#include "systray.h"
+*/
+import "C"
+
+import (
+ "unsafe"
+)
+
+func registerSystray() {
+ C.registerSystray()
+}
+
+func nativeLoop() {
+ C.nativeLoop()
+}
+
+func quit() {
+ C.quit()
+}
+
+// SetIcon sets the systray icon.
+// iconBytes should be the content of .ico for windows and .ico/.jpg/.png
+// for other platforms.
+func SetIcon(iconBytes []byte) {
+ cstr := (*C.char)(unsafe.Pointer(&iconBytes[0]))
+ C.setIcon(cstr, (C.int)(len(iconBytes)), false)
+}
+
+// SetTitle sets the systray title, only available on Mac and Linux.
+func SetTitle(title string) {
+ C.setTitle(C.CString(title))
+}
+
+// SetTooltip sets the systray tooltip to display on mouse hover of the tray icon,
+// only available on Mac and Windows.
+func SetTooltip(tooltip string) {
+ C.setTooltip(C.CString(tooltip))
+}
+
+func addOrUpdateMenuItem(item *MenuItem) {
+ var disabled C.short
+ if item.disabled {
+ disabled = 1
+ }
+ var checked C.short
+ if item.checked {
+ checked = 1
+ }
+ var isCheckable C.short
+ if item.isCheckable {
+ isCheckable = 1
+ }
+ var parentID uint32 = 0
+ if item.parent != nil {
+ parentID = item.parent.id
+ }
+ C.add_or_update_menu_item(
+ C.int(item.id),
+ C.int(parentID),
+ C.CString(item.title),
+ C.CString(item.tooltip),
+ disabled,
+ checked,
+ isCheckable,
+ )
+}
+
+func addSeparator(id uint32) {
+ C.add_separator(C.int(id))
+}
+
+func hideMenuItem(item *MenuItem) {
+ C.hide_menu_item(
+ C.int(item.id),
+ )
+}
+
+func showMenuItem(item *MenuItem) {
+ C.show_menu_item(
+ C.int(item.id),
+ )
+}
+
+//export systray_ready
+func systray_ready() {
+ systrayReady()
+}
+
+//export systray_on_exit
+func systray_on_exit() {
+ systrayExit()
+}
+
+//export systray_menu_item_selected
+func systray_menu_item_selected(cID C.int) {
+ systrayMenuItemSelected(uint32(cID))
+}
diff --git a/vendor/github.com/kermieisinthehouse/systray/systray_windows.go b/vendor/github.com/kermieisinthehouse/systray/systray_windows.go
new file mode 100644
index 000000000..180da3004
--- /dev/null
+++ b/vendor/github.com/kermieisinthehouse/systray/systray_windows.go
@@ -0,0 +1,946 @@
+//go:build windows
+// +build windows
+
+package systray
+
+import (
+ "crypto/md5"
+ "encoding/hex"
+ "io/ioutil"
+ "log"
+ "os"
+ "path/filepath"
+ "sort"
+ "sync"
+ "syscall"
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+// Helpful sources: https://github.com/golang/exp/blob/master/shiny/driver/internal/win32
+
+var (
+ g32 = windows.NewLazySystemDLL("Gdi32.dll")
+ pCreateCompatibleBitmap = g32.NewProc("CreateCompatibleBitmap")
+ pCreateCompatibleDC = g32.NewProc("CreateCompatibleDC")
+ pDeleteDC = g32.NewProc("DeleteDC")
+ pSelectObject = g32.NewProc("SelectObject")
+
+ k32 = windows.NewLazySystemDLL("Kernel32.dll")
+ pGetModuleHandle = k32.NewProc("GetModuleHandleW")
+
+ s32 = windows.NewLazySystemDLL("Shell32.dll")
+ pShellNotifyIcon = s32.NewProc("Shell_NotifyIconW")
+
+ u32 = windows.NewLazySystemDLL("User32.dll")
+ pCreateMenu = u32.NewProc("CreateMenu")
+ pCreatePopupMenu = u32.NewProc("CreatePopupMenu")
+ pCreateWindowEx = u32.NewProc("CreateWindowExW")
+ pDefWindowProc = u32.NewProc("DefWindowProcW")
+ pRemoveMenu = u32.NewProc("RemoveMenu")
+ pDestroyWindow = u32.NewProc("DestroyWindow")
+ pDispatchMessage = u32.NewProc("DispatchMessageW")
+ pDrawIconEx = u32.NewProc("DrawIconEx")
+ pGetCursorPos = u32.NewProc("GetCursorPos")
+ pGetDC = u32.NewProc("GetDC")
+ pGetMessage = u32.NewProc("GetMessageW")
+ pGetSystemMetrics = u32.NewProc("GetSystemMetrics")
+ pInsertMenuItem = u32.NewProc("InsertMenuItemW")
+ pLoadCursor = u32.NewProc("LoadCursorW")
+ pLoadIcon = u32.NewProc("LoadIconW")
+ pLoadImage = u32.NewProc("LoadImageW")
+ pPostMessage = u32.NewProc("PostMessageW")
+ pPostQuitMessage = u32.NewProc("PostQuitMessage")
+ pRegisterClass = u32.NewProc("RegisterClassExW")
+ pRegisterWindowMessage = u32.NewProc("RegisterWindowMessageW")
+ pReleaseDC = u32.NewProc("ReleaseDC")
+ pSetForegroundWindow = u32.NewProc("SetForegroundWindow")
+ pSetMenuInfo = u32.NewProc("SetMenuInfo")
+ pSetMenuItemInfo = u32.NewProc("SetMenuItemInfoW")
+ pShowWindow = u32.NewProc("ShowWindow")
+ pTrackPopupMenu = u32.NewProc("TrackPopupMenu")
+ pTranslateMessage = u32.NewProc("TranslateMessage")
+ pUnregisterClass = u32.NewProc("UnregisterClassW")
+ pUpdateWindow = u32.NewProc("UpdateWindow")
+)
+
+// Contains window class information.
+// It is used with the RegisterClassEx and GetClassInfoEx functions.
+// https://msdn.microsoft.com/en-us/library/ms633577.aspx
+type wndClassEx struct {
+ Size, Style uint32
+ WndProc uintptr
+ ClsExtra, WndExtra int32
+ Instance, Icon, Cursor, Background windows.Handle
+ MenuName, ClassName *uint16
+ IconSm windows.Handle
+}
+
+// Registers a window class for subsequent use in calls to the CreateWindow or CreateWindowEx function.
+// https://msdn.microsoft.com/en-us/library/ms633587.aspx
+func (w *wndClassEx) register() error {
+ w.Size = uint32(unsafe.Sizeof(*w))
+ res, _, err := pRegisterClass.Call(uintptr(unsafe.Pointer(w)))
+ if res == 0 {
+ return err
+ }
+ return nil
+}
+
+// Unregisters a window class, freeing the memory required for the class.
+// https://msdn.microsoft.com/en-us/library/ms644899.aspx
+func (w *wndClassEx) unregister() error {
+ res, _, err := pUnregisterClass.Call(
+ uintptr(unsafe.Pointer(w.ClassName)),
+ uintptr(w.Instance),
+ )
+ if res == 0 {
+ return err
+ }
+ return nil
+}
+
+// Contains information that the system needs to display notifications in the notification area.
+// Used by Shell_NotifyIcon.
+// https://msdn.microsoft.com/en-us/library/windows/desktop/bb773352(v=vs.85).aspx
+// https://msdn.microsoft.com/en-us/library/windows/desktop/bb762159
+type notifyIconData struct {
+ Size uint32
+ Wnd windows.Handle
+ ID, Flags, CallbackMessage uint32
+ Icon windows.Handle
+ Tip [128]uint16
+ State, StateMask uint32
+ Info [256]uint16
+ Timeout, Version uint32
+ InfoTitle [64]uint16
+ InfoFlags uint32
+ GuidItem windows.GUID
+ BalloonIcon windows.Handle
+}
+
+func (nid *notifyIconData) add() error {
+ const NIM_ADD = 0x00000000
+ res, _, err := pShellNotifyIcon.Call(
+ uintptr(NIM_ADD),
+ uintptr(unsafe.Pointer(nid)),
+ )
+ if res == 0 {
+ return err
+ }
+ return nil
+}
+
+func (nid *notifyIconData) modify() error {
+ const NIM_MODIFY = 0x00000001
+ res, _, err := pShellNotifyIcon.Call(
+ uintptr(NIM_MODIFY),
+ uintptr(unsafe.Pointer(nid)),
+ )
+ if res == 0 {
+ return err
+ }
+ return nil
+}
+
+func (nid *notifyIconData) delete() error {
+ const NIM_DELETE = 0x00000002
+ res, _, err := pShellNotifyIcon.Call(
+ uintptr(NIM_DELETE),
+ uintptr(unsafe.Pointer(nid)),
+ )
+ if res == 0 {
+ return err
+ }
+ return nil
+}
+
+// Contains information about a menu item.
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms647578(v=vs.85).aspx
+type menuItemInfo struct {
+ Size, Mask, Type, State uint32
+ ID uint32
+ SubMenu, Checked, Unchecked windows.Handle
+ ItemData uintptr
+ TypeData *uint16
+ Cch uint32
+ BMPItem windows.Handle
+}
+
+// The POINT structure defines the x- and y- coordinates of a point.
+// https://msdn.microsoft.com/en-us/library/windows/desktop/dd162805(v=vs.85).aspx
+type point struct {
+ X, Y int32
+}
+
+// Contains information about loaded resources
+type winTray struct {
+ instance,
+ icon,
+ cursor,
+ window windows.Handle
+
+ loadedImages map[string]windows.Handle
+ muLoadedImages sync.RWMutex
+ // menus keeps track of the submenus keyed by the menu item ID, plus 0
+ // which corresponds to the main popup menu.
+ menus map[uint32]windows.Handle
+ muMenus sync.RWMutex
+ // menuOf keeps track of the menu each menu item belongs to.
+ menuOf map[uint32]windows.Handle
+ muMenuOf sync.RWMutex
+ // menuItemIcons maintains the bitmap of each menu item (if applies). It's
+ // needed to show the icon correctly when showing a previously hidden menu
+ // item again.
+ menuItemIcons map[uint32]windows.Handle
+ muMenuItemIcons sync.RWMutex
+ visibleItems map[uint32][]uint32
+ muVisibleItems sync.RWMutex
+
+ nid *notifyIconData
+ muNID sync.RWMutex
+ wcex *wndClassEx
+
+ wmSystrayMessage,
+ wmTaskbarCreated uint32
+}
+
+// Loads an image from file and shows it in tray.
+// Shell_NotifyIcon: https://msdn.microsoft.com/en-us/library/windows/desktop/bb762159(v=vs.85).aspx
+func (t *winTray) setIcon(src string) error {
+ const NIF_ICON = 0x00000002
+
+ h, err := t.loadIconFrom(src)
+ if err != nil {
+ return err
+ }
+
+ t.muNID.Lock()
+ defer t.muNID.Unlock()
+ t.nid.Icon = h
+ t.nid.Flags |= NIF_ICON
+ t.nid.Size = uint32(unsafe.Sizeof(*t.nid))
+
+ return t.nid.modify()
+}
+
+// Sets tooltip on icon.
+// Shell_NotifyIcon: https://msdn.microsoft.com/en-us/library/windows/desktop/bb762159(v=vs.85).aspx
+func (t *winTray) setTooltip(src string) error {
+ const NIF_TIP = 0x00000004
+ b, err := windows.UTF16FromString(src)
+ if err != nil {
+ return err
+ }
+
+ t.muNID.Lock()
+ defer t.muNID.Unlock()
+ copy(t.nid.Tip[:], b[:])
+ t.nid.Flags |= NIF_TIP
+ t.nid.Size = uint32(unsafe.Sizeof(*t.nid))
+
+ return t.nid.modify()
+}
+
+var wt winTray
+
+// WindowProc callback function that processes messages sent to a window.
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms633573(v=vs.85).aspx
+func (t *winTray) wndProc(hWnd windows.Handle, message uint32, wParam, lParam uintptr) (lResult uintptr) {
+ const (
+ WM_RBUTTONUP = 0x0205
+ WM_LBUTTONUP = 0x0202
+ WM_COMMAND = 0x0111
+ WM_ENDSESSION = 0x0016
+ WM_CLOSE = 0x0010
+ WM_DESTROY = 0x0002
+ )
+ switch message {
+ case WM_COMMAND:
+ menuItemId := int32(wParam)
+ // https://docs.microsoft.com/en-us/windows/win32/menurc/wm-command#menus
+ if menuItemId != -1 {
+ systrayMenuItemSelected(uint32(wParam))
+ }
+ case WM_CLOSE:
+ pDestroyWindow.Call(uintptr(t.window))
+ t.wcex.unregister()
+ case WM_DESTROY:
+ // same as WM_ENDSESSION, but throws 0 exit code after all
+ defer pPostQuitMessage.Call(uintptr(int32(0)))
+ fallthrough
+ case WM_ENDSESSION:
+ t.muNID.Lock()
+ if t.nid != nil {
+ t.nid.delete()
+ }
+ t.muNID.Unlock()
+ systrayExit()
+ case t.wmSystrayMessage:
+ switch lParam {
+ case WM_RBUTTONUP, WM_LBUTTONUP:
+ t.showMenu()
+ }
+ case t.wmTaskbarCreated: // on explorer.exe restarts
+ t.muNID.Lock()
+ t.nid.add()
+ t.muNID.Unlock()
+ default:
+ // Calls the default window procedure to provide default processing for any window messages that an application does not process.
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633572(v=vs.85).aspx
+ lResult, _, _ = pDefWindowProc.Call(
+ uintptr(hWnd),
+ uintptr(message),
+ uintptr(wParam),
+ uintptr(lParam),
+ )
+ }
+ return
+}
+
+func (t *winTray) initInstance() error {
+ const IDI_APPLICATION = 32512
+ const IDC_ARROW = 32512 // Standard arrow
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx
+ const SW_HIDE = 0
+ const CW_USEDEFAULT = 0x80000000
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx
+ const (
+ WS_CAPTION = 0x00C00000
+ WS_MAXIMIZEBOX = 0x00010000
+ WS_MINIMIZEBOX = 0x00020000
+ WS_OVERLAPPED = 0x00000000
+ WS_SYSMENU = 0x00080000
+ WS_THICKFRAME = 0x00040000
+
+ WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
+ )
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ff729176
+ const (
+ CS_HREDRAW = 0x0002
+ CS_VREDRAW = 0x0001
+ )
+ const NIF_MESSAGE = 0x00000001
+
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644931(v=vs.85).aspx
+ const WM_USER = 0x0400
+
+ const (
+ className = "SystrayClass"
+ windowName = ""
+ )
+
+ t.wmSystrayMessage = WM_USER + 1
+ t.visibleItems = make(map[uint32][]uint32)
+ t.menus = make(map[uint32]windows.Handle)
+ t.menuOf = make(map[uint32]windows.Handle)
+ t.menuItemIcons = make(map[uint32]windows.Handle)
+
+ taskbarEventNamePtr, _ := windows.UTF16PtrFromString("TaskbarCreated")
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644947
+ res, _, err := pRegisterWindowMessage.Call(
+ uintptr(unsafe.Pointer(taskbarEventNamePtr)),
+ )
+ t.wmTaskbarCreated = uint32(res)
+
+ t.loadedImages = make(map[string]windows.Handle)
+
+ instanceHandle, _, err := pGetModuleHandle.Call(0)
+ if instanceHandle == 0 {
+ return err
+ }
+ t.instance = windows.Handle(instanceHandle)
+
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms648072(v=vs.85).aspx
+ iconHandle, _, err := pLoadIcon.Call(0, uintptr(IDI_APPLICATION))
+ if iconHandle == 0 {
+ return err
+ }
+ t.icon = windows.Handle(iconHandle)
+
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms648391(v=vs.85).aspx
+ cursorHandle, _, err := pLoadCursor.Call(0, uintptr(IDC_ARROW))
+ if cursorHandle == 0 {
+ return err
+ }
+ t.cursor = windows.Handle(cursorHandle)
+
+ classNamePtr, err := windows.UTF16PtrFromString(className)
+ if err != nil {
+ return err
+ }
+
+ windowNamePtr, err := windows.UTF16PtrFromString(windowName)
+ if err != nil {
+ return err
+ }
+
+ t.wcex = &wndClassEx{
+ Style: CS_HREDRAW | CS_VREDRAW,
+ WndProc: windows.NewCallback(t.wndProc),
+ Instance: t.instance,
+ Icon: t.icon,
+ Cursor: t.cursor,
+ Background: windows.Handle(6), // (COLOR_WINDOW + 1)
+ ClassName: classNamePtr,
+ IconSm: t.icon,
+ }
+ if err := t.wcex.register(); err != nil {
+ return err
+ }
+
+ windowHandle, _, err := pCreateWindowEx.Call(
+ uintptr(0),
+ uintptr(unsafe.Pointer(classNamePtr)),
+ uintptr(unsafe.Pointer(windowNamePtr)),
+ uintptr(WS_OVERLAPPEDWINDOW),
+ uintptr(CW_USEDEFAULT),
+ uintptr(CW_USEDEFAULT),
+ uintptr(CW_USEDEFAULT),
+ uintptr(CW_USEDEFAULT),
+ uintptr(0),
+ uintptr(0),
+ uintptr(t.instance),
+ uintptr(0),
+ )
+ if windowHandle == 0 {
+ return err
+ }
+ t.window = windows.Handle(windowHandle)
+
+ pShowWindow.Call(
+ uintptr(t.window),
+ uintptr(SW_HIDE),
+ )
+
+ pUpdateWindow.Call(
+ uintptr(t.window),
+ )
+
+ t.muNID.Lock()
+ defer t.muNID.Unlock()
+ t.nid = ¬ifyIconData{
+ Wnd: windows.Handle(t.window),
+ ID: 100,
+ Flags: NIF_MESSAGE,
+ CallbackMessage: t.wmSystrayMessage,
+ }
+ t.nid.Size = uint32(unsafe.Sizeof(*t.nid))
+
+ return t.nid.add()
+}
+
+func (t *winTray) createMenu() error {
+ const MIM_APPLYTOSUBMENUS = 0x80000000 // Settings apply to the menu and all of its submenus
+
+ menuHandle, _, err := pCreatePopupMenu.Call()
+ if menuHandle == 0 {
+ return err
+ }
+ t.menus[0] = windows.Handle(menuHandle)
+
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms647575(v=vs.85).aspx
+ mi := struct {
+ Size, Mask, Style, Max uint32
+ Background windows.Handle
+ ContextHelpID uint32
+ MenuData uintptr
+ }{
+ Mask: MIM_APPLYTOSUBMENUS,
+ }
+ mi.Size = uint32(unsafe.Sizeof(mi))
+
+ res, _, err := pSetMenuInfo.Call(
+ uintptr(t.menus[0]),
+ uintptr(unsafe.Pointer(&mi)),
+ )
+ if res == 0 {
+ return err
+ }
+ return nil
+}
+
+func (t *winTray) convertToSubMenu(menuItemId uint32) (windows.Handle, error) {
+ const MIIM_SUBMENU = 0x00000004
+
+ res, _, err := pCreateMenu.Call()
+ if res == 0 {
+ return 0, err
+ }
+ menu := windows.Handle(res)
+
+ mi := menuItemInfo{Mask: MIIM_SUBMENU, SubMenu: menu}
+ mi.Size = uint32(unsafe.Sizeof(mi))
+ t.muMenuOf.RLock()
+ hMenu := t.menuOf[menuItemId]
+ t.muMenuOf.RUnlock()
+ res, _, err = pSetMenuItemInfo.Call(
+ uintptr(hMenu),
+ uintptr(menuItemId),
+ 0,
+ uintptr(unsafe.Pointer(&mi)),
+ )
+ if res == 0 {
+ return 0, err
+ }
+ t.muMenus.Lock()
+ t.menus[menuItemId] = menu
+ t.muMenus.Unlock()
+ return menu, nil
+}
+
+func (t *winTray) addOrUpdateMenuItem(menuItemId uint32, parentId uint32, title string, disabled, checked bool) error {
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms647578(v=vs.85).aspx
+ const (
+ MIIM_FTYPE = 0x00000100
+ MIIM_BITMAP = 0x00000080
+ MIIM_STRING = 0x00000040
+ MIIM_SUBMENU = 0x00000004
+ MIIM_ID = 0x00000002
+ MIIM_STATE = 0x00000001
+ )
+ const MFT_STRING = 0x00000000
+ const (
+ MFS_CHECKED = 0x00000008
+ MFS_DISABLED = 0x00000003
+ )
+ titlePtr, err := windows.UTF16PtrFromString(title)
+ if err != nil {
+ return err
+ }
+
+ mi := menuItemInfo{
+ Mask: MIIM_FTYPE | MIIM_STRING | MIIM_ID | MIIM_STATE,
+ Type: MFT_STRING,
+ ID: uint32(menuItemId),
+ TypeData: titlePtr,
+ Cch: uint32(len(title)),
+ }
+ mi.Size = uint32(unsafe.Sizeof(mi))
+ if disabled {
+ mi.State |= MFS_DISABLED
+ }
+ if checked {
+ mi.State |= MFS_CHECKED
+ }
+ t.muMenuItemIcons.RLock()
+ hIcon := t.menuItemIcons[menuItemId]
+ t.muMenuItemIcons.RUnlock()
+ if hIcon > 0 {
+ mi.Mask |= MIIM_BITMAP
+ mi.BMPItem = hIcon
+ }
+
+ var res uintptr
+ t.muMenus.RLock()
+ menu, exists := t.menus[parentId]
+ t.muMenus.RUnlock()
+ if !exists {
+ menu, err = t.convertToSubMenu(parentId)
+ if err != nil {
+ return err
+ }
+ t.muMenus.Lock()
+ t.menus[parentId] = menu
+ t.muMenus.Unlock()
+ } else if t.getVisibleItemIndex(parentId, menuItemId) != -1 {
+ // We set the menu item info based on the menuID
+ res, _, err = pSetMenuItemInfo.Call(
+ uintptr(menu),
+ uintptr(menuItemId),
+ 0,
+ uintptr(unsafe.Pointer(&mi)),
+ )
+ }
+
+ if res == 0 {
+ // Menu item does not already exist, create it
+ t.muMenus.RLock()
+ submenu, exists := t.menus[menuItemId]
+ t.muMenus.RUnlock()
+ if exists {
+ mi.Mask |= MIIM_SUBMENU
+ mi.SubMenu = submenu
+ }
+ t.addToVisibleItems(parentId, menuItemId)
+ position := t.getVisibleItemIndex(parentId, menuItemId)
+ res, _, err = pInsertMenuItem.Call(
+ uintptr(menu),
+ uintptr(position),
+ 1,
+ uintptr(unsafe.Pointer(&mi)),
+ )
+ if res == 0 {
+ t.delFromVisibleItems(parentId, menuItemId)
+ return err
+ }
+ t.muMenuOf.Lock()
+ t.menuOf[menuItemId] = menu
+ t.muMenuOf.Unlock()
+ }
+
+ return nil
+}
+
+func (t *winTray) addSeparatorMenuItem(menuItemId, parentId uint32) error {
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms647578(v=vs.85).aspx
+ const (
+ MIIM_FTYPE = 0x00000100
+ MIIM_ID = 0x00000002
+ MIIM_STATE = 0x00000001
+ )
+ const MFT_SEPARATOR = 0x00000800
+
+ mi := menuItemInfo{
+ Mask: MIIM_FTYPE | MIIM_ID | MIIM_STATE,
+ Type: MFT_SEPARATOR,
+ ID: uint32(menuItemId),
+ }
+
+ mi.Size = uint32(unsafe.Sizeof(mi))
+
+ t.addToVisibleItems(parentId, menuItemId)
+ position := t.getVisibleItemIndex(parentId, menuItemId)
+ t.muMenus.RLock()
+ menu := uintptr(t.menus[parentId])
+ t.muMenus.RUnlock()
+ res, _, err := pInsertMenuItem.Call(
+ menu,
+ uintptr(position),
+ 1,
+ uintptr(unsafe.Pointer(&mi)),
+ )
+ if res == 0 {
+ return err
+ }
+
+ return nil
+}
+
+func (t *winTray) hideMenuItem(menuItemId, parentId uint32) error {
+ // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-removemenu
+ const MF_BYCOMMAND = 0x00000000
+ const ERROR_SUCCESS syscall.Errno = 0
+
+ t.muMenus.RLock()
+ menu := uintptr(t.menus[parentId])
+ t.muMenus.RUnlock()
+ res, _, err := pRemoveMenu.Call(
+ menu,
+ uintptr(menuItemId),
+ MF_BYCOMMAND,
+ )
+ if res == 0 && err.(syscall.Errno) != ERROR_SUCCESS {
+ return err
+ }
+ t.delFromVisibleItems(parentId, menuItemId)
+
+ return nil
+}
+
+func (t *winTray) showMenu() error {
+ const (
+ TPM_BOTTOMALIGN = 0x0020
+ TPM_LEFTALIGN = 0x0000
+ )
+ p := point{}
+ res, _, err := pGetCursorPos.Call(uintptr(unsafe.Pointer(&p)))
+ if res == 0 {
+ return err
+ }
+ pSetForegroundWindow.Call(uintptr(t.window))
+
+ res, _, err = pTrackPopupMenu.Call(
+ uintptr(t.menus[0]),
+ TPM_BOTTOMALIGN|TPM_LEFTALIGN,
+ uintptr(p.X),
+ uintptr(p.Y),
+ 0,
+ uintptr(t.window),
+ 0,
+ )
+ if res == 0 {
+ return err
+ }
+
+ return nil
+}
+
+func (t *winTray) delFromVisibleItems(parent, val uint32) {
+ t.muVisibleItems.Lock()
+ defer t.muVisibleItems.Unlock()
+ visibleItems := t.visibleItems[parent]
+ for i, itemval := range visibleItems {
+ if val == itemval {
+ t.visibleItems[parent] = append(visibleItems[:i], visibleItems[i+1:]...)
+ break
+ }
+ }
+}
+
+func (t *winTray) addToVisibleItems(parent, val uint32) {
+ t.muVisibleItems.Lock()
+ defer t.muVisibleItems.Unlock()
+ if visibleItems, exists := t.visibleItems[parent]; !exists {
+ t.visibleItems[parent] = []uint32{val}
+ } else {
+ newvisible := append(visibleItems, val)
+ sort.Slice(newvisible, func(i, j int) bool { return newvisible[i] < newvisible[j] })
+ t.visibleItems[parent] = newvisible
+ }
+}
+
+func (t *winTray) getVisibleItemIndex(parent, val uint32) int {
+ t.muVisibleItems.RLock()
+ defer t.muVisibleItems.RUnlock()
+ for i, itemval := range t.visibleItems[parent] {
+ if val == itemval {
+ return i
+ }
+ }
+ return -1
+}
+
+// Loads an image from file to be shown in tray or menu item.
+// LoadImage: https://msdn.microsoft.com/en-us/library/windows/desktop/ms648045(v=vs.85).aspx
+func (t *winTray) loadIconFrom(src string) (windows.Handle, error) {
+ const IMAGE_ICON = 1 // Loads an icon
+ const LR_LOADFROMFILE = 0x00000010 // Loads the stand-alone image from the file
+ const LR_DEFAULTSIZE = 0x00000040 // Loads default-size icon for windows(SM_CXICON x SM_CYICON) if cx, cy are set to zero
+
+ // Save and reuse handles of loaded images
+ t.muLoadedImages.RLock()
+ h, ok := t.loadedImages[src]
+ t.muLoadedImages.RUnlock()
+ if !ok {
+ srcPtr, err := windows.UTF16PtrFromString(src)
+ if err != nil {
+ return 0, err
+ }
+ res, _, err := pLoadImage.Call(
+ 0,
+ uintptr(unsafe.Pointer(srcPtr)),
+ IMAGE_ICON,
+ 0,
+ 0,
+ LR_LOADFROMFILE|LR_DEFAULTSIZE,
+ )
+ if res == 0 {
+ return 0, err
+ }
+ h = windows.Handle(res)
+ t.muLoadedImages.Lock()
+ t.loadedImages[src] = h
+ t.muLoadedImages.Unlock()
+ }
+ return h, nil
+}
+
+func (t *winTray) iconToBitmap(hIcon windows.Handle) (windows.Handle, error) {
+ const SM_CXSMICON = 49
+ const SM_CYSMICON = 50
+ const DI_NORMAL = 0x3
+ hDC, _, err := pGetDC.Call(uintptr(0))
+ if hDC == 0 {
+ return 0, err
+ }
+ defer pReleaseDC.Call(uintptr(0), hDC)
+ hMemDC, _, err := pCreateCompatibleDC.Call(hDC)
+ if hMemDC == 0 {
+ return 0, err
+ }
+ defer pDeleteDC.Call(hMemDC)
+ cx, _, _ := pGetSystemMetrics.Call(SM_CXSMICON)
+ cy, _, _ := pGetSystemMetrics.Call(SM_CYSMICON)
+ hMemBmp, _, err := pCreateCompatibleBitmap.Call(hDC, cx, cy)
+ if hMemBmp == 0 {
+ return 0, err
+ }
+ hOriginalBmp, _, _ := pSelectObject.Call(hMemDC, hMemBmp)
+ defer pSelectObject.Call(hMemDC, hOriginalBmp)
+ res, _, err := pDrawIconEx.Call(hMemDC, 0, 0, uintptr(hIcon), cx, cy, 0, uintptr(0), DI_NORMAL)
+ if res == 0 {
+ return 0, err
+ }
+ return windows.Handle(hMemBmp), nil
+}
+
+func registerSystray() {
+ if err := wt.initInstance(); err != nil {
+ log.Printf("Unable to init instance: %v", err)
+ return
+ }
+
+ if err := wt.createMenu(); err != nil {
+ log.Printf("Unable to create menu: %v", err)
+ return
+ }
+
+ systrayReady()
+}
+
+func nativeLoop() {
+ // Main message pump.
+ m := &struct {
+ WindowHandle windows.Handle
+ Message uint32
+ Wparam uintptr
+ Lparam uintptr
+ Time uint32
+ Pt point
+ }{}
+ for {
+ ret, _, err := pGetMessage.Call(uintptr(unsafe.Pointer(m)), 0, 0, 0)
+
+ // If the function retrieves a message other than WM_QUIT, the return value is nonzero.
+ // If the function retrieves the WM_QUIT message, the return value is zero.
+ // If there is an error, the return value is -1
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx
+ switch int32(ret) {
+ case -1:
+ log.Printf("Error at message loop: %v", err)
+ return
+ case 0:
+ return
+ default:
+ pTranslateMessage.Call(uintptr(unsafe.Pointer(m)))
+ pDispatchMessage.Call(uintptr(unsafe.Pointer(m)))
+ }
+ }
+}
+
+func quit() {
+ const WM_CLOSE = 0x0010
+
+ pPostMessage.Call(
+ uintptr(wt.window),
+ WM_CLOSE,
+ 0,
+ 0,
+ )
+}
+
+func iconBytesToFilePath(iconBytes []byte) (string, error) {
+ bh := md5.Sum(iconBytes)
+ dataHash := hex.EncodeToString(bh[:])
+ iconFilePath := filepath.Join(os.TempDir(), "systray_temp_icon_"+dataHash)
+
+ if _, err := os.Stat(iconFilePath); os.IsNotExist(err) {
+ if err := ioutil.WriteFile(iconFilePath, iconBytes, 0644); err != nil {
+ return "", err
+ }
+ }
+ return iconFilePath, nil
+}
+
+// SetIcon sets the systray icon.
+// iconBytes should be the content of .ico for windows and .ico/.jpg/.png
+// for other platforms.
+func SetIcon(iconBytes []byte) {
+ iconFilePath, err := iconBytesToFilePath(iconBytes)
+ if err != nil {
+ log.Printf("Unable to write icon data to temp file: %v", err)
+ return
+ }
+ if err := wt.setIcon(iconFilePath); err != nil {
+ log.Printf("Unable to set icon: %v", err)
+ return
+ }
+}
+
+// SetTemplateIcon sets the systray icon as a template icon (on macOS), falling back
+// to a regular icon on other platforms.
+// templateIconBytes and iconBytes should be the content of .ico for windows and
+// .ico/.jpg/.png for other platforms.
+func SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
+ SetIcon(regularIconBytes)
+}
+
+// SetTitle sets the systray title, only available on Mac and Linux.
+func SetTitle(title string) {
+ // do nothing
+}
+
+func (item *MenuItem) parentId() uint32 {
+ if item.parent != nil {
+ return uint32(item.parent.id)
+ }
+ return 0
+}
+
+// SetIcon sets the icon of a menu item. Only works on macOS and Windows.
+// iconBytes should be the content of .ico/.jpg/.png
+func (item *MenuItem) SetIcon(iconBytes []byte) {
+ iconFilePath, err := iconBytesToFilePath(iconBytes)
+ if err != nil {
+ log.Printf("Unable to write icon data to temp file: %v", err)
+ return
+ }
+
+ h, err := wt.loadIconFrom(iconFilePath)
+ if err != nil {
+ log.Printf("Unable to load icon from temp file: %v", err)
+ return
+ }
+
+ h, err = wt.iconToBitmap(h)
+ if err != nil {
+ log.Printf("Unable to convert icon to bitmap: %v", err)
+ return
+ }
+ wt.muMenuItemIcons.Lock()
+ wt.menuItemIcons[uint32(item.id)] = h
+ wt.muMenuItemIcons.Unlock()
+
+ err = wt.addOrUpdateMenuItem(uint32(item.id), item.parentId(), item.title, item.disabled, item.checked)
+ if err != nil {
+ log.Printf("Unable to addOrUpdateMenuItem: %v", err)
+ return
+ }
+}
+
+// SetTooltip sets the systray tooltip to display on mouse hover of the tray icon,
+// only available on Mac and Windows.
+func SetTooltip(tooltip string) {
+ if err := wt.setTooltip(tooltip); err != nil {
+ log.Printf("Unable to set tooltip: %v", err)
+ return
+ }
+}
+
+func addOrUpdateMenuItem(item *MenuItem) {
+ err := wt.addOrUpdateMenuItem(uint32(item.id), item.parentId(), item.title, item.disabled, item.checked)
+ if err != nil {
+ log.Printf("Unable to addOrUpdateMenuItem: %v", err)
+ return
+ }
+}
+
+// SetTemplateIcon sets the icon of a menu item as a template icon (on macOS). On Windows, it
+// falls back to the regular icon bytes and on Linux it does nothing.
+// templateIconBytes and regularIconBytes should be the content of .ico for windows and
+// .ico/.jpg/.png for other platforms.
+func (item *MenuItem) SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
+ item.SetIcon(regularIconBytes)
+}
+
+func addSeparator(id uint32) {
+ err := wt.addSeparatorMenuItem(id, 0)
+ if err != nil {
+ log.Printf("Unable to addSeparator: %v", err)
+ return
+ }
+}
+
+func hideMenuItem(item *MenuItem) {
+ err := wt.hideMenuItem(uint32(item.id), item.parentId())
+ if err != nil {
+ log.Printf("Unable to hideMenuItem: %v", err)
+ return
+ }
+}
+
+func showMenuItem(item *MenuItem) {
+ addOrUpdateMenuItem(item)
+}
diff --git a/vendor/github.com/nu7hatch/gouuid/.gitignore b/vendor/github.com/nu7hatch/gouuid/.gitignore
new file mode 100644
index 000000000..f9d9cd8ab
--- /dev/null
+++ b/vendor/github.com/nu7hatch/gouuid/.gitignore
@@ -0,0 +1,11 @@
+_obj
+_test
+*.6
+*.out
+_testmain.go
+\#*
+.\#*
+*.log
+_cgo*
+*.o
+*.a
diff --git a/vendor/github.com/nu7hatch/gouuid/COPYING b/vendor/github.com/nu7hatch/gouuid/COPYING
new file mode 100644
index 000000000..d7849fd8f
--- /dev/null
+++ b/vendor/github.com/nu7hatch/gouuid/COPYING
@@ -0,0 +1,19 @@
+Copyright (C) 2011 by Krzysztof Kowalik
+
+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.
\ No newline at end of file
diff --git a/vendor/github.com/nu7hatch/gouuid/README.md b/vendor/github.com/nu7hatch/gouuid/README.md
new file mode 100644
index 000000000..e3d025d5e
--- /dev/null
+++ b/vendor/github.com/nu7hatch/gouuid/README.md
@@ -0,0 +1,21 @@
+# Pure Go UUID implementation
+
+This package provides immutable UUID structs and the functions
+NewV3, NewV4, NewV5 and Parse() for generating versions 3, 4
+and 5 UUIDs as specified in [RFC 4122](http://www.ietf.org/rfc/rfc4122.txt).
+
+## Installation
+
+Use the `go` tool:
+
+ $ go get github.com/nu7hatch/gouuid
+
+## Usage
+
+See [documentation and examples](http://godoc.org/github.com/nu7hatch/gouuid)
+for more information.
+
+## Copyright
+
+Copyright (C) 2011 by Krzysztof Kowalik . See [COPYING](https://github.com/nu7hatch/gouuid/tree/master/COPYING)
+file for details.
diff --git a/vendor/github.com/nu7hatch/gouuid/uuid.go b/vendor/github.com/nu7hatch/gouuid/uuid.go
new file mode 100644
index 000000000..ac9623b72
--- /dev/null
+++ b/vendor/github.com/nu7hatch/gouuid/uuid.go
@@ -0,0 +1,173 @@
+// This package provides immutable UUID structs and the functions
+// NewV3, NewV4, NewV5 and Parse() for generating versions 3, 4
+// and 5 UUIDs as specified in RFC 4122.
+//
+// Copyright (C) 2011 by Krzysztof Kowalik
+package uuid
+
+import (
+ "crypto/md5"
+ "crypto/rand"
+ "crypto/sha1"
+ "encoding/hex"
+ "errors"
+ "fmt"
+ "hash"
+ "regexp"
+)
+
+// The UUID reserved variants.
+const (
+ ReservedNCS byte = 0x80
+ ReservedRFC4122 byte = 0x40
+ ReservedMicrosoft byte = 0x20
+ ReservedFuture byte = 0x00
+)
+
+// The following standard UUIDs are for use with NewV3() or NewV5().
+var (
+ NamespaceDNS, _ = ParseHex("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
+ NamespaceURL, _ = ParseHex("6ba7b811-9dad-11d1-80b4-00c04fd430c8")
+ NamespaceOID, _ = ParseHex("6ba7b812-9dad-11d1-80b4-00c04fd430c8")
+ NamespaceX500, _ = ParseHex("6ba7b814-9dad-11d1-80b4-00c04fd430c8")
+)
+
+// Pattern used to parse hex string representation of the UUID.
+// FIXME: do something to consider both brackets at one time,
+// current one allows to parse string with only one opening
+// or closing bracket.
+const hexPattern = "^(urn\\:uuid\\:)?\\{?([a-z0-9]{8})-([a-z0-9]{4})-" +
+ "([1-5][a-z0-9]{3})-([a-z0-9]{4})-([a-z0-9]{12})\\}?$"
+
+var re = regexp.MustCompile(hexPattern)
+
+// A UUID representation compliant with specification in
+// RFC 4122 document.
+type UUID [16]byte
+
+// ParseHex creates a UUID object from given hex string
+// representation. Function accepts UUID string in following
+// formats:
+//
+// uuid.ParseHex("6ba7b814-9dad-11d1-80b4-00c04fd430c8")
+// uuid.ParseHex("{6ba7b814-9dad-11d1-80b4-00c04fd430c8}")
+// uuid.ParseHex("urn:uuid:6ba7b814-9dad-11d1-80b4-00c04fd430c8")
+//
+func ParseHex(s string) (u *UUID, err error) {
+ md := re.FindStringSubmatch(s)
+ if md == nil {
+ err = errors.New("Invalid UUID string")
+ return
+ }
+ hash := md[2] + md[3] + md[4] + md[5] + md[6]
+ b, err := hex.DecodeString(hash)
+ if err != nil {
+ return
+ }
+ u = new(UUID)
+ copy(u[:], b)
+ return
+}
+
+// Parse creates a UUID object from given bytes slice.
+func Parse(b []byte) (u *UUID, err error) {
+ if len(b) != 16 {
+ err = errors.New("Given slice is not valid UUID sequence")
+ return
+ }
+ u = new(UUID)
+ copy(u[:], b)
+ return
+}
+
+// Generate a UUID based on the MD5 hash of a namespace identifier
+// and a name.
+func NewV3(ns *UUID, name []byte) (u *UUID, err error) {
+ if ns == nil {
+ err = errors.New("Invalid namespace UUID")
+ return
+ }
+ u = new(UUID)
+ // Set all bits to MD5 hash generated from namespace and name.
+ u.setBytesFromHash(md5.New(), ns[:], name)
+ u.setVariant(ReservedRFC4122)
+ u.setVersion(3)
+ return
+}
+
+// Generate a random UUID.
+func NewV4() (u *UUID, err error) {
+ u = new(UUID)
+ // Set all bits to randomly (or pseudo-randomly) chosen values.
+ _, err = rand.Read(u[:])
+ if err != nil {
+ return
+ }
+ u.setVariant(ReservedRFC4122)
+ u.setVersion(4)
+ return
+}
+
+// Generate a UUID based on the SHA-1 hash of a namespace identifier
+// and a name.
+func NewV5(ns *UUID, name []byte) (u *UUID, err error) {
+ u = new(UUID)
+ // Set all bits to truncated SHA1 hash generated from namespace
+ // and name.
+ u.setBytesFromHash(sha1.New(), ns[:], name)
+ u.setVariant(ReservedRFC4122)
+ u.setVersion(5)
+ return
+}
+
+// Generate a MD5 hash of a namespace and a name, and copy it to the
+// UUID slice.
+func (u *UUID) setBytesFromHash(hash hash.Hash, ns, name []byte) {
+ hash.Write(ns[:])
+ hash.Write(name)
+ copy(u[:], hash.Sum([]byte{})[:16])
+}
+
+// Set the two most significant bits (bits 6 and 7) of the
+// clock_seq_hi_and_reserved to zero and one, respectively.
+func (u *UUID) setVariant(v byte) {
+ switch v {
+ case ReservedNCS:
+ u[8] = (u[8] | ReservedNCS) & 0xBF
+ case ReservedRFC4122:
+ u[8] = (u[8] | ReservedRFC4122) & 0x7F
+ case ReservedMicrosoft:
+ u[8] = (u[8] | ReservedMicrosoft) & 0x3F
+ }
+}
+
+// Variant returns the UUID Variant, which determines the internal
+// layout of the UUID. This will be one of the constants: RESERVED_NCS,
+// RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE.
+func (u *UUID) Variant() byte {
+ if u[8]&ReservedNCS == ReservedNCS {
+ return ReservedNCS
+ } else if u[8]&ReservedRFC4122 == ReservedRFC4122 {
+ return ReservedRFC4122
+ } else if u[8]&ReservedMicrosoft == ReservedMicrosoft {
+ return ReservedMicrosoft
+ }
+ return ReservedFuture
+}
+
+// Set the four most significant bits (bits 12 through 15) of the
+// time_hi_and_version field to the 4-bit version number.
+func (u *UUID) setVersion(v byte) {
+ u[6] = (u[6] & 0xF) | (v << 4)
+}
+
+// Version returns a version number of the algorithm used to
+// generate the UUID sequence.
+func (u *UUID) Version() uint {
+ return uint(u[6] >> 4)
+}
+
+// Returns unparsed version of the generated UUID sequence.
+func (u *UUID) String() string {
+ return fmt.Sprintf("%x-%x-%x-%x-%x", u[0:4], u[4:6], u[6:8], u[8:10], u[10:])
+}
diff --git a/vendor/github.com/rs/zerolog/README.md b/vendor/github.com/rs/zerolog/README.md
index bd28c29a5..c7db02553 100644
--- a/vendor/github.com/rs/zerolog/README.md
+++ b/vendor/github.com/rs/zerolog/README.md
@@ -341,7 +341,7 @@ If your writer might be slow or not thread-safe and you need your log producers
wr := diode.NewWriter(os.Stdout, 1000, 10*time.Millisecond, func(missed int) {
fmt.Printf("Logger Dropped %d messages", missed)
})
-log := zerolog.New(w)
+log := zerolog.New(wr)
log.Print("test")
```
@@ -435,7 +435,7 @@ c := alice.New()
c = c.Append(hlog.NewHandler(log))
// Install some provided extra handler to set some request's context fields.
-// Thanks to those handler, all our logs will come with some pre-populated fields.
+// Thanks to that handler, all our logs will come with some prepopulated fields.
c = c.Append(hlog.AccessHandler(func(r *http.Request, status, size int, duration time.Duration) {
hlog.FromRequest(r).Info().
Str("method", r.Method).
@@ -474,7 +474,7 @@ if err := http.ListenAndServe(":8080", nil); err != nil {
Some settings can be changed and will by applied to all loggers:
* `log.Logger`: You can set this value to customize the global logger (the one used by package level methods).
-* `zerolog.SetGlobalLevel`: Can raise the minimum level of all loggers. Set this to `zerolog.Disabled` to disable logging altogether (quiet mode).
+* `zerolog.SetGlobalLevel`: Can raise the minimum level of all loggers. Call this with `zerolog.Disabled` to disable logging altogether (quiet mode).
* `zerolog.DisableSampling`: If argument is `true`, all sampled loggers will stop sampling and issue 100% of their log events.
* `zerolog.TimestampFieldName`: Can be set to customize `Timestamp` field name.
* `zerolog.LevelFieldName`: Can be set to customize level field name.
@@ -497,13 +497,17 @@ Some settings can be changed and will by applied to all loggers:
### Advanced Fields
-* `Err`: Takes an `error` and render it as a string using the `zerolog.ErrorFieldName` field name.
-* `Timestamp`: Insert a timestamp field with `zerolog.TimestampFieldName` field name and formatted using `zerolog.TimeFieldFormat`.
-* `Time`: Adds a field with the time formated with the `zerolog.TimeFieldFormat`.
-* `Dur`: Adds a field with a `time.Duration`.
+* `Err`: Takes an `error` and renders it as a string using the `zerolog.ErrorFieldName` field name.
+* `Timestamp`: Inserts a timestamp field with `zerolog.TimestampFieldName` field name, formatted using `zerolog.TimeFieldFormat`.
+* `Time`: Adds a field with time formatted with `zerolog.TimeFieldFormat`.
+* `Dur`: Adds a field with `time.Duration`.
* `Dict`: Adds a sub-key/value as a field of the event.
+* `RawJSON`: Adds a field with an already encoded JSON (`[]byte`)
+* `Hex`: Adds a field with value formatted as a hexadecimal string (`[]byte`)
* `Interface`: Uses reflection to marshal the type.
+Most fields are also available in the slice format (`Strs` for `[]string`, `Errs` for `[]error` etc.)
+
## Binary Encoding
In addition to the default JSON encoding, `zerolog` can produce binary logs using [CBOR](http://cbor.io) encoding. The choice of encoding can be decided at compile time using the build tag `binary_log` as follows:
diff --git a/vendor/github.com/rs/zerolog/event.go b/vendor/github.com/rs/zerolog/event.go
index 224799c8b..309b8d156 100644
--- a/vendor/github.com/rs/zerolog/event.go
+++ b/vendor/github.com/rs/zerolog/event.go
@@ -61,6 +61,7 @@ func newEvent(w LevelWriter, level Level) *Event {
e.buf = enc.AppendBeginMarker(e.buf)
e.w = w
e.level = level
+ e.stack = false
return e
}
@@ -317,7 +318,6 @@ func (e *Event) Errs(key string, errs []error) *Event {
// Err adds the field "error" with serialized err to the *Event context.
// If err is nil, no field is added.
-// To customize the key name, change zerolog.ErrorFieldName.
//
// To customize the key name, change zerolog.ErrorFieldName.
//
diff --git a/vendor/github.com/rs/zerolog/internal/cbor/types_test_64.go b/vendor/github.com/rs/zerolog/internal/cbor/types_test_64.go
new file mode 100644
index 000000000..728b17195
--- /dev/null
+++ b/vendor/github.com/rs/zerolog/internal/cbor/types_test_64.go
@@ -0,0 +1,35 @@
+// +build !386
+
+package cbor
+
+import (
+ "encoding/hex"
+ "testing"
+)
+
+var enc2 = Encoder{}
+
+var integerTestCases_64bit = []struct {
+ val int
+ binary string
+}{
+ // Value in 8 bytes.
+ {0xabcd100000000, "\x1b\x00\x0a\xbc\xd1\x00\x00\x00\x00"},
+ {1000000000000, "\x1b\x00\x00\x00\xe8\xd4\xa5\x10\x00"},
+ // Value in 8 bytes.
+ {-0xabcd100000001, "\x3b\x00\x0a\xbc\xd1\x00\x00\x00\x00"},
+ {-1000000000001, "\x3b\x00\x00\x00\xe8\xd4\xa5\x10\x00"},
+
+}
+
+func TestAppendInt_64bit(t *testing.T) {
+ for _, tc := range integerTestCases_64bit {
+ s := enc2.AppendInt([]byte{}, tc.val)
+ got := string(s)
+ if got != tc.binary {
+ t.Errorf("AppendInt(0x%x)=0x%s, want: 0x%s",
+ tc.val, hex.EncodeToString(s),
+ hex.EncodeToString([]byte(tc.binary)))
+ }
+ }
+}
diff --git a/vendor/github.com/rs/zerolog/internal/json/base.go b/vendor/github.com/rs/zerolog/internal/json/base.go
index d6f8839e3..62248e713 100644
--- a/vendor/github.com/rs/zerolog/internal/json/base.go
+++ b/vendor/github.com/rs/zerolog/internal/json/base.go
@@ -4,9 +4,8 @@ type Encoder struct{}
// AppendKey appends a new key to the output JSON.
func (e Encoder) AppendKey(dst []byte, key string) []byte {
- if len(dst) > 1 && dst[len(dst)-1] != '{' {
+ if dst[len(dst)-1] != '{' {
dst = append(dst, ',')
}
- dst = e.AppendString(dst, key)
- return append(dst, ':')
-}
\ No newline at end of file
+ return append(e.AppendString(dst, key), ':')
+}
diff --git a/vendor/github.com/rs/zerolog/internal/json/types.go b/vendor/github.com/rs/zerolog/internal/json/types.go
index bc8bc0957..d18624269 100644
--- a/vendor/github.com/rs/zerolog/internal/json/types.go
+++ b/vendor/github.com/rs/zerolog/internal/json/types.go
@@ -379,11 +379,10 @@ func (Encoder) AppendObjectData(dst []byte, o []byte) []byte {
// to separate with existing content OR
// 3. existing content has already other fields
if o[0] == '{' {
- if len(dst) == 0 {
- o = o[1:]
- } else {
- o[0] = ','
+ if len(dst) > 1 {
+ dst = append(dst, ',')
}
+ o = o[1:]
} else if len(dst) > 1 {
dst = append(dst, ',')
}
diff --git a/vendor/github.com/rs/zerolog/log.go b/vendor/github.com/rs/zerolog/log.go
index b1e7ac136..cbf68850e 100644
--- a/vendor/github.com/rs/zerolog/log.go
+++ b/vendor/github.com/rs/zerolog/log.go
@@ -234,6 +234,10 @@ func (l Logger) With() Context {
l.context = make([]byte, 0, 500)
if context != nil {
l.context = append(l.context, context...)
+ } else {
+ // This is needed for AppendKey to not check len of input
+ // thus making it inlinable
+ l.context = enc.AppendBeginMarker(l.context)
}
return Context{l}
}
@@ -415,7 +419,7 @@ func (l *Logger) newEvent(level Level, done func(string)) *Event {
if level != NoLevel {
e.Str(LevelFieldName, LevelFieldMarshalFunc(level))
}
- if l.context != nil && len(l.context) > 0 {
+ if l.context != nil && len(l.context) > 1 {
e.buf = enc.AppendObjectData(e.buf, l.context)
}
return e
diff --git a/vendor/github.com/rs/zerolog/writer.go b/vendor/github.com/rs/zerolog/writer.go
index a58d71776..67605e2a7 100644
--- a/vendor/github.com/rs/zerolog/writer.go
+++ b/vendor/github.com/rs/zerolog/writer.go
@@ -29,7 +29,7 @@ type syncWriter struct {
// This syncer can be the call to writer's Write method is not thread safe.
// Note that os.File Write operation is using write() syscall which is supposed
// to be thread-safe on POSIX systems. So there is no need to use this with
-// os.File on such systems as zerolog guaranties to issue a single Write call
+// os.File on such systems as zerolog guarantees to issue a single Write call
// per log event.
func SyncWriter(w io.Writer) io.Writer {
if lw, ok := w.(LevelWriter); ok {
diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
index 3298a87e9..fa7cdb9bc 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
@@ -15,7 +15,3 @@ func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler
// and in cpu_gccgo.c for gccgo.
func xgetbv() (eax, edx uint32)
-
-// darwinSupportsAVX512 is implemented in cpu_x86.s for gc compiler
-// and in cpu_gccgo_x86.go for gccgo.
-func darwinSupportsAVX512() bool
diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go
index 5ea287b7e..f5aacfc82 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_x86.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go
@@ -90,9 +90,10 @@ func archInit() {
osSupportsAVX = isSet(1, eax) && isSet(2, eax)
if runtime.GOOS == "darwin" {
- // Check darwin commpage for AVX512 support. Necessary because:
- // https://github.com/apple/darwin-xnu/blob/0a798f6738bc1db01281fc08ae024145e84df927/osfmk/i386/fpu.c#L175-L201
- osSupportsAVX512 = osSupportsAVX && darwinSupportsAVX512()
+ // Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers.
+ // Since users can't rely on mask register contents, let's not advertise AVX-512 support.
+ // See issue 49233.
+ osSupportsAVX512 = false
} else {
// Check if OPMASK and ZMM registers have OS support.
osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax)
diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.s b/vendor/golang.org/x/sys/cpu/cpu_x86.s
index b748ba52f..39acab2ff 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_x86.s
+++ b/vendor/golang.org/x/sys/cpu/cpu_x86.s
@@ -26,27 +26,3 @@ TEXT ·xgetbv(SB),NOSPLIT,$0-8
MOVL AX, eax+0(FP)
MOVL DX, edx+4(FP)
RET
-
-// func darwinSupportsAVX512() bool
-TEXT ·darwinSupportsAVX512(SB), NOSPLIT, $0-1
- MOVB $0, ret+0(FP) // default to false
-#ifdef GOOS_darwin // return if not darwin
-#ifdef GOARCH_amd64 // return if not amd64
-// These values from:
-// https://github.com/apple/darwin-xnu/blob/xnu-4570.1.46/osfmk/i386/cpu_capabilities.h
-#define commpage64_base_address 0x00007fffffe00000
-#define commpage64_cpu_capabilities64 (commpage64_base_address+0x010)
-#define commpage64_version (commpage64_base_address+0x01E)
-#define hasAVX512F 0x0000004000000000
- MOVQ $commpage64_version, BX
- CMPW (BX), $13 // cpu_capabilities64 undefined in versions < 13
- JL no_avx512
- MOVQ $commpage64_cpu_capabilities64, BX
- MOVQ $hasAVX512F, CX
- TESTQ (BX), CX
- JZ no_avx512
- MOVB $1, ret+0(FP)
-no_avx512:
-#endif
-#endif
- RET
diff --git a/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go
index 87ae9d2a3..c9b69937a 100644
--- a/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go
+++ b/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build go1.5
// +build go1.5
package plan9
diff --git a/vendor/golang.org/x/sys/plan9/pwd_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_plan9.go
index c07c798bc..98bf56b73 100644
--- a/vendor/golang.org/x/sys/plan9/pwd_plan9.go
+++ b/vendor/golang.org/x/sys/plan9/pwd_plan9.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build !go1.5
// +build !go1.5
package plan9
diff --git a/vendor/golang.org/x/sys/plan9/race.go b/vendor/golang.org/x/sys/plan9/race.go
index 42edd93ef..62377d2ff 100644
--- a/vendor/golang.org/x/sys/plan9/race.go
+++ b/vendor/golang.org/x/sys/plan9/race.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build plan9 && race
// +build plan9,race
package plan9
diff --git a/vendor/golang.org/x/sys/plan9/race0.go b/vendor/golang.org/x/sys/plan9/race0.go
index c89cf8fc0..f8da30876 100644
--- a/vendor/golang.org/x/sys/plan9/race0.go
+++ b/vendor/golang.org/x/sys/plan9/race0.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build plan9 && !race
// +build plan9,!race
package plan9
diff --git a/vendor/golang.org/x/sys/plan9/str.go b/vendor/golang.org/x/sys/plan9/str.go
index 4f7f9ad7c..55fa8d025 100644
--- a/vendor/golang.org/x/sys/plan9/str.go
+++ b/vendor/golang.org/x/sys/plan9/str.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build plan9
// +build plan9
package plan9
diff --git a/vendor/golang.org/x/sys/plan9/syscall.go b/vendor/golang.org/x/sys/plan9/syscall.go
index e7363a2f5..602473cba 100644
--- a/vendor/golang.org/x/sys/plan9/syscall.go
+++ b/vendor/golang.org/x/sys/plan9/syscall.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build plan9
// +build plan9
// Package plan9 contains an interface to the low-level operating system
diff --git a/vendor/golang.org/x/sys/plan9/syscall_plan9.go b/vendor/golang.org/x/sys/plan9/syscall_plan9.go
index 84e147148..723b1f400 100644
--- a/vendor/golang.org/x/sys/plan9/syscall_plan9.go
+++ b/vendor/golang.org/x/sys/plan9/syscall_plan9.go
@@ -132,8 +132,10 @@ func Pipe(p []int) (err error) {
}
var pp [2]int32
err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return
}
diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go
index 6819bc209..3f40b9bd7 100644
--- a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go
+++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go
@@ -1,6 +1,7 @@
// go run mksyscall.go -l32 -plan9 -tags plan9,386 syscall_plan9.go
// Code generated by the command above; see README.md. DO NOT EDIT.
+//go:build plan9 && 386
// +build plan9,386
package plan9
diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go
index 418abbbfc..0e6a96aa4 100644
--- a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go
+++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go
@@ -1,6 +1,7 @@
// go run mksyscall.go -l32 -plan9 -tags plan9,amd64 syscall_plan9.go
// Code generated by the command above; see README.md. DO NOT EDIT.
+//go:build plan9 && amd64
// +build plan9,amd64
package plan9
diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go
index 3e8a1a58c..244c501b7 100644
--- a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go
+++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go
@@ -1,6 +1,7 @@
// go run mksyscall.go -l32 -plan9 -tags plan9,arm syscall_plan9.go
// Code generated by the command above; see README.md. DO NOT EDIT.
+//go:build plan9 && arm
// +build plan9,arm
package plan9
diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md
index 474efad0e..7d3c060e1 100644
--- a/vendor/golang.org/x/sys/unix/README.md
+++ b/vendor/golang.org/x/sys/unix/README.md
@@ -149,7 +149,7 @@ To add a constant, add the header that includes it to the appropriate variable.
Then, edit the regex (if necessary) to match the desired constant. Avoid making
the regex too broad to avoid matching unintended constants.
-### mkmerge.go
+### internal/mkmerge
This program is used to extract duplicate const, func, and type declarations
from the generated architecture-specific files listed below, and merge these
diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh
index 396aadf86..ee7362348 100644
--- a/vendor/golang.org/x/sys/unix/mkall.sh
+++ b/vendor/golang.org/x/sys/unix/mkall.sh
@@ -50,7 +50,7 @@ if [[ "$GOOS" = "linux" ]]; then
# Use the Docker-based build system
# Files generated through docker (use $cmd so you can Ctl-C the build or run)
$cmd docker build --tag generate:$GOOS $GOOS
- $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")" && /bin/pwd):/build generate:$GOOS
+ $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS
exit
fi
diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh
index 0bcb8c322..a47b035f9 100644
--- a/vendor/golang.org/x/sys/unix/mkerrors.sh
+++ b/vendor/golang.org/x/sys/unix/mkerrors.sh
@@ -54,7 +54,7 @@ includes_AIX='
includes_Darwin='
#define _DARWIN_C_SOURCE
-#define KERNEL
+#define KERNEL 1
#define _DARWIN_USE_64_BIT_INODE
#define __APPLE_USE_RFC_3542
#include
@@ -75,6 +75,7 @@ includes_Darwin='
#include
#include
#include
+#include
#include
#include
#include
@@ -82,6 +83,9 @@ includes_Darwin='
#include
#include
#include
+
+// for backwards compatibility because moved TIOCREMOTE to Kernel.framework after MacOSX12.0.sdk.
+#define TIOCREMOTE 0x80047469
'
includes_DragonFly='
@@ -229,11 +233,13 @@ struct ltchars {
#include
#include
#include
+#include
#include
#include
#include
#include
#include
+#include
#include
#include
#include
@@ -255,6 +261,7 @@ struct ltchars {
#include
#include
#include
+#include
#include
#include
@@ -465,7 +472,6 @@ ccflags="$@"
$2 !~ /^EQUIV_/ &&
$2 !~ /^EXPR_/ &&
$2 !~ /^EVIOC/ &&
- $2 !~ /^EV_/ &&
$2 ~ /^E[A-Z0-9_]+$/ ||
$2 ~ /^B[0-9_]+$/ ||
$2 ~ /^(OLD|NEW)DEV$/ ||
@@ -497,6 +503,7 @@ ccflags="$@"
$2 ~ /^O?XTABS$/ ||
$2 ~ /^TC[IO](ON|OFF)$/ ||
$2 ~ /^IN_/ ||
+ $2 ~ /^LANDLOCK_/ ||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
@@ -515,7 +522,7 @@ ccflags="$@"
$2 ~ /^HW_MACHINE$/ ||
$2 ~ /^SYSCTL_VERS/ ||
$2 !~ "MNT_BITS" &&
- $2 ~ /^(MS|MNT|UMOUNT)_/ ||
+ $2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ ||
$2 ~ /^NS_GET_/ ||
$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|TFD)_/ ||
@@ -600,6 +607,7 @@ ccflags="$@"
$2 ~ /^MTD/ ||
$2 ~ /^OTP/ ||
$2 ~ /^MEM/ ||
+ $2 ~ /^WG/ ||
$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
$2 ~ /^__WCOREFLAG$/ {next}
$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go
index 8bf457059..5f63147e0 100644
--- a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go
+++ b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go
@@ -34,3 +34,52 @@ func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {
ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))
return &ucred, nil
}
+
+// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO.
+func PktInfo4(info *Inet4Pktinfo) []byte {
+ b := make([]byte, CmsgSpace(SizeofInet4Pktinfo))
+ h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
+ h.Level = SOL_IP
+ h.Type = IP_PKTINFO
+ h.SetLen(CmsgLen(SizeofInet4Pktinfo))
+ *(*Inet4Pktinfo)(h.data(0)) = *info
+ return b
+}
+
+// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO.
+func PktInfo6(info *Inet6Pktinfo) []byte {
+ b := make([]byte, CmsgSpace(SizeofInet6Pktinfo))
+ h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
+ h.Level = SOL_IPV6
+ h.Type = IPV6_PKTINFO
+ h.SetLen(CmsgLen(SizeofInet6Pktinfo))
+ *(*Inet6Pktinfo)(h.data(0)) = *info
+ return b
+}
+
+// ParseOrigDstAddr decodes a socket control message containing the original
+// destination address. To receive such a message the IP_RECVORIGDSTADDR or
+// IPV6_RECVORIGDSTADDR option must be enabled on the socket.
+func ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) {
+ switch {
+ case m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR:
+ pp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0]))
+ sa := new(SockaddrInet4)
+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
+ sa.Port = int(p[0])<<8 + int(p[1])
+ sa.Addr = pp.Addr
+ return sa, nil
+
+ case m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR:
+ pp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0]))
+ sa := new(SockaddrInet6)
+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
+ sa.Port = int(p[0])<<8 + int(p[1])
+ sa.ZoneId = pp.Scope_id
+ sa.Addr = pp.Addr
+ return sa, nil
+
+ default:
+ return nil, EINVAL
+ }
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go
index d8efb715f..4f55c8d99 100644
--- a/vendor/golang.org/x/sys/unix/syscall_aix.go
+++ b/vendor/golang.org/x/sys/unix/syscall_aix.go
@@ -70,9 +70,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
}
@@ -85,9 +83,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
}
@@ -261,9 +257,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa := new(SockaddrInet4)
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
case AF_INET6:
@@ -272,9 +266,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
}
return nil, EAFNOSUPPORT
@@ -385,6 +377,11 @@ func (w WaitStatus) TrapCause() int { return -1 }
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
+//sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range
+func Fsync(fd int) error {
+ return fsyncRange(fd, O_SYNC, 0, 0)
+}
+
/*
* Direct access
*/
@@ -401,7 +398,6 @@ func (w WaitStatus) TrapCause() int { return -1 }
//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys Fdatasync(fd int) (err error)
-//sys Fsync(fd int) (err error)
// readdir_r
//sysnb Getpgid(pid int) (pgid int, err error)
@@ -523,8 +519,10 @@ func Pipe(p []int) (err error) {
}
var pp [2]_C_int
err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go
index 95ac3946b..0ce452326 100644
--- a/vendor/golang.org/x/sys/unix/syscall_bsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go
@@ -163,9 +163,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}
@@ -179,9 +177,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}
@@ -210,9 +206,7 @@ func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
sa.raw.Nlen = sa.Nlen
sa.raw.Alen = sa.Alen
sa.raw.Slen = sa.Slen
- for i := 0; i < len(sa.raw.Data); i++ {
- sa.raw.Data[i] = sa.Data[i]
- }
+ sa.raw.Data = sa.Data
return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
}
@@ -228,9 +222,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa.Nlen = pp.Nlen
sa.Alen = pp.Alen
sa.Slen = pp.Slen
- for i := 0; i < len(sa.Data); i++ {
- sa.Data[i] = pp.Data[i]
- }
+ sa.Data = pp.Data
return sa, nil
case AF_UNIX:
@@ -262,9 +254,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa := new(SockaddrInet4)
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
case AF_INET6:
@@ -273,9 +263,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
}
return anyToSockaddrGOOS(fd, rsa)
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go
index 23f6b5760..0eaab9131 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go
@@ -48,6 +48,30 @@ func (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil
}
+// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.
+// SockaddrVM provides access to Darwin VM sockets: a mechanism that enables
+// bidirectional communication between a hypervisor and its guest virtual
+// machines.
+type SockaddrVM struct {
+ // CID and Port specify a context ID and port address for a VM socket.
+ // Guests have a unique CID, and hosts may have a well-known CID of:
+ // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.
+ // - VMADDR_CID_LOCAL: refers to local communication (loopback).
+ // - VMADDR_CID_HOST: refers to other processes on the host.
+ CID uint32
+ Port uint32
+ raw RawSockaddrVM
+}
+
+func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ sa.raw.Len = SizeofSockaddrVM
+ sa.raw.Family = AF_VSOCK
+ sa.raw.Port = sa.Port
+ sa.raw.Cid = sa.CID
+
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
+}
+
func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_SYSTEM:
@@ -58,6 +82,13 @@ func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa.Unit = pp.Sc_unit
return sa, nil
}
+ case AF_VSOCK:
+ pp := (*RawSockaddrVM)(unsafe.Pointer(rsa))
+ sa := &SockaddrVM{
+ CID: pp.Cid,
+ Port: pp.Port,
+ }
+ return sa, nil
}
return nil, EAFNOSUPPORT
}
@@ -128,8 +159,10 @@ func Pipe(p []int) (err error) {
}
var x [2]int32
err = pipe(&x)
- p[0] = int(x[0])
- p[1] = int(x[1])
+ if err == nil {
+ p[0] = int(x[0])
+ p[1] = int(x[1])
+ }
return
}
@@ -399,8 +432,25 @@ func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
return x, err
}
-func SysctlKinfoProcSlice(name string) ([]KinfoProc, error) {
- mib, err := sysctlmib(name)
+func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) {
+ mib, err := sysctlmib(name, args...)
+ if err != nil {
+ return nil, err
+ }
+
+ var kinfo KinfoProc
+ n := uintptr(SizeofKinfoProc)
+ if err := sysctl(mib, (*byte)(unsafe.Pointer(&kinfo)), &n, nil, 0); err != nil {
+ return nil, err
+ }
+ if n != SizeofKinfoProc {
+ return nil, EIO
+ }
+ return &kinfo, nil
+}
+
+func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {
+ mib, err := sysctlmib(name, args...)
if err != nil {
return nil, err
}
@@ -433,6 +483,11 @@ func SysctlKinfoProcSlice(name string) ([]KinfoProc, error) {
//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
+//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
+//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)
+//sys shmdt(addr uintptr) (err error)
+//sys shmget(key int, size int, flag int) (id int, err error)
+
/*
* Exposed directly
*/
@@ -590,10 +645,6 @@ func SysctlKinfoProcSlice(name string) ([]KinfoProc, error) {
// Msgget
// Msgsnd
// Msgrcv
-// Shmat
-// Shmctl
-// Shmdt
-// Shmget
// Shm_open
// Shm_unlink
// Sem_open
diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
index 5af108a50..2e37c3167 100644
--- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
@@ -101,7 +101,10 @@ func Pipe(p []int) (err error) {
if len(p) != 2 {
return EINVAL
}
- p[0], p[1], err = pipe()
+ r, w, err := pipe()
+ if err == nil {
+ p[0], p[1] = r, w
+ }
return
}
@@ -114,7 +117,10 @@ func Pipe2(p []int, flags int) (err error) {
var pp [2]_C_int
// pipe2 on dragonfly takes an fds array as an argument, but still
// returns the file descriptors.
- p[0], p[1], err = pipe2(&pp, flags)
+ r, w, err := pipe2(&pp, flags)
+ if err == nil {
+ p[0], p[1] = r, w
+ }
return err
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
index 18c392cf3..2f650ae66 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
@@ -110,8 +110,10 @@ func Pipe2(p []int, flags int) error {
}
var pp [2]_C_int
err := pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return err
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_illumos.go b/vendor/golang.org/x/sys/unix/syscall_illumos.go
index 8c5357683..8d5f294c4 100644
--- a/vendor/golang.org/x/sys/unix/syscall_illumos.go
+++ b/vendor/golang.org/x/sys/unix/syscall_illumos.go
@@ -162,6 +162,14 @@ func (l *Lifreq) GetLifruInt() int {
return *(*int)(unsafe.Pointer(&l.Lifru[0]))
}
+func (l *Lifreq) SetLifruUint(d uint) {
+ *(*uint)(unsafe.Pointer(&l.Lifru[0])) = d
+}
+
+func (l *Lifreq) GetLifruUint() uint {
+ return *(*uint)(unsafe.Pointer(&l.Lifru[0]))
+}
+
func IoctlLifreq(fd int, req uint, l *Lifreq) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(l)))
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index 2839435e3..f432b0684 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -13,7 +13,6 @@ package unix
import (
"encoding/binary"
- "runtime"
"syscall"
"unsafe"
)
@@ -38,6 +37,13 @@ func Creat(path string, mode uint32) (fd int, err error) {
return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
}
+func EpollCreate(size int) (fd int, err error) {
+ if size <= 0 {
+ return -1, EINVAL
+ }
+ return EpollCreate1(0)
+}
+
//sys FanotifyInit(flags uint, event_f_flags uint) (fd int, err error)
//sys fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error)
@@ -66,6 +72,10 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return fchmodat(dirfd, path, mode)
}
+func InotifyInit() (fd int, err error) {
+ return InotifyInit1(0)
+}
+
//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL
//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL
@@ -109,6 +119,25 @@ func Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) {
return openat2(dirfd, path, how, SizeofOpenHow)
}
+func Pipe(p []int) error {
+ return Pipe2(p, 0)
+}
+
+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
+
+func Pipe2(p []int, flags int) error {
+ if len(p) != 2 {
+ return EINVAL
+ }
+ var pp [2]_C_int
+ err := pipe2(&pp, flags)
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
+ return err
+}
+
//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
@@ -118,6 +147,15 @@ func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error
return ppoll(&fds[0], len(fds), timeout, sigmask)
}
+func Poll(fds []PollFd, timeout int) (n int, err error) {
+ var ts *Timespec
+ if timeout >= 0 {
+ ts = new(Timespec)
+ *ts = NsecToTimespec(int64(timeout) * 1e6)
+ }
+ return Ppoll(fds, ts, nil)
+}
+
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
func Readlink(path string, buf []byte) (n int, err error) {
@@ -168,27 +206,7 @@ func Utimes(path string, tv []Timeval) error {
//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
func UtimesNano(path string, ts []Timespec) error {
- if ts == nil {
- err := utimensat(AT_FDCWD, path, nil, 0)
- if err != ENOSYS {
- return err
- }
- return utimes(path, nil)
- }
- if len(ts) != 2 {
- return EINVAL
- }
- err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
- if err != ENOSYS {
- return err
- }
- // If the utimensat syscall isn't available (utimensat was added to Linux
- // in 2.6.22, Released, 8 July 2007) then fall back to utimes
- var tv [2]Timeval
- for i := 0; i < 2; i++ {
- tv[i] = NsecToTimeval(TimespecToNsec(ts[i]))
- }
- return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+ return UtimesNanoAt(AT_FDCWD, path, ts, 0)
}
func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
@@ -356,9 +374,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
}
@@ -371,9 +387,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
}
@@ -422,9 +436,7 @@ func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) {
sa.raw.Hatype = sa.Hatype
sa.raw.Pkttype = sa.Pkttype
sa.raw.Halen = sa.Halen
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil
}
@@ -839,12 +851,10 @@ func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) {
if sa.Addr == nil {
return nil, 0, EINVAL
}
-
sa.raw.Family = AF_TIPC
sa.raw.Scope = int8(sa.Scope)
sa.raw.Addrtype = sa.Addr.tipcAddrtype()
sa.raw.Addr = sa.Addr.tipcAddr()
-
return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil
}
@@ -858,9 +868,7 @@ type SockaddrL2TPIP struct {
func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) {
sa.raw.Family = AF_INET
sa.raw.Conn_id = sa.ConnId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil
}
@@ -876,9 +884,7 @@ func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) {
sa.raw.Family = AF_INET6
sa.raw.Conn_id = sa.ConnId
sa.raw.Scope_id = sa.ZoneId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil
}
@@ -974,9 +980,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa.Hatype = pp.Hatype
sa.Pkttype = pp.Pkttype
sa.Halen = pp.Halen
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
case AF_UNIX:
@@ -1015,18 +1019,14 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa))
sa := new(SockaddrL2TPIP)
sa.ConnId = pp.Conn_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
default:
pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
sa := new(SockaddrInet4)
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
}
@@ -1042,9 +1042,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa := new(SockaddrL2TPIP6)
sa.ConnId = pp.Conn_id
sa.ZoneId = pp.Scope_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
default:
pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
@@ -1052,9 +1050,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
}
@@ -1229,11 +1225,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
var rsa RawSockaddrAny
var len _Socklen = SizeofSockaddrAny
- // Try accept4 first for Android, then try accept for kernel older than 2.6.28
nfd, err = accept4(fd, &rsa, &len, 0)
- if err == ENOSYS {
- nfd, err = accept(fd, &rsa, &len)
- }
if err != nil {
return
}
@@ -1785,6 +1777,16 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
return mount(source, target, fstype, flags, datap)
}
+//sys mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR
+
+// MountSetattr is a wrapper for mount_setattr(2).
+// https://man7.org/linux/man-pages/man2/mount_setattr.2.html
+//
+// Requires kernel >= 5.12.
+func MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error {
+ return mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr))
+}
+
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
if raceenabled {
raceReleaseMerge(unsafe.Pointer(&ioSync))
@@ -1816,11 +1818,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
//sys Dup(oldfd int) (fd int, err error)
func Dup2(oldfd, newfd int) error {
- // Android O and newer blocks dup2; riscv and arm64 don't implement dup2.
- if runtime.GOOS == "android" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "arm64" {
- return Dup3(oldfd, newfd, 0)
- }
- return dup2(oldfd, newfd)
+ return Dup3(oldfd, newfd, 0)
}
//sys Dup3(oldfd int, newfd int, flags int) (err error)
@@ -2308,6 +2306,14 @@ type RemoteIovec struct {
//sys ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV
//sys ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV
+//sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN
+//sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD
+
+//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
+//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)
+//sys shmdt(addr uintptr) (err error)
+//sys shmget(key int, size int, flag int) (id int, err error)
+
/*
* Unimplemented
*/
@@ -2389,10 +2395,6 @@ type RemoteIovec struct {
// SetRobustList
// SetThreadArea
// SetTidAddress
-// Shmat
-// Shmctl
-// Shmdt
-// Shmget
// Sigaltstack
// Swapoff
// Swapon
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
index 91317d749..5f757e8aa 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
@@ -19,36 +19,8 @@ func setTimeval(sec, usec int64) Timeval {
return Timeval{Sec: int32(sec), Usec: int32(usec)}
}
-//sysnb pipe(p *[2]_C_int) (err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
// 64-bit file system and 32-bit uid calls
// (386 default is 32-bit file system and 16-bit uid).
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64
//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
@@ -59,7 +31,6 @@ func Pipe2(p []int, flags int) (err error) {
//sysnb Geteuid() (euid int) = SYS_GETEUID32
//sysnb Getgid() (gid int) = SYS_GETGID32
//sysnb Getuid() (uid int) = SYS_GETUID32
-//sysnb InotifyInit() (fd int, err error)
//sys Ioperm(from int, num int, on int) (err error)
//sys Iopl(level int) (err error)
//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
@@ -381,12 +352,3 @@ func (cmsg *Cmsghdr) SetLen(length int) {
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint32(length)
}
-
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
index 85cd97da0..4299125aa 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
@@ -7,8 +7,6 @@
package unix
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
@@ -21,17 +19,6 @@ package unix
//sysnb Getgid() (gid int)
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb Getuid() (uid int)
-//sysnb inotifyInit() (fd int, err error)
-
-func InotifyInit() (fd int, err error) {
- // First try inotify_init1, because Android's seccomp policy blocks the latter.
- fd, err = InotifyInit1(0)
- if err == ENOSYS {
- fd, err = inotifyInit()
- }
- return
-}
-
//sys Ioperm(from int, num int, on int) (err error)
//sys Iopl(level int) (err error)
//sys Lchown(path string, uid int, gid int) (err error)
@@ -126,32 +113,6 @@ func setTimeval(sec, usec int64) Timeval {
return Timeval{Sec: sec, Usec: usec}
}
-//sysnb pipe(p *[2]_C_int) (err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
func (r *PtraceRegs) PC() uint64 { return r.Rip }
func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc }
@@ -176,15 +137,6 @@ func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint64(length)
}
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
-
//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
index b961a620e..79edeb9cb 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
@@ -19,36 +19,6 @@ func setTimeval(sec, usec int64) Timeval {
return Timeval{Sec: int32(sec), Usec: int32(usec)}
}
-//sysnb pipe(p *[2]_C_int) (err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- // Try pipe2 first for Android O, then try pipe for kernel 2.6.23.
- err = pipe2(&pp, 0)
- if err == ENOSYS {
- err = pipe(&pp)
- }
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
newoffset, errno := seek(fd, offset, whence)
if errno != 0 {
@@ -76,8 +46,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
// 64-bit file system and 32-bit uid calls
// (16-bit uid calls are not always supported in newer kernels)
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
@@ -86,7 +54,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
//sysnb Geteuid() (euid int) = SYS_GETEUID32
//sysnb Getgid() (gid int) = SYS_GETGID32
//sysnb Getuid() (uid int) = SYS_GETUID32
-//sysnb InotifyInit() (fd int, err error)
//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
//sys Listen(s int, n int) (err error)
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
@@ -260,15 +227,6 @@ func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint32(length)
}
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
-
//sys armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE
func SyncFileRange(fd int, off int64, n int64, flags int) error {
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
index 4b977ba44..862890de2 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
@@ -9,13 +9,6 @@ package unix
import "unsafe"
-func EpollCreate(size int) (fd int, err error) {
- if size <= 0 {
- return -1, EINVAL
- }
- return EpollCreate1(0)
-}
-
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
@@ -145,30 +138,6 @@ func utimes(path string, tv *[2]Timeval) (err error) {
return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, 0)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
// Getrlimit prefers the prlimit64 system call. See issue 38604.
func Getrlimit(resource int, rlim *Rlimit) error {
err := Prlimit(0, resource, nil, rlim)
@@ -211,31 +180,11 @@ func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint64(length)
}
-func InotifyInit() (fd int, err error) {
- return InotifyInit1(0)
-}
-
-// dup2 exists because func Dup3 in syscall_linux.go references
-// it in an unreachable path. dup2 isn't available on arm64.
-func dup2(oldfd int, newfd int) error
-
func Pause() error {
_, err := ppoll(nil, 0, nil, nil)
return err
}
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- var ts *Timespec
- if timeout >= 0 {
- ts = new(Timespec)
- *ts = NsecToTimespec(int64(timeout) * 1e6)
- }
- if len(fds) == 0 {
- return ppoll(nil, 0, ts, nil)
- }
- return ppoll(&fds[0], len(fds), ts, nil)
-}
-
//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
index 27aee81d9..8932e34ad 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
@@ -8,8 +8,6 @@
package unix
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
@@ -94,30 +92,6 @@ func setTimeval(sec, usec int64) Timeval {
return Timeval{Sec: sec, Usec: usec}
}
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, 0)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
func Ioperm(from int, num int, on int) (err error) {
return ENOSYS
}
@@ -220,16 +194,3 @@ func (cmsg *Cmsghdr) SetLen(length int) {
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint64(length)
}
-
-func InotifyInit() (fd int, err error) {
- return InotifyInit1(0)
-}
-
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
index 21d74e2fb..7821c25d9 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
@@ -15,8 +15,6 @@ import (
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
@@ -60,7 +58,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
-//sysnb InotifyInit() (fd int, err error)
//sys Ioperm(from int, num int, on int) (err error)
//sys Iopl(level int) (err error)
@@ -113,29 +110,6 @@ func setTimeval(sec, usec int64) Timeval {
return Timeval{Sec: int32(sec), Usec: int32(usec)}
}
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe() (p1 int, p2 int, err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- p[0], p[1], err = pipe()
- return
-}
-
//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
@@ -232,12 +206,3 @@ func (cmsg *Cmsghdr) SetLen(length int) {
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint32(length)
}
-
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
index 6f1fc581e..c5053a0f0 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
@@ -12,8 +12,6 @@ import (
"unsafe"
)
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
@@ -23,7 +21,6 @@ import (
//sysnb Geteuid() (euid int)
//sysnb Getgid() (gid int)
//sysnb Getuid() (uid int)
-//sysnb InotifyInit() (fd int, err error)
//sys Ioperm(from int, num int, on int) (err error)
//sys Iopl(level int) (err error)
//sys Lchown(path string, uid int, gid int) (err error)
@@ -218,41 +215,6 @@ func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint32(length)
}
-//sysnb pipe(p *[2]_C_int) (err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
-
//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2
func SyncFileRange(fd int, off int64, n int64, flags int) error {
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
index 5259a5fea..25786c421 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
@@ -8,8 +8,6 @@
package unix
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
@@ -22,7 +20,6 @@ package unix
//sysnb Getgid() (gid int)
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT
//sysnb Getuid() (uid int)
-//sysnb InotifyInit() (fd int, err error)
//sys Ioperm(from int, num int, on int) (err error)
//sys Iopl(level int) (err error)
//sys Lchown(path string, uid int, gid int) (err error)
@@ -104,41 +101,6 @@ func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint64(length)
}
-//sysnb pipe(p *[2]_C_int) (err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
-
//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2
func SyncFileRange(fd int, off int64, n int64, flags int) error {
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
index 8ef821e5d..6f9f71041 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
@@ -9,13 +9,6 @@ package unix
import "unsafe"
-func EpollCreate(size int) (fd int, err error) {
- if size <= 0 {
- return -1, EINVAL
- }
- return EpollCreate1(0)
-}
-
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
@@ -144,30 +137,6 @@ func utimes(path string, tv *[2]Timeval) (err error) {
return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, 0)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
func (r *PtraceRegs) PC() uint64 { return r.Pc }
func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }
@@ -192,27 +161,11 @@ func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint64(length)
}
-func InotifyInit() (fd int, err error) {
- return InotifyInit1(0)
-}
-
func Pause() error {
_, err := ppoll(nil, 0, nil, nil)
return err
}
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- var ts *Timespec
- if timeout >= 0 {
- ts = new(Timespec)
- *ts = NsecToTimespec(int64(timeout) * 1e6)
- }
- if len(fds) == 0 {
- return ppoll(nil, 0, ts, nil)
- }
- return ppoll(&fds[0], len(fds), ts, nil)
-}
-
func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)
}
@@ -229,7 +182,3 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error
}
return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
-
-// dup2 exists because func Dup3 in syscall_linux.go references
-// it in an unreachable path. dup2 isn't available on arm64.
-func dup2(oldfd int, newfd int) error
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
index a1c0574b5..6aa59cb27 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
@@ -11,8 +11,6 @@ import (
"unsafe"
)
-//sys dup2(oldfd int, newfd int) (err error)
-//sysnb EpollCreate(size int) (fd int, err error)
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
@@ -25,7 +23,6 @@ import (
//sysnb Getgid() (gid int)
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb Getuid() (uid int)
-//sysnb InotifyInit() (fd int, err error)
//sys Lchown(path string, uid int, gid int) (err error)
//sys Lstat(path string, stat *Stat_t) (err error)
//sys Pause() (err error)
@@ -77,30 +74,6 @@ func setTimeval(sec, usec int64) Timeval {
return Timeval{Sec: sec, Usec: usec}
}
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, 0) // pipe2 is the same as pipe when flags are set to 0.
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
func Ioperm(from int, num int, on int) (err error) {
return ENOSYS
}
@@ -324,15 +297,6 @@ func Shutdown(s, how int) error {
return nil
}
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
-
//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
index de14b8898..bbe8d174f 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
@@ -9,7 +9,6 @@ package unix
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
-//sys dup2(oldfd int, newfd int) (err error)
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
@@ -20,7 +19,6 @@ package unix
//sysnb Getgid() (gid int)
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb Getuid() (uid int)
-//sysnb InotifyInit() (fd int, err error)
//sys Lchown(path string, uid int, gid int) (err error)
//sys Listen(s int, n int) (err error)
//sys Lstat(path string, stat *Stat_t) (err error)
@@ -119,38 +117,3 @@ func (cmsg *Cmsghdr) SetLen(length int) {
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
rsa.Service_name_len = uint64(length)
}
-
-//sysnb pipe(p *[2]_C_int) (err error)
-
-func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sysnb pipe2(p *[2]_C_int, flags int) (err error)
-
-func Pipe2(p []int, flags int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- var pp [2]_C_int
- err = pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
- return
-}
-
-//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
-
-func Poll(fds []PollFd, timeout int) (n int, err error) {
- if len(fds) == 0 {
- return poll(nil, 0, timeout)
- }
- return poll(&fds[0], len(fds), timeout)
-}
diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
index 853d5f0f4..696fed496 100644
--- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
@@ -110,14 +110,8 @@ func direntNamlen(buf []byte) (uint64, bool) {
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
}
-//sysnb pipe() (fd1 int, fd2 int, err error)
-
func Pipe(p []int) (err error) {
- if len(p) != 2 {
- return EINVAL
- }
- p[0], p[1], err = pipe()
- return
+ return Pipe2(p, 0)
}
//sysnb pipe2(p *[2]_C_int, flags int) (err error)
@@ -128,8 +122,10 @@ func Pipe2(p []int, flags int) error {
}
var pp [2]_C_int
err := pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return err
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
index 22b550385..11b1d419d 100644
--- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
@@ -87,8 +87,10 @@ func Pipe2(p []int, flags int) error {
}
var pp [2]_C_int
err := pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return err
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go
index d2a6495c7..5c813921e 100644
--- a/vendor/golang.org/x/sys/unix/syscall_solaris.go
+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go
@@ -66,8 +66,10 @@ func Pipe(p []int) (err error) {
if n != 0 {
return err
}
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return nil
}
@@ -79,8 +81,10 @@ func Pipe2(p []int, flags int) error {
}
var pp [2]_C_int
err := pipe2(&pp, flags)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return err
}
@@ -92,9 +96,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
}
@@ -107,9 +109,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
}
@@ -417,9 +417,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa := new(SockaddrInet4)
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
case AF_INET6:
@@ -428,9 +426,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
}
return nil, EAFNOSUPPORT
diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
index 1ffd8bfcf..f8616f454 100644
--- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
@@ -67,9 +67,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}
@@ -83,9 +81,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}
@@ -144,9 +140,7 @@ func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) {
sa := new(SockaddrInet4)
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
case AF_INET6:
@@ -155,9 +149,7 @@ func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) {
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
}
return nil, EAFNOSUPPORT
@@ -587,8 +579,10 @@ func Pipe(p []int) (err error) {
}
var pp [2]_C_int
err = pipe(&pp)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ if err == nil {
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ }
return
}
diff --git a/vendor/golang.org/x/sys/unix/sysvshm_linux.go b/vendor/golang.org/x/sys/unix/sysvshm_linux.go
new file mode 100644
index 000000000..2c3a4437f
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/sysvshm_linux.go
@@ -0,0 +1,21 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build linux
+// +build linux
+
+package unix
+
+import "runtime"
+
+// SysvShmCtl performs control operations on the shared memory segment
+// specified by id.
+func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {
+ if runtime.GOARCH == "arm" ||
+ runtime.GOARCH == "mips64" || runtime.GOARCH == "mips64le" {
+ cmd |= ipc_64
+ }
+
+ return shmctl(id, cmd, desc)
+}
diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/vendor/golang.org/x/sys/unix/sysvshm_unix.go
new file mode 100644
index 000000000..0bb4c8de5
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/sysvshm_unix.go
@@ -0,0 +1,61 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build (darwin && !ios) || linux
+// +build darwin,!ios linux
+
+package unix
+
+import (
+ "unsafe"
+
+ "golang.org/x/sys/internal/unsafeheader"
+)
+
+// SysvShmAttach attaches the Sysv shared memory segment associated with the
+// shared memory identifier id.
+func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) {
+ addr, errno := shmat(id, addr, flag)
+ if errno != nil {
+ return nil, errno
+ }
+
+ // Retrieve the size of the shared memory to enable slice creation
+ var info SysvShmDesc
+
+ _, err := SysvShmCtl(id, IPC_STAT, &info)
+ if err != nil {
+ // release the shared memory if we can't find the size
+
+ // ignoring error from shmdt as there's nothing sensible to return here
+ shmdt(addr)
+ return nil, err
+ }
+
+ // Use unsafe to convert addr into a []byte.
+ // TODO: convert to unsafe.Slice once we can assume Go 1.17
+ var b []byte
+ hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
+ hdr.Data = unsafe.Pointer(addr)
+ hdr.Cap = int(info.Segsz)
+ hdr.Len = int(info.Segsz)
+ return b, nil
+}
+
+// SysvShmDetach unmaps the shared memory slice returned from SysvShmAttach.
+//
+// It is not safe to use the slice after calling this function.
+func SysvShmDetach(data []byte) error {
+ if len(data) == 0 {
+ return EINVAL
+ }
+
+ return shmdt(uintptr(unsafe.Pointer(&data[0])))
+}
+
+// SysvShmGet returns the Sysv shared memory identifier associated with key.
+// If the IPC_CREAT flag is specified a new segment is created.
+func SysvShmGet(key, size, flag int) (id int, err error) {
+ return shmget(key, size, flag)
+}
diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go
new file mode 100644
index 000000000..71bddefdb
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go
@@ -0,0 +1,14 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build darwin && !ios
+// +build darwin,!ios
+
+package unix
+
+// SysvShmCtl performs control operations on the shared memory segment
+// specified by id.
+func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {
+ return shmctl(id, cmd, desc)
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
index a3a45fec5..476a1c7e7 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
@@ -12,1556 +12,1582 @@ package unix
import "syscall"
const (
- AF_APPLETALK = 0x10
- AF_CCITT = 0xa
- AF_CHAOS = 0x5
- AF_CNT = 0x15
- AF_COIP = 0x14
- AF_DATAKIT = 0x9
- AF_DECnet = 0xc
- AF_DLI = 0xd
- AF_E164 = 0x1c
- AF_ECMA = 0x8
- AF_HYLINK = 0xf
- AF_IEEE80211 = 0x25
- AF_IMPLINK = 0x3
- AF_INET = 0x2
- AF_INET6 = 0x1e
- AF_IPX = 0x17
- AF_ISDN = 0x1c
- AF_ISO = 0x7
- AF_LAT = 0xe
- AF_LINK = 0x12
- AF_LOCAL = 0x1
- AF_MAX = 0x29
- AF_NATM = 0x1f
- AF_NDRV = 0x1b
- AF_NETBIOS = 0x21
- AF_NS = 0x6
- AF_OSI = 0x7
- AF_PPP = 0x22
- AF_PUP = 0x4
- AF_RESERVED_36 = 0x24
- AF_ROUTE = 0x11
- AF_SIP = 0x18
- AF_SNA = 0xb
- AF_SYSTEM = 0x20
- AF_SYS_CONTROL = 0x2
- AF_UNIX = 0x1
- AF_UNSPEC = 0x0
- AF_UTUN = 0x26
- AF_VSOCK = 0x28
- ALTWERASE = 0x200
- ATTR_BIT_MAP_COUNT = 0x5
- ATTR_CMN_ACCESSMASK = 0x20000
- ATTR_CMN_ACCTIME = 0x1000
- ATTR_CMN_ADDEDTIME = 0x10000000
- ATTR_CMN_BKUPTIME = 0x2000
- ATTR_CMN_CHGTIME = 0x800
- ATTR_CMN_CRTIME = 0x200
- ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
- ATTR_CMN_DEVID = 0x2
- ATTR_CMN_DOCUMENT_ID = 0x100000
- ATTR_CMN_ERROR = 0x20000000
- ATTR_CMN_EXTENDED_SECURITY = 0x400000
- ATTR_CMN_FILEID = 0x2000000
- ATTR_CMN_FLAGS = 0x40000
- ATTR_CMN_FNDRINFO = 0x4000
- ATTR_CMN_FSID = 0x4
- ATTR_CMN_FULLPATH = 0x8000000
- ATTR_CMN_GEN_COUNT = 0x80000
- ATTR_CMN_GRPID = 0x10000
- ATTR_CMN_GRPUUID = 0x1000000
- ATTR_CMN_MODTIME = 0x400
- ATTR_CMN_NAME = 0x1
- ATTR_CMN_NAMEDATTRCOUNT = 0x80000
- ATTR_CMN_NAMEDATTRLIST = 0x100000
- ATTR_CMN_OBJID = 0x20
- ATTR_CMN_OBJPERMANENTID = 0x40
- ATTR_CMN_OBJTAG = 0x10
- ATTR_CMN_OBJTYPE = 0x8
- ATTR_CMN_OWNERID = 0x8000
- ATTR_CMN_PARENTID = 0x4000000
- ATTR_CMN_PAROBJID = 0x80
- ATTR_CMN_RETURNED_ATTRS = 0x80000000
- ATTR_CMN_SCRIPT = 0x100
- ATTR_CMN_SETMASK = 0x51c7ff00
- ATTR_CMN_USERACCESS = 0x200000
- ATTR_CMN_UUID = 0x800000
- ATTR_CMN_VALIDMASK = 0xffffffff
- ATTR_CMN_VOLSETMASK = 0x6700
- ATTR_FILE_ALLOCSIZE = 0x4
- ATTR_FILE_CLUMPSIZE = 0x10
- ATTR_FILE_DATAALLOCSIZE = 0x400
- ATTR_FILE_DATAEXTENTS = 0x800
- ATTR_FILE_DATALENGTH = 0x200
- ATTR_FILE_DEVTYPE = 0x20
- ATTR_FILE_FILETYPE = 0x40
- ATTR_FILE_FORKCOUNT = 0x80
- ATTR_FILE_FORKLIST = 0x100
- ATTR_FILE_IOBLOCKSIZE = 0x8
- ATTR_FILE_LINKCOUNT = 0x1
- ATTR_FILE_RSRCALLOCSIZE = 0x2000
- ATTR_FILE_RSRCEXTENTS = 0x4000
- ATTR_FILE_RSRCLENGTH = 0x1000
- ATTR_FILE_SETMASK = 0x20
- ATTR_FILE_TOTALSIZE = 0x2
- ATTR_FILE_VALIDMASK = 0x37ff
- ATTR_VOL_ALLOCATIONCLUMP = 0x40
- ATTR_VOL_ATTRIBUTES = 0x40000000
- ATTR_VOL_CAPABILITIES = 0x20000
- ATTR_VOL_DIRCOUNT = 0x400
- ATTR_VOL_ENCODINGSUSED = 0x10000
- ATTR_VOL_FILECOUNT = 0x200
- ATTR_VOL_FSTYPE = 0x1
- ATTR_VOL_INFO = 0x80000000
- ATTR_VOL_IOBLOCKSIZE = 0x80
- ATTR_VOL_MAXOBJCOUNT = 0x800
- ATTR_VOL_MINALLOCATION = 0x20
- ATTR_VOL_MOUNTEDDEVICE = 0x8000
- ATTR_VOL_MOUNTFLAGS = 0x4000
- ATTR_VOL_MOUNTPOINT = 0x1000
- ATTR_VOL_NAME = 0x2000
- ATTR_VOL_OBJCOUNT = 0x100
- ATTR_VOL_QUOTA_SIZE = 0x10000000
- ATTR_VOL_RESERVED_SIZE = 0x20000000
- ATTR_VOL_SETMASK = 0x80002000
- ATTR_VOL_SIGNATURE = 0x2
- ATTR_VOL_SIZE = 0x4
- ATTR_VOL_SPACEAVAIL = 0x10
- ATTR_VOL_SPACEFREE = 0x8
- ATTR_VOL_UUID = 0x40000
- ATTR_VOL_VALIDMASK = 0xf007ffff
- B0 = 0x0
- B110 = 0x6e
- B115200 = 0x1c200
- B1200 = 0x4b0
- B134 = 0x86
- B14400 = 0x3840
- B150 = 0x96
- B1800 = 0x708
- B19200 = 0x4b00
- B200 = 0xc8
- B230400 = 0x38400
- B2400 = 0x960
- B28800 = 0x7080
- B300 = 0x12c
- B38400 = 0x9600
- B4800 = 0x12c0
- B50 = 0x32
- B57600 = 0xe100
- B600 = 0x258
- B7200 = 0x1c20
- B75 = 0x4b
- B76800 = 0x12c00
- B9600 = 0x2580
- BIOCFLUSH = 0x20004268
- BIOCGBLEN = 0x40044266
- BIOCGDLT = 0x4004426a
- BIOCGDLTLIST = 0xc00c4279
- BIOCGETIF = 0x4020426b
- BIOCGHDRCMPLT = 0x40044274
- BIOCGRSIG = 0x40044272
- BIOCGRTIMEOUT = 0x4010426e
- BIOCGSEESENT = 0x40044276
- BIOCGSTATS = 0x4008426f
- BIOCIMMEDIATE = 0x80044270
- BIOCPROMISC = 0x20004269
- BIOCSBLEN = 0xc0044266
- BIOCSDLT = 0x80044278
- BIOCSETF = 0x80104267
- BIOCSETFNR = 0x8010427e
- BIOCSETIF = 0x8020426c
- BIOCSHDRCMPLT = 0x80044275
- BIOCSRSIG = 0x80044273
- BIOCSRTIMEOUT = 0x8010426d
- BIOCSSEESENT = 0x80044277
- BIOCVERSION = 0x40044271
- BPF_A = 0x10
- BPF_ABS = 0x20
- BPF_ADD = 0x0
- BPF_ALIGNMENT = 0x4
- BPF_ALU = 0x4
- BPF_AND = 0x50
- BPF_B = 0x10
- BPF_DIV = 0x30
- BPF_H = 0x8
- BPF_IMM = 0x0
- BPF_IND = 0x40
- BPF_JA = 0x0
- BPF_JEQ = 0x10
- BPF_JGE = 0x30
- BPF_JGT = 0x20
- BPF_JMP = 0x5
- BPF_JSET = 0x40
- BPF_K = 0x0
- BPF_LD = 0x0
- BPF_LDX = 0x1
- BPF_LEN = 0x80
- BPF_LSH = 0x60
- BPF_MAJOR_VERSION = 0x1
- BPF_MAXBUFSIZE = 0x80000
- BPF_MAXINSNS = 0x200
- BPF_MEM = 0x60
- BPF_MEMWORDS = 0x10
- BPF_MINBUFSIZE = 0x20
- BPF_MINOR_VERSION = 0x1
- BPF_MISC = 0x7
- BPF_MSH = 0xa0
- BPF_MUL = 0x20
- BPF_NEG = 0x80
- BPF_OR = 0x40
- BPF_RELEASE = 0x30bb6
- BPF_RET = 0x6
- BPF_RSH = 0x70
- BPF_ST = 0x2
- BPF_STX = 0x3
- BPF_SUB = 0x10
- BPF_TAX = 0x0
- BPF_TXA = 0x80
- BPF_W = 0x0
- BPF_X = 0x8
- BRKINT = 0x2
- BS0 = 0x0
- BS1 = 0x8000
- BSDLY = 0x8000
- CFLUSH = 0xf
- CLOCAL = 0x8000
- CLOCK_MONOTONIC = 0x6
- CLOCK_MONOTONIC_RAW = 0x4
- CLOCK_MONOTONIC_RAW_APPROX = 0x5
- CLOCK_PROCESS_CPUTIME_ID = 0xc
- CLOCK_REALTIME = 0x0
- CLOCK_THREAD_CPUTIME_ID = 0x10
- CLOCK_UPTIME_RAW = 0x8
- CLOCK_UPTIME_RAW_APPROX = 0x9
- CLONE_NOFOLLOW = 0x1
- CLONE_NOOWNERCOPY = 0x2
- CR0 = 0x0
- CR1 = 0x1000
- CR2 = 0x2000
- CR3 = 0x3000
- CRDLY = 0x3000
- CREAD = 0x800
- CRTSCTS = 0x30000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
- CS8 = 0x300
- CSIZE = 0x300
- CSTART = 0x11
- CSTATUS = 0x14
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
- CTLIOCGINFO = 0xc0644e03
- CTL_HW = 0x6
- CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DLT_A429 = 0xb8
- DLT_A653_ICM = 0xb9
- DLT_AIRONET_HEADER = 0x78
- DLT_AOS = 0xde
- DLT_APPLE_IP_OVER_IEEE1394 = 0x8a
- DLT_ARCNET = 0x7
- DLT_ARCNET_LINUX = 0x81
- DLT_ATM_CLIP = 0x13
- DLT_ATM_RFC1483 = 0xb
- DLT_AURORA = 0x7e
- DLT_AX25 = 0x3
- DLT_AX25_KISS = 0xca
- DLT_BACNET_MS_TP = 0xa5
- DLT_BLUETOOTH_HCI_H4 = 0xbb
- DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
- DLT_CAN20B = 0xbe
- DLT_CAN_SOCKETCAN = 0xe3
- DLT_CHAOS = 0x5
- DLT_CHDLC = 0x68
- DLT_CISCO_IOS = 0x76
- DLT_C_HDLC = 0x68
- DLT_C_HDLC_WITH_DIR = 0xcd
- DLT_DBUS = 0xe7
- DLT_DECT = 0xdd
- DLT_DOCSIS = 0x8f
- DLT_DVB_CI = 0xeb
- DLT_ECONET = 0x73
- DLT_EN10MB = 0x1
- DLT_EN3MB = 0x2
- DLT_ENC = 0x6d
- DLT_ERF = 0xc5
- DLT_ERF_ETH = 0xaf
- DLT_ERF_POS = 0xb0
- DLT_FC_2 = 0xe0
- DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
- DLT_FDDI = 0xa
- DLT_FLEXRAY = 0xd2
- DLT_FRELAY = 0x6b
- DLT_FRELAY_WITH_DIR = 0xce
- DLT_GCOM_SERIAL = 0xad
- DLT_GCOM_T1E1 = 0xac
- DLT_GPF_F = 0xab
- DLT_GPF_T = 0xaa
- DLT_GPRS_LLC = 0xa9
- DLT_GSMTAP_ABIS = 0xda
- DLT_GSMTAP_UM = 0xd9
- DLT_HHDLC = 0x79
- DLT_IBM_SN = 0x92
- DLT_IBM_SP = 0x91
- DLT_IEEE802 = 0x6
- DLT_IEEE802_11 = 0x69
- DLT_IEEE802_11_RADIO = 0x7f
- DLT_IEEE802_11_RADIO_AVS = 0xa3
- DLT_IEEE802_15_4 = 0xc3
- DLT_IEEE802_15_4_LINUX = 0xbf
- DLT_IEEE802_15_4_NOFCS = 0xe6
- DLT_IEEE802_15_4_NONASK_PHY = 0xd7
- DLT_IEEE802_16_MAC_CPS = 0xbc
- DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1
- DLT_IPFILTER = 0x74
- DLT_IPMB = 0xc7
- DLT_IPMB_LINUX = 0xd1
- DLT_IPNET = 0xe2
- DLT_IPOIB = 0xf2
- DLT_IPV4 = 0xe4
- DLT_IPV6 = 0xe5
- DLT_IP_OVER_FC = 0x7a
- DLT_JUNIPER_ATM1 = 0x89
- DLT_JUNIPER_ATM2 = 0x87
- DLT_JUNIPER_ATM_CEMIC = 0xee
- DLT_JUNIPER_CHDLC = 0xb5
- DLT_JUNIPER_ES = 0x84
- DLT_JUNIPER_ETHER = 0xb2
- DLT_JUNIPER_FIBRECHANNEL = 0xea
- DLT_JUNIPER_FRELAY = 0xb4
- DLT_JUNIPER_GGSN = 0x85
- DLT_JUNIPER_ISM = 0xc2
- DLT_JUNIPER_MFR = 0x86
- DLT_JUNIPER_MLFR = 0x83
- DLT_JUNIPER_MLPPP = 0x82
- DLT_JUNIPER_MONITOR = 0xa4
- DLT_JUNIPER_PIC_PEER = 0xae
- DLT_JUNIPER_PPP = 0xb3
- DLT_JUNIPER_PPPOE = 0xa7
- DLT_JUNIPER_PPPOE_ATM = 0xa8
- DLT_JUNIPER_SERVICES = 0x88
- DLT_JUNIPER_SRX_E2E = 0xe9
- DLT_JUNIPER_ST = 0xc8
- DLT_JUNIPER_VP = 0xb7
- DLT_JUNIPER_VS = 0xe8
- DLT_LAPB_WITH_DIR = 0xcf
- DLT_LAPD = 0xcb
- DLT_LIN = 0xd4
- DLT_LINUX_EVDEV = 0xd8
- DLT_LINUX_IRDA = 0x90
- DLT_LINUX_LAPD = 0xb1
- DLT_LINUX_PPP_WITHDIRECTION = 0xa6
- DLT_LINUX_SLL = 0x71
- DLT_LOOP = 0x6c
- DLT_LTALK = 0x72
- DLT_MATCHING_MAX = 0x10a
- DLT_MATCHING_MIN = 0x68
- DLT_MFR = 0xb6
- DLT_MOST = 0xd3
- DLT_MPEG_2_TS = 0xf3
- DLT_MPLS = 0xdb
- DLT_MTP2 = 0x8c
- DLT_MTP2_WITH_PHDR = 0x8b
- DLT_MTP3 = 0x8d
- DLT_MUX27010 = 0xec
- DLT_NETANALYZER = 0xf0
- DLT_NETANALYZER_TRANSPARENT = 0xf1
- DLT_NFC_LLCP = 0xf5
- DLT_NFLOG = 0xef
- DLT_NG40 = 0xf4
- DLT_NULL = 0x0
- DLT_PCI_EXP = 0x7d
- DLT_PFLOG = 0x75
- DLT_PFSYNC = 0x12
- DLT_PPI = 0xc0
- DLT_PPP = 0x9
- DLT_PPP_BSDOS = 0x10
- DLT_PPP_ETHER = 0x33
- DLT_PPP_PPPD = 0xa6
- DLT_PPP_SERIAL = 0x32
- DLT_PPP_WITH_DIR = 0xcc
- DLT_PPP_WITH_DIRECTION = 0xa6
- DLT_PRISM_HEADER = 0x77
- DLT_PRONET = 0x4
- DLT_RAIF1 = 0xc6
- DLT_RAW = 0xc
- DLT_RIO = 0x7c
- DLT_SCCP = 0x8e
- DLT_SITA = 0xc4
- DLT_SLIP = 0x8
- DLT_SLIP_BSDOS = 0xf
- DLT_STANAG_5066_D_PDU = 0xed
- DLT_SUNATM = 0x7b
- DLT_SYMANTEC_FIREWALL = 0x63
- DLT_TZSP = 0x80
- DLT_USB = 0xba
- DLT_USB_DARWIN = 0x10a
- DLT_USB_LINUX = 0xbd
- DLT_USB_LINUX_MMAPPED = 0xdc
- DLT_USER0 = 0x93
- DLT_USER1 = 0x94
- DLT_USER10 = 0x9d
- DLT_USER11 = 0x9e
- DLT_USER12 = 0x9f
- DLT_USER13 = 0xa0
- DLT_USER14 = 0xa1
- DLT_USER15 = 0xa2
- DLT_USER2 = 0x95
- DLT_USER3 = 0x96
- DLT_USER4 = 0x97
- DLT_USER5 = 0x98
- DLT_USER6 = 0x99
- DLT_USER7 = 0x9a
- DLT_USER8 = 0x9b
- DLT_USER9 = 0x9c
- DLT_WIHART = 0xdf
- DLT_X2E_SERIAL = 0xd5
- DLT_X2E_XORAYA = 0xd6
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
- DT_FIFO = 0x1
- DT_LNK = 0xa
- DT_REG = 0x8
- DT_SOCK = 0xc
- DT_UNKNOWN = 0x0
- DT_WHT = 0xe
- ECHO = 0x8
- ECHOCTL = 0x40
- ECHOE = 0x2
- ECHOK = 0x4
- ECHOKE = 0x1
- ECHONL = 0x10
- ECHOPRT = 0x20
- EVFILT_AIO = -0x3
- EVFILT_EXCEPT = -0xf
- EVFILT_FS = -0x9
- EVFILT_MACHPORT = -0x8
- EVFILT_PROC = -0x5
- EVFILT_READ = -0x1
- EVFILT_SIGNAL = -0x6
- EVFILT_SYSCOUNT = 0x11
- EVFILT_THREADMARKER = 0x11
- EVFILT_TIMER = -0x7
- EVFILT_USER = -0xa
- EVFILT_VM = -0xc
- EVFILT_VNODE = -0x4
- EVFILT_WRITE = -0x2
- EV_ADD = 0x1
- EV_CLEAR = 0x20
- EV_DELETE = 0x2
- EV_DISABLE = 0x8
- EV_DISPATCH = 0x80
- EV_DISPATCH2 = 0x180
- EV_ENABLE = 0x4
- EV_EOF = 0x8000
- EV_ERROR = 0x4000
- EV_FLAG0 = 0x1000
- EV_FLAG1 = 0x2000
- EV_ONESHOT = 0x10
- EV_OOBAND = 0x2000
- EV_POLL = 0x1000
- EV_RECEIPT = 0x40
- EV_SYSFLAGS = 0xf000
- EV_UDATA_SPECIFIC = 0x100
- EV_VANISHED = 0x200
- EXTA = 0x4b00
- EXTB = 0x9600
- EXTPROC = 0x800
- FD_CLOEXEC = 0x1
- FD_SETSIZE = 0x400
- FF0 = 0x0
- FF1 = 0x4000
- FFDLY = 0x4000
- FLUSHO = 0x800000
- FSOPT_ATTR_CMN_EXTENDED = 0x20
- FSOPT_NOFOLLOW = 0x1
- FSOPT_NOINMEMUPDATE = 0x2
- FSOPT_PACK_INVAL_ATTRS = 0x8
- FSOPT_REPORT_FULLSIZE = 0x4
- FSOPT_RETURN_REALDEV = 0x200
- F_ADDFILESIGS = 0x3d
- F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
- F_ADDFILESIGS_INFO = 0x67
- F_ADDFILESIGS_RETURN = 0x61
- F_ADDFILESUPPL = 0x68
- F_ADDSIGS = 0x3b
- F_ALLOCATEALL = 0x4
- F_ALLOCATECONTIG = 0x2
- F_BARRIERFSYNC = 0x55
- F_CHECK_LV = 0x62
- F_CHKCLEAN = 0x29
- F_DUPFD = 0x0
- F_DUPFD_CLOEXEC = 0x43
- F_FINDSIGS = 0x4e
- F_FLUSH_DATA = 0x28
- F_FREEZE_FS = 0x35
- F_FULLFSYNC = 0x33
- F_GETCODEDIR = 0x48
- F_GETFD = 0x1
- F_GETFL = 0x3
- F_GETLK = 0x7
- F_GETLKPID = 0x42
- F_GETNOSIGPIPE = 0x4a
- F_GETOWN = 0x5
- F_GETPATH = 0x32
- F_GETPATH_MTMINFO = 0x47
- F_GETPATH_NOFIRMLINK = 0x66
- F_GETPROTECTIONCLASS = 0x3f
- F_GETPROTECTIONLEVEL = 0x4d
- F_GETSIGSINFO = 0x69
- F_GLOBAL_NOCACHE = 0x37
- F_LOG2PHYS = 0x31
- F_LOG2PHYS_EXT = 0x41
- F_NOCACHE = 0x30
- F_NODIRECT = 0x3e
- F_OK = 0x0
- F_PATHPKG_CHECK = 0x34
- F_PEOFPOSMODE = 0x3
- F_PREALLOCATE = 0x2a
- F_PUNCHHOLE = 0x63
- F_RDADVISE = 0x2c
- F_RDAHEAD = 0x2d
- F_RDLCK = 0x1
- F_SETBACKINGSTORE = 0x46
- F_SETFD = 0x2
- F_SETFL = 0x4
- F_SETLK = 0x8
- F_SETLKW = 0x9
- F_SETLKWTIMEOUT = 0xa
- F_SETNOSIGPIPE = 0x49
- F_SETOWN = 0x6
- F_SETPROTECTIONCLASS = 0x40
- F_SETSIZE = 0x2b
- F_SINGLE_WRITER = 0x4c
- F_SPECULATIVE_READ = 0x65
- F_THAW_FS = 0x36
- F_TRANSCODEKEY = 0x4b
- F_TRIM_ACTIVE_FILE = 0x64
- F_UNLCK = 0x2
- F_VOLPOSMODE = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
- HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
- IEXTEN = 0x400
- IFF_ALLMULTI = 0x200
- IFF_ALTPHYS = 0x4000
- IFF_BROADCAST = 0x2
- IFF_DEBUG = 0x4
- IFF_LINK0 = 0x1000
- IFF_LINK1 = 0x2000
- IFF_LINK2 = 0x4000
- IFF_LOOPBACK = 0x8
- IFF_MULTICAST = 0x8000
- IFF_NOARP = 0x80
- IFF_NOTRAILERS = 0x20
- IFF_OACTIVE = 0x400
- IFF_POINTOPOINT = 0x10
- IFF_PROMISC = 0x100
- IFF_RUNNING = 0x40
- IFF_SIMPLEX = 0x800
- IFF_UP = 0x1
- IFNAMSIZ = 0x10
- IFT_1822 = 0x2
- IFT_6LOWPAN = 0x40
- IFT_AAL5 = 0x31
- IFT_ARCNET = 0x23
- IFT_ARCNETPLUS = 0x24
- IFT_ATM = 0x25
- IFT_BRIDGE = 0xd1
- IFT_CARP = 0xf8
- IFT_CELLULAR = 0xff
- IFT_CEPT = 0x13
- IFT_DS3 = 0x1e
- IFT_ENC = 0xf4
- IFT_EON = 0x19
- IFT_ETHER = 0x6
- IFT_FAITH = 0x38
- IFT_FDDI = 0xf
- IFT_FRELAY = 0x20
- IFT_FRELAYDCE = 0x2c
- IFT_GIF = 0x37
- IFT_HDH1822 = 0x3
- IFT_HIPPI = 0x2f
- IFT_HSSI = 0x2e
- IFT_HY = 0xe
- IFT_IEEE1394 = 0x90
- IFT_IEEE8023ADLAG = 0x88
- IFT_ISDNBASIC = 0x14
- IFT_ISDNPRIMARY = 0x15
- IFT_ISO88022LLC = 0x29
- IFT_ISO88023 = 0x7
- IFT_ISO88024 = 0x8
- IFT_ISO88025 = 0x9
- IFT_ISO88026 = 0xa
- IFT_L2VLAN = 0x87
- IFT_LAPB = 0x10
- IFT_LOCALTALK = 0x2a
- IFT_LOOP = 0x18
- IFT_MIOX25 = 0x26
- IFT_MODEM = 0x30
- IFT_NSIP = 0x1b
- IFT_OTHER = 0x1
- IFT_P10 = 0xc
- IFT_P80 = 0xd
- IFT_PARA = 0x22
- IFT_PDP = 0xff
- IFT_PFLOG = 0xf5
- IFT_PFSYNC = 0xf6
- IFT_PKTAP = 0xfe
- IFT_PPP = 0x17
- IFT_PROPMUX = 0x36
- IFT_PROPVIRTUAL = 0x35
- IFT_PTPSERIAL = 0x16
- IFT_RS232 = 0x21
- IFT_SDLC = 0x11
- IFT_SIP = 0x1f
- IFT_SLIP = 0x1c
- IFT_SMDSDXI = 0x2b
- IFT_SMDSICIP = 0x34
- IFT_SONET = 0x27
- IFT_SONETPATH = 0x32
- IFT_SONETVT = 0x33
- IFT_STARLAN = 0xb
- IFT_STF = 0x39
- IFT_T1 = 0x12
- IFT_ULTRA = 0x1d
- IFT_V35 = 0x2d
- IFT_X25 = 0x5
- IFT_X25DDN = 0x4
- IFT_X25PLE = 0x28
- IFT_XETHER = 0x1a
- IGNBRK = 0x1
- IGNCR = 0x80
- IGNPAR = 0x4
- IMAXBEL = 0x2000
- INLCR = 0x40
- INPCK = 0x10
- IN_CLASSA_HOST = 0xffffff
- IN_CLASSA_MAX = 0x80
- IN_CLASSA_NET = 0xff000000
- IN_CLASSA_NSHIFT = 0x18
- IN_CLASSB_HOST = 0xffff
- IN_CLASSB_MAX = 0x10000
- IN_CLASSB_NET = 0xffff0000
- IN_CLASSB_NSHIFT = 0x10
- IN_CLASSC_HOST = 0xff
- IN_CLASSC_NET = 0xffffff00
- IN_CLASSC_NSHIFT = 0x8
- IN_CLASSD_HOST = 0xfffffff
- IN_CLASSD_NET = 0xf0000000
- IN_CLASSD_NSHIFT = 0x1c
- IN_LINKLOCALNETNUM = 0xa9fe0000
- IN_LOOPBACKNET = 0x7f
- IPPROTO_3PC = 0x22
- IPPROTO_ADFS = 0x44
- IPPROTO_AH = 0x33
- IPPROTO_AHIP = 0x3d
- IPPROTO_APES = 0x63
- IPPROTO_ARGUS = 0xd
- IPPROTO_AX25 = 0x5d
- IPPROTO_BHA = 0x31
- IPPROTO_BLT = 0x1e
- IPPROTO_BRSATMON = 0x4c
- IPPROTO_CFTP = 0x3e
- IPPROTO_CHAOS = 0x10
- IPPROTO_CMTP = 0x26
- IPPROTO_CPHB = 0x49
- IPPROTO_CPNX = 0x48
- IPPROTO_DDP = 0x25
- IPPROTO_DGP = 0x56
- IPPROTO_DIVERT = 0xfe
- IPPROTO_DONE = 0x101
- IPPROTO_DSTOPTS = 0x3c
- IPPROTO_EGP = 0x8
- IPPROTO_EMCON = 0xe
- IPPROTO_ENCAP = 0x62
- IPPROTO_EON = 0x50
- IPPROTO_ESP = 0x32
- IPPROTO_ETHERIP = 0x61
- IPPROTO_FRAGMENT = 0x2c
- IPPROTO_GGP = 0x3
- IPPROTO_GMTP = 0x64
- IPPROTO_GRE = 0x2f
- IPPROTO_HELLO = 0x3f
- IPPROTO_HMP = 0x14
- IPPROTO_HOPOPTS = 0x0
- IPPROTO_ICMP = 0x1
- IPPROTO_ICMPV6 = 0x3a
- IPPROTO_IDP = 0x16
- IPPROTO_IDPR = 0x23
- IPPROTO_IDRP = 0x2d
- IPPROTO_IGMP = 0x2
- IPPROTO_IGP = 0x55
- IPPROTO_IGRP = 0x58
- IPPROTO_IL = 0x28
- IPPROTO_INLSP = 0x34
- IPPROTO_INP = 0x20
- IPPROTO_IP = 0x0
- IPPROTO_IPCOMP = 0x6c
- IPPROTO_IPCV = 0x47
- IPPROTO_IPEIP = 0x5e
- IPPROTO_IPIP = 0x4
- IPPROTO_IPPC = 0x43
- IPPROTO_IPV4 = 0x4
- IPPROTO_IPV6 = 0x29
- IPPROTO_IRTP = 0x1c
- IPPROTO_KRYPTOLAN = 0x41
- IPPROTO_LARP = 0x5b
- IPPROTO_LEAF1 = 0x19
- IPPROTO_LEAF2 = 0x1a
- IPPROTO_MAX = 0x100
- IPPROTO_MAXID = 0x34
- IPPROTO_MEAS = 0x13
- IPPROTO_MHRP = 0x30
- IPPROTO_MICP = 0x5f
- IPPROTO_MTP = 0x5c
- IPPROTO_MUX = 0x12
- IPPROTO_ND = 0x4d
- IPPROTO_NHRP = 0x36
- IPPROTO_NONE = 0x3b
- IPPROTO_NSP = 0x1f
- IPPROTO_NVPII = 0xb
- IPPROTO_OSPFIGP = 0x59
- IPPROTO_PGM = 0x71
- IPPROTO_PIGP = 0x9
- IPPROTO_PIM = 0x67
- IPPROTO_PRM = 0x15
- IPPROTO_PUP = 0xc
- IPPROTO_PVP = 0x4b
- IPPROTO_RAW = 0xff
- IPPROTO_RCCMON = 0xa
- IPPROTO_RDP = 0x1b
- IPPROTO_ROUTING = 0x2b
- IPPROTO_RSVP = 0x2e
- IPPROTO_RVD = 0x42
- IPPROTO_SATEXPAK = 0x40
- IPPROTO_SATMON = 0x45
- IPPROTO_SCCSP = 0x60
- IPPROTO_SCTP = 0x84
- IPPROTO_SDRP = 0x2a
- IPPROTO_SEP = 0x21
- IPPROTO_SRPC = 0x5a
- IPPROTO_ST = 0x7
- IPPROTO_SVMTP = 0x52
- IPPROTO_SWIPE = 0x35
- IPPROTO_TCF = 0x57
- IPPROTO_TCP = 0x6
- IPPROTO_TP = 0x1d
- IPPROTO_TPXX = 0x27
- IPPROTO_TRUNK1 = 0x17
- IPPROTO_TRUNK2 = 0x18
- IPPROTO_TTP = 0x54
- IPPROTO_UDP = 0x11
- IPPROTO_VINES = 0x53
- IPPROTO_VISA = 0x46
- IPPROTO_VMTP = 0x51
- IPPROTO_WBEXPAK = 0x4f
- IPPROTO_WBMON = 0x4e
- IPPROTO_WSN = 0x4a
- IPPROTO_XNET = 0xf
- IPPROTO_XTP = 0x24
- IPV6_2292DSTOPTS = 0x17
- IPV6_2292HOPLIMIT = 0x14
- IPV6_2292HOPOPTS = 0x16
- IPV6_2292NEXTHOP = 0x15
- IPV6_2292PKTINFO = 0x13
- IPV6_2292PKTOPTIONS = 0x19
- IPV6_2292RTHDR = 0x18
- IPV6_3542DSTOPTS = 0x32
- IPV6_3542HOPLIMIT = 0x2f
- IPV6_3542HOPOPTS = 0x31
- IPV6_3542NEXTHOP = 0x30
- IPV6_3542PKTINFO = 0x2e
- IPV6_3542RTHDR = 0x33
- IPV6_ADDR_MC_FLAGS_PREFIX = 0x20
- IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10
- IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30
- IPV6_AUTOFLOWLABEL = 0x3b
- IPV6_BINDV6ONLY = 0x1b
- IPV6_BOUND_IF = 0x7d
- IPV6_CHECKSUM = 0x1a
- IPV6_DEFAULT_MULTICAST_HOPS = 0x1
- IPV6_DEFAULT_MULTICAST_LOOP = 0x1
- IPV6_DEFHLIM = 0x40
- IPV6_DONTFRAG = 0x3e
- IPV6_DSTOPTS = 0x32
- IPV6_FAITH = 0x1d
- IPV6_FLOWINFO_MASK = 0xffffff0f
- IPV6_FLOWLABEL_MASK = 0xffff0f00
- IPV6_FLOW_ECN_MASK = 0x3000
- IPV6_FRAGTTL = 0x3c
- IPV6_FW_ADD = 0x1e
- IPV6_FW_DEL = 0x1f
- IPV6_FW_FLUSH = 0x20
- IPV6_FW_GET = 0x22
- IPV6_FW_ZERO = 0x21
- IPV6_HLIMDEC = 0x1
- IPV6_HOPLIMIT = 0x2f
- IPV6_HOPOPTS = 0x31
- IPV6_IPSEC_POLICY = 0x1c
- IPV6_JOIN_GROUP = 0xc
- IPV6_LEAVE_GROUP = 0xd
- IPV6_MAXHLIM = 0xff
- IPV6_MAXOPTHDR = 0x800
- IPV6_MAXPACKET = 0xffff
- IPV6_MAX_GROUP_SRC_FILTER = 0x200
- IPV6_MAX_MEMBERSHIPS = 0xfff
- IPV6_MAX_SOCK_SRC_FILTER = 0x80
- IPV6_MIN_MEMBERSHIPS = 0x1f
- IPV6_MMTU = 0x500
- IPV6_MSFILTER = 0x4a
- IPV6_MULTICAST_HOPS = 0xa
- IPV6_MULTICAST_IF = 0x9
- IPV6_MULTICAST_LOOP = 0xb
- IPV6_NEXTHOP = 0x30
- IPV6_PATHMTU = 0x2c
- IPV6_PKTINFO = 0x2e
- IPV6_PORTRANGE = 0xe
- IPV6_PORTRANGE_DEFAULT = 0x0
- IPV6_PORTRANGE_HIGH = 0x1
- IPV6_PORTRANGE_LOW = 0x2
- IPV6_PREFER_TEMPADDR = 0x3f
- IPV6_RECVDSTOPTS = 0x28
- IPV6_RECVHOPLIMIT = 0x25
- IPV6_RECVHOPOPTS = 0x27
- IPV6_RECVPATHMTU = 0x2b
- IPV6_RECVPKTINFO = 0x3d
- IPV6_RECVRTHDR = 0x26
- IPV6_RECVTCLASS = 0x23
- IPV6_RTHDR = 0x33
- IPV6_RTHDRDSTOPTS = 0x39
- IPV6_RTHDR_LOOSE = 0x0
- IPV6_RTHDR_STRICT = 0x1
- IPV6_RTHDR_TYPE_0 = 0x0
- IPV6_SOCKOPT_RESERVED1 = 0x3
- IPV6_TCLASS = 0x24
- IPV6_UNICAST_HOPS = 0x4
- IPV6_USE_MIN_MTU = 0x2a
- IPV6_V6ONLY = 0x1b
- IPV6_VERSION = 0x60
- IPV6_VERSION_MASK = 0xf0
- IP_ADD_MEMBERSHIP = 0xc
- IP_ADD_SOURCE_MEMBERSHIP = 0x46
- IP_BLOCK_SOURCE = 0x48
- IP_BOUND_IF = 0x19
- IP_DEFAULT_MULTICAST_LOOP = 0x1
- IP_DEFAULT_MULTICAST_TTL = 0x1
- IP_DF = 0x4000
- IP_DONTFRAG = 0x1c
- IP_DROP_MEMBERSHIP = 0xd
- IP_DROP_SOURCE_MEMBERSHIP = 0x47
- IP_DUMMYNET_CONFIGURE = 0x3c
- IP_DUMMYNET_DEL = 0x3d
- IP_DUMMYNET_FLUSH = 0x3e
- IP_DUMMYNET_GET = 0x40
- IP_FAITH = 0x16
- IP_FW_ADD = 0x28
- IP_FW_DEL = 0x29
- IP_FW_FLUSH = 0x2a
- IP_FW_GET = 0x2c
- IP_FW_RESETLOG = 0x2d
- IP_FW_ZERO = 0x2b
- IP_HDRINCL = 0x2
- IP_IPSEC_POLICY = 0x15
- IP_MAXPACKET = 0xffff
- IP_MAX_GROUP_SRC_FILTER = 0x200
- IP_MAX_MEMBERSHIPS = 0xfff
- IP_MAX_SOCK_MUTE_FILTER = 0x80
- IP_MAX_SOCK_SRC_FILTER = 0x80
- IP_MF = 0x2000
- IP_MIN_MEMBERSHIPS = 0x1f
- IP_MSFILTER = 0x4a
- IP_MSS = 0x240
- IP_MULTICAST_IF = 0x9
- IP_MULTICAST_IFINDEX = 0x42
- IP_MULTICAST_LOOP = 0xb
- IP_MULTICAST_TTL = 0xa
- IP_MULTICAST_VIF = 0xe
- IP_NAT__XXX = 0x37
- IP_OFFMASK = 0x1fff
- IP_OLD_FW_ADD = 0x32
- IP_OLD_FW_DEL = 0x33
- IP_OLD_FW_FLUSH = 0x34
- IP_OLD_FW_GET = 0x36
- IP_OLD_FW_RESETLOG = 0x38
- IP_OLD_FW_ZERO = 0x35
- IP_OPTIONS = 0x1
- IP_PKTINFO = 0x1a
- IP_PORTRANGE = 0x13
- IP_PORTRANGE_DEFAULT = 0x0
- IP_PORTRANGE_HIGH = 0x1
- IP_PORTRANGE_LOW = 0x2
- IP_RECVDSTADDR = 0x7
- IP_RECVIF = 0x14
- IP_RECVOPTS = 0x5
- IP_RECVPKTINFO = 0x1a
- IP_RECVRETOPTS = 0x6
- IP_RECVTOS = 0x1b
- IP_RECVTTL = 0x18
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
- IP_RSVP_OFF = 0x10
- IP_RSVP_ON = 0xf
- IP_RSVP_VIF_OFF = 0x12
- IP_RSVP_VIF_ON = 0x11
- IP_STRIPHDR = 0x17
- IP_TOS = 0x3
- IP_TRAFFIC_MGT_BACKGROUND = 0x41
- IP_TTL = 0x4
- IP_UNBLOCK_SOURCE = 0x49
- ISIG = 0x80
- ISTRIP = 0x20
- IUTF8 = 0x4000
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
- KERN_HOSTNAME = 0xa
- KERN_OSRELEASE = 0x2
- KERN_OSTYPE = 0x1
- KERN_VERSION = 0x4
- LOCAL_PEERCRED = 0x1
- LOCAL_PEEREPID = 0x3
- LOCAL_PEEREUUID = 0x5
- LOCAL_PEERPID = 0x2
- LOCAL_PEERTOKEN = 0x6
- LOCAL_PEERUUID = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
- LOCK_UN = 0x8
- MADV_CAN_REUSE = 0x9
- MADV_DONTNEED = 0x4
- MADV_FREE = 0x5
- MADV_FREE_REUSABLE = 0x7
- MADV_FREE_REUSE = 0x8
- MADV_NORMAL = 0x0
- MADV_PAGEOUT = 0xa
- MADV_RANDOM = 0x1
- MADV_SEQUENTIAL = 0x2
- MADV_WILLNEED = 0x3
- MADV_ZERO_WIRED_PAGES = 0x6
- MAP_32BIT = 0x8000
- MAP_ANON = 0x1000
- MAP_ANONYMOUS = 0x1000
- MAP_COPY = 0x2
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
- MAP_HASSEMAPHORE = 0x200
- MAP_JIT = 0x800
- MAP_NOCACHE = 0x400
- MAP_NOEXTEND = 0x100
- MAP_NORESERVE = 0x40
- MAP_PRIVATE = 0x2
- MAP_RENAME = 0x20
- MAP_RESERVED0080 = 0x80
- MAP_RESILIENT_CODESIGN = 0x2000
- MAP_RESILIENT_MEDIA = 0x4000
- MAP_SHARED = 0x1
- MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000
- MAP_UNIX03 = 0x40000
- MCAST_BLOCK_SOURCE = 0x54
- MCAST_EXCLUDE = 0x2
- MCAST_INCLUDE = 0x1
- MCAST_JOIN_GROUP = 0x50
- MCAST_JOIN_SOURCE_GROUP = 0x52
- MCAST_LEAVE_GROUP = 0x51
- MCAST_LEAVE_SOURCE_GROUP = 0x53
- MCAST_UNBLOCK_SOURCE = 0x55
- MCAST_UNDEFINED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
- MNT_ASYNC = 0x40
- MNT_AUTOMOUNTED = 0x400000
- MNT_CMDFLAGS = 0xf0000
- MNT_CPROTECT = 0x80
- MNT_DEFWRITE = 0x2000000
- MNT_DONTBROWSE = 0x100000
- MNT_DOVOLFS = 0x8000
- MNT_DWAIT = 0x4
- MNT_EXPORTED = 0x100
- MNT_EXT_ROOT_DATA_VOL = 0x1
- MNT_FORCE = 0x80000
- MNT_IGNORE_OWNERSHIP = 0x200000
- MNT_JOURNALED = 0x800000
- MNT_LOCAL = 0x1000
- MNT_MULTILABEL = 0x4000000
- MNT_NOATIME = 0x10000000
- MNT_NOBLOCK = 0x20000
- MNT_NODEV = 0x10
- MNT_NOEXEC = 0x4
- MNT_NOSUID = 0x8
- MNT_NOUSERXATTR = 0x1000000
- MNT_NOWAIT = 0x2
- MNT_QUARANTINE = 0x400
- MNT_QUOTA = 0x2000
- MNT_RDONLY = 0x1
- MNT_RELOAD = 0x40000
- MNT_REMOVABLE = 0x200
- MNT_ROOTFS = 0x4000
- MNT_SNAPSHOT = 0x40000000
- MNT_STRICTATIME = 0x80000000
- MNT_SYNCHRONOUS = 0x2
- MNT_UNION = 0x20
- MNT_UNKNOWNPERMISSIONS = 0x200000
- MNT_UPDATE = 0x10000
- MNT_VISFLAGMASK = 0xd7f0f7ff
- MNT_WAIT = 0x1
- MSG_CTRUNC = 0x20
- MSG_DONTROUTE = 0x4
- MSG_DONTWAIT = 0x80
- MSG_EOF = 0x100
- MSG_EOR = 0x8
- MSG_FLUSH = 0x400
- MSG_HAVEMORE = 0x2000
- MSG_HOLD = 0x800
- MSG_NEEDSA = 0x10000
- MSG_NOSIGNAL = 0x80000
- MSG_OOB = 0x1
- MSG_PEEK = 0x2
- MSG_RCVMORE = 0x4000
- MSG_SEND = 0x1000
- MSG_TRUNC = 0x10
- MSG_WAITALL = 0x40
- MSG_WAITSTREAM = 0x200
- MS_ASYNC = 0x1
- MS_DEACTIVATE = 0x8
- MS_INVALIDATE = 0x2
- MS_KILLPAGES = 0x4
- MS_SYNC = 0x10
- NAME_MAX = 0xff
- NET_RT_DUMP = 0x1
- NET_RT_DUMP2 = 0x7
- NET_RT_FLAGS = 0x2
- NET_RT_FLAGS_PRIV = 0xa
- NET_RT_IFLIST = 0x3
- NET_RT_IFLIST2 = 0x6
- NET_RT_MAXID = 0xb
- NET_RT_STAT = 0x4
- NET_RT_TRASH = 0x5
- NFDBITS = 0x20
- NL0 = 0x0
- NL1 = 0x100
- NL2 = 0x200
- NL3 = 0x300
- NLDLY = 0x300
- NOFLSH = 0x80000000
- NOKERNINFO = 0x2000000
- NOTE_ABSOLUTE = 0x8
- NOTE_ATTRIB = 0x8
- NOTE_BACKGROUND = 0x40
- NOTE_CHILD = 0x4
- NOTE_CRITICAL = 0x20
- NOTE_DELETE = 0x1
- NOTE_EXEC = 0x20000000
- NOTE_EXIT = 0x80000000
- NOTE_EXITSTATUS = 0x4000000
- NOTE_EXIT_CSERROR = 0x40000
- NOTE_EXIT_DECRYPTFAIL = 0x10000
- NOTE_EXIT_DETAIL = 0x2000000
- NOTE_EXIT_DETAIL_MASK = 0x70000
- NOTE_EXIT_MEMORY = 0x20000
- NOTE_EXIT_REPARENTED = 0x80000
- NOTE_EXTEND = 0x4
- NOTE_FFAND = 0x40000000
- NOTE_FFCOPY = 0xc0000000
- NOTE_FFCTRLMASK = 0xc0000000
- NOTE_FFLAGSMASK = 0xffffff
- NOTE_FFNOP = 0x0
- NOTE_FFOR = 0x80000000
- NOTE_FORK = 0x40000000
- NOTE_FUNLOCK = 0x100
- NOTE_LEEWAY = 0x10
- NOTE_LINK = 0x10
- NOTE_LOWAT = 0x1
- NOTE_MACHTIME = 0x100
- NOTE_MACH_CONTINUOUS_TIME = 0x80
- NOTE_NONE = 0x80
- NOTE_NSECONDS = 0x4
- NOTE_OOB = 0x2
- NOTE_PCTRLMASK = -0x100000
- NOTE_PDATAMASK = 0xfffff
- NOTE_REAP = 0x10000000
- NOTE_RENAME = 0x20
- NOTE_REVOKE = 0x40
- NOTE_SECONDS = 0x1
- NOTE_SIGNAL = 0x8000000
- NOTE_TRACK = 0x1
- NOTE_TRACKERR = 0x2
- NOTE_TRIGGER = 0x1000000
- NOTE_USECONDS = 0x2
- NOTE_VM_ERROR = 0x10000000
- NOTE_VM_PRESSURE = 0x80000000
- NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000
- NOTE_VM_PRESSURE_TERMINATE = 0x40000000
- NOTE_WRITE = 0x2
- OCRNL = 0x10
- OFDEL = 0x20000
- OFILL = 0x80
- ONLCR = 0x2
- ONLRET = 0x40
- ONOCR = 0x20
- ONOEOT = 0x8
- OPOST = 0x1
- OXTABS = 0x4
- O_ACCMODE = 0x3
- O_ALERT = 0x20000000
- O_APPEND = 0x8
- O_ASYNC = 0x40
- O_CLOEXEC = 0x1000000
- O_CREAT = 0x200
- O_DIRECTORY = 0x100000
- O_DP_GETRAWENCRYPTED = 0x1
- O_DP_GETRAWUNENCRYPTED = 0x2
- O_DSYNC = 0x400000
- O_EVTONLY = 0x8000
- O_EXCL = 0x800
- O_EXLOCK = 0x20
- O_FSYNC = 0x80
- O_NDELAY = 0x4
- O_NOCTTY = 0x20000
- O_NOFOLLOW = 0x100
- O_NOFOLLOW_ANY = 0x20000000
- O_NONBLOCK = 0x4
- O_POPUP = 0x80000000
- O_RDONLY = 0x0
- O_RDWR = 0x2
- O_SHLOCK = 0x10
- O_SYMLINK = 0x200000
- O_SYNC = 0x80
- O_TRUNC = 0x400
- O_WRONLY = 0x1
- PARENB = 0x1000
- PARMRK = 0x8
- PARODD = 0x2000
- PENDIN = 0x20000000
- PRIO_PGRP = 0x1
- PRIO_PROCESS = 0x0
- PRIO_USER = 0x2
- PROT_EXEC = 0x4
- PROT_NONE = 0x0
- PROT_READ = 0x1
- PROT_WRITE = 0x2
- PT_ATTACH = 0xa
- PT_ATTACHEXC = 0xe
- PT_CONTINUE = 0x7
- PT_DENY_ATTACH = 0x1f
- PT_DETACH = 0xb
- PT_FIRSTMACH = 0x20
- PT_FORCEQUOTA = 0x1e
- PT_KILL = 0x8
- PT_READ_D = 0x2
- PT_READ_I = 0x1
- PT_READ_U = 0x3
- PT_SIGEXC = 0xc
- PT_STEP = 0x9
- PT_THUPDATE = 0xd
- PT_TRACE_ME = 0x0
- PT_WRITE_D = 0x5
- PT_WRITE_I = 0x4
- PT_WRITE_U = 0x6
- RLIMIT_AS = 0x5
- RLIMIT_CORE = 0x4
- RLIMIT_CPU = 0x0
- RLIMIT_CPU_USAGE_MONITOR = 0x2
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
- RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
- RLIMIT_NPROC = 0x7
- RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
- RTAX_BRD = 0x7
- RTAX_DST = 0x0
- RTAX_GATEWAY = 0x1
- RTAX_GENMASK = 0x3
- RTAX_IFA = 0x5
- RTAX_IFP = 0x4
- RTAX_MAX = 0x8
- RTAX_NETMASK = 0x2
- RTA_AUTHOR = 0x40
- RTA_BRD = 0x80
- RTA_DST = 0x1
- RTA_GATEWAY = 0x2
- RTA_GENMASK = 0x8
- RTA_IFA = 0x20
- RTA_IFP = 0x10
- RTA_NETMASK = 0x4
- RTF_BLACKHOLE = 0x1000
- RTF_BROADCAST = 0x400000
- RTF_CLONING = 0x100
- RTF_CONDEMNED = 0x2000000
- RTF_DEAD = 0x20000000
- RTF_DELCLONE = 0x80
- RTF_DONE = 0x40
- RTF_DYNAMIC = 0x10
- RTF_GATEWAY = 0x2
- RTF_GLOBAL = 0x40000000
- RTF_HOST = 0x4
- RTF_IFREF = 0x4000000
- RTF_IFSCOPE = 0x1000000
- RTF_LLDATA = 0x400
- RTF_LLINFO = 0x400
- RTF_LOCAL = 0x200000
- RTF_MODIFIED = 0x20
- RTF_MULTICAST = 0x800000
- RTF_NOIFREF = 0x2000
- RTF_PINNED = 0x100000
- RTF_PRCLONING = 0x10000
- RTF_PROTO1 = 0x8000
- RTF_PROTO2 = 0x4000
- RTF_PROTO3 = 0x40000
- RTF_PROXY = 0x8000000
- RTF_REJECT = 0x8
- RTF_ROUTER = 0x10000000
- RTF_STATIC = 0x800
- RTF_UP = 0x1
- RTF_WASCLONED = 0x20000
- RTF_XRESOLVE = 0x200
- RTM_ADD = 0x1
- RTM_CHANGE = 0x3
- RTM_DELADDR = 0xd
- RTM_DELETE = 0x2
- RTM_DELMADDR = 0x10
- RTM_GET = 0x4
- RTM_GET2 = 0x14
- RTM_IFINFO = 0xe
- RTM_IFINFO2 = 0x12
- RTM_LOCK = 0x8
- RTM_LOSING = 0x5
- RTM_MISS = 0x7
- RTM_NEWADDR = 0xc
- RTM_NEWMADDR = 0xf
- RTM_NEWMADDR2 = 0x13
- RTM_OLDADD = 0x9
- RTM_OLDDEL = 0xa
- RTM_REDIRECT = 0x6
- RTM_RESOLVE = 0xb
- RTM_RTTUNIT = 0xf4240
- RTM_VERSION = 0x5
- RTV_EXPIRE = 0x4
- RTV_HOPCOUNT = 0x2
- RTV_MTU = 0x1
- RTV_RPIPE = 0x8
- RTV_RTT = 0x40
- RTV_RTTVAR = 0x80
- RTV_SPIPE = 0x10
- RTV_SSTHRESH = 0x20
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
- SCM_CREDS = 0x3
- SCM_RIGHTS = 0x1
- SCM_TIMESTAMP = 0x2
- SCM_TIMESTAMP_MONOTONIC = 0x4
- SEEK_CUR = 0x1
- SEEK_DATA = 0x4
- SEEK_END = 0x2
- SEEK_HOLE = 0x3
- SEEK_SET = 0x0
- SHUT_RD = 0x0
- SHUT_RDWR = 0x2
- SHUT_WR = 0x1
- SIOCADDMULTI = 0x80206931
- SIOCAIFADDR = 0x8040691a
- SIOCARPIPLL = 0xc0206928
- SIOCATMARK = 0x40047307
- SIOCAUTOADDR = 0xc0206926
- SIOCAUTONETMASK = 0x80206927
- SIOCDELMULTI = 0x80206932
- SIOCDIFADDR = 0x80206919
- SIOCDIFPHYADDR = 0x80206941
- SIOCGDRVSPEC = 0xc028697b
- SIOCGETVLAN = 0xc020697f
- SIOCGHIWAT = 0x40047301
- SIOCGIF6LOWPAN = 0xc02069c5
- SIOCGIFADDR = 0xc0206921
- SIOCGIFALTMTU = 0xc0206948
- SIOCGIFASYNCMAP = 0xc020697c
- SIOCGIFBOND = 0xc0206947
- SIOCGIFBRDADDR = 0xc0206923
- SIOCGIFCAP = 0xc020695b
- SIOCGIFCONF = 0xc00c6924
- SIOCGIFDEVMTU = 0xc0206944
- SIOCGIFDSTADDR = 0xc0206922
- SIOCGIFFLAGS = 0xc0206911
- SIOCGIFFUNCTIONALTYPE = 0xc02069ad
- SIOCGIFGENERIC = 0xc020693a
- SIOCGIFKPI = 0xc0206987
- SIOCGIFMAC = 0xc0206982
- SIOCGIFMEDIA = 0xc02c6938
- SIOCGIFMETRIC = 0xc0206917
- SIOCGIFMTU = 0xc0206933
- SIOCGIFNETMASK = 0xc0206925
- SIOCGIFPDSTADDR = 0xc0206940
- SIOCGIFPHYS = 0xc0206935
- SIOCGIFPSRCADDR = 0xc020693f
- SIOCGIFSTATUS = 0xc331693d
- SIOCGIFVLAN = 0xc020697f
- SIOCGIFWAKEFLAGS = 0xc0206988
- SIOCGIFXMEDIA = 0xc02c6948
- SIOCGLOWAT = 0x40047303
- SIOCGPGRP = 0x40047309
- SIOCIFCREATE = 0xc0206978
- SIOCIFCREATE2 = 0xc020697a
- SIOCIFDESTROY = 0x80206979
- SIOCIFGCLONERS = 0xc0106981
- SIOCRSLVMULTI = 0xc010693b
- SIOCSDRVSPEC = 0x8028697b
- SIOCSETVLAN = 0x8020697e
- SIOCSHIWAT = 0x80047300
- SIOCSIF6LOWPAN = 0x802069c4
- SIOCSIFADDR = 0x8020690c
- SIOCSIFALTMTU = 0x80206945
- SIOCSIFASYNCMAP = 0x8020697d
- SIOCSIFBOND = 0x80206946
- SIOCSIFBRDADDR = 0x80206913
- SIOCSIFCAP = 0x8020695a
- SIOCSIFDSTADDR = 0x8020690e
- SIOCSIFFLAGS = 0x80206910
- SIOCSIFGENERIC = 0x80206939
- SIOCSIFKPI = 0x80206986
- SIOCSIFLLADDR = 0x8020693c
- SIOCSIFMAC = 0x80206983
- SIOCSIFMEDIA = 0xc0206937
- SIOCSIFMETRIC = 0x80206918
- SIOCSIFMTU = 0x80206934
- SIOCSIFNETMASK = 0x80206916
- SIOCSIFPHYADDR = 0x8040693e
- SIOCSIFPHYS = 0x80206936
- SIOCSIFVLAN = 0x8020697e
- SIOCSLOWAT = 0x80047302
- SIOCSPGRP = 0x80047308
- SOCK_DGRAM = 0x2
- SOCK_MAXADDRLEN = 0xff
- SOCK_RAW = 0x3
- SOCK_RDM = 0x4
- SOCK_SEQPACKET = 0x5
- SOCK_STREAM = 0x1
- SOL_LOCAL = 0x0
- SOL_SOCKET = 0xffff
- SOMAXCONN = 0x80
- SO_ACCEPTCONN = 0x2
- SO_BROADCAST = 0x20
- SO_DEBUG = 0x1
- SO_DONTROUTE = 0x10
- SO_DONTTRUNC = 0x2000
- SO_ERROR = 0x1007
- SO_KEEPALIVE = 0x8
- SO_LABEL = 0x1010
- SO_LINGER = 0x80
- SO_LINGER_SEC = 0x1080
- SO_NETSVC_MARKING_LEVEL = 0x1119
- SO_NET_SERVICE_TYPE = 0x1116
- SO_NKE = 0x1021
- SO_NOADDRERR = 0x1023
- SO_NOSIGPIPE = 0x1022
- SO_NOTIFYCONFLICT = 0x1026
- SO_NP_EXTENSIONS = 0x1083
- SO_NREAD = 0x1020
- SO_NUMRCVPKT = 0x1112
- SO_NWRITE = 0x1024
- SO_OOBINLINE = 0x100
- SO_PEERLABEL = 0x1011
- SO_RANDOMPORT = 0x1082
- SO_RCVBUF = 0x1002
- SO_RCVLOWAT = 0x1004
- SO_RCVTIMEO = 0x1006
- SO_REUSEADDR = 0x4
- SO_REUSEPORT = 0x200
- SO_REUSESHAREUID = 0x1025
- SO_SNDBUF = 0x1001
- SO_SNDLOWAT = 0x1003
- SO_SNDTIMEO = 0x1005
- SO_TIMESTAMP = 0x400
- SO_TIMESTAMP_MONOTONIC = 0x800
- SO_TYPE = 0x1008
- SO_UPCALLCLOSEWAIT = 0x1027
- SO_USELOOPBACK = 0x40
- SO_WANTMORE = 0x4000
- SO_WANTOOBFLAG = 0x8000
- S_IEXEC = 0x40
- S_IFBLK = 0x6000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFIFO = 0x1000
- S_IFLNK = 0xa000
- S_IFMT = 0xf000
- S_IFREG = 0x8000
- S_IFSOCK = 0xc000
- S_IFWHT = 0xe000
- S_IREAD = 0x100
- S_IRGRP = 0x20
- S_IROTH = 0x4
- S_IRUSR = 0x100
- S_IRWXG = 0x38
- S_IRWXO = 0x7
- S_IRWXU = 0x1c0
- S_ISGID = 0x400
- S_ISTXT = 0x200
- S_ISUID = 0x800
- S_ISVTX = 0x200
- S_IWGRP = 0x10
- S_IWOTH = 0x2
- S_IWRITE = 0x80
- S_IWUSR = 0x80
- S_IXGRP = 0x8
- S_IXOTH = 0x1
- S_IXUSR = 0x40
- TAB0 = 0x0
- TAB1 = 0x400
- TAB2 = 0x800
- TAB3 = 0x4
- TABDLY = 0xc04
- TCIFLUSH = 0x1
- TCIOFF = 0x3
- TCIOFLUSH = 0x3
- TCION = 0x4
- TCOFLUSH = 0x2
- TCOOFF = 0x1
- TCOON = 0x2
- TCP_CONNECTIONTIMEOUT = 0x20
- TCP_CONNECTION_INFO = 0x106
- TCP_ENABLE_ECN = 0x104
- TCP_FASTOPEN = 0x105
- TCP_KEEPALIVE = 0x10
- TCP_KEEPCNT = 0x102
- TCP_KEEPINTVL = 0x101
- TCP_MAXHLEN = 0x3c
- TCP_MAXOLEN = 0x28
- TCP_MAXSEG = 0x2
- TCP_MAXWIN = 0xffff
- TCP_MAX_SACK = 0x4
- TCP_MAX_WINSHIFT = 0xe
- TCP_MINMSS = 0xd8
- TCP_MSS = 0x200
- TCP_NODELAY = 0x1
- TCP_NOOPT = 0x8
- TCP_NOPUSH = 0x4
- TCP_NOTSENT_LOWAT = 0x201
- TCP_RXT_CONNDROPTIME = 0x80
- TCP_RXT_FINDROP = 0x100
- TCP_SENDMOREACKS = 0x103
- TCSAFLUSH = 0x2
- TIOCCBRK = 0x2000747a
- TIOCCDTR = 0x20007478
- TIOCCONS = 0x80047462
- TIOCDCDTIMESTAMP = 0x40107458
- TIOCDRAIN = 0x2000745e
- TIOCDSIMICROCODE = 0x20007455
- TIOCEXCL = 0x2000740d
- TIOCEXT = 0x80047460
- TIOCFLUSH = 0x80047410
- TIOCGDRAINWAIT = 0x40047456
- TIOCGETA = 0x40487413
- TIOCGETD = 0x4004741a
- TIOCGPGRP = 0x40047477
- TIOCGWINSZ = 0x40087468
- TIOCIXOFF = 0x20007480
- TIOCIXON = 0x20007481
- TIOCMBIC = 0x8004746b
- TIOCMBIS = 0x8004746c
- TIOCMGDTRWAIT = 0x4004745a
- TIOCMGET = 0x4004746a
- TIOCMODG = 0x40047403
- TIOCMODS = 0x80047404
- TIOCMSDTRWAIT = 0x8004745b
- TIOCMSET = 0x8004746d
- TIOCM_CAR = 0x40
- TIOCM_CD = 0x40
- TIOCM_CTS = 0x20
- TIOCM_DSR = 0x100
- TIOCM_DTR = 0x2
- TIOCM_LE = 0x1
- TIOCM_RI = 0x80
- TIOCM_RNG = 0x80
- TIOCM_RTS = 0x4
- TIOCM_SR = 0x10
- TIOCM_ST = 0x8
- TIOCNOTTY = 0x20007471
- TIOCNXCL = 0x2000740e
- TIOCOUTQ = 0x40047473
- TIOCPKT = 0x80047470
- TIOCPKT_DATA = 0x0
- TIOCPKT_DOSTOP = 0x20
- TIOCPKT_FLUSHREAD = 0x1
- TIOCPKT_FLUSHWRITE = 0x2
- TIOCPKT_IOCTL = 0x40
- TIOCPKT_NOSTOP = 0x10
- TIOCPKT_START = 0x8
- TIOCPKT_STOP = 0x4
- TIOCPTYGNAME = 0x40807453
- TIOCPTYGRANT = 0x20007454
- TIOCPTYUNLK = 0x20007452
- TIOCREMOTE = 0x80047469
- TIOCSBRK = 0x2000747b
- TIOCSCONS = 0x20007463
- TIOCSCTTY = 0x20007461
- TIOCSDRAINWAIT = 0x80047457
- TIOCSDTR = 0x20007479
- TIOCSETA = 0x80487414
- TIOCSETAF = 0x80487416
- TIOCSETAW = 0x80487415
- TIOCSETD = 0x8004741b
- TIOCSIG = 0x2000745f
- TIOCSPGRP = 0x80047476
- TIOCSTART = 0x2000746e
- TIOCSTAT = 0x20007465
- TIOCSTI = 0x80017472
- TIOCSTOP = 0x2000746f
- TIOCSWINSZ = 0x80087467
- TIOCTIMESTAMP = 0x40107459
- TIOCUCNTL = 0x80047466
- TOSTOP = 0x400000
- VDISCARD = 0xf
- VDSUSP = 0xb
- VEOF = 0x0
- VEOL = 0x1
- VEOL2 = 0x2
- VERASE = 0x3
- VINTR = 0x8
- VKILL = 0x5
- VLNEXT = 0xe
- VMIN = 0x10
- VM_LOADAVG = 0x2
- VM_MACHFACTOR = 0x4
- VM_MAXID = 0x6
- VM_METER = 0x1
- VM_SWAPUSAGE = 0x5
- VQUIT = 0x9
- VREPRINT = 0x6
- VSTART = 0xc
- VSTATUS = 0x12
- VSTOP = 0xd
- VSUSP = 0xa
- VT0 = 0x0
- VT1 = 0x10000
- VTDLY = 0x10000
- VTIME = 0x11
- VWERASE = 0x4
- WCONTINUED = 0x10
- WCOREFLAG = 0x80
- WEXITED = 0x4
- WNOHANG = 0x1
- WNOWAIT = 0x20
- WORDSIZE = 0x40
- WSTOPPED = 0x8
- WUNTRACED = 0x2
- XATTR_CREATE = 0x2
- XATTR_NODEFAULT = 0x10
- XATTR_NOFOLLOW = 0x1
- XATTR_NOSECURITY = 0x8
- XATTR_REPLACE = 0x4
- XATTR_SHOWCOMPRESSION = 0x20
+ AF_APPLETALK = 0x10
+ AF_CCITT = 0xa
+ AF_CHAOS = 0x5
+ AF_CNT = 0x15
+ AF_COIP = 0x14
+ AF_DATAKIT = 0x9
+ AF_DECnet = 0xc
+ AF_DLI = 0xd
+ AF_E164 = 0x1c
+ AF_ECMA = 0x8
+ AF_HYLINK = 0xf
+ AF_IEEE80211 = 0x25
+ AF_IMPLINK = 0x3
+ AF_INET = 0x2
+ AF_INET6 = 0x1e
+ AF_IPX = 0x17
+ AF_ISDN = 0x1c
+ AF_ISO = 0x7
+ AF_LAT = 0xe
+ AF_LINK = 0x12
+ AF_LOCAL = 0x1
+ AF_MAX = 0x29
+ AF_NATM = 0x1f
+ AF_NDRV = 0x1b
+ AF_NETBIOS = 0x21
+ AF_NS = 0x6
+ AF_OSI = 0x7
+ AF_PPP = 0x22
+ AF_PUP = 0x4
+ AF_RESERVED_36 = 0x24
+ AF_ROUTE = 0x11
+ AF_SIP = 0x18
+ AF_SNA = 0xb
+ AF_SYSTEM = 0x20
+ AF_SYS_CONTROL = 0x2
+ AF_UNIX = 0x1
+ AF_UNSPEC = 0x0
+ AF_UTUN = 0x26
+ AF_VSOCK = 0x28
+ ALTWERASE = 0x200
+ ATTR_BIT_MAP_COUNT = 0x5
+ ATTR_CMN_ACCESSMASK = 0x20000
+ ATTR_CMN_ACCTIME = 0x1000
+ ATTR_CMN_ADDEDTIME = 0x10000000
+ ATTR_CMN_BKUPTIME = 0x2000
+ ATTR_CMN_CHGTIME = 0x800
+ ATTR_CMN_CRTIME = 0x200
+ ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
+ ATTR_CMN_DEVID = 0x2
+ ATTR_CMN_DOCUMENT_ID = 0x100000
+ ATTR_CMN_ERROR = 0x20000000
+ ATTR_CMN_EXTENDED_SECURITY = 0x400000
+ ATTR_CMN_FILEID = 0x2000000
+ ATTR_CMN_FLAGS = 0x40000
+ ATTR_CMN_FNDRINFO = 0x4000
+ ATTR_CMN_FSID = 0x4
+ ATTR_CMN_FULLPATH = 0x8000000
+ ATTR_CMN_GEN_COUNT = 0x80000
+ ATTR_CMN_GRPID = 0x10000
+ ATTR_CMN_GRPUUID = 0x1000000
+ ATTR_CMN_MODTIME = 0x400
+ ATTR_CMN_NAME = 0x1
+ ATTR_CMN_NAMEDATTRCOUNT = 0x80000
+ ATTR_CMN_NAMEDATTRLIST = 0x100000
+ ATTR_CMN_OBJID = 0x20
+ ATTR_CMN_OBJPERMANENTID = 0x40
+ ATTR_CMN_OBJTAG = 0x10
+ ATTR_CMN_OBJTYPE = 0x8
+ ATTR_CMN_OWNERID = 0x8000
+ ATTR_CMN_PARENTID = 0x4000000
+ ATTR_CMN_PAROBJID = 0x80
+ ATTR_CMN_RETURNED_ATTRS = 0x80000000
+ ATTR_CMN_SCRIPT = 0x100
+ ATTR_CMN_SETMASK = 0x51c7ff00
+ ATTR_CMN_USERACCESS = 0x200000
+ ATTR_CMN_UUID = 0x800000
+ ATTR_CMN_VALIDMASK = 0xffffffff
+ ATTR_CMN_VOLSETMASK = 0x6700
+ ATTR_FILE_ALLOCSIZE = 0x4
+ ATTR_FILE_CLUMPSIZE = 0x10
+ ATTR_FILE_DATAALLOCSIZE = 0x400
+ ATTR_FILE_DATAEXTENTS = 0x800
+ ATTR_FILE_DATALENGTH = 0x200
+ ATTR_FILE_DEVTYPE = 0x20
+ ATTR_FILE_FILETYPE = 0x40
+ ATTR_FILE_FORKCOUNT = 0x80
+ ATTR_FILE_FORKLIST = 0x100
+ ATTR_FILE_IOBLOCKSIZE = 0x8
+ ATTR_FILE_LINKCOUNT = 0x1
+ ATTR_FILE_RSRCALLOCSIZE = 0x2000
+ ATTR_FILE_RSRCEXTENTS = 0x4000
+ ATTR_FILE_RSRCLENGTH = 0x1000
+ ATTR_FILE_SETMASK = 0x20
+ ATTR_FILE_TOTALSIZE = 0x2
+ ATTR_FILE_VALIDMASK = 0x37ff
+ ATTR_VOL_ALLOCATIONCLUMP = 0x40
+ ATTR_VOL_ATTRIBUTES = 0x40000000
+ ATTR_VOL_CAPABILITIES = 0x20000
+ ATTR_VOL_DIRCOUNT = 0x400
+ ATTR_VOL_ENCODINGSUSED = 0x10000
+ ATTR_VOL_FILECOUNT = 0x200
+ ATTR_VOL_FSTYPE = 0x1
+ ATTR_VOL_INFO = 0x80000000
+ ATTR_VOL_IOBLOCKSIZE = 0x80
+ ATTR_VOL_MAXOBJCOUNT = 0x800
+ ATTR_VOL_MINALLOCATION = 0x20
+ ATTR_VOL_MOUNTEDDEVICE = 0x8000
+ ATTR_VOL_MOUNTFLAGS = 0x4000
+ ATTR_VOL_MOUNTPOINT = 0x1000
+ ATTR_VOL_NAME = 0x2000
+ ATTR_VOL_OBJCOUNT = 0x100
+ ATTR_VOL_QUOTA_SIZE = 0x10000000
+ ATTR_VOL_RESERVED_SIZE = 0x20000000
+ ATTR_VOL_SETMASK = 0x80002000
+ ATTR_VOL_SIGNATURE = 0x2
+ ATTR_VOL_SIZE = 0x4
+ ATTR_VOL_SPACEAVAIL = 0x10
+ ATTR_VOL_SPACEFREE = 0x8
+ ATTR_VOL_SPACEUSED = 0x800000
+ ATTR_VOL_UUID = 0x40000
+ ATTR_VOL_VALIDMASK = 0xf087ffff
+ B0 = 0x0
+ B110 = 0x6e
+ B115200 = 0x1c200
+ B1200 = 0x4b0
+ B134 = 0x86
+ B14400 = 0x3840
+ B150 = 0x96
+ B1800 = 0x708
+ B19200 = 0x4b00
+ B200 = 0xc8
+ B230400 = 0x38400
+ B2400 = 0x960
+ B28800 = 0x7080
+ B300 = 0x12c
+ B38400 = 0x9600
+ B4800 = 0x12c0
+ B50 = 0x32
+ B57600 = 0xe100
+ B600 = 0x258
+ B7200 = 0x1c20
+ B75 = 0x4b
+ B76800 = 0x12c00
+ B9600 = 0x2580
+ BIOCFLUSH = 0x20004268
+ BIOCGBLEN = 0x40044266
+ BIOCGDLT = 0x4004426a
+ BIOCGDLTLIST = 0xc00c4279
+ BIOCGETIF = 0x4020426b
+ BIOCGHDRCMPLT = 0x40044274
+ BIOCGRSIG = 0x40044272
+ BIOCGRTIMEOUT = 0x4010426e
+ BIOCGSEESENT = 0x40044276
+ BIOCGSTATS = 0x4008426f
+ BIOCIMMEDIATE = 0x80044270
+ BIOCPROMISC = 0x20004269
+ BIOCSBLEN = 0xc0044266
+ BIOCSDLT = 0x80044278
+ BIOCSETF = 0x80104267
+ BIOCSETFNR = 0x8010427e
+ BIOCSETIF = 0x8020426c
+ BIOCSHDRCMPLT = 0x80044275
+ BIOCSRSIG = 0x80044273
+ BIOCSRTIMEOUT = 0x8010426d
+ BIOCSSEESENT = 0x80044277
+ BIOCVERSION = 0x40044271
+ BPF_A = 0x10
+ BPF_ABS = 0x20
+ BPF_ADD = 0x0
+ BPF_ALIGNMENT = 0x4
+ BPF_ALU = 0x4
+ BPF_AND = 0x50
+ BPF_B = 0x10
+ BPF_DIV = 0x30
+ BPF_H = 0x8
+ BPF_IMM = 0x0
+ BPF_IND = 0x40
+ BPF_JA = 0x0
+ BPF_JEQ = 0x10
+ BPF_JGE = 0x30
+ BPF_JGT = 0x20
+ BPF_JMP = 0x5
+ BPF_JSET = 0x40
+ BPF_K = 0x0
+ BPF_LD = 0x0
+ BPF_LDX = 0x1
+ BPF_LEN = 0x80
+ BPF_LSH = 0x60
+ BPF_MAJOR_VERSION = 0x1
+ BPF_MAXBUFSIZE = 0x80000
+ BPF_MAXINSNS = 0x200
+ BPF_MEM = 0x60
+ BPF_MEMWORDS = 0x10
+ BPF_MINBUFSIZE = 0x20
+ BPF_MINOR_VERSION = 0x1
+ BPF_MISC = 0x7
+ BPF_MSH = 0xa0
+ BPF_MUL = 0x20
+ BPF_NEG = 0x80
+ BPF_OR = 0x40
+ BPF_RELEASE = 0x30bb6
+ BPF_RET = 0x6
+ BPF_RSH = 0x70
+ BPF_ST = 0x2
+ BPF_STX = 0x3
+ BPF_SUB = 0x10
+ BPF_TAX = 0x0
+ BPF_TXA = 0x80
+ BPF_W = 0x0
+ BPF_X = 0x8
+ BRKINT = 0x2
+ BS0 = 0x0
+ BS1 = 0x8000
+ BSDLY = 0x8000
+ CFLUSH = 0xf
+ CLOCAL = 0x8000
+ CLOCK_MONOTONIC = 0x6
+ CLOCK_MONOTONIC_RAW = 0x4
+ CLOCK_MONOTONIC_RAW_APPROX = 0x5
+ CLOCK_PROCESS_CPUTIME_ID = 0xc
+ CLOCK_REALTIME = 0x0
+ CLOCK_THREAD_CPUTIME_ID = 0x10
+ CLOCK_UPTIME_RAW = 0x8
+ CLOCK_UPTIME_RAW_APPROX = 0x9
+ CLONE_NOFOLLOW = 0x1
+ CLONE_NOOWNERCOPY = 0x2
+ CR0 = 0x0
+ CR1 = 0x1000
+ CR2 = 0x2000
+ CR3 = 0x3000
+ CRDLY = 0x3000
+ CREAD = 0x800
+ CRTSCTS = 0x30000
+ CS5 = 0x0
+ CS6 = 0x100
+ CS7 = 0x200
+ CS8 = 0x300
+ CSIZE = 0x300
+ CSTART = 0x11
+ CSTATUS = 0x14
+ CSTOP = 0x13
+ CSTOPB = 0x400
+ CSUSP = 0x1a
+ CTLIOCGINFO = 0xc0644e03
+ CTL_HW = 0x6
+ CTL_KERN = 0x1
+ CTL_MAXNAME = 0xc
+ CTL_NET = 0x4
+ DLT_A429 = 0xb8
+ DLT_A653_ICM = 0xb9
+ DLT_AIRONET_HEADER = 0x78
+ DLT_AOS = 0xde
+ DLT_APPLE_IP_OVER_IEEE1394 = 0x8a
+ DLT_ARCNET = 0x7
+ DLT_ARCNET_LINUX = 0x81
+ DLT_ATM_CLIP = 0x13
+ DLT_ATM_RFC1483 = 0xb
+ DLT_AURORA = 0x7e
+ DLT_AX25 = 0x3
+ DLT_AX25_KISS = 0xca
+ DLT_BACNET_MS_TP = 0xa5
+ DLT_BLUETOOTH_HCI_H4 = 0xbb
+ DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
+ DLT_CAN20B = 0xbe
+ DLT_CAN_SOCKETCAN = 0xe3
+ DLT_CHAOS = 0x5
+ DLT_CHDLC = 0x68
+ DLT_CISCO_IOS = 0x76
+ DLT_C_HDLC = 0x68
+ DLT_C_HDLC_WITH_DIR = 0xcd
+ DLT_DBUS = 0xe7
+ DLT_DECT = 0xdd
+ DLT_DOCSIS = 0x8f
+ DLT_DVB_CI = 0xeb
+ DLT_ECONET = 0x73
+ DLT_EN10MB = 0x1
+ DLT_EN3MB = 0x2
+ DLT_ENC = 0x6d
+ DLT_ERF = 0xc5
+ DLT_ERF_ETH = 0xaf
+ DLT_ERF_POS = 0xb0
+ DLT_FC_2 = 0xe0
+ DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
+ DLT_FDDI = 0xa
+ DLT_FLEXRAY = 0xd2
+ DLT_FRELAY = 0x6b
+ DLT_FRELAY_WITH_DIR = 0xce
+ DLT_GCOM_SERIAL = 0xad
+ DLT_GCOM_T1E1 = 0xac
+ DLT_GPF_F = 0xab
+ DLT_GPF_T = 0xaa
+ DLT_GPRS_LLC = 0xa9
+ DLT_GSMTAP_ABIS = 0xda
+ DLT_GSMTAP_UM = 0xd9
+ DLT_HHDLC = 0x79
+ DLT_IBM_SN = 0x92
+ DLT_IBM_SP = 0x91
+ DLT_IEEE802 = 0x6
+ DLT_IEEE802_11 = 0x69
+ DLT_IEEE802_11_RADIO = 0x7f
+ DLT_IEEE802_11_RADIO_AVS = 0xa3
+ DLT_IEEE802_15_4 = 0xc3
+ DLT_IEEE802_15_4_LINUX = 0xbf
+ DLT_IEEE802_15_4_NOFCS = 0xe6
+ DLT_IEEE802_15_4_NONASK_PHY = 0xd7
+ DLT_IEEE802_16_MAC_CPS = 0xbc
+ DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1
+ DLT_IPFILTER = 0x74
+ DLT_IPMB = 0xc7
+ DLT_IPMB_LINUX = 0xd1
+ DLT_IPNET = 0xe2
+ DLT_IPOIB = 0xf2
+ DLT_IPV4 = 0xe4
+ DLT_IPV6 = 0xe5
+ DLT_IP_OVER_FC = 0x7a
+ DLT_JUNIPER_ATM1 = 0x89
+ DLT_JUNIPER_ATM2 = 0x87
+ DLT_JUNIPER_ATM_CEMIC = 0xee
+ DLT_JUNIPER_CHDLC = 0xb5
+ DLT_JUNIPER_ES = 0x84
+ DLT_JUNIPER_ETHER = 0xb2
+ DLT_JUNIPER_FIBRECHANNEL = 0xea
+ DLT_JUNIPER_FRELAY = 0xb4
+ DLT_JUNIPER_GGSN = 0x85
+ DLT_JUNIPER_ISM = 0xc2
+ DLT_JUNIPER_MFR = 0x86
+ DLT_JUNIPER_MLFR = 0x83
+ DLT_JUNIPER_MLPPP = 0x82
+ DLT_JUNIPER_MONITOR = 0xa4
+ DLT_JUNIPER_PIC_PEER = 0xae
+ DLT_JUNIPER_PPP = 0xb3
+ DLT_JUNIPER_PPPOE = 0xa7
+ DLT_JUNIPER_PPPOE_ATM = 0xa8
+ DLT_JUNIPER_SERVICES = 0x88
+ DLT_JUNIPER_SRX_E2E = 0xe9
+ DLT_JUNIPER_ST = 0xc8
+ DLT_JUNIPER_VP = 0xb7
+ DLT_JUNIPER_VS = 0xe8
+ DLT_LAPB_WITH_DIR = 0xcf
+ DLT_LAPD = 0xcb
+ DLT_LIN = 0xd4
+ DLT_LINUX_EVDEV = 0xd8
+ DLT_LINUX_IRDA = 0x90
+ DLT_LINUX_LAPD = 0xb1
+ DLT_LINUX_PPP_WITHDIRECTION = 0xa6
+ DLT_LINUX_SLL = 0x71
+ DLT_LOOP = 0x6c
+ DLT_LTALK = 0x72
+ DLT_MATCHING_MAX = 0x10a
+ DLT_MATCHING_MIN = 0x68
+ DLT_MFR = 0xb6
+ DLT_MOST = 0xd3
+ DLT_MPEG_2_TS = 0xf3
+ DLT_MPLS = 0xdb
+ DLT_MTP2 = 0x8c
+ DLT_MTP2_WITH_PHDR = 0x8b
+ DLT_MTP3 = 0x8d
+ DLT_MUX27010 = 0xec
+ DLT_NETANALYZER = 0xf0
+ DLT_NETANALYZER_TRANSPARENT = 0xf1
+ DLT_NFC_LLCP = 0xf5
+ DLT_NFLOG = 0xef
+ DLT_NG40 = 0xf4
+ DLT_NULL = 0x0
+ DLT_PCI_EXP = 0x7d
+ DLT_PFLOG = 0x75
+ DLT_PFSYNC = 0x12
+ DLT_PPI = 0xc0
+ DLT_PPP = 0x9
+ DLT_PPP_BSDOS = 0x10
+ DLT_PPP_ETHER = 0x33
+ DLT_PPP_PPPD = 0xa6
+ DLT_PPP_SERIAL = 0x32
+ DLT_PPP_WITH_DIR = 0xcc
+ DLT_PPP_WITH_DIRECTION = 0xa6
+ DLT_PRISM_HEADER = 0x77
+ DLT_PRONET = 0x4
+ DLT_RAIF1 = 0xc6
+ DLT_RAW = 0xc
+ DLT_RIO = 0x7c
+ DLT_SCCP = 0x8e
+ DLT_SITA = 0xc4
+ DLT_SLIP = 0x8
+ DLT_SLIP_BSDOS = 0xf
+ DLT_STANAG_5066_D_PDU = 0xed
+ DLT_SUNATM = 0x7b
+ DLT_SYMANTEC_FIREWALL = 0x63
+ DLT_TZSP = 0x80
+ DLT_USB = 0xba
+ DLT_USB_DARWIN = 0x10a
+ DLT_USB_LINUX = 0xbd
+ DLT_USB_LINUX_MMAPPED = 0xdc
+ DLT_USER0 = 0x93
+ DLT_USER1 = 0x94
+ DLT_USER10 = 0x9d
+ DLT_USER11 = 0x9e
+ DLT_USER12 = 0x9f
+ DLT_USER13 = 0xa0
+ DLT_USER14 = 0xa1
+ DLT_USER15 = 0xa2
+ DLT_USER2 = 0x95
+ DLT_USER3 = 0x96
+ DLT_USER4 = 0x97
+ DLT_USER5 = 0x98
+ DLT_USER6 = 0x99
+ DLT_USER7 = 0x9a
+ DLT_USER8 = 0x9b
+ DLT_USER9 = 0x9c
+ DLT_WIHART = 0xdf
+ DLT_X2E_SERIAL = 0xd5
+ DLT_X2E_XORAYA = 0xd6
+ DT_BLK = 0x6
+ DT_CHR = 0x2
+ DT_DIR = 0x4
+ DT_FIFO = 0x1
+ DT_LNK = 0xa
+ DT_REG = 0x8
+ DT_SOCK = 0xc
+ DT_UNKNOWN = 0x0
+ DT_WHT = 0xe
+ ECHO = 0x8
+ ECHOCTL = 0x40
+ ECHOE = 0x2
+ ECHOK = 0x4
+ ECHOKE = 0x1
+ ECHONL = 0x10
+ ECHOPRT = 0x20
+ EVFILT_AIO = -0x3
+ EVFILT_EXCEPT = -0xf
+ EVFILT_FS = -0x9
+ EVFILT_MACHPORT = -0x8
+ EVFILT_PROC = -0x5
+ EVFILT_READ = -0x1
+ EVFILT_SIGNAL = -0x6
+ EVFILT_SYSCOUNT = 0x11
+ EVFILT_THREADMARKER = 0x11
+ EVFILT_TIMER = -0x7
+ EVFILT_USER = -0xa
+ EVFILT_VM = -0xc
+ EVFILT_VNODE = -0x4
+ EVFILT_WRITE = -0x2
+ EV_ADD = 0x1
+ EV_CLEAR = 0x20
+ EV_DELETE = 0x2
+ EV_DISABLE = 0x8
+ EV_DISPATCH = 0x80
+ EV_DISPATCH2 = 0x180
+ EV_ENABLE = 0x4
+ EV_EOF = 0x8000
+ EV_ERROR = 0x4000
+ EV_FLAG0 = 0x1000
+ EV_FLAG1 = 0x2000
+ EV_ONESHOT = 0x10
+ EV_OOBAND = 0x2000
+ EV_POLL = 0x1000
+ EV_RECEIPT = 0x40
+ EV_SYSFLAGS = 0xf000
+ EV_UDATA_SPECIFIC = 0x100
+ EV_VANISHED = 0x200
+ EXTA = 0x4b00
+ EXTB = 0x9600
+ EXTPROC = 0x800
+ FD_CLOEXEC = 0x1
+ FD_SETSIZE = 0x400
+ FF0 = 0x0
+ FF1 = 0x4000
+ FFDLY = 0x4000
+ FLUSHO = 0x800000
+ FSOPT_ATTR_CMN_EXTENDED = 0x20
+ FSOPT_NOFOLLOW = 0x1
+ FSOPT_NOINMEMUPDATE = 0x2
+ FSOPT_PACK_INVAL_ATTRS = 0x8
+ FSOPT_REPORT_FULLSIZE = 0x4
+ FSOPT_RETURN_REALDEV = 0x200
+ F_ADDFILESIGS = 0x3d
+ F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
+ F_ADDFILESIGS_INFO = 0x67
+ F_ADDFILESIGS_RETURN = 0x61
+ F_ADDFILESUPPL = 0x68
+ F_ADDSIGS = 0x3b
+ F_ALLOCATEALL = 0x4
+ F_ALLOCATECONTIG = 0x2
+ F_BARRIERFSYNC = 0x55
+ F_CHECK_LV = 0x62
+ F_CHKCLEAN = 0x29
+ F_DUPFD = 0x0
+ F_DUPFD_CLOEXEC = 0x43
+ F_FINDSIGS = 0x4e
+ F_FLUSH_DATA = 0x28
+ F_FREEZE_FS = 0x35
+ F_FULLFSYNC = 0x33
+ F_GETCODEDIR = 0x48
+ F_GETFD = 0x1
+ F_GETFL = 0x3
+ F_GETLK = 0x7
+ F_GETLKPID = 0x42
+ F_GETNOSIGPIPE = 0x4a
+ F_GETOWN = 0x5
+ F_GETPATH = 0x32
+ F_GETPATH_MTMINFO = 0x47
+ F_GETPATH_NOFIRMLINK = 0x66
+ F_GETPROTECTIONCLASS = 0x3f
+ F_GETPROTECTIONLEVEL = 0x4d
+ F_GETSIGSINFO = 0x69
+ F_GLOBAL_NOCACHE = 0x37
+ F_LOG2PHYS = 0x31
+ F_LOG2PHYS_EXT = 0x41
+ F_NOCACHE = 0x30
+ F_NODIRECT = 0x3e
+ F_OK = 0x0
+ F_PATHPKG_CHECK = 0x34
+ F_PEOFPOSMODE = 0x3
+ F_PREALLOCATE = 0x2a
+ F_PUNCHHOLE = 0x63
+ F_RDADVISE = 0x2c
+ F_RDAHEAD = 0x2d
+ F_RDLCK = 0x1
+ F_SETBACKINGSTORE = 0x46
+ F_SETFD = 0x2
+ F_SETFL = 0x4
+ F_SETLK = 0x8
+ F_SETLKW = 0x9
+ F_SETLKWTIMEOUT = 0xa
+ F_SETNOSIGPIPE = 0x49
+ F_SETOWN = 0x6
+ F_SETPROTECTIONCLASS = 0x40
+ F_SETSIZE = 0x2b
+ F_SINGLE_WRITER = 0x4c
+ F_SPECULATIVE_READ = 0x65
+ F_THAW_FS = 0x36
+ F_TRANSCODEKEY = 0x4b
+ F_TRIM_ACTIVE_FILE = 0x64
+ F_UNLCK = 0x2
+ F_VOLPOSMODE = 0x4
+ F_WRLCK = 0x3
+ HUPCL = 0x4000
+ HW_MACHINE = 0x1
+ ICANON = 0x100
+ ICMP6_FILTER = 0x12
+ ICRNL = 0x100
+ IEXTEN = 0x400
+ IFF_ALLMULTI = 0x200
+ IFF_ALTPHYS = 0x4000
+ IFF_BROADCAST = 0x2
+ IFF_DEBUG = 0x4
+ IFF_LINK0 = 0x1000
+ IFF_LINK1 = 0x2000
+ IFF_LINK2 = 0x4000
+ IFF_LOOPBACK = 0x8
+ IFF_MULTICAST = 0x8000
+ IFF_NOARP = 0x80
+ IFF_NOTRAILERS = 0x20
+ IFF_OACTIVE = 0x400
+ IFF_POINTOPOINT = 0x10
+ IFF_PROMISC = 0x100
+ IFF_RUNNING = 0x40
+ IFF_SIMPLEX = 0x800
+ IFF_UP = 0x1
+ IFNAMSIZ = 0x10
+ IFT_1822 = 0x2
+ IFT_6LOWPAN = 0x40
+ IFT_AAL5 = 0x31
+ IFT_ARCNET = 0x23
+ IFT_ARCNETPLUS = 0x24
+ IFT_ATM = 0x25
+ IFT_BRIDGE = 0xd1
+ IFT_CARP = 0xf8
+ IFT_CELLULAR = 0xff
+ IFT_CEPT = 0x13
+ IFT_DS3 = 0x1e
+ IFT_ENC = 0xf4
+ IFT_EON = 0x19
+ IFT_ETHER = 0x6
+ IFT_FAITH = 0x38
+ IFT_FDDI = 0xf
+ IFT_FRELAY = 0x20
+ IFT_FRELAYDCE = 0x2c
+ IFT_GIF = 0x37
+ IFT_HDH1822 = 0x3
+ IFT_HIPPI = 0x2f
+ IFT_HSSI = 0x2e
+ IFT_HY = 0xe
+ IFT_IEEE1394 = 0x90
+ IFT_IEEE8023ADLAG = 0x88
+ IFT_ISDNBASIC = 0x14
+ IFT_ISDNPRIMARY = 0x15
+ IFT_ISO88022LLC = 0x29
+ IFT_ISO88023 = 0x7
+ IFT_ISO88024 = 0x8
+ IFT_ISO88025 = 0x9
+ IFT_ISO88026 = 0xa
+ IFT_L2VLAN = 0x87
+ IFT_LAPB = 0x10
+ IFT_LOCALTALK = 0x2a
+ IFT_LOOP = 0x18
+ IFT_MIOX25 = 0x26
+ IFT_MODEM = 0x30
+ IFT_NSIP = 0x1b
+ IFT_OTHER = 0x1
+ IFT_P10 = 0xc
+ IFT_P80 = 0xd
+ IFT_PARA = 0x22
+ IFT_PDP = 0xff
+ IFT_PFLOG = 0xf5
+ IFT_PFSYNC = 0xf6
+ IFT_PKTAP = 0xfe
+ IFT_PPP = 0x17
+ IFT_PROPMUX = 0x36
+ IFT_PROPVIRTUAL = 0x35
+ IFT_PTPSERIAL = 0x16
+ IFT_RS232 = 0x21
+ IFT_SDLC = 0x11
+ IFT_SIP = 0x1f
+ IFT_SLIP = 0x1c
+ IFT_SMDSDXI = 0x2b
+ IFT_SMDSICIP = 0x34
+ IFT_SONET = 0x27
+ IFT_SONETPATH = 0x32
+ IFT_SONETVT = 0x33
+ IFT_STARLAN = 0xb
+ IFT_STF = 0x39
+ IFT_T1 = 0x12
+ IFT_ULTRA = 0x1d
+ IFT_V35 = 0x2d
+ IFT_X25 = 0x5
+ IFT_X25DDN = 0x4
+ IFT_X25PLE = 0x28
+ IFT_XETHER = 0x1a
+ IGNBRK = 0x1
+ IGNCR = 0x80
+ IGNPAR = 0x4
+ IMAXBEL = 0x2000
+ INLCR = 0x40
+ INPCK = 0x10
+ IN_CLASSA_HOST = 0xffffff
+ IN_CLASSA_MAX = 0x80
+ IN_CLASSA_NET = 0xff000000
+ IN_CLASSA_NSHIFT = 0x18
+ IN_CLASSB_HOST = 0xffff
+ IN_CLASSB_MAX = 0x10000
+ IN_CLASSB_NET = 0xffff0000
+ IN_CLASSB_NSHIFT = 0x10
+ IN_CLASSC_HOST = 0xff
+ IN_CLASSC_NET = 0xffffff00
+ IN_CLASSC_NSHIFT = 0x8
+ IN_CLASSD_HOST = 0xfffffff
+ IN_CLASSD_NET = 0xf0000000
+ IN_CLASSD_NSHIFT = 0x1c
+ IN_LINKLOCALNETNUM = 0xa9fe0000
+ IN_LOOPBACKNET = 0x7f
+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1
+ IPPROTO_3PC = 0x22
+ IPPROTO_ADFS = 0x44
+ IPPROTO_AH = 0x33
+ IPPROTO_AHIP = 0x3d
+ IPPROTO_APES = 0x63
+ IPPROTO_ARGUS = 0xd
+ IPPROTO_AX25 = 0x5d
+ IPPROTO_BHA = 0x31
+ IPPROTO_BLT = 0x1e
+ IPPROTO_BRSATMON = 0x4c
+ IPPROTO_CFTP = 0x3e
+ IPPROTO_CHAOS = 0x10
+ IPPROTO_CMTP = 0x26
+ IPPROTO_CPHB = 0x49
+ IPPROTO_CPNX = 0x48
+ IPPROTO_DDP = 0x25
+ IPPROTO_DGP = 0x56
+ IPPROTO_DIVERT = 0xfe
+ IPPROTO_DONE = 0x101
+ IPPROTO_DSTOPTS = 0x3c
+ IPPROTO_EGP = 0x8
+ IPPROTO_EMCON = 0xe
+ IPPROTO_ENCAP = 0x62
+ IPPROTO_EON = 0x50
+ IPPROTO_ESP = 0x32
+ IPPROTO_ETHERIP = 0x61
+ IPPROTO_FRAGMENT = 0x2c
+ IPPROTO_GGP = 0x3
+ IPPROTO_GMTP = 0x64
+ IPPROTO_GRE = 0x2f
+ IPPROTO_HELLO = 0x3f
+ IPPROTO_HMP = 0x14
+ IPPROTO_HOPOPTS = 0x0
+ IPPROTO_ICMP = 0x1
+ IPPROTO_ICMPV6 = 0x3a
+ IPPROTO_IDP = 0x16
+ IPPROTO_IDPR = 0x23
+ IPPROTO_IDRP = 0x2d
+ IPPROTO_IGMP = 0x2
+ IPPROTO_IGP = 0x55
+ IPPROTO_IGRP = 0x58
+ IPPROTO_IL = 0x28
+ IPPROTO_INLSP = 0x34
+ IPPROTO_INP = 0x20
+ IPPROTO_IP = 0x0
+ IPPROTO_IPCOMP = 0x6c
+ IPPROTO_IPCV = 0x47
+ IPPROTO_IPEIP = 0x5e
+ IPPROTO_IPIP = 0x4
+ IPPROTO_IPPC = 0x43
+ IPPROTO_IPV4 = 0x4
+ IPPROTO_IPV6 = 0x29
+ IPPROTO_IRTP = 0x1c
+ IPPROTO_KRYPTOLAN = 0x41
+ IPPROTO_LARP = 0x5b
+ IPPROTO_LEAF1 = 0x19
+ IPPROTO_LEAF2 = 0x1a
+ IPPROTO_MAX = 0x100
+ IPPROTO_MAXID = 0x34
+ IPPROTO_MEAS = 0x13
+ IPPROTO_MHRP = 0x30
+ IPPROTO_MICP = 0x5f
+ IPPROTO_MTP = 0x5c
+ IPPROTO_MUX = 0x12
+ IPPROTO_ND = 0x4d
+ IPPROTO_NHRP = 0x36
+ IPPROTO_NONE = 0x3b
+ IPPROTO_NSP = 0x1f
+ IPPROTO_NVPII = 0xb
+ IPPROTO_OSPFIGP = 0x59
+ IPPROTO_PGM = 0x71
+ IPPROTO_PIGP = 0x9
+ IPPROTO_PIM = 0x67
+ IPPROTO_PRM = 0x15
+ IPPROTO_PUP = 0xc
+ IPPROTO_PVP = 0x4b
+ IPPROTO_RAW = 0xff
+ IPPROTO_RCCMON = 0xa
+ IPPROTO_RDP = 0x1b
+ IPPROTO_ROUTING = 0x2b
+ IPPROTO_RSVP = 0x2e
+ IPPROTO_RVD = 0x42
+ IPPROTO_SATEXPAK = 0x40
+ IPPROTO_SATMON = 0x45
+ IPPROTO_SCCSP = 0x60
+ IPPROTO_SCTP = 0x84
+ IPPROTO_SDRP = 0x2a
+ IPPROTO_SEP = 0x21
+ IPPROTO_SRPC = 0x5a
+ IPPROTO_ST = 0x7
+ IPPROTO_SVMTP = 0x52
+ IPPROTO_SWIPE = 0x35
+ IPPROTO_TCF = 0x57
+ IPPROTO_TCP = 0x6
+ IPPROTO_TP = 0x1d
+ IPPROTO_TPXX = 0x27
+ IPPROTO_TRUNK1 = 0x17
+ IPPROTO_TRUNK2 = 0x18
+ IPPROTO_TTP = 0x54
+ IPPROTO_UDP = 0x11
+ IPPROTO_VINES = 0x53
+ IPPROTO_VISA = 0x46
+ IPPROTO_VMTP = 0x51
+ IPPROTO_WBEXPAK = 0x4f
+ IPPROTO_WBMON = 0x4e
+ IPPROTO_WSN = 0x4a
+ IPPROTO_XNET = 0xf
+ IPPROTO_XTP = 0x24
+ IPV6_2292DSTOPTS = 0x17
+ IPV6_2292HOPLIMIT = 0x14
+ IPV6_2292HOPOPTS = 0x16
+ IPV6_2292NEXTHOP = 0x15
+ IPV6_2292PKTINFO = 0x13
+ IPV6_2292PKTOPTIONS = 0x19
+ IPV6_2292RTHDR = 0x18
+ IPV6_3542DSTOPTS = 0x32
+ IPV6_3542HOPLIMIT = 0x2f
+ IPV6_3542HOPOPTS = 0x31
+ IPV6_3542NEXTHOP = 0x30
+ IPV6_3542PKTINFO = 0x2e
+ IPV6_3542RTHDR = 0x33
+ IPV6_ADDR_MC_FLAGS_PREFIX = 0x20
+ IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10
+ IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30
+ IPV6_AUTOFLOWLABEL = 0x3b
+ IPV6_BINDV6ONLY = 0x1b
+ IPV6_BOUND_IF = 0x7d
+ IPV6_CHECKSUM = 0x1a
+ IPV6_DEFAULT_MULTICAST_HOPS = 0x1
+ IPV6_DEFAULT_MULTICAST_LOOP = 0x1
+ IPV6_DEFHLIM = 0x40
+ IPV6_DONTFRAG = 0x3e
+ IPV6_DSTOPTS = 0x32
+ IPV6_FAITH = 0x1d
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
+ IPV6_FLOW_ECN_MASK = 0x3000
+ IPV6_FRAGTTL = 0x3c
+ IPV6_FW_ADD = 0x1e
+ IPV6_FW_DEL = 0x1f
+ IPV6_FW_FLUSH = 0x20
+ IPV6_FW_GET = 0x22
+ IPV6_FW_ZERO = 0x21
+ IPV6_HLIMDEC = 0x1
+ IPV6_HOPLIMIT = 0x2f
+ IPV6_HOPOPTS = 0x31
+ IPV6_IPSEC_POLICY = 0x1c
+ IPV6_JOIN_GROUP = 0xc
+ IPV6_LEAVE_GROUP = 0xd
+ IPV6_MAXHLIM = 0xff
+ IPV6_MAXOPTHDR = 0x800
+ IPV6_MAXPACKET = 0xffff
+ IPV6_MAX_GROUP_SRC_FILTER = 0x200
+ IPV6_MAX_MEMBERSHIPS = 0xfff
+ IPV6_MAX_SOCK_SRC_FILTER = 0x80
+ IPV6_MIN_MEMBERSHIPS = 0x1f
+ IPV6_MMTU = 0x500
+ IPV6_MSFILTER = 0x4a
+ IPV6_MULTICAST_HOPS = 0xa
+ IPV6_MULTICAST_IF = 0x9
+ IPV6_MULTICAST_LOOP = 0xb
+ IPV6_NEXTHOP = 0x30
+ IPV6_PATHMTU = 0x2c
+ IPV6_PKTINFO = 0x2e
+ IPV6_PORTRANGE = 0xe
+ IPV6_PORTRANGE_DEFAULT = 0x0
+ IPV6_PORTRANGE_HIGH = 0x1
+ IPV6_PORTRANGE_LOW = 0x2
+ IPV6_PREFER_TEMPADDR = 0x3f
+ IPV6_RECVDSTOPTS = 0x28
+ IPV6_RECVHOPLIMIT = 0x25
+ IPV6_RECVHOPOPTS = 0x27
+ IPV6_RECVPATHMTU = 0x2b
+ IPV6_RECVPKTINFO = 0x3d
+ IPV6_RECVRTHDR = 0x26
+ IPV6_RECVTCLASS = 0x23
+ IPV6_RTHDR = 0x33
+ IPV6_RTHDRDSTOPTS = 0x39
+ IPV6_RTHDR_LOOSE = 0x0
+ IPV6_RTHDR_STRICT = 0x1
+ IPV6_RTHDR_TYPE_0 = 0x0
+ IPV6_SOCKOPT_RESERVED1 = 0x3
+ IPV6_TCLASS = 0x24
+ IPV6_UNICAST_HOPS = 0x4
+ IPV6_USE_MIN_MTU = 0x2a
+ IPV6_V6ONLY = 0x1b
+ IPV6_VERSION = 0x60
+ IPV6_VERSION_MASK = 0xf0
+ IP_ADD_MEMBERSHIP = 0xc
+ IP_ADD_SOURCE_MEMBERSHIP = 0x46
+ IP_BLOCK_SOURCE = 0x48
+ IP_BOUND_IF = 0x19
+ IP_DEFAULT_MULTICAST_LOOP = 0x1
+ IP_DEFAULT_MULTICAST_TTL = 0x1
+ IP_DF = 0x4000
+ IP_DONTFRAG = 0x1c
+ IP_DROP_MEMBERSHIP = 0xd
+ IP_DROP_SOURCE_MEMBERSHIP = 0x47
+ IP_DUMMYNET_CONFIGURE = 0x3c
+ IP_DUMMYNET_DEL = 0x3d
+ IP_DUMMYNET_FLUSH = 0x3e
+ IP_DUMMYNET_GET = 0x40
+ IP_FAITH = 0x16
+ IP_FW_ADD = 0x28
+ IP_FW_DEL = 0x29
+ IP_FW_FLUSH = 0x2a
+ IP_FW_GET = 0x2c
+ IP_FW_RESETLOG = 0x2d
+ IP_FW_ZERO = 0x2b
+ IP_HDRINCL = 0x2
+ IP_IPSEC_POLICY = 0x15
+ IP_MAXPACKET = 0xffff
+ IP_MAX_GROUP_SRC_FILTER = 0x200
+ IP_MAX_MEMBERSHIPS = 0xfff
+ IP_MAX_SOCK_MUTE_FILTER = 0x80
+ IP_MAX_SOCK_SRC_FILTER = 0x80
+ IP_MF = 0x2000
+ IP_MIN_MEMBERSHIPS = 0x1f
+ IP_MSFILTER = 0x4a
+ IP_MSS = 0x240
+ IP_MULTICAST_IF = 0x9
+ IP_MULTICAST_IFINDEX = 0x42
+ IP_MULTICAST_LOOP = 0xb
+ IP_MULTICAST_TTL = 0xa
+ IP_MULTICAST_VIF = 0xe
+ IP_NAT__XXX = 0x37
+ IP_OFFMASK = 0x1fff
+ IP_OLD_FW_ADD = 0x32
+ IP_OLD_FW_DEL = 0x33
+ IP_OLD_FW_FLUSH = 0x34
+ IP_OLD_FW_GET = 0x36
+ IP_OLD_FW_RESETLOG = 0x38
+ IP_OLD_FW_ZERO = 0x35
+ IP_OPTIONS = 0x1
+ IP_PKTINFO = 0x1a
+ IP_PORTRANGE = 0x13
+ IP_PORTRANGE_DEFAULT = 0x0
+ IP_PORTRANGE_HIGH = 0x1
+ IP_PORTRANGE_LOW = 0x2
+ IP_RECVDSTADDR = 0x7
+ IP_RECVIF = 0x14
+ IP_RECVOPTS = 0x5
+ IP_RECVPKTINFO = 0x1a
+ IP_RECVRETOPTS = 0x6
+ IP_RECVTOS = 0x1b
+ IP_RECVTTL = 0x18
+ IP_RETOPTS = 0x8
+ IP_RF = 0x8000
+ IP_RSVP_OFF = 0x10
+ IP_RSVP_ON = 0xf
+ IP_RSVP_VIF_OFF = 0x12
+ IP_RSVP_VIF_ON = 0x11
+ IP_STRIPHDR = 0x17
+ IP_TOS = 0x3
+ IP_TRAFFIC_MGT_BACKGROUND = 0x41
+ IP_TTL = 0x4
+ IP_UNBLOCK_SOURCE = 0x49
+ ISIG = 0x80
+ ISTRIP = 0x20
+ IUTF8 = 0x4000
+ IXANY = 0x800
+ IXOFF = 0x400
+ IXON = 0x200
+ KERN_HOSTNAME = 0xa
+ KERN_OSRELEASE = 0x2
+ KERN_OSTYPE = 0x1
+ KERN_VERSION = 0x4
+ LOCAL_PEERCRED = 0x1
+ LOCAL_PEEREPID = 0x3
+ LOCAL_PEEREUUID = 0x5
+ LOCAL_PEERPID = 0x2
+ LOCAL_PEERTOKEN = 0x6
+ LOCAL_PEERUUID = 0x4
+ LOCK_EX = 0x2
+ LOCK_NB = 0x4
+ LOCK_SH = 0x1
+ LOCK_UN = 0x8
+ MADV_CAN_REUSE = 0x9
+ MADV_DONTNEED = 0x4
+ MADV_FREE = 0x5
+ MADV_FREE_REUSABLE = 0x7
+ MADV_FREE_REUSE = 0x8
+ MADV_NORMAL = 0x0
+ MADV_PAGEOUT = 0xa
+ MADV_RANDOM = 0x1
+ MADV_SEQUENTIAL = 0x2
+ MADV_WILLNEED = 0x3
+ MADV_ZERO_WIRED_PAGES = 0x6
+ MAP_32BIT = 0x8000
+ MAP_ANON = 0x1000
+ MAP_ANONYMOUS = 0x1000
+ MAP_COPY = 0x2
+ MAP_FILE = 0x0
+ MAP_FIXED = 0x10
+ MAP_HASSEMAPHORE = 0x200
+ MAP_JIT = 0x800
+ MAP_NOCACHE = 0x400
+ MAP_NOEXTEND = 0x100
+ MAP_NORESERVE = 0x40
+ MAP_PRIVATE = 0x2
+ MAP_RENAME = 0x20
+ MAP_RESERVED0080 = 0x80
+ MAP_RESILIENT_CODESIGN = 0x2000
+ MAP_RESILIENT_MEDIA = 0x4000
+ MAP_SHARED = 0x1
+ MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000
+ MAP_UNIX03 = 0x40000
+ MCAST_BLOCK_SOURCE = 0x54
+ MCAST_EXCLUDE = 0x2
+ MCAST_INCLUDE = 0x1
+ MCAST_JOIN_GROUP = 0x50
+ MCAST_JOIN_SOURCE_GROUP = 0x52
+ MCAST_LEAVE_GROUP = 0x51
+ MCAST_LEAVE_SOURCE_GROUP = 0x53
+ MCAST_UNBLOCK_SOURCE = 0x55
+ MCAST_UNDEFINED = 0x0
+ MCL_CURRENT = 0x1
+ MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_AUTOMOUNTED = 0x400000
+ MNT_CMDFLAGS = 0xf0000
+ MNT_CPROTECT = 0x80
+ MNT_DEFWRITE = 0x2000000
+ MNT_DONTBROWSE = 0x100000
+ MNT_DOVOLFS = 0x8000
+ MNT_DWAIT = 0x4
+ MNT_EXPORTED = 0x100
+ MNT_EXT_ROOT_DATA_VOL = 0x1
+ MNT_FORCE = 0x80000
+ MNT_IGNORE_OWNERSHIP = 0x200000
+ MNT_JOURNALED = 0x800000
+ MNT_LOCAL = 0x1000
+ MNT_MULTILABEL = 0x4000000
+ MNT_NOATIME = 0x10000000
+ MNT_NOBLOCK = 0x20000
+ MNT_NODEV = 0x10
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOUSERXATTR = 0x1000000
+ MNT_NOWAIT = 0x2
+ MNT_QUARANTINE = 0x400
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELOAD = 0x40000
+ MNT_REMOVABLE = 0x200
+ MNT_ROOTFS = 0x4000
+ MNT_SNAPSHOT = 0x40000000
+ MNT_STRICTATIME = 0x80000000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UNION = 0x20
+ MNT_UNKNOWNPERMISSIONS = 0x200000
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0xd7f0f7ff
+ MNT_WAIT = 0x1
+ MSG_CTRUNC = 0x20
+ MSG_DONTROUTE = 0x4
+ MSG_DONTWAIT = 0x80
+ MSG_EOF = 0x100
+ MSG_EOR = 0x8
+ MSG_FLUSH = 0x400
+ MSG_HAVEMORE = 0x2000
+ MSG_HOLD = 0x800
+ MSG_NEEDSA = 0x10000
+ MSG_NOSIGNAL = 0x80000
+ MSG_OOB = 0x1
+ MSG_PEEK = 0x2
+ MSG_RCVMORE = 0x4000
+ MSG_SEND = 0x1000
+ MSG_TRUNC = 0x10
+ MSG_WAITALL = 0x40
+ MSG_WAITSTREAM = 0x200
+ MS_ASYNC = 0x1
+ MS_DEACTIVATE = 0x8
+ MS_INVALIDATE = 0x2
+ MS_KILLPAGES = 0x4
+ MS_SYNC = 0x10
+ NAME_MAX = 0xff
+ NET_RT_DUMP = 0x1
+ NET_RT_DUMP2 = 0x7
+ NET_RT_FLAGS = 0x2
+ NET_RT_FLAGS_PRIV = 0xa
+ NET_RT_IFLIST = 0x3
+ NET_RT_IFLIST2 = 0x6
+ NET_RT_MAXID = 0xb
+ NET_RT_STAT = 0x4
+ NET_RT_TRASH = 0x5
+ NFDBITS = 0x20
+ NL0 = 0x0
+ NL1 = 0x100
+ NL2 = 0x200
+ NL3 = 0x300
+ NLDLY = 0x300
+ NOFLSH = 0x80000000
+ NOKERNINFO = 0x2000000
+ NOTE_ABSOLUTE = 0x8
+ NOTE_ATTRIB = 0x8
+ NOTE_BACKGROUND = 0x40
+ NOTE_CHILD = 0x4
+ NOTE_CRITICAL = 0x20
+ NOTE_DELETE = 0x1
+ NOTE_EXEC = 0x20000000
+ NOTE_EXIT = 0x80000000
+ NOTE_EXITSTATUS = 0x4000000
+ NOTE_EXIT_CSERROR = 0x40000
+ NOTE_EXIT_DECRYPTFAIL = 0x10000
+ NOTE_EXIT_DETAIL = 0x2000000
+ NOTE_EXIT_DETAIL_MASK = 0x70000
+ NOTE_EXIT_MEMORY = 0x20000
+ NOTE_EXIT_REPARENTED = 0x80000
+ NOTE_EXTEND = 0x4
+ NOTE_FFAND = 0x40000000
+ NOTE_FFCOPY = 0xc0000000
+ NOTE_FFCTRLMASK = 0xc0000000
+ NOTE_FFLAGSMASK = 0xffffff
+ NOTE_FFNOP = 0x0
+ NOTE_FFOR = 0x80000000
+ NOTE_FORK = 0x40000000
+ NOTE_FUNLOCK = 0x100
+ NOTE_LEEWAY = 0x10
+ NOTE_LINK = 0x10
+ NOTE_LOWAT = 0x1
+ NOTE_MACHTIME = 0x100
+ NOTE_MACH_CONTINUOUS_TIME = 0x80
+ NOTE_NONE = 0x80
+ NOTE_NSECONDS = 0x4
+ NOTE_OOB = 0x2
+ NOTE_PCTRLMASK = -0x100000
+ NOTE_PDATAMASK = 0xfffff
+ NOTE_REAP = 0x10000000
+ NOTE_RENAME = 0x20
+ NOTE_REVOKE = 0x40
+ NOTE_SECONDS = 0x1
+ NOTE_SIGNAL = 0x8000000
+ NOTE_TRACK = 0x1
+ NOTE_TRACKERR = 0x2
+ NOTE_TRIGGER = 0x1000000
+ NOTE_USECONDS = 0x2
+ NOTE_VM_ERROR = 0x10000000
+ NOTE_VM_PRESSURE = 0x80000000
+ NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000
+ NOTE_VM_PRESSURE_TERMINATE = 0x40000000
+ NOTE_WRITE = 0x2
+ OCRNL = 0x10
+ OFDEL = 0x20000
+ OFILL = 0x80
+ ONLCR = 0x2
+ ONLRET = 0x40
+ ONOCR = 0x20
+ ONOEOT = 0x8
+ OPOST = 0x1
+ OXTABS = 0x4
+ O_ACCMODE = 0x3
+ O_ALERT = 0x20000000
+ O_APPEND = 0x8
+ O_ASYNC = 0x40
+ O_CLOEXEC = 0x1000000
+ O_CREAT = 0x200
+ O_DIRECTORY = 0x100000
+ O_DP_GETRAWENCRYPTED = 0x1
+ O_DP_GETRAWUNENCRYPTED = 0x2
+ O_DSYNC = 0x400000
+ O_EVTONLY = 0x8000
+ O_EXCL = 0x800
+ O_EXLOCK = 0x20
+ O_FSYNC = 0x80
+ O_NDELAY = 0x4
+ O_NOCTTY = 0x20000
+ O_NOFOLLOW = 0x100
+ O_NOFOLLOW_ANY = 0x20000000
+ O_NONBLOCK = 0x4
+ O_POPUP = 0x80000000
+ O_RDONLY = 0x0
+ O_RDWR = 0x2
+ O_SHLOCK = 0x10
+ O_SYMLINK = 0x200000
+ O_SYNC = 0x80
+ O_TRUNC = 0x400
+ O_WRONLY = 0x1
+ PARENB = 0x1000
+ PARMRK = 0x8
+ PARODD = 0x2000
+ PENDIN = 0x20000000
+ PRIO_PGRP = 0x1
+ PRIO_PROCESS = 0x0
+ PRIO_USER = 0x2
+ PROT_EXEC = 0x4
+ PROT_NONE = 0x0
+ PROT_READ = 0x1
+ PROT_WRITE = 0x2
+ PT_ATTACH = 0xa
+ PT_ATTACHEXC = 0xe
+ PT_CONTINUE = 0x7
+ PT_DENY_ATTACH = 0x1f
+ PT_DETACH = 0xb
+ PT_FIRSTMACH = 0x20
+ PT_FORCEQUOTA = 0x1e
+ PT_KILL = 0x8
+ PT_READ_D = 0x2
+ PT_READ_I = 0x1
+ PT_READ_U = 0x3
+ PT_SIGEXC = 0xc
+ PT_STEP = 0x9
+ PT_THUPDATE = 0xd
+ PT_TRACE_ME = 0x0
+ PT_WRITE_D = 0x5
+ PT_WRITE_I = 0x4
+ PT_WRITE_U = 0x6
+ RLIMIT_AS = 0x5
+ RLIMIT_CORE = 0x4
+ RLIMIT_CPU = 0x0
+ RLIMIT_CPU_USAGE_MONITOR = 0x2
+ RLIMIT_DATA = 0x2
+ RLIMIT_FSIZE = 0x1
+ RLIMIT_MEMLOCK = 0x6
+ RLIMIT_NOFILE = 0x8
+ RLIMIT_NPROC = 0x7
+ RLIMIT_RSS = 0x5
+ RLIMIT_STACK = 0x3
+ RLIM_INFINITY = 0x7fffffffffffffff
+ RTAX_AUTHOR = 0x6
+ RTAX_BRD = 0x7
+ RTAX_DST = 0x0
+ RTAX_GATEWAY = 0x1
+ RTAX_GENMASK = 0x3
+ RTAX_IFA = 0x5
+ RTAX_IFP = 0x4
+ RTAX_MAX = 0x8
+ RTAX_NETMASK = 0x2
+ RTA_AUTHOR = 0x40
+ RTA_BRD = 0x80
+ RTA_DST = 0x1
+ RTA_GATEWAY = 0x2
+ RTA_GENMASK = 0x8
+ RTA_IFA = 0x20
+ RTA_IFP = 0x10
+ RTA_NETMASK = 0x4
+ RTF_BLACKHOLE = 0x1000
+ RTF_BROADCAST = 0x400000
+ RTF_CLONING = 0x100
+ RTF_CONDEMNED = 0x2000000
+ RTF_DEAD = 0x20000000
+ RTF_DELCLONE = 0x80
+ RTF_DONE = 0x40
+ RTF_DYNAMIC = 0x10
+ RTF_GATEWAY = 0x2
+ RTF_GLOBAL = 0x40000000
+ RTF_HOST = 0x4
+ RTF_IFREF = 0x4000000
+ RTF_IFSCOPE = 0x1000000
+ RTF_LLDATA = 0x400
+ RTF_LLINFO = 0x400
+ RTF_LOCAL = 0x200000
+ RTF_MODIFIED = 0x20
+ RTF_MULTICAST = 0x800000
+ RTF_NOIFREF = 0x2000
+ RTF_PINNED = 0x100000
+ RTF_PRCLONING = 0x10000
+ RTF_PROTO1 = 0x8000
+ RTF_PROTO2 = 0x4000
+ RTF_PROTO3 = 0x40000
+ RTF_PROXY = 0x8000000
+ RTF_REJECT = 0x8
+ RTF_ROUTER = 0x10000000
+ RTF_STATIC = 0x800
+ RTF_UP = 0x1
+ RTF_WASCLONED = 0x20000
+ RTF_XRESOLVE = 0x200
+ RTM_ADD = 0x1
+ RTM_CHANGE = 0x3
+ RTM_DELADDR = 0xd
+ RTM_DELETE = 0x2
+ RTM_DELMADDR = 0x10
+ RTM_GET = 0x4
+ RTM_GET2 = 0x14
+ RTM_IFINFO = 0xe
+ RTM_IFINFO2 = 0x12
+ RTM_LOCK = 0x8
+ RTM_LOSING = 0x5
+ RTM_MISS = 0x7
+ RTM_NEWADDR = 0xc
+ RTM_NEWMADDR = 0xf
+ RTM_NEWMADDR2 = 0x13
+ RTM_OLDADD = 0x9
+ RTM_OLDDEL = 0xa
+ RTM_REDIRECT = 0x6
+ RTM_RESOLVE = 0xb
+ RTM_RTTUNIT = 0xf4240
+ RTM_VERSION = 0x5
+ RTV_EXPIRE = 0x4
+ RTV_HOPCOUNT = 0x2
+ RTV_MTU = 0x1
+ RTV_RPIPE = 0x8
+ RTV_RTT = 0x40
+ RTV_RTTVAR = 0x80
+ RTV_SPIPE = 0x10
+ RTV_SSTHRESH = 0x20
+ RUSAGE_CHILDREN = -0x1
+ RUSAGE_SELF = 0x0
+ SCM_CREDS = 0x3
+ SCM_RIGHTS = 0x1
+ SCM_TIMESTAMP = 0x2
+ SCM_TIMESTAMP_MONOTONIC = 0x4
+ SEEK_CUR = 0x1
+ SEEK_DATA = 0x4
+ SEEK_END = 0x2
+ SEEK_HOLE = 0x3
+ SEEK_SET = 0x0
+ SHUT_RD = 0x0
+ SHUT_RDWR = 0x2
+ SHUT_WR = 0x1
+ SIOCADDMULTI = 0x80206931
+ SIOCAIFADDR = 0x8040691a
+ SIOCARPIPLL = 0xc0206928
+ SIOCATMARK = 0x40047307
+ SIOCAUTOADDR = 0xc0206926
+ SIOCAUTONETMASK = 0x80206927
+ SIOCDELMULTI = 0x80206932
+ SIOCDIFADDR = 0x80206919
+ SIOCDIFPHYADDR = 0x80206941
+ SIOCGDRVSPEC = 0xc028697b
+ SIOCGETVLAN = 0xc020697f
+ SIOCGHIWAT = 0x40047301
+ SIOCGIF6LOWPAN = 0xc02069c5
+ SIOCGIFADDR = 0xc0206921
+ SIOCGIFALTMTU = 0xc0206948
+ SIOCGIFASYNCMAP = 0xc020697c
+ SIOCGIFBOND = 0xc0206947
+ SIOCGIFBRDADDR = 0xc0206923
+ SIOCGIFCAP = 0xc020695b
+ SIOCGIFCONF = 0xc00c6924
+ SIOCGIFDEVMTU = 0xc0206944
+ SIOCGIFDSTADDR = 0xc0206922
+ SIOCGIFFLAGS = 0xc0206911
+ SIOCGIFFUNCTIONALTYPE = 0xc02069ad
+ SIOCGIFGENERIC = 0xc020693a
+ SIOCGIFKPI = 0xc0206987
+ SIOCGIFMAC = 0xc0206982
+ SIOCGIFMEDIA = 0xc02c6938
+ SIOCGIFMETRIC = 0xc0206917
+ SIOCGIFMTU = 0xc0206933
+ SIOCGIFNETMASK = 0xc0206925
+ SIOCGIFPDSTADDR = 0xc0206940
+ SIOCGIFPHYS = 0xc0206935
+ SIOCGIFPSRCADDR = 0xc020693f
+ SIOCGIFSTATUS = 0xc331693d
+ SIOCGIFVLAN = 0xc020697f
+ SIOCGIFWAKEFLAGS = 0xc0206988
+ SIOCGIFXMEDIA = 0xc02c6948
+ SIOCGLOWAT = 0x40047303
+ SIOCGPGRP = 0x40047309
+ SIOCIFCREATE = 0xc0206978
+ SIOCIFCREATE2 = 0xc020697a
+ SIOCIFDESTROY = 0x80206979
+ SIOCIFGCLONERS = 0xc0106981
+ SIOCRSLVMULTI = 0xc010693b
+ SIOCSDRVSPEC = 0x8028697b
+ SIOCSETVLAN = 0x8020697e
+ SIOCSHIWAT = 0x80047300
+ SIOCSIF6LOWPAN = 0x802069c4
+ SIOCSIFADDR = 0x8020690c
+ SIOCSIFALTMTU = 0x80206945
+ SIOCSIFASYNCMAP = 0x8020697d
+ SIOCSIFBOND = 0x80206946
+ SIOCSIFBRDADDR = 0x80206913
+ SIOCSIFCAP = 0x8020695a
+ SIOCSIFDSTADDR = 0x8020690e
+ SIOCSIFFLAGS = 0x80206910
+ SIOCSIFGENERIC = 0x80206939
+ SIOCSIFKPI = 0x80206986
+ SIOCSIFLLADDR = 0x8020693c
+ SIOCSIFMAC = 0x80206983
+ SIOCSIFMEDIA = 0xc0206937
+ SIOCSIFMETRIC = 0x80206918
+ SIOCSIFMTU = 0x80206934
+ SIOCSIFNETMASK = 0x80206916
+ SIOCSIFPHYADDR = 0x8040693e
+ SIOCSIFPHYS = 0x80206936
+ SIOCSIFVLAN = 0x8020697e
+ SIOCSLOWAT = 0x80047302
+ SIOCSPGRP = 0x80047308
+ SOCK_DGRAM = 0x2
+ SOCK_MAXADDRLEN = 0xff
+ SOCK_RAW = 0x3
+ SOCK_RDM = 0x4
+ SOCK_SEQPACKET = 0x5
+ SOCK_STREAM = 0x1
+ SOL_LOCAL = 0x0
+ SOL_SOCKET = 0xffff
+ SOMAXCONN = 0x80
+ SO_ACCEPTCONN = 0x2
+ SO_BROADCAST = 0x20
+ SO_DEBUG = 0x1
+ SO_DONTROUTE = 0x10
+ SO_DONTTRUNC = 0x2000
+ SO_ERROR = 0x1007
+ SO_KEEPALIVE = 0x8
+ SO_LABEL = 0x1010
+ SO_LINGER = 0x80
+ SO_LINGER_SEC = 0x1080
+ SO_NETSVC_MARKING_LEVEL = 0x1119
+ SO_NET_SERVICE_TYPE = 0x1116
+ SO_NKE = 0x1021
+ SO_NOADDRERR = 0x1023
+ SO_NOSIGPIPE = 0x1022
+ SO_NOTIFYCONFLICT = 0x1026
+ SO_NP_EXTENSIONS = 0x1083
+ SO_NREAD = 0x1020
+ SO_NUMRCVPKT = 0x1112
+ SO_NWRITE = 0x1024
+ SO_OOBINLINE = 0x100
+ SO_PEERLABEL = 0x1011
+ SO_RANDOMPORT = 0x1082
+ SO_RCVBUF = 0x1002
+ SO_RCVLOWAT = 0x1004
+ SO_RCVTIMEO = 0x1006
+ SO_REUSEADDR = 0x4
+ SO_REUSEPORT = 0x200
+ SO_REUSESHAREUID = 0x1025
+ SO_SNDBUF = 0x1001
+ SO_SNDLOWAT = 0x1003
+ SO_SNDTIMEO = 0x1005
+ SO_TIMESTAMP = 0x400
+ SO_TIMESTAMP_MONOTONIC = 0x800
+ SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1
+ SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4
+ SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2
+ SO_TRACKER_TRANSPARENCY_VERSION = 0x3
+ SO_TYPE = 0x1008
+ SO_UPCALLCLOSEWAIT = 0x1027
+ SO_USELOOPBACK = 0x40
+ SO_WANTMORE = 0x4000
+ SO_WANTOOBFLAG = 0x8000
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
+ TAB0 = 0x0
+ TAB1 = 0x400
+ TAB2 = 0x800
+ TAB3 = 0x4
+ TABDLY = 0xc04
+ TCIFLUSH = 0x1
+ TCIOFF = 0x3
+ TCIOFLUSH = 0x3
+ TCION = 0x4
+ TCOFLUSH = 0x2
+ TCOOFF = 0x1
+ TCOON = 0x2
+ TCPOPT_CC = 0xb
+ TCPOPT_CCECHO = 0xd
+ TCPOPT_CCNEW = 0xc
+ TCPOPT_EOL = 0x0
+ TCPOPT_FASTOPEN = 0x22
+ TCPOPT_MAXSEG = 0x2
+ TCPOPT_NOP = 0x1
+ TCPOPT_SACK = 0x5
+ TCPOPT_SACK_HDR = 0x1010500
+ TCPOPT_SACK_PERMITTED = 0x4
+ TCPOPT_SACK_PERMIT_HDR = 0x1010402
+ TCPOPT_SIGNATURE = 0x13
+ TCPOPT_TIMESTAMP = 0x8
+ TCPOPT_TSTAMP_HDR = 0x101080a
+ TCPOPT_WINDOW = 0x3
+ TCP_CONNECTIONTIMEOUT = 0x20
+ TCP_CONNECTION_INFO = 0x106
+ TCP_ENABLE_ECN = 0x104
+ TCP_FASTOPEN = 0x105
+ TCP_KEEPALIVE = 0x10
+ TCP_KEEPCNT = 0x102
+ TCP_KEEPINTVL = 0x101
+ TCP_MAXHLEN = 0x3c
+ TCP_MAXOLEN = 0x28
+ TCP_MAXSEG = 0x2
+ TCP_MAXWIN = 0xffff
+ TCP_MAX_SACK = 0x4
+ TCP_MAX_WINSHIFT = 0xe
+ TCP_MINMSS = 0xd8
+ TCP_MSS = 0x200
+ TCP_NODELAY = 0x1
+ TCP_NOOPT = 0x8
+ TCP_NOPUSH = 0x4
+ TCP_NOTSENT_LOWAT = 0x201
+ TCP_RXT_CONNDROPTIME = 0x80
+ TCP_RXT_FINDROP = 0x100
+ TCP_SENDMOREACKS = 0x103
+ TCSAFLUSH = 0x2
+ TIOCCBRK = 0x2000747a
+ TIOCCDTR = 0x20007478
+ TIOCCONS = 0x80047462
+ TIOCDCDTIMESTAMP = 0x40107458
+ TIOCDRAIN = 0x2000745e
+ TIOCDSIMICROCODE = 0x20007455
+ TIOCEXCL = 0x2000740d
+ TIOCEXT = 0x80047460
+ TIOCFLUSH = 0x80047410
+ TIOCGDRAINWAIT = 0x40047456
+ TIOCGETA = 0x40487413
+ TIOCGETD = 0x4004741a
+ TIOCGPGRP = 0x40047477
+ TIOCGWINSZ = 0x40087468
+ TIOCIXOFF = 0x20007480
+ TIOCIXON = 0x20007481
+ TIOCMBIC = 0x8004746b
+ TIOCMBIS = 0x8004746c
+ TIOCMGDTRWAIT = 0x4004745a
+ TIOCMGET = 0x4004746a
+ TIOCMODG = 0x40047403
+ TIOCMODS = 0x80047404
+ TIOCMSDTRWAIT = 0x8004745b
+ TIOCMSET = 0x8004746d
+ TIOCM_CAR = 0x40
+ TIOCM_CD = 0x40
+ TIOCM_CTS = 0x20
+ TIOCM_DSR = 0x100
+ TIOCM_DTR = 0x2
+ TIOCM_LE = 0x1
+ TIOCM_RI = 0x80
+ TIOCM_RNG = 0x80
+ TIOCM_RTS = 0x4
+ TIOCM_SR = 0x10
+ TIOCM_ST = 0x8
+ TIOCNOTTY = 0x20007471
+ TIOCNXCL = 0x2000740e
+ TIOCOUTQ = 0x40047473
+ TIOCPKT = 0x80047470
+ TIOCPKT_DATA = 0x0
+ TIOCPKT_DOSTOP = 0x20
+ TIOCPKT_FLUSHREAD = 0x1
+ TIOCPKT_FLUSHWRITE = 0x2
+ TIOCPKT_IOCTL = 0x40
+ TIOCPKT_NOSTOP = 0x10
+ TIOCPKT_START = 0x8
+ TIOCPKT_STOP = 0x4
+ TIOCPTYGNAME = 0x40807453
+ TIOCPTYGRANT = 0x20007454
+ TIOCPTYUNLK = 0x20007452
+ TIOCREMOTE = 0x80047469
+ TIOCSBRK = 0x2000747b
+ TIOCSCONS = 0x20007463
+ TIOCSCTTY = 0x20007461
+ TIOCSDRAINWAIT = 0x80047457
+ TIOCSDTR = 0x20007479
+ TIOCSETA = 0x80487414
+ TIOCSETAF = 0x80487416
+ TIOCSETAW = 0x80487415
+ TIOCSETD = 0x8004741b
+ TIOCSIG = 0x2000745f
+ TIOCSPGRP = 0x80047476
+ TIOCSTART = 0x2000746e
+ TIOCSTAT = 0x20007465
+ TIOCSTI = 0x80017472
+ TIOCSTOP = 0x2000746f
+ TIOCSWINSZ = 0x80087467
+ TIOCTIMESTAMP = 0x40107459
+ TIOCUCNTL = 0x80047466
+ TOSTOP = 0x400000
+ VDISCARD = 0xf
+ VDSUSP = 0xb
+ VEOF = 0x0
+ VEOL = 0x1
+ VEOL2 = 0x2
+ VERASE = 0x3
+ VINTR = 0x8
+ VKILL = 0x5
+ VLNEXT = 0xe
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
+ VMIN = 0x10
+ VM_LOADAVG = 0x2
+ VM_MACHFACTOR = 0x4
+ VM_MAXID = 0x6
+ VM_METER = 0x1
+ VM_SWAPUSAGE = 0x5
+ VQUIT = 0x9
+ VREPRINT = 0x6
+ VSTART = 0xc
+ VSTATUS = 0x12
+ VSTOP = 0xd
+ VSUSP = 0xa
+ VT0 = 0x0
+ VT1 = 0x10000
+ VTDLY = 0x10000
+ VTIME = 0x11
+ VWERASE = 0x4
+ WCONTINUED = 0x10
+ WCOREFLAG = 0x80
+ WEXITED = 0x4
+ WNOHANG = 0x1
+ WNOWAIT = 0x20
+ WORDSIZE = 0x40
+ WSTOPPED = 0x8
+ WUNTRACED = 0x2
+ XATTR_CREATE = 0x2
+ XATTR_NODEFAULT = 0x10
+ XATTR_NOFOLLOW = 0x1
+ XATTR_NOSECURITY = 0x8
+ XATTR_REPLACE = 0x4
+ XATTR_SHOWCOMPRESSION = 0x20
)
// Errors
diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
index 31009d7f0..e36f5178d 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
@@ -12,1556 +12,1582 @@ package unix
import "syscall"
const (
- AF_APPLETALK = 0x10
- AF_CCITT = 0xa
- AF_CHAOS = 0x5
- AF_CNT = 0x15
- AF_COIP = 0x14
- AF_DATAKIT = 0x9
- AF_DECnet = 0xc
- AF_DLI = 0xd
- AF_E164 = 0x1c
- AF_ECMA = 0x8
- AF_HYLINK = 0xf
- AF_IEEE80211 = 0x25
- AF_IMPLINK = 0x3
- AF_INET = 0x2
- AF_INET6 = 0x1e
- AF_IPX = 0x17
- AF_ISDN = 0x1c
- AF_ISO = 0x7
- AF_LAT = 0xe
- AF_LINK = 0x12
- AF_LOCAL = 0x1
- AF_MAX = 0x29
- AF_NATM = 0x1f
- AF_NDRV = 0x1b
- AF_NETBIOS = 0x21
- AF_NS = 0x6
- AF_OSI = 0x7
- AF_PPP = 0x22
- AF_PUP = 0x4
- AF_RESERVED_36 = 0x24
- AF_ROUTE = 0x11
- AF_SIP = 0x18
- AF_SNA = 0xb
- AF_SYSTEM = 0x20
- AF_SYS_CONTROL = 0x2
- AF_UNIX = 0x1
- AF_UNSPEC = 0x0
- AF_UTUN = 0x26
- AF_VSOCK = 0x28
- ALTWERASE = 0x200
- ATTR_BIT_MAP_COUNT = 0x5
- ATTR_CMN_ACCESSMASK = 0x20000
- ATTR_CMN_ACCTIME = 0x1000
- ATTR_CMN_ADDEDTIME = 0x10000000
- ATTR_CMN_BKUPTIME = 0x2000
- ATTR_CMN_CHGTIME = 0x800
- ATTR_CMN_CRTIME = 0x200
- ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
- ATTR_CMN_DEVID = 0x2
- ATTR_CMN_DOCUMENT_ID = 0x100000
- ATTR_CMN_ERROR = 0x20000000
- ATTR_CMN_EXTENDED_SECURITY = 0x400000
- ATTR_CMN_FILEID = 0x2000000
- ATTR_CMN_FLAGS = 0x40000
- ATTR_CMN_FNDRINFO = 0x4000
- ATTR_CMN_FSID = 0x4
- ATTR_CMN_FULLPATH = 0x8000000
- ATTR_CMN_GEN_COUNT = 0x80000
- ATTR_CMN_GRPID = 0x10000
- ATTR_CMN_GRPUUID = 0x1000000
- ATTR_CMN_MODTIME = 0x400
- ATTR_CMN_NAME = 0x1
- ATTR_CMN_NAMEDATTRCOUNT = 0x80000
- ATTR_CMN_NAMEDATTRLIST = 0x100000
- ATTR_CMN_OBJID = 0x20
- ATTR_CMN_OBJPERMANENTID = 0x40
- ATTR_CMN_OBJTAG = 0x10
- ATTR_CMN_OBJTYPE = 0x8
- ATTR_CMN_OWNERID = 0x8000
- ATTR_CMN_PARENTID = 0x4000000
- ATTR_CMN_PAROBJID = 0x80
- ATTR_CMN_RETURNED_ATTRS = 0x80000000
- ATTR_CMN_SCRIPT = 0x100
- ATTR_CMN_SETMASK = 0x51c7ff00
- ATTR_CMN_USERACCESS = 0x200000
- ATTR_CMN_UUID = 0x800000
- ATTR_CMN_VALIDMASK = 0xffffffff
- ATTR_CMN_VOLSETMASK = 0x6700
- ATTR_FILE_ALLOCSIZE = 0x4
- ATTR_FILE_CLUMPSIZE = 0x10
- ATTR_FILE_DATAALLOCSIZE = 0x400
- ATTR_FILE_DATAEXTENTS = 0x800
- ATTR_FILE_DATALENGTH = 0x200
- ATTR_FILE_DEVTYPE = 0x20
- ATTR_FILE_FILETYPE = 0x40
- ATTR_FILE_FORKCOUNT = 0x80
- ATTR_FILE_FORKLIST = 0x100
- ATTR_FILE_IOBLOCKSIZE = 0x8
- ATTR_FILE_LINKCOUNT = 0x1
- ATTR_FILE_RSRCALLOCSIZE = 0x2000
- ATTR_FILE_RSRCEXTENTS = 0x4000
- ATTR_FILE_RSRCLENGTH = 0x1000
- ATTR_FILE_SETMASK = 0x20
- ATTR_FILE_TOTALSIZE = 0x2
- ATTR_FILE_VALIDMASK = 0x37ff
- ATTR_VOL_ALLOCATIONCLUMP = 0x40
- ATTR_VOL_ATTRIBUTES = 0x40000000
- ATTR_VOL_CAPABILITIES = 0x20000
- ATTR_VOL_DIRCOUNT = 0x400
- ATTR_VOL_ENCODINGSUSED = 0x10000
- ATTR_VOL_FILECOUNT = 0x200
- ATTR_VOL_FSTYPE = 0x1
- ATTR_VOL_INFO = 0x80000000
- ATTR_VOL_IOBLOCKSIZE = 0x80
- ATTR_VOL_MAXOBJCOUNT = 0x800
- ATTR_VOL_MINALLOCATION = 0x20
- ATTR_VOL_MOUNTEDDEVICE = 0x8000
- ATTR_VOL_MOUNTFLAGS = 0x4000
- ATTR_VOL_MOUNTPOINT = 0x1000
- ATTR_VOL_NAME = 0x2000
- ATTR_VOL_OBJCOUNT = 0x100
- ATTR_VOL_QUOTA_SIZE = 0x10000000
- ATTR_VOL_RESERVED_SIZE = 0x20000000
- ATTR_VOL_SETMASK = 0x80002000
- ATTR_VOL_SIGNATURE = 0x2
- ATTR_VOL_SIZE = 0x4
- ATTR_VOL_SPACEAVAIL = 0x10
- ATTR_VOL_SPACEFREE = 0x8
- ATTR_VOL_UUID = 0x40000
- ATTR_VOL_VALIDMASK = 0xf007ffff
- B0 = 0x0
- B110 = 0x6e
- B115200 = 0x1c200
- B1200 = 0x4b0
- B134 = 0x86
- B14400 = 0x3840
- B150 = 0x96
- B1800 = 0x708
- B19200 = 0x4b00
- B200 = 0xc8
- B230400 = 0x38400
- B2400 = 0x960
- B28800 = 0x7080
- B300 = 0x12c
- B38400 = 0x9600
- B4800 = 0x12c0
- B50 = 0x32
- B57600 = 0xe100
- B600 = 0x258
- B7200 = 0x1c20
- B75 = 0x4b
- B76800 = 0x12c00
- B9600 = 0x2580
- BIOCFLUSH = 0x20004268
- BIOCGBLEN = 0x40044266
- BIOCGDLT = 0x4004426a
- BIOCGDLTLIST = 0xc00c4279
- BIOCGETIF = 0x4020426b
- BIOCGHDRCMPLT = 0x40044274
- BIOCGRSIG = 0x40044272
- BIOCGRTIMEOUT = 0x4010426e
- BIOCGSEESENT = 0x40044276
- BIOCGSTATS = 0x4008426f
- BIOCIMMEDIATE = 0x80044270
- BIOCPROMISC = 0x20004269
- BIOCSBLEN = 0xc0044266
- BIOCSDLT = 0x80044278
- BIOCSETF = 0x80104267
- BIOCSETFNR = 0x8010427e
- BIOCSETIF = 0x8020426c
- BIOCSHDRCMPLT = 0x80044275
- BIOCSRSIG = 0x80044273
- BIOCSRTIMEOUT = 0x8010426d
- BIOCSSEESENT = 0x80044277
- BIOCVERSION = 0x40044271
- BPF_A = 0x10
- BPF_ABS = 0x20
- BPF_ADD = 0x0
- BPF_ALIGNMENT = 0x4
- BPF_ALU = 0x4
- BPF_AND = 0x50
- BPF_B = 0x10
- BPF_DIV = 0x30
- BPF_H = 0x8
- BPF_IMM = 0x0
- BPF_IND = 0x40
- BPF_JA = 0x0
- BPF_JEQ = 0x10
- BPF_JGE = 0x30
- BPF_JGT = 0x20
- BPF_JMP = 0x5
- BPF_JSET = 0x40
- BPF_K = 0x0
- BPF_LD = 0x0
- BPF_LDX = 0x1
- BPF_LEN = 0x80
- BPF_LSH = 0x60
- BPF_MAJOR_VERSION = 0x1
- BPF_MAXBUFSIZE = 0x80000
- BPF_MAXINSNS = 0x200
- BPF_MEM = 0x60
- BPF_MEMWORDS = 0x10
- BPF_MINBUFSIZE = 0x20
- BPF_MINOR_VERSION = 0x1
- BPF_MISC = 0x7
- BPF_MSH = 0xa0
- BPF_MUL = 0x20
- BPF_NEG = 0x80
- BPF_OR = 0x40
- BPF_RELEASE = 0x30bb6
- BPF_RET = 0x6
- BPF_RSH = 0x70
- BPF_ST = 0x2
- BPF_STX = 0x3
- BPF_SUB = 0x10
- BPF_TAX = 0x0
- BPF_TXA = 0x80
- BPF_W = 0x0
- BPF_X = 0x8
- BRKINT = 0x2
- BS0 = 0x0
- BS1 = 0x8000
- BSDLY = 0x8000
- CFLUSH = 0xf
- CLOCAL = 0x8000
- CLOCK_MONOTONIC = 0x6
- CLOCK_MONOTONIC_RAW = 0x4
- CLOCK_MONOTONIC_RAW_APPROX = 0x5
- CLOCK_PROCESS_CPUTIME_ID = 0xc
- CLOCK_REALTIME = 0x0
- CLOCK_THREAD_CPUTIME_ID = 0x10
- CLOCK_UPTIME_RAW = 0x8
- CLOCK_UPTIME_RAW_APPROX = 0x9
- CLONE_NOFOLLOW = 0x1
- CLONE_NOOWNERCOPY = 0x2
- CR0 = 0x0
- CR1 = 0x1000
- CR2 = 0x2000
- CR3 = 0x3000
- CRDLY = 0x3000
- CREAD = 0x800
- CRTSCTS = 0x30000
- CS5 = 0x0
- CS6 = 0x100
- CS7 = 0x200
- CS8 = 0x300
- CSIZE = 0x300
- CSTART = 0x11
- CSTATUS = 0x14
- CSTOP = 0x13
- CSTOPB = 0x400
- CSUSP = 0x1a
- CTLIOCGINFO = 0xc0644e03
- CTL_HW = 0x6
- CTL_KERN = 0x1
- CTL_MAXNAME = 0xc
- CTL_NET = 0x4
- DLT_A429 = 0xb8
- DLT_A653_ICM = 0xb9
- DLT_AIRONET_HEADER = 0x78
- DLT_AOS = 0xde
- DLT_APPLE_IP_OVER_IEEE1394 = 0x8a
- DLT_ARCNET = 0x7
- DLT_ARCNET_LINUX = 0x81
- DLT_ATM_CLIP = 0x13
- DLT_ATM_RFC1483 = 0xb
- DLT_AURORA = 0x7e
- DLT_AX25 = 0x3
- DLT_AX25_KISS = 0xca
- DLT_BACNET_MS_TP = 0xa5
- DLT_BLUETOOTH_HCI_H4 = 0xbb
- DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
- DLT_CAN20B = 0xbe
- DLT_CAN_SOCKETCAN = 0xe3
- DLT_CHAOS = 0x5
- DLT_CHDLC = 0x68
- DLT_CISCO_IOS = 0x76
- DLT_C_HDLC = 0x68
- DLT_C_HDLC_WITH_DIR = 0xcd
- DLT_DBUS = 0xe7
- DLT_DECT = 0xdd
- DLT_DOCSIS = 0x8f
- DLT_DVB_CI = 0xeb
- DLT_ECONET = 0x73
- DLT_EN10MB = 0x1
- DLT_EN3MB = 0x2
- DLT_ENC = 0x6d
- DLT_ERF = 0xc5
- DLT_ERF_ETH = 0xaf
- DLT_ERF_POS = 0xb0
- DLT_FC_2 = 0xe0
- DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
- DLT_FDDI = 0xa
- DLT_FLEXRAY = 0xd2
- DLT_FRELAY = 0x6b
- DLT_FRELAY_WITH_DIR = 0xce
- DLT_GCOM_SERIAL = 0xad
- DLT_GCOM_T1E1 = 0xac
- DLT_GPF_F = 0xab
- DLT_GPF_T = 0xaa
- DLT_GPRS_LLC = 0xa9
- DLT_GSMTAP_ABIS = 0xda
- DLT_GSMTAP_UM = 0xd9
- DLT_HHDLC = 0x79
- DLT_IBM_SN = 0x92
- DLT_IBM_SP = 0x91
- DLT_IEEE802 = 0x6
- DLT_IEEE802_11 = 0x69
- DLT_IEEE802_11_RADIO = 0x7f
- DLT_IEEE802_11_RADIO_AVS = 0xa3
- DLT_IEEE802_15_4 = 0xc3
- DLT_IEEE802_15_4_LINUX = 0xbf
- DLT_IEEE802_15_4_NOFCS = 0xe6
- DLT_IEEE802_15_4_NONASK_PHY = 0xd7
- DLT_IEEE802_16_MAC_CPS = 0xbc
- DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1
- DLT_IPFILTER = 0x74
- DLT_IPMB = 0xc7
- DLT_IPMB_LINUX = 0xd1
- DLT_IPNET = 0xe2
- DLT_IPOIB = 0xf2
- DLT_IPV4 = 0xe4
- DLT_IPV6 = 0xe5
- DLT_IP_OVER_FC = 0x7a
- DLT_JUNIPER_ATM1 = 0x89
- DLT_JUNIPER_ATM2 = 0x87
- DLT_JUNIPER_ATM_CEMIC = 0xee
- DLT_JUNIPER_CHDLC = 0xb5
- DLT_JUNIPER_ES = 0x84
- DLT_JUNIPER_ETHER = 0xb2
- DLT_JUNIPER_FIBRECHANNEL = 0xea
- DLT_JUNIPER_FRELAY = 0xb4
- DLT_JUNIPER_GGSN = 0x85
- DLT_JUNIPER_ISM = 0xc2
- DLT_JUNIPER_MFR = 0x86
- DLT_JUNIPER_MLFR = 0x83
- DLT_JUNIPER_MLPPP = 0x82
- DLT_JUNIPER_MONITOR = 0xa4
- DLT_JUNIPER_PIC_PEER = 0xae
- DLT_JUNIPER_PPP = 0xb3
- DLT_JUNIPER_PPPOE = 0xa7
- DLT_JUNIPER_PPPOE_ATM = 0xa8
- DLT_JUNIPER_SERVICES = 0x88
- DLT_JUNIPER_SRX_E2E = 0xe9
- DLT_JUNIPER_ST = 0xc8
- DLT_JUNIPER_VP = 0xb7
- DLT_JUNIPER_VS = 0xe8
- DLT_LAPB_WITH_DIR = 0xcf
- DLT_LAPD = 0xcb
- DLT_LIN = 0xd4
- DLT_LINUX_EVDEV = 0xd8
- DLT_LINUX_IRDA = 0x90
- DLT_LINUX_LAPD = 0xb1
- DLT_LINUX_PPP_WITHDIRECTION = 0xa6
- DLT_LINUX_SLL = 0x71
- DLT_LOOP = 0x6c
- DLT_LTALK = 0x72
- DLT_MATCHING_MAX = 0x10a
- DLT_MATCHING_MIN = 0x68
- DLT_MFR = 0xb6
- DLT_MOST = 0xd3
- DLT_MPEG_2_TS = 0xf3
- DLT_MPLS = 0xdb
- DLT_MTP2 = 0x8c
- DLT_MTP2_WITH_PHDR = 0x8b
- DLT_MTP3 = 0x8d
- DLT_MUX27010 = 0xec
- DLT_NETANALYZER = 0xf0
- DLT_NETANALYZER_TRANSPARENT = 0xf1
- DLT_NFC_LLCP = 0xf5
- DLT_NFLOG = 0xef
- DLT_NG40 = 0xf4
- DLT_NULL = 0x0
- DLT_PCI_EXP = 0x7d
- DLT_PFLOG = 0x75
- DLT_PFSYNC = 0x12
- DLT_PPI = 0xc0
- DLT_PPP = 0x9
- DLT_PPP_BSDOS = 0x10
- DLT_PPP_ETHER = 0x33
- DLT_PPP_PPPD = 0xa6
- DLT_PPP_SERIAL = 0x32
- DLT_PPP_WITH_DIR = 0xcc
- DLT_PPP_WITH_DIRECTION = 0xa6
- DLT_PRISM_HEADER = 0x77
- DLT_PRONET = 0x4
- DLT_RAIF1 = 0xc6
- DLT_RAW = 0xc
- DLT_RIO = 0x7c
- DLT_SCCP = 0x8e
- DLT_SITA = 0xc4
- DLT_SLIP = 0x8
- DLT_SLIP_BSDOS = 0xf
- DLT_STANAG_5066_D_PDU = 0xed
- DLT_SUNATM = 0x7b
- DLT_SYMANTEC_FIREWALL = 0x63
- DLT_TZSP = 0x80
- DLT_USB = 0xba
- DLT_USB_DARWIN = 0x10a
- DLT_USB_LINUX = 0xbd
- DLT_USB_LINUX_MMAPPED = 0xdc
- DLT_USER0 = 0x93
- DLT_USER1 = 0x94
- DLT_USER10 = 0x9d
- DLT_USER11 = 0x9e
- DLT_USER12 = 0x9f
- DLT_USER13 = 0xa0
- DLT_USER14 = 0xa1
- DLT_USER15 = 0xa2
- DLT_USER2 = 0x95
- DLT_USER3 = 0x96
- DLT_USER4 = 0x97
- DLT_USER5 = 0x98
- DLT_USER6 = 0x99
- DLT_USER7 = 0x9a
- DLT_USER8 = 0x9b
- DLT_USER9 = 0x9c
- DLT_WIHART = 0xdf
- DLT_X2E_SERIAL = 0xd5
- DLT_X2E_XORAYA = 0xd6
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
- DT_FIFO = 0x1
- DT_LNK = 0xa
- DT_REG = 0x8
- DT_SOCK = 0xc
- DT_UNKNOWN = 0x0
- DT_WHT = 0xe
- ECHO = 0x8
- ECHOCTL = 0x40
- ECHOE = 0x2
- ECHOK = 0x4
- ECHOKE = 0x1
- ECHONL = 0x10
- ECHOPRT = 0x20
- EVFILT_AIO = -0x3
- EVFILT_EXCEPT = -0xf
- EVFILT_FS = -0x9
- EVFILT_MACHPORT = -0x8
- EVFILT_PROC = -0x5
- EVFILT_READ = -0x1
- EVFILT_SIGNAL = -0x6
- EVFILT_SYSCOUNT = 0x11
- EVFILT_THREADMARKER = 0x11
- EVFILT_TIMER = -0x7
- EVFILT_USER = -0xa
- EVFILT_VM = -0xc
- EVFILT_VNODE = -0x4
- EVFILT_WRITE = -0x2
- EV_ADD = 0x1
- EV_CLEAR = 0x20
- EV_DELETE = 0x2
- EV_DISABLE = 0x8
- EV_DISPATCH = 0x80
- EV_DISPATCH2 = 0x180
- EV_ENABLE = 0x4
- EV_EOF = 0x8000
- EV_ERROR = 0x4000
- EV_FLAG0 = 0x1000
- EV_FLAG1 = 0x2000
- EV_ONESHOT = 0x10
- EV_OOBAND = 0x2000
- EV_POLL = 0x1000
- EV_RECEIPT = 0x40
- EV_SYSFLAGS = 0xf000
- EV_UDATA_SPECIFIC = 0x100
- EV_VANISHED = 0x200
- EXTA = 0x4b00
- EXTB = 0x9600
- EXTPROC = 0x800
- FD_CLOEXEC = 0x1
- FD_SETSIZE = 0x400
- FF0 = 0x0
- FF1 = 0x4000
- FFDLY = 0x4000
- FLUSHO = 0x800000
- FSOPT_ATTR_CMN_EXTENDED = 0x20
- FSOPT_NOFOLLOW = 0x1
- FSOPT_NOINMEMUPDATE = 0x2
- FSOPT_PACK_INVAL_ATTRS = 0x8
- FSOPT_REPORT_FULLSIZE = 0x4
- FSOPT_RETURN_REALDEV = 0x200
- F_ADDFILESIGS = 0x3d
- F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
- F_ADDFILESIGS_INFO = 0x67
- F_ADDFILESIGS_RETURN = 0x61
- F_ADDFILESUPPL = 0x68
- F_ADDSIGS = 0x3b
- F_ALLOCATEALL = 0x4
- F_ALLOCATECONTIG = 0x2
- F_BARRIERFSYNC = 0x55
- F_CHECK_LV = 0x62
- F_CHKCLEAN = 0x29
- F_DUPFD = 0x0
- F_DUPFD_CLOEXEC = 0x43
- F_FINDSIGS = 0x4e
- F_FLUSH_DATA = 0x28
- F_FREEZE_FS = 0x35
- F_FULLFSYNC = 0x33
- F_GETCODEDIR = 0x48
- F_GETFD = 0x1
- F_GETFL = 0x3
- F_GETLK = 0x7
- F_GETLKPID = 0x42
- F_GETNOSIGPIPE = 0x4a
- F_GETOWN = 0x5
- F_GETPATH = 0x32
- F_GETPATH_MTMINFO = 0x47
- F_GETPATH_NOFIRMLINK = 0x66
- F_GETPROTECTIONCLASS = 0x3f
- F_GETPROTECTIONLEVEL = 0x4d
- F_GETSIGSINFO = 0x69
- F_GLOBAL_NOCACHE = 0x37
- F_LOG2PHYS = 0x31
- F_LOG2PHYS_EXT = 0x41
- F_NOCACHE = 0x30
- F_NODIRECT = 0x3e
- F_OK = 0x0
- F_PATHPKG_CHECK = 0x34
- F_PEOFPOSMODE = 0x3
- F_PREALLOCATE = 0x2a
- F_PUNCHHOLE = 0x63
- F_RDADVISE = 0x2c
- F_RDAHEAD = 0x2d
- F_RDLCK = 0x1
- F_SETBACKINGSTORE = 0x46
- F_SETFD = 0x2
- F_SETFL = 0x4
- F_SETLK = 0x8
- F_SETLKW = 0x9
- F_SETLKWTIMEOUT = 0xa
- F_SETNOSIGPIPE = 0x49
- F_SETOWN = 0x6
- F_SETPROTECTIONCLASS = 0x40
- F_SETSIZE = 0x2b
- F_SINGLE_WRITER = 0x4c
- F_SPECULATIVE_READ = 0x65
- F_THAW_FS = 0x36
- F_TRANSCODEKEY = 0x4b
- F_TRIM_ACTIVE_FILE = 0x64
- F_UNLCK = 0x2
- F_VOLPOSMODE = 0x4
- F_WRLCK = 0x3
- HUPCL = 0x4000
- HW_MACHINE = 0x1
- ICANON = 0x100
- ICMP6_FILTER = 0x12
- ICRNL = 0x100
- IEXTEN = 0x400
- IFF_ALLMULTI = 0x200
- IFF_ALTPHYS = 0x4000
- IFF_BROADCAST = 0x2
- IFF_DEBUG = 0x4
- IFF_LINK0 = 0x1000
- IFF_LINK1 = 0x2000
- IFF_LINK2 = 0x4000
- IFF_LOOPBACK = 0x8
- IFF_MULTICAST = 0x8000
- IFF_NOARP = 0x80
- IFF_NOTRAILERS = 0x20
- IFF_OACTIVE = 0x400
- IFF_POINTOPOINT = 0x10
- IFF_PROMISC = 0x100
- IFF_RUNNING = 0x40
- IFF_SIMPLEX = 0x800
- IFF_UP = 0x1
- IFNAMSIZ = 0x10
- IFT_1822 = 0x2
- IFT_6LOWPAN = 0x40
- IFT_AAL5 = 0x31
- IFT_ARCNET = 0x23
- IFT_ARCNETPLUS = 0x24
- IFT_ATM = 0x25
- IFT_BRIDGE = 0xd1
- IFT_CARP = 0xf8
- IFT_CELLULAR = 0xff
- IFT_CEPT = 0x13
- IFT_DS3 = 0x1e
- IFT_ENC = 0xf4
- IFT_EON = 0x19
- IFT_ETHER = 0x6
- IFT_FAITH = 0x38
- IFT_FDDI = 0xf
- IFT_FRELAY = 0x20
- IFT_FRELAYDCE = 0x2c
- IFT_GIF = 0x37
- IFT_HDH1822 = 0x3
- IFT_HIPPI = 0x2f
- IFT_HSSI = 0x2e
- IFT_HY = 0xe
- IFT_IEEE1394 = 0x90
- IFT_IEEE8023ADLAG = 0x88
- IFT_ISDNBASIC = 0x14
- IFT_ISDNPRIMARY = 0x15
- IFT_ISO88022LLC = 0x29
- IFT_ISO88023 = 0x7
- IFT_ISO88024 = 0x8
- IFT_ISO88025 = 0x9
- IFT_ISO88026 = 0xa
- IFT_L2VLAN = 0x87
- IFT_LAPB = 0x10
- IFT_LOCALTALK = 0x2a
- IFT_LOOP = 0x18
- IFT_MIOX25 = 0x26
- IFT_MODEM = 0x30
- IFT_NSIP = 0x1b
- IFT_OTHER = 0x1
- IFT_P10 = 0xc
- IFT_P80 = 0xd
- IFT_PARA = 0x22
- IFT_PDP = 0xff
- IFT_PFLOG = 0xf5
- IFT_PFSYNC = 0xf6
- IFT_PKTAP = 0xfe
- IFT_PPP = 0x17
- IFT_PROPMUX = 0x36
- IFT_PROPVIRTUAL = 0x35
- IFT_PTPSERIAL = 0x16
- IFT_RS232 = 0x21
- IFT_SDLC = 0x11
- IFT_SIP = 0x1f
- IFT_SLIP = 0x1c
- IFT_SMDSDXI = 0x2b
- IFT_SMDSICIP = 0x34
- IFT_SONET = 0x27
- IFT_SONETPATH = 0x32
- IFT_SONETVT = 0x33
- IFT_STARLAN = 0xb
- IFT_STF = 0x39
- IFT_T1 = 0x12
- IFT_ULTRA = 0x1d
- IFT_V35 = 0x2d
- IFT_X25 = 0x5
- IFT_X25DDN = 0x4
- IFT_X25PLE = 0x28
- IFT_XETHER = 0x1a
- IGNBRK = 0x1
- IGNCR = 0x80
- IGNPAR = 0x4
- IMAXBEL = 0x2000
- INLCR = 0x40
- INPCK = 0x10
- IN_CLASSA_HOST = 0xffffff
- IN_CLASSA_MAX = 0x80
- IN_CLASSA_NET = 0xff000000
- IN_CLASSA_NSHIFT = 0x18
- IN_CLASSB_HOST = 0xffff
- IN_CLASSB_MAX = 0x10000
- IN_CLASSB_NET = 0xffff0000
- IN_CLASSB_NSHIFT = 0x10
- IN_CLASSC_HOST = 0xff
- IN_CLASSC_NET = 0xffffff00
- IN_CLASSC_NSHIFT = 0x8
- IN_CLASSD_HOST = 0xfffffff
- IN_CLASSD_NET = 0xf0000000
- IN_CLASSD_NSHIFT = 0x1c
- IN_LINKLOCALNETNUM = 0xa9fe0000
- IN_LOOPBACKNET = 0x7f
- IPPROTO_3PC = 0x22
- IPPROTO_ADFS = 0x44
- IPPROTO_AH = 0x33
- IPPROTO_AHIP = 0x3d
- IPPROTO_APES = 0x63
- IPPROTO_ARGUS = 0xd
- IPPROTO_AX25 = 0x5d
- IPPROTO_BHA = 0x31
- IPPROTO_BLT = 0x1e
- IPPROTO_BRSATMON = 0x4c
- IPPROTO_CFTP = 0x3e
- IPPROTO_CHAOS = 0x10
- IPPROTO_CMTP = 0x26
- IPPROTO_CPHB = 0x49
- IPPROTO_CPNX = 0x48
- IPPROTO_DDP = 0x25
- IPPROTO_DGP = 0x56
- IPPROTO_DIVERT = 0xfe
- IPPROTO_DONE = 0x101
- IPPROTO_DSTOPTS = 0x3c
- IPPROTO_EGP = 0x8
- IPPROTO_EMCON = 0xe
- IPPROTO_ENCAP = 0x62
- IPPROTO_EON = 0x50
- IPPROTO_ESP = 0x32
- IPPROTO_ETHERIP = 0x61
- IPPROTO_FRAGMENT = 0x2c
- IPPROTO_GGP = 0x3
- IPPROTO_GMTP = 0x64
- IPPROTO_GRE = 0x2f
- IPPROTO_HELLO = 0x3f
- IPPROTO_HMP = 0x14
- IPPROTO_HOPOPTS = 0x0
- IPPROTO_ICMP = 0x1
- IPPROTO_ICMPV6 = 0x3a
- IPPROTO_IDP = 0x16
- IPPROTO_IDPR = 0x23
- IPPROTO_IDRP = 0x2d
- IPPROTO_IGMP = 0x2
- IPPROTO_IGP = 0x55
- IPPROTO_IGRP = 0x58
- IPPROTO_IL = 0x28
- IPPROTO_INLSP = 0x34
- IPPROTO_INP = 0x20
- IPPROTO_IP = 0x0
- IPPROTO_IPCOMP = 0x6c
- IPPROTO_IPCV = 0x47
- IPPROTO_IPEIP = 0x5e
- IPPROTO_IPIP = 0x4
- IPPROTO_IPPC = 0x43
- IPPROTO_IPV4 = 0x4
- IPPROTO_IPV6 = 0x29
- IPPROTO_IRTP = 0x1c
- IPPROTO_KRYPTOLAN = 0x41
- IPPROTO_LARP = 0x5b
- IPPROTO_LEAF1 = 0x19
- IPPROTO_LEAF2 = 0x1a
- IPPROTO_MAX = 0x100
- IPPROTO_MAXID = 0x34
- IPPROTO_MEAS = 0x13
- IPPROTO_MHRP = 0x30
- IPPROTO_MICP = 0x5f
- IPPROTO_MTP = 0x5c
- IPPROTO_MUX = 0x12
- IPPROTO_ND = 0x4d
- IPPROTO_NHRP = 0x36
- IPPROTO_NONE = 0x3b
- IPPROTO_NSP = 0x1f
- IPPROTO_NVPII = 0xb
- IPPROTO_OSPFIGP = 0x59
- IPPROTO_PGM = 0x71
- IPPROTO_PIGP = 0x9
- IPPROTO_PIM = 0x67
- IPPROTO_PRM = 0x15
- IPPROTO_PUP = 0xc
- IPPROTO_PVP = 0x4b
- IPPROTO_RAW = 0xff
- IPPROTO_RCCMON = 0xa
- IPPROTO_RDP = 0x1b
- IPPROTO_ROUTING = 0x2b
- IPPROTO_RSVP = 0x2e
- IPPROTO_RVD = 0x42
- IPPROTO_SATEXPAK = 0x40
- IPPROTO_SATMON = 0x45
- IPPROTO_SCCSP = 0x60
- IPPROTO_SCTP = 0x84
- IPPROTO_SDRP = 0x2a
- IPPROTO_SEP = 0x21
- IPPROTO_SRPC = 0x5a
- IPPROTO_ST = 0x7
- IPPROTO_SVMTP = 0x52
- IPPROTO_SWIPE = 0x35
- IPPROTO_TCF = 0x57
- IPPROTO_TCP = 0x6
- IPPROTO_TP = 0x1d
- IPPROTO_TPXX = 0x27
- IPPROTO_TRUNK1 = 0x17
- IPPROTO_TRUNK2 = 0x18
- IPPROTO_TTP = 0x54
- IPPROTO_UDP = 0x11
- IPPROTO_VINES = 0x53
- IPPROTO_VISA = 0x46
- IPPROTO_VMTP = 0x51
- IPPROTO_WBEXPAK = 0x4f
- IPPROTO_WBMON = 0x4e
- IPPROTO_WSN = 0x4a
- IPPROTO_XNET = 0xf
- IPPROTO_XTP = 0x24
- IPV6_2292DSTOPTS = 0x17
- IPV6_2292HOPLIMIT = 0x14
- IPV6_2292HOPOPTS = 0x16
- IPV6_2292NEXTHOP = 0x15
- IPV6_2292PKTINFO = 0x13
- IPV6_2292PKTOPTIONS = 0x19
- IPV6_2292RTHDR = 0x18
- IPV6_3542DSTOPTS = 0x32
- IPV6_3542HOPLIMIT = 0x2f
- IPV6_3542HOPOPTS = 0x31
- IPV6_3542NEXTHOP = 0x30
- IPV6_3542PKTINFO = 0x2e
- IPV6_3542RTHDR = 0x33
- IPV6_ADDR_MC_FLAGS_PREFIX = 0x20
- IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10
- IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30
- IPV6_AUTOFLOWLABEL = 0x3b
- IPV6_BINDV6ONLY = 0x1b
- IPV6_BOUND_IF = 0x7d
- IPV6_CHECKSUM = 0x1a
- IPV6_DEFAULT_MULTICAST_HOPS = 0x1
- IPV6_DEFAULT_MULTICAST_LOOP = 0x1
- IPV6_DEFHLIM = 0x40
- IPV6_DONTFRAG = 0x3e
- IPV6_DSTOPTS = 0x32
- IPV6_FAITH = 0x1d
- IPV6_FLOWINFO_MASK = 0xffffff0f
- IPV6_FLOWLABEL_MASK = 0xffff0f00
- IPV6_FLOW_ECN_MASK = 0x3000
- IPV6_FRAGTTL = 0x3c
- IPV6_FW_ADD = 0x1e
- IPV6_FW_DEL = 0x1f
- IPV6_FW_FLUSH = 0x20
- IPV6_FW_GET = 0x22
- IPV6_FW_ZERO = 0x21
- IPV6_HLIMDEC = 0x1
- IPV6_HOPLIMIT = 0x2f
- IPV6_HOPOPTS = 0x31
- IPV6_IPSEC_POLICY = 0x1c
- IPV6_JOIN_GROUP = 0xc
- IPV6_LEAVE_GROUP = 0xd
- IPV6_MAXHLIM = 0xff
- IPV6_MAXOPTHDR = 0x800
- IPV6_MAXPACKET = 0xffff
- IPV6_MAX_GROUP_SRC_FILTER = 0x200
- IPV6_MAX_MEMBERSHIPS = 0xfff
- IPV6_MAX_SOCK_SRC_FILTER = 0x80
- IPV6_MIN_MEMBERSHIPS = 0x1f
- IPV6_MMTU = 0x500
- IPV6_MSFILTER = 0x4a
- IPV6_MULTICAST_HOPS = 0xa
- IPV6_MULTICAST_IF = 0x9
- IPV6_MULTICAST_LOOP = 0xb
- IPV6_NEXTHOP = 0x30
- IPV6_PATHMTU = 0x2c
- IPV6_PKTINFO = 0x2e
- IPV6_PORTRANGE = 0xe
- IPV6_PORTRANGE_DEFAULT = 0x0
- IPV6_PORTRANGE_HIGH = 0x1
- IPV6_PORTRANGE_LOW = 0x2
- IPV6_PREFER_TEMPADDR = 0x3f
- IPV6_RECVDSTOPTS = 0x28
- IPV6_RECVHOPLIMIT = 0x25
- IPV6_RECVHOPOPTS = 0x27
- IPV6_RECVPATHMTU = 0x2b
- IPV6_RECVPKTINFO = 0x3d
- IPV6_RECVRTHDR = 0x26
- IPV6_RECVTCLASS = 0x23
- IPV6_RTHDR = 0x33
- IPV6_RTHDRDSTOPTS = 0x39
- IPV6_RTHDR_LOOSE = 0x0
- IPV6_RTHDR_STRICT = 0x1
- IPV6_RTHDR_TYPE_0 = 0x0
- IPV6_SOCKOPT_RESERVED1 = 0x3
- IPV6_TCLASS = 0x24
- IPV6_UNICAST_HOPS = 0x4
- IPV6_USE_MIN_MTU = 0x2a
- IPV6_V6ONLY = 0x1b
- IPV6_VERSION = 0x60
- IPV6_VERSION_MASK = 0xf0
- IP_ADD_MEMBERSHIP = 0xc
- IP_ADD_SOURCE_MEMBERSHIP = 0x46
- IP_BLOCK_SOURCE = 0x48
- IP_BOUND_IF = 0x19
- IP_DEFAULT_MULTICAST_LOOP = 0x1
- IP_DEFAULT_MULTICAST_TTL = 0x1
- IP_DF = 0x4000
- IP_DONTFRAG = 0x1c
- IP_DROP_MEMBERSHIP = 0xd
- IP_DROP_SOURCE_MEMBERSHIP = 0x47
- IP_DUMMYNET_CONFIGURE = 0x3c
- IP_DUMMYNET_DEL = 0x3d
- IP_DUMMYNET_FLUSH = 0x3e
- IP_DUMMYNET_GET = 0x40
- IP_FAITH = 0x16
- IP_FW_ADD = 0x28
- IP_FW_DEL = 0x29
- IP_FW_FLUSH = 0x2a
- IP_FW_GET = 0x2c
- IP_FW_RESETLOG = 0x2d
- IP_FW_ZERO = 0x2b
- IP_HDRINCL = 0x2
- IP_IPSEC_POLICY = 0x15
- IP_MAXPACKET = 0xffff
- IP_MAX_GROUP_SRC_FILTER = 0x200
- IP_MAX_MEMBERSHIPS = 0xfff
- IP_MAX_SOCK_MUTE_FILTER = 0x80
- IP_MAX_SOCK_SRC_FILTER = 0x80
- IP_MF = 0x2000
- IP_MIN_MEMBERSHIPS = 0x1f
- IP_MSFILTER = 0x4a
- IP_MSS = 0x240
- IP_MULTICAST_IF = 0x9
- IP_MULTICAST_IFINDEX = 0x42
- IP_MULTICAST_LOOP = 0xb
- IP_MULTICAST_TTL = 0xa
- IP_MULTICAST_VIF = 0xe
- IP_NAT__XXX = 0x37
- IP_OFFMASK = 0x1fff
- IP_OLD_FW_ADD = 0x32
- IP_OLD_FW_DEL = 0x33
- IP_OLD_FW_FLUSH = 0x34
- IP_OLD_FW_GET = 0x36
- IP_OLD_FW_RESETLOG = 0x38
- IP_OLD_FW_ZERO = 0x35
- IP_OPTIONS = 0x1
- IP_PKTINFO = 0x1a
- IP_PORTRANGE = 0x13
- IP_PORTRANGE_DEFAULT = 0x0
- IP_PORTRANGE_HIGH = 0x1
- IP_PORTRANGE_LOW = 0x2
- IP_RECVDSTADDR = 0x7
- IP_RECVIF = 0x14
- IP_RECVOPTS = 0x5
- IP_RECVPKTINFO = 0x1a
- IP_RECVRETOPTS = 0x6
- IP_RECVTOS = 0x1b
- IP_RECVTTL = 0x18
- IP_RETOPTS = 0x8
- IP_RF = 0x8000
- IP_RSVP_OFF = 0x10
- IP_RSVP_ON = 0xf
- IP_RSVP_VIF_OFF = 0x12
- IP_RSVP_VIF_ON = 0x11
- IP_STRIPHDR = 0x17
- IP_TOS = 0x3
- IP_TRAFFIC_MGT_BACKGROUND = 0x41
- IP_TTL = 0x4
- IP_UNBLOCK_SOURCE = 0x49
- ISIG = 0x80
- ISTRIP = 0x20
- IUTF8 = 0x4000
- IXANY = 0x800
- IXOFF = 0x400
- IXON = 0x200
- KERN_HOSTNAME = 0xa
- KERN_OSRELEASE = 0x2
- KERN_OSTYPE = 0x1
- KERN_VERSION = 0x4
- LOCAL_PEERCRED = 0x1
- LOCAL_PEEREPID = 0x3
- LOCAL_PEEREUUID = 0x5
- LOCAL_PEERPID = 0x2
- LOCAL_PEERTOKEN = 0x6
- LOCAL_PEERUUID = 0x4
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
- LOCK_UN = 0x8
- MADV_CAN_REUSE = 0x9
- MADV_DONTNEED = 0x4
- MADV_FREE = 0x5
- MADV_FREE_REUSABLE = 0x7
- MADV_FREE_REUSE = 0x8
- MADV_NORMAL = 0x0
- MADV_PAGEOUT = 0xa
- MADV_RANDOM = 0x1
- MADV_SEQUENTIAL = 0x2
- MADV_WILLNEED = 0x3
- MADV_ZERO_WIRED_PAGES = 0x6
- MAP_32BIT = 0x8000
- MAP_ANON = 0x1000
- MAP_ANONYMOUS = 0x1000
- MAP_COPY = 0x2
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
- MAP_HASSEMAPHORE = 0x200
- MAP_JIT = 0x800
- MAP_NOCACHE = 0x400
- MAP_NOEXTEND = 0x100
- MAP_NORESERVE = 0x40
- MAP_PRIVATE = 0x2
- MAP_RENAME = 0x20
- MAP_RESERVED0080 = 0x80
- MAP_RESILIENT_CODESIGN = 0x2000
- MAP_RESILIENT_MEDIA = 0x4000
- MAP_SHARED = 0x1
- MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000
- MAP_UNIX03 = 0x40000
- MCAST_BLOCK_SOURCE = 0x54
- MCAST_EXCLUDE = 0x2
- MCAST_INCLUDE = 0x1
- MCAST_JOIN_GROUP = 0x50
- MCAST_JOIN_SOURCE_GROUP = 0x52
- MCAST_LEAVE_GROUP = 0x51
- MCAST_LEAVE_SOURCE_GROUP = 0x53
- MCAST_UNBLOCK_SOURCE = 0x55
- MCAST_UNDEFINED = 0x0
- MCL_CURRENT = 0x1
- MCL_FUTURE = 0x2
- MNT_ASYNC = 0x40
- MNT_AUTOMOUNTED = 0x400000
- MNT_CMDFLAGS = 0xf0000
- MNT_CPROTECT = 0x80
- MNT_DEFWRITE = 0x2000000
- MNT_DONTBROWSE = 0x100000
- MNT_DOVOLFS = 0x8000
- MNT_DWAIT = 0x4
- MNT_EXPORTED = 0x100
- MNT_EXT_ROOT_DATA_VOL = 0x1
- MNT_FORCE = 0x80000
- MNT_IGNORE_OWNERSHIP = 0x200000
- MNT_JOURNALED = 0x800000
- MNT_LOCAL = 0x1000
- MNT_MULTILABEL = 0x4000000
- MNT_NOATIME = 0x10000000
- MNT_NOBLOCK = 0x20000
- MNT_NODEV = 0x10
- MNT_NOEXEC = 0x4
- MNT_NOSUID = 0x8
- MNT_NOUSERXATTR = 0x1000000
- MNT_NOWAIT = 0x2
- MNT_QUARANTINE = 0x400
- MNT_QUOTA = 0x2000
- MNT_RDONLY = 0x1
- MNT_RELOAD = 0x40000
- MNT_REMOVABLE = 0x200
- MNT_ROOTFS = 0x4000
- MNT_SNAPSHOT = 0x40000000
- MNT_STRICTATIME = 0x80000000
- MNT_SYNCHRONOUS = 0x2
- MNT_UNION = 0x20
- MNT_UNKNOWNPERMISSIONS = 0x200000
- MNT_UPDATE = 0x10000
- MNT_VISFLAGMASK = 0xd7f0f7ff
- MNT_WAIT = 0x1
- MSG_CTRUNC = 0x20
- MSG_DONTROUTE = 0x4
- MSG_DONTWAIT = 0x80
- MSG_EOF = 0x100
- MSG_EOR = 0x8
- MSG_FLUSH = 0x400
- MSG_HAVEMORE = 0x2000
- MSG_HOLD = 0x800
- MSG_NEEDSA = 0x10000
- MSG_NOSIGNAL = 0x80000
- MSG_OOB = 0x1
- MSG_PEEK = 0x2
- MSG_RCVMORE = 0x4000
- MSG_SEND = 0x1000
- MSG_TRUNC = 0x10
- MSG_WAITALL = 0x40
- MSG_WAITSTREAM = 0x200
- MS_ASYNC = 0x1
- MS_DEACTIVATE = 0x8
- MS_INVALIDATE = 0x2
- MS_KILLPAGES = 0x4
- MS_SYNC = 0x10
- NAME_MAX = 0xff
- NET_RT_DUMP = 0x1
- NET_RT_DUMP2 = 0x7
- NET_RT_FLAGS = 0x2
- NET_RT_FLAGS_PRIV = 0xa
- NET_RT_IFLIST = 0x3
- NET_RT_IFLIST2 = 0x6
- NET_RT_MAXID = 0xb
- NET_RT_STAT = 0x4
- NET_RT_TRASH = 0x5
- NFDBITS = 0x20
- NL0 = 0x0
- NL1 = 0x100
- NL2 = 0x200
- NL3 = 0x300
- NLDLY = 0x300
- NOFLSH = 0x80000000
- NOKERNINFO = 0x2000000
- NOTE_ABSOLUTE = 0x8
- NOTE_ATTRIB = 0x8
- NOTE_BACKGROUND = 0x40
- NOTE_CHILD = 0x4
- NOTE_CRITICAL = 0x20
- NOTE_DELETE = 0x1
- NOTE_EXEC = 0x20000000
- NOTE_EXIT = 0x80000000
- NOTE_EXITSTATUS = 0x4000000
- NOTE_EXIT_CSERROR = 0x40000
- NOTE_EXIT_DECRYPTFAIL = 0x10000
- NOTE_EXIT_DETAIL = 0x2000000
- NOTE_EXIT_DETAIL_MASK = 0x70000
- NOTE_EXIT_MEMORY = 0x20000
- NOTE_EXIT_REPARENTED = 0x80000
- NOTE_EXTEND = 0x4
- NOTE_FFAND = 0x40000000
- NOTE_FFCOPY = 0xc0000000
- NOTE_FFCTRLMASK = 0xc0000000
- NOTE_FFLAGSMASK = 0xffffff
- NOTE_FFNOP = 0x0
- NOTE_FFOR = 0x80000000
- NOTE_FORK = 0x40000000
- NOTE_FUNLOCK = 0x100
- NOTE_LEEWAY = 0x10
- NOTE_LINK = 0x10
- NOTE_LOWAT = 0x1
- NOTE_MACHTIME = 0x100
- NOTE_MACH_CONTINUOUS_TIME = 0x80
- NOTE_NONE = 0x80
- NOTE_NSECONDS = 0x4
- NOTE_OOB = 0x2
- NOTE_PCTRLMASK = -0x100000
- NOTE_PDATAMASK = 0xfffff
- NOTE_REAP = 0x10000000
- NOTE_RENAME = 0x20
- NOTE_REVOKE = 0x40
- NOTE_SECONDS = 0x1
- NOTE_SIGNAL = 0x8000000
- NOTE_TRACK = 0x1
- NOTE_TRACKERR = 0x2
- NOTE_TRIGGER = 0x1000000
- NOTE_USECONDS = 0x2
- NOTE_VM_ERROR = 0x10000000
- NOTE_VM_PRESSURE = 0x80000000
- NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000
- NOTE_VM_PRESSURE_TERMINATE = 0x40000000
- NOTE_WRITE = 0x2
- OCRNL = 0x10
- OFDEL = 0x20000
- OFILL = 0x80
- ONLCR = 0x2
- ONLRET = 0x40
- ONOCR = 0x20
- ONOEOT = 0x8
- OPOST = 0x1
- OXTABS = 0x4
- O_ACCMODE = 0x3
- O_ALERT = 0x20000000
- O_APPEND = 0x8
- O_ASYNC = 0x40
- O_CLOEXEC = 0x1000000
- O_CREAT = 0x200
- O_DIRECTORY = 0x100000
- O_DP_GETRAWENCRYPTED = 0x1
- O_DP_GETRAWUNENCRYPTED = 0x2
- O_DSYNC = 0x400000
- O_EVTONLY = 0x8000
- O_EXCL = 0x800
- O_EXLOCK = 0x20
- O_FSYNC = 0x80
- O_NDELAY = 0x4
- O_NOCTTY = 0x20000
- O_NOFOLLOW = 0x100
- O_NOFOLLOW_ANY = 0x20000000
- O_NONBLOCK = 0x4
- O_POPUP = 0x80000000
- O_RDONLY = 0x0
- O_RDWR = 0x2
- O_SHLOCK = 0x10
- O_SYMLINK = 0x200000
- O_SYNC = 0x80
- O_TRUNC = 0x400
- O_WRONLY = 0x1
- PARENB = 0x1000
- PARMRK = 0x8
- PARODD = 0x2000
- PENDIN = 0x20000000
- PRIO_PGRP = 0x1
- PRIO_PROCESS = 0x0
- PRIO_USER = 0x2
- PROT_EXEC = 0x4
- PROT_NONE = 0x0
- PROT_READ = 0x1
- PROT_WRITE = 0x2
- PT_ATTACH = 0xa
- PT_ATTACHEXC = 0xe
- PT_CONTINUE = 0x7
- PT_DENY_ATTACH = 0x1f
- PT_DETACH = 0xb
- PT_FIRSTMACH = 0x20
- PT_FORCEQUOTA = 0x1e
- PT_KILL = 0x8
- PT_READ_D = 0x2
- PT_READ_I = 0x1
- PT_READ_U = 0x3
- PT_SIGEXC = 0xc
- PT_STEP = 0x9
- PT_THUPDATE = 0xd
- PT_TRACE_ME = 0x0
- PT_WRITE_D = 0x5
- PT_WRITE_I = 0x4
- PT_WRITE_U = 0x6
- RLIMIT_AS = 0x5
- RLIMIT_CORE = 0x4
- RLIMIT_CPU = 0x0
- RLIMIT_CPU_USAGE_MONITOR = 0x2
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
- RLIMIT_MEMLOCK = 0x6
- RLIMIT_NOFILE = 0x8
- RLIMIT_NPROC = 0x7
- RLIMIT_RSS = 0x5
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = 0x7fffffffffffffff
- RTAX_AUTHOR = 0x6
- RTAX_BRD = 0x7
- RTAX_DST = 0x0
- RTAX_GATEWAY = 0x1
- RTAX_GENMASK = 0x3
- RTAX_IFA = 0x5
- RTAX_IFP = 0x4
- RTAX_MAX = 0x8
- RTAX_NETMASK = 0x2
- RTA_AUTHOR = 0x40
- RTA_BRD = 0x80
- RTA_DST = 0x1
- RTA_GATEWAY = 0x2
- RTA_GENMASK = 0x8
- RTA_IFA = 0x20
- RTA_IFP = 0x10
- RTA_NETMASK = 0x4
- RTF_BLACKHOLE = 0x1000
- RTF_BROADCAST = 0x400000
- RTF_CLONING = 0x100
- RTF_CONDEMNED = 0x2000000
- RTF_DEAD = 0x20000000
- RTF_DELCLONE = 0x80
- RTF_DONE = 0x40
- RTF_DYNAMIC = 0x10
- RTF_GATEWAY = 0x2
- RTF_GLOBAL = 0x40000000
- RTF_HOST = 0x4
- RTF_IFREF = 0x4000000
- RTF_IFSCOPE = 0x1000000
- RTF_LLDATA = 0x400
- RTF_LLINFO = 0x400
- RTF_LOCAL = 0x200000
- RTF_MODIFIED = 0x20
- RTF_MULTICAST = 0x800000
- RTF_NOIFREF = 0x2000
- RTF_PINNED = 0x100000
- RTF_PRCLONING = 0x10000
- RTF_PROTO1 = 0x8000
- RTF_PROTO2 = 0x4000
- RTF_PROTO3 = 0x40000
- RTF_PROXY = 0x8000000
- RTF_REJECT = 0x8
- RTF_ROUTER = 0x10000000
- RTF_STATIC = 0x800
- RTF_UP = 0x1
- RTF_WASCLONED = 0x20000
- RTF_XRESOLVE = 0x200
- RTM_ADD = 0x1
- RTM_CHANGE = 0x3
- RTM_DELADDR = 0xd
- RTM_DELETE = 0x2
- RTM_DELMADDR = 0x10
- RTM_GET = 0x4
- RTM_GET2 = 0x14
- RTM_IFINFO = 0xe
- RTM_IFINFO2 = 0x12
- RTM_LOCK = 0x8
- RTM_LOSING = 0x5
- RTM_MISS = 0x7
- RTM_NEWADDR = 0xc
- RTM_NEWMADDR = 0xf
- RTM_NEWMADDR2 = 0x13
- RTM_OLDADD = 0x9
- RTM_OLDDEL = 0xa
- RTM_REDIRECT = 0x6
- RTM_RESOLVE = 0xb
- RTM_RTTUNIT = 0xf4240
- RTM_VERSION = 0x5
- RTV_EXPIRE = 0x4
- RTV_HOPCOUNT = 0x2
- RTV_MTU = 0x1
- RTV_RPIPE = 0x8
- RTV_RTT = 0x40
- RTV_RTTVAR = 0x80
- RTV_SPIPE = 0x10
- RTV_SSTHRESH = 0x20
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
- SCM_CREDS = 0x3
- SCM_RIGHTS = 0x1
- SCM_TIMESTAMP = 0x2
- SCM_TIMESTAMP_MONOTONIC = 0x4
- SEEK_CUR = 0x1
- SEEK_DATA = 0x4
- SEEK_END = 0x2
- SEEK_HOLE = 0x3
- SEEK_SET = 0x0
- SHUT_RD = 0x0
- SHUT_RDWR = 0x2
- SHUT_WR = 0x1
- SIOCADDMULTI = 0x80206931
- SIOCAIFADDR = 0x8040691a
- SIOCARPIPLL = 0xc0206928
- SIOCATMARK = 0x40047307
- SIOCAUTOADDR = 0xc0206926
- SIOCAUTONETMASK = 0x80206927
- SIOCDELMULTI = 0x80206932
- SIOCDIFADDR = 0x80206919
- SIOCDIFPHYADDR = 0x80206941
- SIOCGDRVSPEC = 0xc028697b
- SIOCGETVLAN = 0xc020697f
- SIOCGHIWAT = 0x40047301
- SIOCGIF6LOWPAN = 0xc02069c5
- SIOCGIFADDR = 0xc0206921
- SIOCGIFALTMTU = 0xc0206948
- SIOCGIFASYNCMAP = 0xc020697c
- SIOCGIFBOND = 0xc0206947
- SIOCGIFBRDADDR = 0xc0206923
- SIOCGIFCAP = 0xc020695b
- SIOCGIFCONF = 0xc00c6924
- SIOCGIFDEVMTU = 0xc0206944
- SIOCGIFDSTADDR = 0xc0206922
- SIOCGIFFLAGS = 0xc0206911
- SIOCGIFFUNCTIONALTYPE = 0xc02069ad
- SIOCGIFGENERIC = 0xc020693a
- SIOCGIFKPI = 0xc0206987
- SIOCGIFMAC = 0xc0206982
- SIOCGIFMEDIA = 0xc02c6938
- SIOCGIFMETRIC = 0xc0206917
- SIOCGIFMTU = 0xc0206933
- SIOCGIFNETMASK = 0xc0206925
- SIOCGIFPDSTADDR = 0xc0206940
- SIOCGIFPHYS = 0xc0206935
- SIOCGIFPSRCADDR = 0xc020693f
- SIOCGIFSTATUS = 0xc331693d
- SIOCGIFVLAN = 0xc020697f
- SIOCGIFWAKEFLAGS = 0xc0206988
- SIOCGIFXMEDIA = 0xc02c6948
- SIOCGLOWAT = 0x40047303
- SIOCGPGRP = 0x40047309
- SIOCIFCREATE = 0xc0206978
- SIOCIFCREATE2 = 0xc020697a
- SIOCIFDESTROY = 0x80206979
- SIOCIFGCLONERS = 0xc0106981
- SIOCRSLVMULTI = 0xc010693b
- SIOCSDRVSPEC = 0x8028697b
- SIOCSETVLAN = 0x8020697e
- SIOCSHIWAT = 0x80047300
- SIOCSIF6LOWPAN = 0x802069c4
- SIOCSIFADDR = 0x8020690c
- SIOCSIFALTMTU = 0x80206945
- SIOCSIFASYNCMAP = 0x8020697d
- SIOCSIFBOND = 0x80206946
- SIOCSIFBRDADDR = 0x80206913
- SIOCSIFCAP = 0x8020695a
- SIOCSIFDSTADDR = 0x8020690e
- SIOCSIFFLAGS = 0x80206910
- SIOCSIFGENERIC = 0x80206939
- SIOCSIFKPI = 0x80206986
- SIOCSIFLLADDR = 0x8020693c
- SIOCSIFMAC = 0x80206983
- SIOCSIFMEDIA = 0xc0206937
- SIOCSIFMETRIC = 0x80206918
- SIOCSIFMTU = 0x80206934
- SIOCSIFNETMASK = 0x80206916
- SIOCSIFPHYADDR = 0x8040693e
- SIOCSIFPHYS = 0x80206936
- SIOCSIFVLAN = 0x8020697e
- SIOCSLOWAT = 0x80047302
- SIOCSPGRP = 0x80047308
- SOCK_DGRAM = 0x2
- SOCK_MAXADDRLEN = 0xff
- SOCK_RAW = 0x3
- SOCK_RDM = 0x4
- SOCK_SEQPACKET = 0x5
- SOCK_STREAM = 0x1
- SOL_LOCAL = 0x0
- SOL_SOCKET = 0xffff
- SOMAXCONN = 0x80
- SO_ACCEPTCONN = 0x2
- SO_BROADCAST = 0x20
- SO_DEBUG = 0x1
- SO_DONTROUTE = 0x10
- SO_DONTTRUNC = 0x2000
- SO_ERROR = 0x1007
- SO_KEEPALIVE = 0x8
- SO_LABEL = 0x1010
- SO_LINGER = 0x80
- SO_LINGER_SEC = 0x1080
- SO_NETSVC_MARKING_LEVEL = 0x1119
- SO_NET_SERVICE_TYPE = 0x1116
- SO_NKE = 0x1021
- SO_NOADDRERR = 0x1023
- SO_NOSIGPIPE = 0x1022
- SO_NOTIFYCONFLICT = 0x1026
- SO_NP_EXTENSIONS = 0x1083
- SO_NREAD = 0x1020
- SO_NUMRCVPKT = 0x1112
- SO_NWRITE = 0x1024
- SO_OOBINLINE = 0x100
- SO_PEERLABEL = 0x1011
- SO_RANDOMPORT = 0x1082
- SO_RCVBUF = 0x1002
- SO_RCVLOWAT = 0x1004
- SO_RCVTIMEO = 0x1006
- SO_REUSEADDR = 0x4
- SO_REUSEPORT = 0x200
- SO_REUSESHAREUID = 0x1025
- SO_SNDBUF = 0x1001
- SO_SNDLOWAT = 0x1003
- SO_SNDTIMEO = 0x1005
- SO_TIMESTAMP = 0x400
- SO_TIMESTAMP_MONOTONIC = 0x800
- SO_TYPE = 0x1008
- SO_UPCALLCLOSEWAIT = 0x1027
- SO_USELOOPBACK = 0x40
- SO_WANTMORE = 0x4000
- SO_WANTOOBFLAG = 0x8000
- S_IEXEC = 0x40
- S_IFBLK = 0x6000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFIFO = 0x1000
- S_IFLNK = 0xa000
- S_IFMT = 0xf000
- S_IFREG = 0x8000
- S_IFSOCK = 0xc000
- S_IFWHT = 0xe000
- S_IREAD = 0x100
- S_IRGRP = 0x20
- S_IROTH = 0x4
- S_IRUSR = 0x100
- S_IRWXG = 0x38
- S_IRWXO = 0x7
- S_IRWXU = 0x1c0
- S_ISGID = 0x400
- S_ISTXT = 0x200
- S_ISUID = 0x800
- S_ISVTX = 0x200
- S_IWGRP = 0x10
- S_IWOTH = 0x2
- S_IWRITE = 0x80
- S_IWUSR = 0x80
- S_IXGRP = 0x8
- S_IXOTH = 0x1
- S_IXUSR = 0x40
- TAB0 = 0x0
- TAB1 = 0x400
- TAB2 = 0x800
- TAB3 = 0x4
- TABDLY = 0xc04
- TCIFLUSH = 0x1
- TCIOFF = 0x3
- TCIOFLUSH = 0x3
- TCION = 0x4
- TCOFLUSH = 0x2
- TCOOFF = 0x1
- TCOON = 0x2
- TCP_CONNECTIONTIMEOUT = 0x20
- TCP_CONNECTION_INFO = 0x106
- TCP_ENABLE_ECN = 0x104
- TCP_FASTOPEN = 0x105
- TCP_KEEPALIVE = 0x10
- TCP_KEEPCNT = 0x102
- TCP_KEEPINTVL = 0x101
- TCP_MAXHLEN = 0x3c
- TCP_MAXOLEN = 0x28
- TCP_MAXSEG = 0x2
- TCP_MAXWIN = 0xffff
- TCP_MAX_SACK = 0x4
- TCP_MAX_WINSHIFT = 0xe
- TCP_MINMSS = 0xd8
- TCP_MSS = 0x200
- TCP_NODELAY = 0x1
- TCP_NOOPT = 0x8
- TCP_NOPUSH = 0x4
- TCP_NOTSENT_LOWAT = 0x201
- TCP_RXT_CONNDROPTIME = 0x80
- TCP_RXT_FINDROP = 0x100
- TCP_SENDMOREACKS = 0x103
- TCSAFLUSH = 0x2
- TIOCCBRK = 0x2000747a
- TIOCCDTR = 0x20007478
- TIOCCONS = 0x80047462
- TIOCDCDTIMESTAMP = 0x40107458
- TIOCDRAIN = 0x2000745e
- TIOCDSIMICROCODE = 0x20007455
- TIOCEXCL = 0x2000740d
- TIOCEXT = 0x80047460
- TIOCFLUSH = 0x80047410
- TIOCGDRAINWAIT = 0x40047456
- TIOCGETA = 0x40487413
- TIOCGETD = 0x4004741a
- TIOCGPGRP = 0x40047477
- TIOCGWINSZ = 0x40087468
- TIOCIXOFF = 0x20007480
- TIOCIXON = 0x20007481
- TIOCMBIC = 0x8004746b
- TIOCMBIS = 0x8004746c
- TIOCMGDTRWAIT = 0x4004745a
- TIOCMGET = 0x4004746a
- TIOCMODG = 0x40047403
- TIOCMODS = 0x80047404
- TIOCMSDTRWAIT = 0x8004745b
- TIOCMSET = 0x8004746d
- TIOCM_CAR = 0x40
- TIOCM_CD = 0x40
- TIOCM_CTS = 0x20
- TIOCM_DSR = 0x100
- TIOCM_DTR = 0x2
- TIOCM_LE = 0x1
- TIOCM_RI = 0x80
- TIOCM_RNG = 0x80
- TIOCM_RTS = 0x4
- TIOCM_SR = 0x10
- TIOCM_ST = 0x8
- TIOCNOTTY = 0x20007471
- TIOCNXCL = 0x2000740e
- TIOCOUTQ = 0x40047473
- TIOCPKT = 0x80047470
- TIOCPKT_DATA = 0x0
- TIOCPKT_DOSTOP = 0x20
- TIOCPKT_FLUSHREAD = 0x1
- TIOCPKT_FLUSHWRITE = 0x2
- TIOCPKT_IOCTL = 0x40
- TIOCPKT_NOSTOP = 0x10
- TIOCPKT_START = 0x8
- TIOCPKT_STOP = 0x4
- TIOCPTYGNAME = 0x40807453
- TIOCPTYGRANT = 0x20007454
- TIOCPTYUNLK = 0x20007452
- TIOCREMOTE = 0x80047469
- TIOCSBRK = 0x2000747b
- TIOCSCONS = 0x20007463
- TIOCSCTTY = 0x20007461
- TIOCSDRAINWAIT = 0x80047457
- TIOCSDTR = 0x20007479
- TIOCSETA = 0x80487414
- TIOCSETAF = 0x80487416
- TIOCSETAW = 0x80487415
- TIOCSETD = 0x8004741b
- TIOCSIG = 0x2000745f
- TIOCSPGRP = 0x80047476
- TIOCSTART = 0x2000746e
- TIOCSTAT = 0x20007465
- TIOCSTI = 0x80017472
- TIOCSTOP = 0x2000746f
- TIOCSWINSZ = 0x80087467
- TIOCTIMESTAMP = 0x40107459
- TIOCUCNTL = 0x80047466
- TOSTOP = 0x400000
- VDISCARD = 0xf
- VDSUSP = 0xb
- VEOF = 0x0
- VEOL = 0x1
- VEOL2 = 0x2
- VERASE = 0x3
- VINTR = 0x8
- VKILL = 0x5
- VLNEXT = 0xe
- VMIN = 0x10
- VM_LOADAVG = 0x2
- VM_MACHFACTOR = 0x4
- VM_MAXID = 0x6
- VM_METER = 0x1
- VM_SWAPUSAGE = 0x5
- VQUIT = 0x9
- VREPRINT = 0x6
- VSTART = 0xc
- VSTATUS = 0x12
- VSTOP = 0xd
- VSUSP = 0xa
- VT0 = 0x0
- VT1 = 0x10000
- VTDLY = 0x10000
- VTIME = 0x11
- VWERASE = 0x4
- WCONTINUED = 0x10
- WCOREFLAG = 0x80
- WEXITED = 0x4
- WNOHANG = 0x1
- WNOWAIT = 0x20
- WORDSIZE = 0x40
- WSTOPPED = 0x8
- WUNTRACED = 0x2
- XATTR_CREATE = 0x2
- XATTR_NODEFAULT = 0x10
- XATTR_NOFOLLOW = 0x1
- XATTR_NOSECURITY = 0x8
- XATTR_REPLACE = 0x4
- XATTR_SHOWCOMPRESSION = 0x20
+ AF_APPLETALK = 0x10
+ AF_CCITT = 0xa
+ AF_CHAOS = 0x5
+ AF_CNT = 0x15
+ AF_COIP = 0x14
+ AF_DATAKIT = 0x9
+ AF_DECnet = 0xc
+ AF_DLI = 0xd
+ AF_E164 = 0x1c
+ AF_ECMA = 0x8
+ AF_HYLINK = 0xf
+ AF_IEEE80211 = 0x25
+ AF_IMPLINK = 0x3
+ AF_INET = 0x2
+ AF_INET6 = 0x1e
+ AF_IPX = 0x17
+ AF_ISDN = 0x1c
+ AF_ISO = 0x7
+ AF_LAT = 0xe
+ AF_LINK = 0x12
+ AF_LOCAL = 0x1
+ AF_MAX = 0x29
+ AF_NATM = 0x1f
+ AF_NDRV = 0x1b
+ AF_NETBIOS = 0x21
+ AF_NS = 0x6
+ AF_OSI = 0x7
+ AF_PPP = 0x22
+ AF_PUP = 0x4
+ AF_RESERVED_36 = 0x24
+ AF_ROUTE = 0x11
+ AF_SIP = 0x18
+ AF_SNA = 0xb
+ AF_SYSTEM = 0x20
+ AF_SYS_CONTROL = 0x2
+ AF_UNIX = 0x1
+ AF_UNSPEC = 0x0
+ AF_UTUN = 0x26
+ AF_VSOCK = 0x28
+ ALTWERASE = 0x200
+ ATTR_BIT_MAP_COUNT = 0x5
+ ATTR_CMN_ACCESSMASK = 0x20000
+ ATTR_CMN_ACCTIME = 0x1000
+ ATTR_CMN_ADDEDTIME = 0x10000000
+ ATTR_CMN_BKUPTIME = 0x2000
+ ATTR_CMN_CHGTIME = 0x800
+ ATTR_CMN_CRTIME = 0x200
+ ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000
+ ATTR_CMN_DEVID = 0x2
+ ATTR_CMN_DOCUMENT_ID = 0x100000
+ ATTR_CMN_ERROR = 0x20000000
+ ATTR_CMN_EXTENDED_SECURITY = 0x400000
+ ATTR_CMN_FILEID = 0x2000000
+ ATTR_CMN_FLAGS = 0x40000
+ ATTR_CMN_FNDRINFO = 0x4000
+ ATTR_CMN_FSID = 0x4
+ ATTR_CMN_FULLPATH = 0x8000000
+ ATTR_CMN_GEN_COUNT = 0x80000
+ ATTR_CMN_GRPID = 0x10000
+ ATTR_CMN_GRPUUID = 0x1000000
+ ATTR_CMN_MODTIME = 0x400
+ ATTR_CMN_NAME = 0x1
+ ATTR_CMN_NAMEDATTRCOUNT = 0x80000
+ ATTR_CMN_NAMEDATTRLIST = 0x100000
+ ATTR_CMN_OBJID = 0x20
+ ATTR_CMN_OBJPERMANENTID = 0x40
+ ATTR_CMN_OBJTAG = 0x10
+ ATTR_CMN_OBJTYPE = 0x8
+ ATTR_CMN_OWNERID = 0x8000
+ ATTR_CMN_PARENTID = 0x4000000
+ ATTR_CMN_PAROBJID = 0x80
+ ATTR_CMN_RETURNED_ATTRS = 0x80000000
+ ATTR_CMN_SCRIPT = 0x100
+ ATTR_CMN_SETMASK = 0x51c7ff00
+ ATTR_CMN_USERACCESS = 0x200000
+ ATTR_CMN_UUID = 0x800000
+ ATTR_CMN_VALIDMASK = 0xffffffff
+ ATTR_CMN_VOLSETMASK = 0x6700
+ ATTR_FILE_ALLOCSIZE = 0x4
+ ATTR_FILE_CLUMPSIZE = 0x10
+ ATTR_FILE_DATAALLOCSIZE = 0x400
+ ATTR_FILE_DATAEXTENTS = 0x800
+ ATTR_FILE_DATALENGTH = 0x200
+ ATTR_FILE_DEVTYPE = 0x20
+ ATTR_FILE_FILETYPE = 0x40
+ ATTR_FILE_FORKCOUNT = 0x80
+ ATTR_FILE_FORKLIST = 0x100
+ ATTR_FILE_IOBLOCKSIZE = 0x8
+ ATTR_FILE_LINKCOUNT = 0x1
+ ATTR_FILE_RSRCALLOCSIZE = 0x2000
+ ATTR_FILE_RSRCEXTENTS = 0x4000
+ ATTR_FILE_RSRCLENGTH = 0x1000
+ ATTR_FILE_SETMASK = 0x20
+ ATTR_FILE_TOTALSIZE = 0x2
+ ATTR_FILE_VALIDMASK = 0x37ff
+ ATTR_VOL_ALLOCATIONCLUMP = 0x40
+ ATTR_VOL_ATTRIBUTES = 0x40000000
+ ATTR_VOL_CAPABILITIES = 0x20000
+ ATTR_VOL_DIRCOUNT = 0x400
+ ATTR_VOL_ENCODINGSUSED = 0x10000
+ ATTR_VOL_FILECOUNT = 0x200
+ ATTR_VOL_FSTYPE = 0x1
+ ATTR_VOL_INFO = 0x80000000
+ ATTR_VOL_IOBLOCKSIZE = 0x80
+ ATTR_VOL_MAXOBJCOUNT = 0x800
+ ATTR_VOL_MINALLOCATION = 0x20
+ ATTR_VOL_MOUNTEDDEVICE = 0x8000
+ ATTR_VOL_MOUNTFLAGS = 0x4000
+ ATTR_VOL_MOUNTPOINT = 0x1000
+ ATTR_VOL_NAME = 0x2000
+ ATTR_VOL_OBJCOUNT = 0x100
+ ATTR_VOL_QUOTA_SIZE = 0x10000000
+ ATTR_VOL_RESERVED_SIZE = 0x20000000
+ ATTR_VOL_SETMASK = 0x80002000
+ ATTR_VOL_SIGNATURE = 0x2
+ ATTR_VOL_SIZE = 0x4
+ ATTR_VOL_SPACEAVAIL = 0x10
+ ATTR_VOL_SPACEFREE = 0x8
+ ATTR_VOL_SPACEUSED = 0x800000
+ ATTR_VOL_UUID = 0x40000
+ ATTR_VOL_VALIDMASK = 0xf087ffff
+ B0 = 0x0
+ B110 = 0x6e
+ B115200 = 0x1c200
+ B1200 = 0x4b0
+ B134 = 0x86
+ B14400 = 0x3840
+ B150 = 0x96
+ B1800 = 0x708
+ B19200 = 0x4b00
+ B200 = 0xc8
+ B230400 = 0x38400
+ B2400 = 0x960
+ B28800 = 0x7080
+ B300 = 0x12c
+ B38400 = 0x9600
+ B4800 = 0x12c0
+ B50 = 0x32
+ B57600 = 0xe100
+ B600 = 0x258
+ B7200 = 0x1c20
+ B75 = 0x4b
+ B76800 = 0x12c00
+ B9600 = 0x2580
+ BIOCFLUSH = 0x20004268
+ BIOCGBLEN = 0x40044266
+ BIOCGDLT = 0x4004426a
+ BIOCGDLTLIST = 0xc00c4279
+ BIOCGETIF = 0x4020426b
+ BIOCGHDRCMPLT = 0x40044274
+ BIOCGRSIG = 0x40044272
+ BIOCGRTIMEOUT = 0x4010426e
+ BIOCGSEESENT = 0x40044276
+ BIOCGSTATS = 0x4008426f
+ BIOCIMMEDIATE = 0x80044270
+ BIOCPROMISC = 0x20004269
+ BIOCSBLEN = 0xc0044266
+ BIOCSDLT = 0x80044278
+ BIOCSETF = 0x80104267
+ BIOCSETFNR = 0x8010427e
+ BIOCSETIF = 0x8020426c
+ BIOCSHDRCMPLT = 0x80044275
+ BIOCSRSIG = 0x80044273
+ BIOCSRTIMEOUT = 0x8010426d
+ BIOCSSEESENT = 0x80044277
+ BIOCVERSION = 0x40044271
+ BPF_A = 0x10
+ BPF_ABS = 0x20
+ BPF_ADD = 0x0
+ BPF_ALIGNMENT = 0x4
+ BPF_ALU = 0x4
+ BPF_AND = 0x50
+ BPF_B = 0x10
+ BPF_DIV = 0x30
+ BPF_H = 0x8
+ BPF_IMM = 0x0
+ BPF_IND = 0x40
+ BPF_JA = 0x0
+ BPF_JEQ = 0x10
+ BPF_JGE = 0x30
+ BPF_JGT = 0x20
+ BPF_JMP = 0x5
+ BPF_JSET = 0x40
+ BPF_K = 0x0
+ BPF_LD = 0x0
+ BPF_LDX = 0x1
+ BPF_LEN = 0x80
+ BPF_LSH = 0x60
+ BPF_MAJOR_VERSION = 0x1
+ BPF_MAXBUFSIZE = 0x80000
+ BPF_MAXINSNS = 0x200
+ BPF_MEM = 0x60
+ BPF_MEMWORDS = 0x10
+ BPF_MINBUFSIZE = 0x20
+ BPF_MINOR_VERSION = 0x1
+ BPF_MISC = 0x7
+ BPF_MSH = 0xa0
+ BPF_MUL = 0x20
+ BPF_NEG = 0x80
+ BPF_OR = 0x40
+ BPF_RELEASE = 0x30bb6
+ BPF_RET = 0x6
+ BPF_RSH = 0x70
+ BPF_ST = 0x2
+ BPF_STX = 0x3
+ BPF_SUB = 0x10
+ BPF_TAX = 0x0
+ BPF_TXA = 0x80
+ BPF_W = 0x0
+ BPF_X = 0x8
+ BRKINT = 0x2
+ BS0 = 0x0
+ BS1 = 0x8000
+ BSDLY = 0x8000
+ CFLUSH = 0xf
+ CLOCAL = 0x8000
+ CLOCK_MONOTONIC = 0x6
+ CLOCK_MONOTONIC_RAW = 0x4
+ CLOCK_MONOTONIC_RAW_APPROX = 0x5
+ CLOCK_PROCESS_CPUTIME_ID = 0xc
+ CLOCK_REALTIME = 0x0
+ CLOCK_THREAD_CPUTIME_ID = 0x10
+ CLOCK_UPTIME_RAW = 0x8
+ CLOCK_UPTIME_RAW_APPROX = 0x9
+ CLONE_NOFOLLOW = 0x1
+ CLONE_NOOWNERCOPY = 0x2
+ CR0 = 0x0
+ CR1 = 0x1000
+ CR2 = 0x2000
+ CR3 = 0x3000
+ CRDLY = 0x3000
+ CREAD = 0x800
+ CRTSCTS = 0x30000
+ CS5 = 0x0
+ CS6 = 0x100
+ CS7 = 0x200
+ CS8 = 0x300
+ CSIZE = 0x300
+ CSTART = 0x11
+ CSTATUS = 0x14
+ CSTOP = 0x13
+ CSTOPB = 0x400
+ CSUSP = 0x1a
+ CTLIOCGINFO = 0xc0644e03
+ CTL_HW = 0x6
+ CTL_KERN = 0x1
+ CTL_MAXNAME = 0xc
+ CTL_NET = 0x4
+ DLT_A429 = 0xb8
+ DLT_A653_ICM = 0xb9
+ DLT_AIRONET_HEADER = 0x78
+ DLT_AOS = 0xde
+ DLT_APPLE_IP_OVER_IEEE1394 = 0x8a
+ DLT_ARCNET = 0x7
+ DLT_ARCNET_LINUX = 0x81
+ DLT_ATM_CLIP = 0x13
+ DLT_ATM_RFC1483 = 0xb
+ DLT_AURORA = 0x7e
+ DLT_AX25 = 0x3
+ DLT_AX25_KISS = 0xca
+ DLT_BACNET_MS_TP = 0xa5
+ DLT_BLUETOOTH_HCI_H4 = 0xbb
+ DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
+ DLT_CAN20B = 0xbe
+ DLT_CAN_SOCKETCAN = 0xe3
+ DLT_CHAOS = 0x5
+ DLT_CHDLC = 0x68
+ DLT_CISCO_IOS = 0x76
+ DLT_C_HDLC = 0x68
+ DLT_C_HDLC_WITH_DIR = 0xcd
+ DLT_DBUS = 0xe7
+ DLT_DECT = 0xdd
+ DLT_DOCSIS = 0x8f
+ DLT_DVB_CI = 0xeb
+ DLT_ECONET = 0x73
+ DLT_EN10MB = 0x1
+ DLT_EN3MB = 0x2
+ DLT_ENC = 0x6d
+ DLT_ERF = 0xc5
+ DLT_ERF_ETH = 0xaf
+ DLT_ERF_POS = 0xb0
+ DLT_FC_2 = 0xe0
+ DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
+ DLT_FDDI = 0xa
+ DLT_FLEXRAY = 0xd2
+ DLT_FRELAY = 0x6b
+ DLT_FRELAY_WITH_DIR = 0xce
+ DLT_GCOM_SERIAL = 0xad
+ DLT_GCOM_T1E1 = 0xac
+ DLT_GPF_F = 0xab
+ DLT_GPF_T = 0xaa
+ DLT_GPRS_LLC = 0xa9
+ DLT_GSMTAP_ABIS = 0xda
+ DLT_GSMTAP_UM = 0xd9
+ DLT_HHDLC = 0x79
+ DLT_IBM_SN = 0x92
+ DLT_IBM_SP = 0x91
+ DLT_IEEE802 = 0x6
+ DLT_IEEE802_11 = 0x69
+ DLT_IEEE802_11_RADIO = 0x7f
+ DLT_IEEE802_11_RADIO_AVS = 0xa3
+ DLT_IEEE802_15_4 = 0xc3
+ DLT_IEEE802_15_4_LINUX = 0xbf
+ DLT_IEEE802_15_4_NOFCS = 0xe6
+ DLT_IEEE802_15_4_NONASK_PHY = 0xd7
+ DLT_IEEE802_16_MAC_CPS = 0xbc
+ DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1
+ DLT_IPFILTER = 0x74
+ DLT_IPMB = 0xc7
+ DLT_IPMB_LINUX = 0xd1
+ DLT_IPNET = 0xe2
+ DLT_IPOIB = 0xf2
+ DLT_IPV4 = 0xe4
+ DLT_IPV6 = 0xe5
+ DLT_IP_OVER_FC = 0x7a
+ DLT_JUNIPER_ATM1 = 0x89
+ DLT_JUNIPER_ATM2 = 0x87
+ DLT_JUNIPER_ATM_CEMIC = 0xee
+ DLT_JUNIPER_CHDLC = 0xb5
+ DLT_JUNIPER_ES = 0x84
+ DLT_JUNIPER_ETHER = 0xb2
+ DLT_JUNIPER_FIBRECHANNEL = 0xea
+ DLT_JUNIPER_FRELAY = 0xb4
+ DLT_JUNIPER_GGSN = 0x85
+ DLT_JUNIPER_ISM = 0xc2
+ DLT_JUNIPER_MFR = 0x86
+ DLT_JUNIPER_MLFR = 0x83
+ DLT_JUNIPER_MLPPP = 0x82
+ DLT_JUNIPER_MONITOR = 0xa4
+ DLT_JUNIPER_PIC_PEER = 0xae
+ DLT_JUNIPER_PPP = 0xb3
+ DLT_JUNIPER_PPPOE = 0xa7
+ DLT_JUNIPER_PPPOE_ATM = 0xa8
+ DLT_JUNIPER_SERVICES = 0x88
+ DLT_JUNIPER_SRX_E2E = 0xe9
+ DLT_JUNIPER_ST = 0xc8
+ DLT_JUNIPER_VP = 0xb7
+ DLT_JUNIPER_VS = 0xe8
+ DLT_LAPB_WITH_DIR = 0xcf
+ DLT_LAPD = 0xcb
+ DLT_LIN = 0xd4
+ DLT_LINUX_EVDEV = 0xd8
+ DLT_LINUX_IRDA = 0x90
+ DLT_LINUX_LAPD = 0xb1
+ DLT_LINUX_PPP_WITHDIRECTION = 0xa6
+ DLT_LINUX_SLL = 0x71
+ DLT_LOOP = 0x6c
+ DLT_LTALK = 0x72
+ DLT_MATCHING_MAX = 0x10a
+ DLT_MATCHING_MIN = 0x68
+ DLT_MFR = 0xb6
+ DLT_MOST = 0xd3
+ DLT_MPEG_2_TS = 0xf3
+ DLT_MPLS = 0xdb
+ DLT_MTP2 = 0x8c
+ DLT_MTP2_WITH_PHDR = 0x8b
+ DLT_MTP3 = 0x8d
+ DLT_MUX27010 = 0xec
+ DLT_NETANALYZER = 0xf0
+ DLT_NETANALYZER_TRANSPARENT = 0xf1
+ DLT_NFC_LLCP = 0xf5
+ DLT_NFLOG = 0xef
+ DLT_NG40 = 0xf4
+ DLT_NULL = 0x0
+ DLT_PCI_EXP = 0x7d
+ DLT_PFLOG = 0x75
+ DLT_PFSYNC = 0x12
+ DLT_PPI = 0xc0
+ DLT_PPP = 0x9
+ DLT_PPP_BSDOS = 0x10
+ DLT_PPP_ETHER = 0x33
+ DLT_PPP_PPPD = 0xa6
+ DLT_PPP_SERIAL = 0x32
+ DLT_PPP_WITH_DIR = 0xcc
+ DLT_PPP_WITH_DIRECTION = 0xa6
+ DLT_PRISM_HEADER = 0x77
+ DLT_PRONET = 0x4
+ DLT_RAIF1 = 0xc6
+ DLT_RAW = 0xc
+ DLT_RIO = 0x7c
+ DLT_SCCP = 0x8e
+ DLT_SITA = 0xc4
+ DLT_SLIP = 0x8
+ DLT_SLIP_BSDOS = 0xf
+ DLT_STANAG_5066_D_PDU = 0xed
+ DLT_SUNATM = 0x7b
+ DLT_SYMANTEC_FIREWALL = 0x63
+ DLT_TZSP = 0x80
+ DLT_USB = 0xba
+ DLT_USB_DARWIN = 0x10a
+ DLT_USB_LINUX = 0xbd
+ DLT_USB_LINUX_MMAPPED = 0xdc
+ DLT_USER0 = 0x93
+ DLT_USER1 = 0x94
+ DLT_USER10 = 0x9d
+ DLT_USER11 = 0x9e
+ DLT_USER12 = 0x9f
+ DLT_USER13 = 0xa0
+ DLT_USER14 = 0xa1
+ DLT_USER15 = 0xa2
+ DLT_USER2 = 0x95
+ DLT_USER3 = 0x96
+ DLT_USER4 = 0x97
+ DLT_USER5 = 0x98
+ DLT_USER6 = 0x99
+ DLT_USER7 = 0x9a
+ DLT_USER8 = 0x9b
+ DLT_USER9 = 0x9c
+ DLT_WIHART = 0xdf
+ DLT_X2E_SERIAL = 0xd5
+ DLT_X2E_XORAYA = 0xd6
+ DT_BLK = 0x6
+ DT_CHR = 0x2
+ DT_DIR = 0x4
+ DT_FIFO = 0x1
+ DT_LNK = 0xa
+ DT_REG = 0x8
+ DT_SOCK = 0xc
+ DT_UNKNOWN = 0x0
+ DT_WHT = 0xe
+ ECHO = 0x8
+ ECHOCTL = 0x40
+ ECHOE = 0x2
+ ECHOK = 0x4
+ ECHOKE = 0x1
+ ECHONL = 0x10
+ ECHOPRT = 0x20
+ EVFILT_AIO = -0x3
+ EVFILT_EXCEPT = -0xf
+ EVFILT_FS = -0x9
+ EVFILT_MACHPORT = -0x8
+ EVFILT_PROC = -0x5
+ EVFILT_READ = -0x1
+ EVFILT_SIGNAL = -0x6
+ EVFILT_SYSCOUNT = 0x11
+ EVFILT_THREADMARKER = 0x11
+ EVFILT_TIMER = -0x7
+ EVFILT_USER = -0xa
+ EVFILT_VM = -0xc
+ EVFILT_VNODE = -0x4
+ EVFILT_WRITE = -0x2
+ EV_ADD = 0x1
+ EV_CLEAR = 0x20
+ EV_DELETE = 0x2
+ EV_DISABLE = 0x8
+ EV_DISPATCH = 0x80
+ EV_DISPATCH2 = 0x180
+ EV_ENABLE = 0x4
+ EV_EOF = 0x8000
+ EV_ERROR = 0x4000
+ EV_FLAG0 = 0x1000
+ EV_FLAG1 = 0x2000
+ EV_ONESHOT = 0x10
+ EV_OOBAND = 0x2000
+ EV_POLL = 0x1000
+ EV_RECEIPT = 0x40
+ EV_SYSFLAGS = 0xf000
+ EV_UDATA_SPECIFIC = 0x100
+ EV_VANISHED = 0x200
+ EXTA = 0x4b00
+ EXTB = 0x9600
+ EXTPROC = 0x800
+ FD_CLOEXEC = 0x1
+ FD_SETSIZE = 0x400
+ FF0 = 0x0
+ FF1 = 0x4000
+ FFDLY = 0x4000
+ FLUSHO = 0x800000
+ FSOPT_ATTR_CMN_EXTENDED = 0x20
+ FSOPT_NOFOLLOW = 0x1
+ FSOPT_NOINMEMUPDATE = 0x2
+ FSOPT_PACK_INVAL_ATTRS = 0x8
+ FSOPT_REPORT_FULLSIZE = 0x4
+ FSOPT_RETURN_REALDEV = 0x200
+ F_ADDFILESIGS = 0x3d
+ F_ADDFILESIGS_FOR_DYLD_SIM = 0x53
+ F_ADDFILESIGS_INFO = 0x67
+ F_ADDFILESIGS_RETURN = 0x61
+ F_ADDFILESUPPL = 0x68
+ F_ADDSIGS = 0x3b
+ F_ALLOCATEALL = 0x4
+ F_ALLOCATECONTIG = 0x2
+ F_BARRIERFSYNC = 0x55
+ F_CHECK_LV = 0x62
+ F_CHKCLEAN = 0x29
+ F_DUPFD = 0x0
+ F_DUPFD_CLOEXEC = 0x43
+ F_FINDSIGS = 0x4e
+ F_FLUSH_DATA = 0x28
+ F_FREEZE_FS = 0x35
+ F_FULLFSYNC = 0x33
+ F_GETCODEDIR = 0x48
+ F_GETFD = 0x1
+ F_GETFL = 0x3
+ F_GETLK = 0x7
+ F_GETLKPID = 0x42
+ F_GETNOSIGPIPE = 0x4a
+ F_GETOWN = 0x5
+ F_GETPATH = 0x32
+ F_GETPATH_MTMINFO = 0x47
+ F_GETPATH_NOFIRMLINK = 0x66
+ F_GETPROTECTIONCLASS = 0x3f
+ F_GETPROTECTIONLEVEL = 0x4d
+ F_GETSIGSINFO = 0x69
+ F_GLOBAL_NOCACHE = 0x37
+ F_LOG2PHYS = 0x31
+ F_LOG2PHYS_EXT = 0x41
+ F_NOCACHE = 0x30
+ F_NODIRECT = 0x3e
+ F_OK = 0x0
+ F_PATHPKG_CHECK = 0x34
+ F_PEOFPOSMODE = 0x3
+ F_PREALLOCATE = 0x2a
+ F_PUNCHHOLE = 0x63
+ F_RDADVISE = 0x2c
+ F_RDAHEAD = 0x2d
+ F_RDLCK = 0x1
+ F_SETBACKINGSTORE = 0x46
+ F_SETFD = 0x2
+ F_SETFL = 0x4
+ F_SETLK = 0x8
+ F_SETLKW = 0x9
+ F_SETLKWTIMEOUT = 0xa
+ F_SETNOSIGPIPE = 0x49
+ F_SETOWN = 0x6
+ F_SETPROTECTIONCLASS = 0x40
+ F_SETSIZE = 0x2b
+ F_SINGLE_WRITER = 0x4c
+ F_SPECULATIVE_READ = 0x65
+ F_THAW_FS = 0x36
+ F_TRANSCODEKEY = 0x4b
+ F_TRIM_ACTIVE_FILE = 0x64
+ F_UNLCK = 0x2
+ F_VOLPOSMODE = 0x4
+ F_WRLCK = 0x3
+ HUPCL = 0x4000
+ HW_MACHINE = 0x1
+ ICANON = 0x100
+ ICMP6_FILTER = 0x12
+ ICRNL = 0x100
+ IEXTEN = 0x400
+ IFF_ALLMULTI = 0x200
+ IFF_ALTPHYS = 0x4000
+ IFF_BROADCAST = 0x2
+ IFF_DEBUG = 0x4
+ IFF_LINK0 = 0x1000
+ IFF_LINK1 = 0x2000
+ IFF_LINK2 = 0x4000
+ IFF_LOOPBACK = 0x8
+ IFF_MULTICAST = 0x8000
+ IFF_NOARP = 0x80
+ IFF_NOTRAILERS = 0x20
+ IFF_OACTIVE = 0x400
+ IFF_POINTOPOINT = 0x10
+ IFF_PROMISC = 0x100
+ IFF_RUNNING = 0x40
+ IFF_SIMPLEX = 0x800
+ IFF_UP = 0x1
+ IFNAMSIZ = 0x10
+ IFT_1822 = 0x2
+ IFT_6LOWPAN = 0x40
+ IFT_AAL5 = 0x31
+ IFT_ARCNET = 0x23
+ IFT_ARCNETPLUS = 0x24
+ IFT_ATM = 0x25
+ IFT_BRIDGE = 0xd1
+ IFT_CARP = 0xf8
+ IFT_CELLULAR = 0xff
+ IFT_CEPT = 0x13
+ IFT_DS3 = 0x1e
+ IFT_ENC = 0xf4
+ IFT_EON = 0x19
+ IFT_ETHER = 0x6
+ IFT_FAITH = 0x38
+ IFT_FDDI = 0xf
+ IFT_FRELAY = 0x20
+ IFT_FRELAYDCE = 0x2c
+ IFT_GIF = 0x37
+ IFT_HDH1822 = 0x3
+ IFT_HIPPI = 0x2f
+ IFT_HSSI = 0x2e
+ IFT_HY = 0xe
+ IFT_IEEE1394 = 0x90
+ IFT_IEEE8023ADLAG = 0x88
+ IFT_ISDNBASIC = 0x14
+ IFT_ISDNPRIMARY = 0x15
+ IFT_ISO88022LLC = 0x29
+ IFT_ISO88023 = 0x7
+ IFT_ISO88024 = 0x8
+ IFT_ISO88025 = 0x9
+ IFT_ISO88026 = 0xa
+ IFT_L2VLAN = 0x87
+ IFT_LAPB = 0x10
+ IFT_LOCALTALK = 0x2a
+ IFT_LOOP = 0x18
+ IFT_MIOX25 = 0x26
+ IFT_MODEM = 0x30
+ IFT_NSIP = 0x1b
+ IFT_OTHER = 0x1
+ IFT_P10 = 0xc
+ IFT_P80 = 0xd
+ IFT_PARA = 0x22
+ IFT_PDP = 0xff
+ IFT_PFLOG = 0xf5
+ IFT_PFSYNC = 0xf6
+ IFT_PKTAP = 0xfe
+ IFT_PPP = 0x17
+ IFT_PROPMUX = 0x36
+ IFT_PROPVIRTUAL = 0x35
+ IFT_PTPSERIAL = 0x16
+ IFT_RS232 = 0x21
+ IFT_SDLC = 0x11
+ IFT_SIP = 0x1f
+ IFT_SLIP = 0x1c
+ IFT_SMDSDXI = 0x2b
+ IFT_SMDSICIP = 0x34
+ IFT_SONET = 0x27
+ IFT_SONETPATH = 0x32
+ IFT_SONETVT = 0x33
+ IFT_STARLAN = 0xb
+ IFT_STF = 0x39
+ IFT_T1 = 0x12
+ IFT_ULTRA = 0x1d
+ IFT_V35 = 0x2d
+ IFT_X25 = 0x5
+ IFT_X25DDN = 0x4
+ IFT_X25PLE = 0x28
+ IFT_XETHER = 0x1a
+ IGNBRK = 0x1
+ IGNCR = 0x80
+ IGNPAR = 0x4
+ IMAXBEL = 0x2000
+ INLCR = 0x40
+ INPCK = 0x10
+ IN_CLASSA_HOST = 0xffffff
+ IN_CLASSA_MAX = 0x80
+ IN_CLASSA_NET = 0xff000000
+ IN_CLASSA_NSHIFT = 0x18
+ IN_CLASSB_HOST = 0xffff
+ IN_CLASSB_MAX = 0x10000
+ IN_CLASSB_NET = 0xffff0000
+ IN_CLASSB_NSHIFT = 0x10
+ IN_CLASSC_HOST = 0xff
+ IN_CLASSC_NET = 0xffffff00
+ IN_CLASSC_NSHIFT = 0x8
+ IN_CLASSD_HOST = 0xfffffff
+ IN_CLASSD_NET = 0xf0000000
+ IN_CLASSD_NSHIFT = 0x1c
+ IN_LINKLOCALNETNUM = 0xa9fe0000
+ IN_LOOPBACKNET = 0x7f
+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1
+ IPPROTO_3PC = 0x22
+ IPPROTO_ADFS = 0x44
+ IPPROTO_AH = 0x33
+ IPPROTO_AHIP = 0x3d
+ IPPROTO_APES = 0x63
+ IPPROTO_ARGUS = 0xd
+ IPPROTO_AX25 = 0x5d
+ IPPROTO_BHA = 0x31
+ IPPROTO_BLT = 0x1e
+ IPPROTO_BRSATMON = 0x4c
+ IPPROTO_CFTP = 0x3e
+ IPPROTO_CHAOS = 0x10
+ IPPROTO_CMTP = 0x26
+ IPPROTO_CPHB = 0x49
+ IPPROTO_CPNX = 0x48
+ IPPROTO_DDP = 0x25
+ IPPROTO_DGP = 0x56
+ IPPROTO_DIVERT = 0xfe
+ IPPROTO_DONE = 0x101
+ IPPROTO_DSTOPTS = 0x3c
+ IPPROTO_EGP = 0x8
+ IPPROTO_EMCON = 0xe
+ IPPROTO_ENCAP = 0x62
+ IPPROTO_EON = 0x50
+ IPPROTO_ESP = 0x32
+ IPPROTO_ETHERIP = 0x61
+ IPPROTO_FRAGMENT = 0x2c
+ IPPROTO_GGP = 0x3
+ IPPROTO_GMTP = 0x64
+ IPPROTO_GRE = 0x2f
+ IPPROTO_HELLO = 0x3f
+ IPPROTO_HMP = 0x14
+ IPPROTO_HOPOPTS = 0x0
+ IPPROTO_ICMP = 0x1
+ IPPROTO_ICMPV6 = 0x3a
+ IPPROTO_IDP = 0x16
+ IPPROTO_IDPR = 0x23
+ IPPROTO_IDRP = 0x2d
+ IPPROTO_IGMP = 0x2
+ IPPROTO_IGP = 0x55
+ IPPROTO_IGRP = 0x58
+ IPPROTO_IL = 0x28
+ IPPROTO_INLSP = 0x34
+ IPPROTO_INP = 0x20
+ IPPROTO_IP = 0x0
+ IPPROTO_IPCOMP = 0x6c
+ IPPROTO_IPCV = 0x47
+ IPPROTO_IPEIP = 0x5e
+ IPPROTO_IPIP = 0x4
+ IPPROTO_IPPC = 0x43
+ IPPROTO_IPV4 = 0x4
+ IPPROTO_IPV6 = 0x29
+ IPPROTO_IRTP = 0x1c
+ IPPROTO_KRYPTOLAN = 0x41
+ IPPROTO_LARP = 0x5b
+ IPPROTO_LEAF1 = 0x19
+ IPPROTO_LEAF2 = 0x1a
+ IPPROTO_MAX = 0x100
+ IPPROTO_MAXID = 0x34
+ IPPROTO_MEAS = 0x13
+ IPPROTO_MHRP = 0x30
+ IPPROTO_MICP = 0x5f
+ IPPROTO_MTP = 0x5c
+ IPPROTO_MUX = 0x12
+ IPPROTO_ND = 0x4d
+ IPPROTO_NHRP = 0x36
+ IPPROTO_NONE = 0x3b
+ IPPROTO_NSP = 0x1f
+ IPPROTO_NVPII = 0xb
+ IPPROTO_OSPFIGP = 0x59
+ IPPROTO_PGM = 0x71
+ IPPROTO_PIGP = 0x9
+ IPPROTO_PIM = 0x67
+ IPPROTO_PRM = 0x15
+ IPPROTO_PUP = 0xc
+ IPPROTO_PVP = 0x4b
+ IPPROTO_RAW = 0xff
+ IPPROTO_RCCMON = 0xa
+ IPPROTO_RDP = 0x1b
+ IPPROTO_ROUTING = 0x2b
+ IPPROTO_RSVP = 0x2e
+ IPPROTO_RVD = 0x42
+ IPPROTO_SATEXPAK = 0x40
+ IPPROTO_SATMON = 0x45
+ IPPROTO_SCCSP = 0x60
+ IPPROTO_SCTP = 0x84
+ IPPROTO_SDRP = 0x2a
+ IPPROTO_SEP = 0x21
+ IPPROTO_SRPC = 0x5a
+ IPPROTO_ST = 0x7
+ IPPROTO_SVMTP = 0x52
+ IPPROTO_SWIPE = 0x35
+ IPPROTO_TCF = 0x57
+ IPPROTO_TCP = 0x6
+ IPPROTO_TP = 0x1d
+ IPPROTO_TPXX = 0x27
+ IPPROTO_TRUNK1 = 0x17
+ IPPROTO_TRUNK2 = 0x18
+ IPPROTO_TTP = 0x54
+ IPPROTO_UDP = 0x11
+ IPPROTO_VINES = 0x53
+ IPPROTO_VISA = 0x46
+ IPPROTO_VMTP = 0x51
+ IPPROTO_WBEXPAK = 0x4f
+ IPPROTO_WBMON = 0x4e
+ IPPROTO_WSN = 0x4a
+ IPPROTO_XNET = 0xf
+ IPPROTO_XTP = 0x24
+ IPV6_2292DSTOPTS = 0x17
+ IPV6_2292HOPLIMIT = 0x14
+ IPV6_2292HOPOPTS = 0x16
+ IPV6_2292NEXTHOP = 0x15
+ IPV6_2292PKTINFO = 0x13
+ IPV6_2292PKTOPTIONS = 0x19
+ IPV6_2292RTHDR = 0x18
+ IPV6_3542DSTOPTS = 0x32
+ IPV6_3542HOPLIMIT = 0x2f
+ IPV6_3542HOPOPTS = 0x31
+ IPV6_3542NEXTHOP = 0x30
+ IPV6_3542PKTINFO = 0x2e
+ IPV6_3542RTHDR = 0x33
+ IPV6_ADDR_MC_FLAGS_PREFIX = 0x20
+ IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10
+ IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30
+ IPV6_AUTOFLOWLABEL = 0x3b
+ IPV6_BINDV6ONLY = 0x1b
+ IPV6_BOUND_IF = 0x7d
+ IPV6_CHECKSUM = 0x1a
+ IPV6_DEFAULT_MULTICAST_HOPS = 0x1
+ IPV6_DEFAULT_MULTICAST_LOOP = 0x1
+ IPV6_DEFHLIM = 0x40
+ IPV6_DONTFRAG = 0x3e
+ IPV6_DSTOPTS = 0x32
+ IPV6_FAITH = 0x1d
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
+ IPV6_FLOW_ECN_MASK = 0x3000
+ IPV6_FRAGTTL = 0x3c
+ IPV6_FW_ADD = 0x1e
+ IPV6_FW_DEL = 0x1f
+ IPV6_FW_FLUSH = 0x20
+ IPV6_FW_GET = 0x22
+ IPV6_FW_ZERO = 0x21
+ IPV6_HLIMDEC = 0x1
+ IPV6_HOPLIMIT = 0x2f
+ IPV6_HOPOPTS = 0x31
+ IPV6_IPSEC_POLICY = 0x1c
+ IPV6_JOIN_GROUP = 0xc
+ IPV6_LEAVE_GROUP = 0xd
+ IPV6_MAXHLIM = 0xff
+ IPV6_MAXOPTHDR = 0x800
+ IPV6_MAXPACKET = 0xffff
+ IPV6_MAX_GROUP_SRC_FILTER = 0x200
+ IPV6_MAX_MEMBERSHIPS = 0xfff
+ IPV6_MAX_SOCK_SRC_FILTER = 0x80
+ IPV6_MIN_MEMBERSHIPS = 0x1f
+ IPV6_MMTU = 0x500
+ IPV6_MSFILTER = 0x4a
+ IPV6_MULTICAST_HOPS = 0xa
+ IPV6_MULTICAST_IF = 0x9
+ IPV6_MULTICAST_LOOP = 0xb
+ IPV6_NEXTHOP = 0x30
+ IPV6_PATHMTU = 0x2c
+ IPV6_PKTINFO = 0x2e
+ IPV6_PORTRANGE = 0xe
+ IPV6_PORTRANGE_DEFAULT = 0x0
+ IPV6_PORTRANGE_HIGH = 0x1
+ IPV6_PORTRANGE_LOW = 0x2
+ IPV6_PREFER_TEMPADDR = 0x3f
+ IPV6_RECVDSTOPTS = 0x28
+ IPV6_RECVHOPLIMIT = 0x25
+ IPV6_RECVHOPOPTS = 0x27
+ IPV6_RECVPATHMTU = 0x2b
+ IPV6_RECVPKTINFO = 0x3d
+ IPV6_RECVRTHDR = 0x26
+ IPV6_RECVTCLASS = 0x23
+ IPV6_RTHDR = 0x33
+ IPV6_RTHDRDSTOPTS = 0x39
+ IPV6_RTHDR_LOOSE = 0x0
+ IPV6_RTHDR_STRICT = 0x1
+ IPV6_RTHDR_TYPE_0 = 0x0
+ IPV6_SOCKOPT_RESERVED1 = 0x3
+ IPV6_TCLASS = 0x24
+ IPV6_UNICAST_HOPS = 0x4
+ IPV6_USE_MIN_MTU = 0x2a
+ IPV6_V6ONLY = 0x1b
+ IPV6_VERSION = 0x60
+ IPV6_VERSION_MASK = 0xf0
+ IP_ADD_MEMBERSHIP = 0xc
+ IP_ADD_SOURCE_MEMBERSHIP = 0x46
+ IP_BLOCK_SOURCE = 0x48
+ IP_BOUND_IF = 0x19
+ IP_DEFAULT_MULTICAST_LOOP = 0x1
+ IP_DEFAULT_MULTICAST_TTL = 0x1
+ IP_DF = 0x4000
+ IP_DONTFRAG = 0x1c
+ IP_DROP_MEMBERSHIP = 0xd
+ IP_DROP_SOURCE_MEMBERSHIP = 0x47
+ IP_DUMMYNET_CONFIGURE = 0x3c
+ IP_DUMMYNET_DEL = 0x3d
+ IP_DUMMYNET_FLUSH = 0x3e
+ IP_DUMMYNET_GET = 0x40
+ IP_FAITH = 0x16
+ IP_FW_ADD = 0x28
+ IP_FW_DEL = 0x29
+ IP_FW_FLUSH = 0x2a
+ IP_FW_GET = 0x2c
+ IP_FW_RESETLOG = 0x2d
+ IP_FW_ZERO = 0x2b
+ IP_HDRINCL = 0x2
+ IP_IPSEC_POLICY = 0x15
+ IP_MAXPACKET = 0xffff
+ IP_MAX_GROUP_SRC_FILTER = 0x200
+ IP_MAX_MEMBERSHIPS = 0xfff
+ IP_MAX_SOCK_MUTE_FILTER = 0x80
+ IP_MAX_SOCK_SRC_FILTER = 0x80
+ IP_MF = 0x2000
+ IP_MIN_MEMBERSHIPS = 0x1f
+ IP_MSFILTER = 0x4a
+ IP_MSS = 0x240
+ IP_MULTICAST_IF = 0x9
+ IP_MULTICAST_IFINDEX = 0x42
+ IP_MULTICAST_LOOP = 0xb
+ IP_MULTICAST_TTL = 0xa
+ IP_MULTICAST_VIF = 0xe
+ IP_NAT__XXX = 0x37
+ IP_OFFMASK = 0x1fff
+ IP_OLD_FW_ADD = 0x32
+ IP_OLD_FW_DEL = 0x33
+ IP_OLD_FW_FLUSH = 0x34
+ IP_OLD_FW_GET = 0x36
+ IP_OLD_FW_RESETLOG = 0x38
+ IP_OLD_FW_ZERO = 0x35
+ IP_OPTIONS = 0x1
+ IP_PKTINFO = 0x1a
+ IP_PORTRANGE = 0x13
+ IP_PORTRANGE_DEFAULT = 0x0
+ IP_PORTRANGE_HIGH = 0x1
+ IP_PORTRANGE_LOW = 0x2
+ IP_RECVDSTADDR = 0x7
+ IP_RECVIF = 0x14
+ IP_RECVOPTS = 0x5
+ IP_RECVPKTINFO = 0x1a
+ IP_RECVRETOPTS = 0x6
+ IP_RECVTOS = 0x1b
+ IP_RECVTTL = 0x18
+ IP_RETOPTS = 0x8
+ IP_RF = 0x8000
+ IP_RSVP_OFF = 0x10
+ IP_RSVP_ON = 0xf
+ IP_RSVP_VIF_OFF = 0x12
+ IP_RSVP_VIF_ON = 0x11
+ IP_STRIPHDR = 0x17
+ IP_TOS = 0x3
+ IP_TRAFFIC_MGT_BACKGROUND = 0x41
+ IP_TTL = 0x4
+ IP_UNBLOCK_SOURCE = 0x49
+ ISIG = 0x80
+ ISTRIP = 0x20
+ IUTF8 = 0x4000
+ IXANY = 0x800
+ IXOFF = 0x400
+ IXON = 0x200
+ KERN_HOSTNAME = 0xa
+ KERN_OSRELEASE = 0x2
+ KERN_OSTYPE = 0x1
+ KERN_VERSION = 0x4
+ LOCAL_PEERCRED = 0x1
+ LOCAL_PEEREPID = 0x3
+ LOCAL_PEEREUUID = 0x5
+ LOCAL_PEERPID = 0x2
+ LOCAL_PEERTOKEN = 0x6
+ LOCAL_PEERUUID = 0x4
+ LOCK_EX = 0x2
+ LOCK_NB = 0x4
+ LOCK_SH = 0x1
+ LOCK_UN = 0x8
+ MADV_CAN_REUSE = 0x9
+ MADV_DONTNEED = 0x4
+ MADV_FREE = 0x5
+ MADV_FREE_REUSABLE = 0x7
+ MADV_FREE_REUSE = 0x8
+ MADV_NORMAL = 0x0
+ MADV_PAGEOUT = 0xa
+ MADV_RANDOM = 0x1
+ MADV_SEQUENTIAL = 0x2
+ MADV_WILLNEED = 0x3
+ MADV_ZERO_WIRED_PAGES = 0x6
+ MAP_32BIT = 0x8000
+ MAP_ANON = 0x1000
+ MAP_ANONYMOUS = 0x1000
+ MAP_COPY = 0x2
+ MAP_FILE = 0x0
+ MAP_FIXED = 0x10
+ MAP_HASSEMAPHORE = 0x200
+ MAP_JIT = 0x800
+ MAP_NOCACHE = 0x400
+ MAP_NOEXTEND = 0x100
+ MAP_NORESERVE = 0x40
+ MAP_PRIVATE = 0x2
+ MAP_RENAME = 0x20
+ MAP_RESERVED0080 = 0x80
+ MAP_RESILIENT_CODESIGN = 0x2000
+ MAP_RESILIENT_MEDIA = 0x4000
+ MAP_SHARED = 0x1
+ MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000
+ MAP_UNIX03 = 0x40000
+ MCAST_BLOCK_SOURCE = 0x54
+ MCAST_EXCLUDE = 0x2
+ MCAST_INCLUDE = 0x1
+ MCAST_JOIN_GROUP = 0x50
+ MCAST_JOIN_SOURCE_GROUP = 0x52
+ MCAST_LEAVE_GROUP = 0x51
+ MCAST_LEAVE_SOURCE_GROUP = 0x53
+ MCAST_UNBLOCK_SOURCE = 0x55
+ MCAST_UNDEFINED = 0x0
+ MCL_CURRENT = 0x1
+ MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_AUTOMOUNTED = 0x400000
+ MNT_CMDFLAGS = 0xf0000
+ MNT_CPROTECT = 0x80
+ MNT_DEFWRITE = 0x2000000
+ MNT_DONTBROWSE = 0x100000
+ MNT_DOVOLFS = 0x8000
+ MNT_DWAIT = 0x4
+ MNT_EXPORTED = 0x100
+ MNT_EXT_ROOT_DATA_VOL = 0x1
+ MNT_FORCE = 0x80000
+ MNT_IGNORE_OWNERSHIP = 0x200000
+ MNT_JOURNALED = 0x800000
+ MNT_LOCAL = 0x1000
+ MNT_MULTILABEL = 0x4000000
+ MNT_NOATIME = 0x10000000
+ MNT_NOBLOCK = 0x20000
+ MNT_NODEV = 0x10
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOUSERXATTR = 0x1000000
+ MNT_NOWAIT = 0x2
+ MNT_QUARANTINE = 0x400
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELOAD = 0x40000
+ MNT_REMOVABLE = 0x200
+ MNT_ROOTFS = 0x4000
+ MNT_SNAPSHOT = 0x40000000
+ MNT_STRICTATIME = 0x80000000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UNION = 0x20
+ MNT_UNKNOWNPERMISSIONS = 0x200000
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0xd7f0f7ff
+ MNT_WAIT = 0x1
+ MSG_CTRUNC = 0x20
+ MSG_DONTROUTE = 0x4
+ MSG_DONTWAIT = 0x80
+ MSG_EOF = 0x100
+ MSG_EOR = 0x8
+ MSG_FLUSH = 0x400
+ MSG_HAVEMORE = 0x2000
+ MSG_HOLD = 0x800
+ MSG_NEEDSA = 0x10000
+ MSG_NOSIGNAL = 0x80000
+ MSG_OOB = 0x1
+ MSG_PEEK = 0x2
+ MSG_RCVMORE = 0x4000
+ MSG_SEND = 0x1000
+ MSG_TRUNC = 0x10
+ MSG_WAITALL = 0x40
+ MSG_WAITSTREAM = 0x200
+ MS_ASYNC = 0x1
+ MS_DEACTIVATE = 0x8
+ MS_INVALIDATE = 0x2
+ MS_KILLPAGES = 0x4
+ MS_SYNC = 0x10
+ NAME_MAX = 0xff
+ NET_RT_DUMP = 0x1
+ NET_RT_DUMP2 = 0x7
+ NET_RT_FLAGS = 0x2
+ NET_RT_FLAGS_PRIV = 0xa
+ NET_RT_IFLIST = 0x3
+ NET_RT_IFLIST2 = 0x6
+ NET_RT_MAXID = 0xb
+ NET_RT_STAT = 0x4
+ NET_RT_TRASH = 0x5
+ NFDBITS = 0x20
+ NL0 = 0x0
+ NL1 = 0x100
+ NL2 = 0x200
+ NL3 = 0x300
+ NLDLY = 0x300
+ NOFLSH = 0x80000000
+ NOKERNINFO = 0x2000000
+ NOTE_ABSOLUTE = 0x8
+ NOTE_ATTRIB = 0x8
+ NOTE_BACKGROUND = 0x40
+ NOTE_CHILD = 0x4
+ NOTE_CRITICAL = 0x20
+ NOTE_DELETE = 0x1
+ NOTE_EXEC = 0x20000000
+ NOTE_EXIT = 0x80000000
+ NOTE_EXITSTATUS = 0x4000000
+ NOTE_EXIT_CSERROR = 0x40000
+ NOTE_EXIT_DECRYPTFAIL = 0x10000
+ NOTE_EXIT_DETAIL = 0x2000000
+ NOTE_EXIT_DETAIL_MASK = 0x70000
+ NOTE_EXIT_MEMORY = 0x20000
+ NOTE_EXIT_REPARENTED = 0x80000
+ NOTE_EXTEND = 0x4
+ NOTE_FFAND = 0x40000000
+ NOTE_FFCOPY = 0xc0000000
+ NOTE_FFCTRLMASK = 0xc0000000
+ NOTE_FFLAGSMASK = 0xffffff
+ NOTE_FFNOP = 0x0
+ NOTE_FFOR = 0x80000000
+ NOTE_FORK = 0x40000000
+ NOTE_FUNLOCK = 0x100
+ NOTE_LEEWAY = 0x10
+ NOTE_LINK = 0x10
+ NOTE_LOWAT = 0x1
+ NOTE_MACHTIME = 0x100
+ NOTE_MACH_CONTINUOUS_TIME = 0x80
+ NOTE_NONE = 0x80
+ NOTE_NSECONDS = 0x4
+ NOTE_OOB = 0x2
+ NOTE_PCTRLMASK = -0x100000
+ NOTE_PDATAMASK = 0xfffff
+ NOTE_REAP = 0x10000000
+ NOTE_RENAME = 0x20
+ NOTE_REVOKE = 0x40
+ NOTE_SECONDS = 0x1
+ NOTE_SIGNAL = 0x8000000
+ NOTE_TRACK = 0x1
+ NOTE_TRACKERR = 0x2
+ NOTE_TRIGGER = 0x1000000
+ NOTE_USECONDS = 0x2
+ NOTE_VM_ERROR = 0x10000000
+ NOTE_VM_PRESSURE = 0x80000000
+ NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000
+ NOTE_VM_PRESSURE_TERMINATE = 0x40000000
+ NOTE_WRITE = 0x2
+ OCRNL = 0x10
+ OFDEL = 0x20000
+ OFILL = 0x80
+ ONLCR = 0x2
+ ONLRET = 0x40
+ ONOCR = 0x20
+ ONOEOT = 0x8
+ OPOST = 0x1
+ OXTABS = 0x4
+ O_ACCMODE = 0x3
+ O_ALERT = 0x20000000
+ O_APPEND = 0x8
+ O_ASYNC = 0x40
+ O_CLOEXEC = 0x1000000
+ O_CREAT = 0x200
+ O_DIRECTORY = 0x100000
+ O_DP_GETRAWENCRYPTED = 0x1
+ O_DP_GETRAWUNENCRYPTED = 0x2
+ O_DSYNC = 0x400000
+ O_EVTONLY = 0x8000
+ O_EXCL = 0x800
+ O_EXLOCK = 0x20
+ O_FSYNC = 0x80
+ O_NDELAY = 0x4
+ O_NOCTTY = 0x20000
+ O_NOFOLLOW = 0x100
+ O_NOFOLLOW_ANY = 0x20000000
+ O_NONBLOCK = 0x4
+ O_POPUP = 0x80000000
+ O_RDONLY = 0x0
+ O_RDWR = 0x2
+ O_SHLOCK = 0x10
+ O_SYMLINK = 0x200000
+ O_SYNC = 0x80
+ O_TRUNC = 0x400
+ O_WRONLY = 0x1
+ PARENB = 0x1000
+ PARMRK = 0x8
+ PARODD = 0x2000
+ PENDIN = 0x20000000
+ PRIO_PGRP = 0x1
+ PRIO_PROCESS = 0x0
+ PRIO_USER = 0x2
+ PROT_EXEC = 0x4
+ PROT_NONE = 0x0
+ PROT_READ = 0x1
+ PROT_WRITE = 0x2
+ PT_ATTACH = 0xa
+ PT_ATTACHEXC = 0xe
+ PT_CONTINUE = 0x7
+ PT_DENY_ATTACH = 0x1f
+ PT_DETACH = 0xb
+ PT_FIRSTMACH = 0x20
+ PT_FORCEQUOTA = 0x1e
+ PT_KILL = 0x8
+ PT_READ_D = 0x2
+ PT_READ_I = 0x1
+ PT_READ_U = 0x3
+ PT_SIGEXC = 0xc
+ PT_STEP = 0x9
+ PT_THUPDATE = 0xd
+ PT_TRACE_ME = 0x0
+ PT_WRITE_D = 0x5
+ PT_WRITE_I = 0x4
+ PT_WRITE_U = 0x6
+ RLIMIT_AS = 0x5
+ RLIMIT_CORE = 0x4
+ RLIMIT_CPU = 0x0
+ RLIMIT_CPU_USAGE_MONITOR = 0x2
+ RLIMIT_DATA = 0x2
+ RLIMIT_FSIZE = 0x1
+ RLIMIT_MEMLOCK = 0x6
+ RLIMIT_NOFILE = 0x8
+ RLIMIT_NPROC = 0x7
+ RLIMIT_RSS = 0x5
+ RLIMIT_STACK = 0x3
+ RLIM_INFINITY = 0x7fffffffffffffff
+ RTAX_AUTHOR = 0x6
+ RTAX_BRD = 0x7
+ RTAX_DST = 0x0
+ RTAX_GATEWAY = 0x1
+ RTAX_GENMASK = 0x3
+ RTAX_IFA = 0x5
+ RTAX_IFP = 0x4
+ RTAX_MAX = 0x8
+ RTAX_NETMASK = 0x2
+ RTA_AUTHOR = 0x40
+ RTA_BRD = 0x80
+ RTA_DST = 0x1
+ RTA_GATEWAY = 0x2
+ RTA_GENMASK = 0x8
+ RTA_IFA = 0x20
+ RTA_IFP = 0x10
+ RTA_NETMASK = 0x4
+ RTF_BLACKHOLE = 0x1000
+ RTF_BROADCAST = 0x400000
+ RTF_CLONING = 0x100
+ RTF_CONDEMNED = 0x2000000
+ RTF_DEAD = 0x20000000
+ RTF_DELCLONE = 0x80
+ RTF_DONE = 0x40
+ RTF_DYNAMIC = 0x10
+ RTF_GATEWAY = 0x2
+ RTF_GLOBAL = 0x40000000
+ RTF_HOST = 0x4
+ RTF_IFREF = 0x4000000
+ RTF_IFSCOPE = 0x1000000
+ RTF_LLDATA = 0x400
+ RTF_LLINFO = 0x400
+ RTF_LOCAL = 0x200000
+ RTF_MODIFIED = 0x20
+ RTF_MULTICAST = 0x800000
+ RTF_NOIFREF = 0x2000
+ RTF_PINNED = 0x100000
+ RTF_PRCLONING = 0x10000
+ RTF_PROTO1 = 0x8000
+ RTF_PROTO2 = 0x4000
+ RTF_PROTO3 = 0x40000
+ RTF_PROXY = 0x8000000
+ RTF_REJECT = 0x8
+ RTF_ROUTER = 0x10000000
+ RTF_STATIC = 0x800
+ RTF_UP = 0x1
+ RTF_WASCLONED = 0x20000
+ RTF_XRESOLVE = 0x200
+ RTM_ADD = 0x1
+ RTM_CHANGE = 0x3
+ RTM_DELADDR = 0xd
+ RTM_DELETE = 0x2
+ RTM_DELMADDR = 0x10
+ RTM_GET = 0x4
+ RTM_GET2 = 0x14
+ RTM_IFINFO = 0xe
+ RTM_IFINFO2 = 0x12
+ RTM_LOCK = 0x8
+ RTM_LOSING = 0x5
+ RTM_MISS = 0x7
+ RTM_NEWADDR = 0xc
+ RTM_NEWMADDR = 0xf
+ RTM_NEWMADDR2 = 0x13
+ RTM_OLDADD = 0x9
+ RTM_OLDDEL = 0xa
+ RTM_REDIRECT = 0x6
+ RTM_RESOLVE = 0xb
+ RTM_RTTUNIT = 0xf4240
+ RTM_VERSION = 0x5
+ RTV_EXPIRE = 0x4
+ RTV_HOPCOUNT = 0x2
+ RTV_MTU = 0x1
+ RTV_RPIPE = 0x8
+ RTV_RTT = 0x40
+ RTV_RTTVAR = 0x80
+ RTV_SPIPE = 0x10
+ RTV_SSTHRESH = 0x20
+ RUSAGE_CHILDREN = -0x1
+ RUSAGE_SELF = 0x0
+ SCM_CREDS = 0x3
+ SCM_RIGHTS = 0x1
+ SCM_TIMESTAMP = 0x2
+ SCM_TIMESTAMP_MONOTONIC = 0x4
+ SEEK_CUR = 0x1
+ SEEK_DATA = 0x4
+ SEEK_END = 0x2
+ SEEK_HOLE = 0x3
+ SEEK_SET = 0x0
+ SHUT_RD = 0x0
+ SHUT_RDWR = 0x2
+ SHUT_WR = 0x1
+ SIOCADDMULTI = 0x80206931
+ SIOCAIFADDR = 0x8040691a
+ SIOCARPIPLL = 0xc0206928
+ SIOCATMARK = 0x40047307
+ SIOCAUTOADDR = 0xc0206926
+ SIOCAUTONETMASK = 0x80206927
+ SIOCDELMULTI = 0x80206932
+ SIOCDIFADDR = 0x80206919
+ SIOCDIFPHYADDR = 0x80206941
+ SIOCGDRVSPEC = 0xc028697b
+ SIOCGETVLAN = 0xc020697f
+ SIOCGHIWAT = 0x40047301
+ SIOCGIF6LOWPAN = 0xc02069c5
+ SIOCGIFADDR = 0xc0206921
+ SIOCGIFALTMTU = 0xc0206948
+ SIOCGIFASYNCMAP = 0xc020697c
+ SIOCGIFBOND = 0xc0206947
+ SIOCGIFBRDADDR = 0xc0206923
+ SIOCGIFCAP = 0xc020695b
+ SIOCGIFCONF = 0xc00c6924
+ SIOCGIFDEVMTU = 0xc0206944
+ SIOCGIFDSTADDR = 0xc0206922
+ SIOCGIFFLAGS = 0xc0206911
+ SIOCGIFFUNCTIONALTYPE = 0xc02069ad
+ SIOCGIFGENERIC = 0xc020693a
+ SIOCGIFKPI = 0xc0206987
+ SIOCGIFMAC = 0xc0206982
+ SIOCGIFMEDIA = 0xc02c6938
+ SIOCGIFMETRIC = 0xc0206917
+ SIOCGIFMTU = 0xc0206933
+ SIOCGIFNETMASK = 0xc0206925
+ SIOCGIFPDSTADDR = 0xc0206940
+ SIOCGIFPHYS = 0xc0206935
+ SIOCGIFPSRCADDR = 0xc020693f
+ SIOCGIFSTATUS = 0xc331693d
+ SIOCGIFVLAN = 0xc020697f
+ SIOCGIFWAKEFLAGS = 0xc0206988
+ SIOCGIFXMEDIA = 0xc02c6948
+ SIOCGLOWAT = 0x40047303
+ SIOCGPGRP = 0x40047309
+ SIOCIFCREATE = 0xc0206978
+ SIOCIFCREATE2 = 0xc020697a
+ SIOCIFDESTROY = 0x80206979
+ SIOCIFGCLONERS = 0xc0106981
+ SIOCRSLVMULTI = 0xc010693b
+ SIOCSDRVSPEC = 0x8028697b
+ SIOCSETVLAN = 0x8020697e
+ SIOCSHIWAT = 0x80047300
+ SIOCSIF6LOWPAN = 0x802069c4
+ SIOCSIFADDR = 0x8020690c
+ SIOCSIFALTMTU = 0x80206945
+ SIOCSIFASYNCMAP = 0x8020697d
+ SIOCSIFBOND = 0x80206946
+ SIOCSIFBRDADDR = 0x80206913
+ SIOCSIFCAP = 0x8020695a
+ SIOCSIFDSTADDR = 0x8020690e
+ SIOCSIFFLAGS = 0x80206910
+ SIOCSIFGENERIC = 0x80206939
+ SIOCSIFKPI = 0x80206986
+ SIOCSIFLLADDR = 0x8020693c
+ SIOCSIFMAC = 0x80206983
+ SIOCSIFMEDIA = 0xc0206937
+ SIOCSIFMETRIC = 0x80206918
+ SIOCSIFMTU = 0x80206934
+ SIOCSIFNETMASK = 0x80206916
+ SIOCSIFPHYADDR = 0x8040693e
+ SIOCSIFPHYS = 0x80206936
+ SIOCSIFVLAN = 0x8020697e
+ SIOCSLOWAT = 0x80047302
+ SIOCSPGRP = 0x80047308
+ SOCK_DGRAM = 0x2
+ SOCK_MAXADDRLEN = 0xff
+ SOCK_RAW = 0x3
+ SOCK_RDM = 0x4
+ SOCK_SEQPACKET = 0x5
+ SOCK_STREAM = 0x1
+ SOL_LOCAL = 0x0
+ SOL_SOCKET = 0xffff
+ SOMAXCONN = 0x80
+ SO_ACCEPTCONN = 0x2
+ SO_BROADCAST = 0x20
+ SO_DEBUG = 0x1
+ SO_DONTROUTE = 0x10
+ SO_DONTTRUNC = 0x2000
+ SO_ERROR = 0x1007
+ SO_KEEPALIVE = 0x8
+ SO_LABEL = 0x1010
+ SO_LINGER = 0x80
+ SO_LINGER_SEC = 0x1080
+ SO_NETSVC_MARKING_LEVEL = 0x1119
+ SO_NET_SERVICE_TYPE = 0x1116
+ SO_NKE = 0x1021
+ SO_NOADDRERR = 0x1023
+ SO_NOSIGPIPE = 0x1022
+ SO_NOTIFYCONFLICT = 0x1026
+ SO_NP_EXTENSIONS = 0x1083
+ SO_NREAD = 0x1020
+ SO_NUMRCVPKT = 0x1112
+ SO_NWRITE = 0x1024
+ SO_OOBINLINE = 0x100
+ SO_PEERLABEL = 0x1011
+ SO_RANDOMPORT = 0x1082
+ SO_RCVBUF = 0x1002
+ SO_RCVLOWAT = 0x1004
+ SO_RCVTIMEO = 0x1006
+ SO_REUSEADDR = 0x4
+ SO_REUSEPORT = 0x200
+ SO_REUSESHAREUID = 0x1025
+ SO_SNDBUF = 0x1001
+ SO_SNDLOWAT = 0x1003
+ SO_SNDTIMEO = 0x1005
+ SO_TIMESTAMP = 0x400
+ SO_TIMESTAMP_MONOTONIC = 0x800
+ SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1
+ SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4
+ SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2
+ SO_TRACKER_TRANSPARENCY_VERSION = 0x3
+ SO_TYPE = 0x1008
+ SO_UPCALLCLOSEWAIT = 0x1027
+ SO_USELOOPBACK = 0x40
+ SO_WANTMORE = 0x4000
+ SO_WANTOOBFLAG = 0x8000
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
+ TAB0 = 0x0
+ TAB1 = 0x400
+ TAB2 = 0x800
+ TAB3 = 0x4
+ TABDLY = 0xc04
+ TCIFLUSH = 0x1
+ TCIOFF = 0x3
+ TCIOFLUSH = 0x3
+ TCION = 0x4
+ TCOFLUSH = 0x2
+ TCOOFF = 0x1
+ TCOON = 0x2
+ TCPOPT_CC = 0xb
+ TCPOPT_CCECHO = 0xd
+ TCPOPT_CCNEW = 0xc
+ TCPOPT_EOL = 0x0
+ TCPOPT_FASTOPEN = 0x22
+ TCPOPT_MAXSEG = 0x2
+ TCPOPT_NOP = 0x1
+ TCPOPT_SACK = 0x5
+ TCPOPT_SACK_HDR = 0x1010500
+ TCPOPT_SACK_PERMITTED = 0x4
+ TCPOPT_SACK_PERMIT_HDR = 0x1010402
+ TCPOPT_SIGNATURE = 0x13
+ TCPOPT_TIMESTAMP = 0x8
+ TCPOPT_TSTAMP_HDR = 0x101080a
+ TCPOPT_WINDOW = 0x3
+ TCP_CONNECTIONTIMEOUT = 0x20
+ TCP_CONNECTION_INFO = 0x106
+ TCP_ENABLE_ECN = 0x104
+ TCP_FASTOPEN = 0x105
+ TCP_KEEPALIVE = 0x10
+ TCP_KEEPCNT = 0x102
+ TCP_KEEPINTVL = 0x101
+ TCP_MAXHLEN = 0x3c
+ TCP_MAXOLEN = 0x28
+ TCP_MAXSEG = 0x2
+ TCP_MAXWIN = 0xffff
+ TCP_MAX_SACK = 0x4
+ TCP_MAX_WINSHIFT = 0xe
+ TCP_MINMSS = 0xd8
+ TCP_MSS = 0x200
+ TCP_NODELAY = 0x1
+ TCP_NOOPT = 0x8
+ TCP_NOPUSH = 0x4
+ TCP_NOTSENT_LOWAT = 0x201
+ TCP_RXT_CONNDROPTIME = 0x80
+ TCP_RXT_FINDROP = 0x100
+ TCP_SENDMOREACKS = 0x103
+ TCSAFLUSH = 0x2
+ TIOCCBRK = 0x2000747a
+ TIOCCDTR = 0x20007478
+ TIOCCONS = 0x80047462
+ TIOCDCDTIMESTAMP = 0x40107458
+ TIOCDRAIN = 0x2000745e
+ TIOCDSIMICROCODE = 0x20007455
+ TIOCEXCL = 0x2000740d
+ TIOCEXT = 0x80047460
+ TIOCFLUSH = 0x80047410
+ TIOCGDRAINWAIT = 0x40047456
+ TIOCGETA = 0x40487413
+ TIOCGETD = 0x4004741a
+ TIOCGPGRP = 0x40047477
+ TIOCGWINSZ = 0x40087468
+ TIOCIXOFF = 0x20007480
+ TIOCIXON = 0x20007481
+ TIOCMBIC = 0x8004746b
+ TIOCMBIS = 0x8004746c
+ TIOCMGDTRWAIT = 0x4004745a
+ TIOCMGET = 0x4004746a
+ TIOCMODG = 0x40047403
+ TIOCMODS = 0x80047404
+ TIOCMSDTRWAIT = 0x8004745b
+ TIOCMSET = 0x8004746d
+ TIOCM_CAR = 0x40
+ TIOCM_CD = 0x40
+ TIOCM_CTS = 0x20
+ TIOCM_DSR = 0x100
+ TIOCM_DTR = 0x2
+ TIOCM_LE = 0x1
+ TIOCM_RI = 0x80
+ TIOCM_RNG = 0x80
+ TIOCM_RTS = 0x4
+ TIOCM_SR = 0x10
+ TIOCM_ST = 0x8
+ TIOCNOTTY = 0x20007471
+ TIOCNXCL = 0x2000740e
+ TIOCOUTQ = 0x40047473
+ TIOCPKT = 0x80047470
+ TIOCPKT_DATA = 0x0
+ TIOCPKT_DOSTOP = 0x20
+ TIOCPKT_FLUSHREAD = 0x1
+ TIOCPKT_FLUSHWRITE = 0x2
+ TIOCPKT_IOCTL = 0x40
+ TIOCPKT_NOSTOP = 0x10
+ TIOCPKT_START = 0x8
+ TIOCPKT_STOP = 0x4
+ TIOCPTYGNAME = 0x40807453
+ TIOCPTYGRANT = 0x20007454
+ TIOCPTYUNLK = 0x20007452
+ TIOCREMOTE = 0x80047469
+ TIOCSBRK = 0x2000747b
+ TIOCSCONS = 0x20007463
+ TIOCSCTTY = 0x20007461
+ TIOCSDRAINWAIT = 0x80047457
+ TIOCSDTR = 0x20007479
+ TIOCSETA = 0x80487414
+ TIOCSETAF = 0x80487416
+ TIOCSETAW = 0x80487415
+ TIOCSETD = 0x8004741b
+ TIOCSIG = 0x2000745f
+ TIOCSPGRP = 0x80047476
+ TIOCSTART = 0x2000746e
+ TIOCSTAT = 0x20007465
+ TIOCSTI = 0x80017472
+ TIOCSTOP = 0x2000746f
+ TIOCSWINSZ = 0x80087467
+ TIOCTIMESTAMP = 0x40107459
+ TIOCUCNTL = 0x80047466
+ TOSTOP = 0x400000
+ VDISCARD = 0xf
+ VDSUSP = 0xb
+ VEOF = 0x0
+ VEOL = 0x1
+ VEOL2 = 0x2
+ VERASE = 0x3
+ VINTR = 0x8
+ VKILL = 0x5
+ VLNEXT = 0xe
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
+ VMIN = 0x10
+ VM_LOADAVG = 0x2
+ VM_MACHFACTOR = 0x4
+ VM_MAXID = 0x6
+ VM_METER = 0x1
+ VM_SWAPUSAGE = 0x5
+ VQUIT = 0x9
+ VREPRINT = 0x6
+ VSTART = 0xc
+ VSTATUS = 0x12
+ VSTOP = 0xd
+ VSUSP = 0xa
+ VT0 = 0x0
+ VT1 = 0x10000
+ VTDLY = 0x10000
+ VTIME = 0x11
+ VWERASE = 0x4
+ WCONTINUED = 0x10
+ WCOREFLAG = 0x80
+ WEXITED = 0x4
+ WNOHANG = 0x1
+ WNOWAIT = 0x20
+ WORDSIZE = 0x40
+ WSTOPPED = 0x8
+ WUNTRACED = 0x2
+ XATTR_CREATE = 0x2
+ XATTR_NODEFAULT = 0x10
+ XATTR_NOFOLLOW = 0x1
+ XATTR_NOSECURITY = 0x8
+ XATTR_REPLACE = 0x4
+ XATTR_SHOWCOMPRESSION = 0x20
)
// Errors
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go
index 135e3a47a..bcc45d108 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go
@@ -1,4 +1,4 @@
-// Code generated by mkmerge.go; DO NOT EDIT.
+// Code generated by mkmerge; DO NOT EDIT.
//go:build linux
// +build linux
@@ -116,6 +116,7 @@ const (
ARPHRD_LAPB = 0x204
ARPHRD_LOCALTLK = 0x305
ARPHRD_LOOPBACK = 0x304
+ ARPHRD_MCTP = 0x122
ARPHRD_METRICOM = 0x17
ARPHRD_NETLINK = 0x338
ARPHRD_NETROM = 0x0
@@ -231,6 +232,8 @@ const (
BPF_PSEUDO_FUNC = 0x4
BPF_PSEUDO_KFUNC_CALL = 0x2
BPF_PSEUDO_MAP_FD = 0x1
+ BPF_PSEUDO_MAP_IDX = 0x5
+ BPF_PSEUDO_MAP_IDX_VALUE = 0x6
BPF_PSEUDO_MAP_VALUE = 0x2
BPF_RET = 0x6
BPF_RSH = 0x70
@@ -470,6 +473,7 @@ const (
DM_DEV_WAIT = 0xc138fd08
DM_DIR = "mapper"
DM_GET_TARGET_VERSION = 0xc138fd11
+ DM_IMA_MEASUREMENT_FLAG = 0x80000
DM_INACTIVE_PRESENT_FLAG = 0x40
DM_INTERNAL_SUSPEND_FLAG = 0x40000
DM_IOCTL = 0xfd
@@ -714,6 +718,7 @@ const (
ETH_P_LOOPBACK = 0x9000
ETH_P_MACSEC = 0x88e5
ETH_P_MAP = 0xf9
+ ETH_P_MCTP = 0xfa
ETH_P_MOBITEX = 0x15
ETH_P_MPLS_MC = 0x8848
ETH_P_MPLS_UC = 0x8847
@@ -749,6 +754,21 @@ const (
ETH_P_WCCP = 0x883e
ETH_P_X25 = 0x805
ETH_P_XDSA = 0xf8
+ EV_ABS = 0x3
+ EV_CNT = 0x20
+ EV_FF = 0x15
+ EV_FF_STATUS = 0x17
+ EV_KEY = 0x1
+ EV_LED = 0x11
+ EV_MAX = 0x1f
+ EV_MSC = 0x4
+ EV_PWR = 0x16
+ EV_REL = 0x2
+ EV_REP = 0x14
+ EV_SND = 0x12
+ EV_SW = 0x5
+ EV_SYN = 0x0
+ EV_VERSION = 0x10001
EXABYTE_ENABLE_NEST = 0xf0
EXT2_SUPER_MAGIC = 0xef53
EXT3_SUPER_MAGIC = 0xef53
@@ -787,9 +807,11 @@ const (
FAN_DELETE_SELF = 0x400
FAN_DENY = 0x2
FAN_ENABLE_AUDIT = 0x40
+ FAN_EPIDFD = -0x2
FAN_EVENT_INFO_TYPE_DFID = 0x3
FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2
FAN_EVENT_INFO_TYPE_FID = 0x1
+ FAN_EVENT_INFO_TYPE_PIDFD = 0x4
FAN_EVENT_METADATA_LEN = 0x18
FAN_EVENT_ON_CHILD = 0x8000000
FAN_MARK_ADD = 0x1
@@ -809,6 +831,7 @@ const (
FAN_MOVE_SELF = 0x800
FAN_NOFD = -0x1
FAN_NONBLOCK = 0x2
+ FAN_NOPIDFD = -0x1
FAN_ONDIR = 0x40000000
FAN_OPEN = 0x20
FAN_OPEN_EXEC = 0x1000
@@ -819,6 +842,7 @@ const (
FAN_REPORT_DIR_FID = 0x400
FAN_REPORT_FID = 0x200
FAN_REPORT_NAME = 0x800
+ FAN_REPORT_PIDFD = 0x80
FAN_REPORT_TID = 0x100
FAN_UNLIMITED_MARKS = 0x20
FAN_UNLIMITED_QUEUE = 0x10
@@ -1331,6 +1355,20 @@ const (
KEY_SPEC_THREAD_KEYRING = -0x1
KEY_SPEC_USER_KEYRING = -0x4
KEY_SPEC_USER_SESSION_KEYRING = -0x5
+ LANDLOCK_ACCESS_FS_EXECUTE = 0x1
+ LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800
+ LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40
+ LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80
+ LANDLOCK_ACCESS_FS_MAKE_FIFO = 0x400
+ LANDLOCK_ACCESS_FS_MAKE_REG = 0x100
+ LANDLOCK_ACCESS_FS_MAKE_SOCK = 0x200
+ LANDLOCK_ACCESS_FS_MAKE_SYM = 0x1000
+ LANDLOCK_ACCESS_FS_READ_DIR = 0x8
+ LANDLOCK_ACCESS_FS_READ_FILE = 0x4
+ LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10
+ LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20
+ LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2
+ LANDLOCK_CREATE_RULESET_VERSION = 0x1
LINUX_REBOOT_CMD_CAD_OFF = 0x0
LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
LINUX_REBOOT_CMD_HALT = 0xcdef0123
@@ -1381,6 +1419,8 @@ const (
MADV_NOHUGEPAGE = 0xf
MADV_NORMAL = 0x0
MADV_PAGEOUT = 0x15
+ MADV_POPULATE_READ = 0x16
+ MADV_POPULATE_WRITE = 0x17
MADV_RANDOM = 0x1
MADV_REMOVE = 0x9
MADV_SEQUENTIAL = 0x2
@@ -1436,6 +1476,18 @@ const (
MNT_FORCE = 0x1
MODULE_INIT_IGNORE_MODVERSIONS = 0x1
MODULE_INIT_IGNORE_VERMAGIC = 0x2
+ MOUNT_ATTR_IDMAP = 0x100000
+ MOUNT_ATTR_NOATIME = 0x10
+ MOUNT_ATTR_NODEV = 0x4
+ MOUNT_ATTR_NODIRATIME = 0x80
+ MOUNT_ATTR_NOEXEC = 0x8
+ MOUNT_ATTR_NOSUID = 0x2
+ MOUNT_ATTR_NOSYMFOLLOW = 0x200000
+ MOUNT_ATTR_RDONLY = 0x1
+ MOUNT_ATTR_RELATIME = 0x0
+ MOUNT_ATTR_SIZE_VER0 = 0x20
+ MOUNT_ATTR_STRICTATIME = 0x20
+ MOUNT_ATTR__ATIME = 0x70
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1635,11 +1687,12 @@ const (
NFNL_MSG_BATCH_END = 0x11
NFNL_NFA_NEST = 0x8000
NFNL_SUBSYS_ACCT = 0x7
- NFNL_SUBSYS_COUNT = 0xc
+ NFNL_SUBSYS_COUNT = 0xd
NFNL_SUBSYS_CTHELPER = 0x9
NFNL_SUBSYS_CTNETLINK = 0x1
NFNL_SUBSYS_CTNETLINK_EXP = 0x2
NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8
+ NFNL_SUBSYS_HOOK = 0xc
NFNL_SUBSYS_IPSET = 0x6
NFNL_SUBSYS_NFTABLES = 0xa
NFNL_SUBSYS_NFT_COMPAT = 0xb
@@ -1929,6 +1982,12 @@ const (
PR_PAC_GET_ENABLED_KEYS = 0x3d
PR_PAC_RESET_KEYS = 0x36
PR_PAC_SET_ENABLED_KEYS = 0x3c
+ PR_SCHED_CORE = 0x3e
+ PR_SCHED_CORE_CREATE = 0x1
+ PR_SCHED_CORE_GET = 0x0
+ PR_SCHED_CORE_MAX = 0x4
+ PR_SCHED_CORE_SHARE_FROM = 0x3
+ PR_SCHED_CORE_SHARE_TO = 0x2
PR_SET_CHILD_SUBREAPER = 0x24
PR_SET_DUMPABLE = 0x4
PR_SET_ENDIAN = 0x14
@@ -1972,6 +2031,7 @@ const (
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
PR_SPEC_INDIRECT_BRANCH = 0x1
+ PR_SPEC_L1D_FLUSH = 0x2
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -2295,6 +2355,7 @@ const (
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
+ SECRETMEM_MAGIC = 0x5345434d
SECURITYFS_MAGIC = 0x73636673
SEEK_CUR = 0x1
SEEK_DATA = 0x3
@@ -2406,12 +2467,15 @@ const (
SMART_WRITE_THRESHOLDS = 0xd7
SMB_SUPER_MAGIC = 0x517b
SOCKFS_MAGIC = 0x534f434b
+ SOCK_BUF_LOCK_MASK = 0x3
SOCK_DCCP = 0x6
SOCK_IOC_TYPE = 0x89
SOCK_PACKET = 0xa
SOCK_RAW = 0x3
+ SOCK_RCVBUF_LOCK = 0x2
SOCK_RDM = 0x4
SOCK_SEQPACKET = 0x5
+ SOCK_SNDBUF_LOCK = 0x1
SOL_AAL = 0x109
SOL_ALG = 0x117
SOL_ATM = 0x108
@@ -2762,6 +2826,13 @@ const (
WDIOS_TEMPPANIC = 0x4
WDIOS_UNKNOWN = -0x1
WEXITED = 0x4
+ WGALLOWEDIP_A_MAX = 0x3
+ WGDEVICE_A_MAX = 0x8
+ WGPEER_A_MAX = 0xa
+ WG_CMD_MAX = 0x1
+ WG_GENL_NAME = "wireguard"
+ WG_GENL_VERSION = 0x1
+ WG_KEY_LEN = 0x20
WIN_ACKMEDIACHANGE = 0xdb
WIN_CHECKPOWERMODE1 = 0xe5
WIN_CHECKPOWERMODE2 = 0x98
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
index cca248d1d..3ca40ca7f 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
@@ -5,7 +5,7 @@
// +build 386,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/_const.go
package unix
@@ -293,6 +293,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -309,6 +310,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x10
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
index 9521a4804..ead332091 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
@@ -5,7 +5,7 @@
// +build amd64,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/_const.go
package unix
@@ -294,6 +294,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -310,6 +311,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x10
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
index ddb40a40d..39bdc9455 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
@@ -5,7 +5,7 @@
// +build arm,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -300,6 +300,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -316,6 +317,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x10
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
index 3df31e0d4..9aec987db 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
@@ -5,7 +5,7 @@
// +build arm64,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go
package unix
@@ -290,6 +290,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -306,6 +307,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x10
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
index 179c7d68d..a8bba9491 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
@@ -5,7 +5,7 @@
// +build mips,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -293,6 +293,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x20
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -309,6 +310,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0x100
SO_PASSCRED = 0x11
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
index 84ab15a85..ee9e7e202 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
@@ -5,7 +5,7 @@
// +build mips64,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -293,6 +293,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x20
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -309,6 +310,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0x100
SO_PASSCRED = 0x11
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
index 6aa064da5..ba4b288a3 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
@@ -5,7 +5,7 @@
// +build mips64le,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -293,6 +293,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x20
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -309,6 +310,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0x100
SO_PASSCRED = 0x11
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
index 960650f2b..bc93afc36 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
@@ -5,7 +5,7 @@
// +build mipsle,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -293,6 +293,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x20
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -309,6 +310,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0x100
SO_PASSCRED = 0x11
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
index 7365221d0..9295e6947 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
@@ -5,7 +5,7 @@
// +build ppc,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -348,6 +348,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -364,6 +365,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x14
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
index 5967db35c..1fa081c9a 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
@@ -5,7 +5,7 @@
// +build ppc64,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -352,6 +352,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -368,6 +369,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x14
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
index f88869849..74b321149 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
@@ -5,7 +5,7 @@
// +build ppc64le,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -352,6 +352,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -368,6 +369,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x14
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
index 8048706f3..c91c8ac5b 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
@@ -5,7 +5,7 @@
// +build riscv64,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -281,6 +281,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -297,6 +298,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x10
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
index fb7859417..b66bf2228 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
@@ -5,7 +5,7 @@
// +build s390x,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go
package unix
@@ -356,6 +356,7 @@ const (
SO_BPF_EXTENSIONS = 0x30
SO_BROADCAST = 0x6
SO_BSDCOMPAT = 0xe
+ SO_BUF_LOCK = 0x48
SO_BUSY_POLL = 0x2e
SO_BUSY_POLL_BUDGET = 0x46
SO_CNX_ADVICE = 0x35
@@ -372,6 +373,7 @@ const (
SO_MARK = 0x24
SO_MAX_PACING_RATE = 0x2f
SO_MEMINFO = 0x37
+ SO_NETNS_COOKIE = 0x47
SO_NOFCS = 0x2b
SO_OOBINLINE = 0xa
SO_PASSCRED = 0x10
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
index 81e18d23f..f7fb149b0 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
@@ -5,7 +5,7 @@
// +build sparc64,linux
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
package unix
@@ -347,6 +347,7 @@ const (
SO_BPF_EXTENSIONS = 0x32
SO_BROADCAST = 0x20
SO_BSDCOMPAT = 0x400
+ SO_BUF_LOCK = 0x51
SO_BUSY_POLL = 0x30
SO_BUSY_POLL_BUDGET = 0x49
SO_CNX_ADVICE = 0x37
@@ -363,6 +364,7 @@ const (
SO_MARK = 0x22
SO_MAX_PACING_RATE = 0x31
SO_MEMINFO = 0x39
+ SO_NETNS_COOKIE = 0x50
SO_NOFCS = 0x27
SO_OOBINLINE = 0x100
SO_PASSCRED = 0x2
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
index 91a23cc72..85e0cc386 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
@@ -17,6 +17,7 @@ int getdirent(int, uintptr_t, size_t);
int wait4(int, uintptr_t, int, uintptr_t);
int ioctl(int, int, uintptr_t);
int fcntl(uintptr_t, int, uintptr_t);
+int fsync_range(int, int, long long, long long);
int acct(uintptr_t);
int chdir(uintptr_t);
int chroot(uintptr_t);
@@ -29,7 +30,6 @@ int fchmod(int, unsigned int);
int fchmodat(int, uintptr_t, unsigned int, int);
int fchownat(int, uintptr_t, int, int, int);
int fdatasync(int);
-int fsync(int);
int getpgid(int);
int getpgrp();
int getpid();
@@ -255,6 +255,16 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fsyncRange(fd int, how int, start int64, length int64) (err error) {
+ r0, er := C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Acct(path string) (err error) {
_p0 := uintptr(unsafe.Pointer(C.CString(path)))
r0, er := C.acct(C.uintptr_t(_p0))
@@ -379,16 +389,6 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fsync(fd int) (err error) {
- r0, er := C.fsync(C.int(fd))
- if r0 == -1 && er != nil {
- err = er
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Getpgid(pid int) (pgid int, err error) {
r0, er := C.getpgid(C.int(pid))
pgid = int(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
index 33c2609b8..f1d4a73b0 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
@@ -135,6 +135,16 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fsyncRange(fd int, how int, start int64, length int64) (err error) {
+ _, e1 := callfsync_range(fd, how, start, length)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Acct(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -283,16 +293,6 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fsync(fd int) (err error) {
- _, e1 := callfsync(fd)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Getpgid(pid int) (pgid int, err error) {
r0, e1 := callgetpgid(pid)
pgid = int(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
index 8b737fa97..2caa5adf9 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
@@ -18,6 +18,7 @@ import (
//go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fsync_range fsync_range "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o"
@@ -30,7 +31,6 @@ import (
//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o"
-//go:cgo_import_dynamic libc_fsync fsync "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o"
@@ -136,6 +136,7 @@ import (
//go:linkname libc_wait4 libc_wait4
//go:linkname libc_ioctl libc_ioctl
//go:linkname libc_fcntl libc_fcntl
+//go:linkname libc_fsync_range libc_fsync_range
//go:linkname libc_acct libc_acct
//go:linkname libc_chdir libc_chdir
//go:linkname libc_chroot libc_chroot
@@ -148,7 +149,6 @@ import (
//go:linkname libc_fchmodat libc_fchmodat
//go:linkname libc_fchownat libc_fchownat
//go:linkname libc_fdatasync libc_fdatasync
-//go:linkname libc_fsync libc_fsync
//go:linkname libc_getpgid libc_getpgid
//go:linkname libc_getpgrp libc_getpgrp
//go:linkname libc_getpid libc_getpid
@@ -257,6 +257,7 @@ var (
libc_wait4,
libc_ioctl,
libc_fcntl,
+ libc_fsync_range,
libc_acct,
libc_chdir,
libc_chroot,
@@ -269,7 +270,6 @@ var (
libc_fchmodat,
libc_fchownat,
libc_fdatasync,
- libc_fsync,
libc_getpgid,
libc_getpgrp,
libc_getpid,
@@ -430,6 +430,13 @@ func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync_range)), 4, uintptr(fd), uintptr(how), uintptr(start), uintptr(length), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0)
return
@@ -514,13 +521,6 @@ func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func callfsync(fd int) (r1 uintptr, e1 Errno) {
- r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
return
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
index 3c260917e..944a714b1 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
@@ -16,6 +16,7 @@ int getdirent(int, uintptr_t, size_t);
int wait4(int, uintptr_t, int, uintptr_t);
int ioctl(int, int, uintptr_t);
int fcntl(uintptr_t, int, uintptr_t);
+int fsync_range(int, int, long long, long long);
int acct(uintptr_t);
int chdir(uintptr_t);
int chroot(uintptr_t);
@@ -28,7 +29,6 @@ int fchmod(int, unsigned int);
int fchmodat(int, uintptr_t, unsigned int, int);
int fchownat(int, uintptr_t, int, int, int);
int fdatasync(int);
-int fsync(int);
int getpgid(int);
int getpgrp();
int getpid();
@@ -199,6 +199,14 @@ func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
r1 = uintptr(C.acct(C.uintptr_t(_p0)))
e1 = syscall.GetErrno()
@@ -295,14 +303,6 @@ func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func callfsync(fd int) (r1 uintptr, e1 Errno) {
- r1 = uintptr(C.fsync(C.int(fd)))
- e1 = syscall.GetErrno()
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
r1 = uintptr(C.getpgid(C.int(pid)))
e1 = syscall.GetErrno()
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
index d4efe8d45..0ae0ed4cb 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
@@ -734,6 +734,65 @@ var libc_sendfile_trampoline_addr uintptr
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
+ r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {
+ r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))
+ result = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmctl_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmdt(addr uintptr) (err error) {
+ _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmdt_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmget(key int, size int, flag int) (id int, err error) {
+ r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))
+ id = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmget_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
index bc169c2ab..eac6ca806 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
@@ -264,6 +264,30 @@ TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8
DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)
+TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmat(SB)
+
+GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)
+
+TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmctl(SB)
+
+GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)
+
+TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmdt(SB)
+
+GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)
+
+TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmget(SB)
+
+GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)
+
TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
JMP libc_access(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
index f2ee2bd33..cf71be3ed 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
@@ -734,6 +734,65 @@ var libc_sendfile_trampoline_addr uintptr
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
+ r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {
+ r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))
+ result = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmctl_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmdt(addr uintptr) (err error) {
+ _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmdt_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmget(key int, size int, flag int) (id int, err error) {
+ r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))
+ id = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+var libc_shmget_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
index 33e19776d..4ebcf2175 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
@@ -264,6 +264,30 @@ TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8
DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)
+TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmat(SB)
+
+GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)
+
+TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmctl(SB)
+
+GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)
+
+TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmdt(SB)
+
+GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)
+
+TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_shmget(SB)
+
+GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8
+DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)
+
TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
JMP libc_access(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
index 2dbe3da7a..93edda4c4 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
@@ -1,4 +1,4 @@
-// Code generated by mkmerge.go; DO NOT EDIT.
+// Code generated by mkmerge; DO NOT EDIT.
//go:build linux
// +build linux
@@ -110,6 +110,16 @@ func openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
n = int(r0)
@@ -399,6 +409,21 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(pathname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MOUNT_SETATTR, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(unsafe.Pointer(attr)), uintptr(size), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Acct(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1945,8 +1970,63 @@ func ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags u
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe2(p *[2]_C_int, flags int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
+func PidfdOpen(pid int, flags int) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_PIDFD_OPEN, uintptr(pid), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_PIDFD_GETFD, uintptr(pidfd), uintptr(targetfd), uintptr(flags))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
+ r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag))
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {
+ r0, _, e1 := Syscall(SYS_SHMCTL, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))
+ result = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmdt(addr uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_SHMDT, uintptr(addr), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func shmget(key int, size int, flag int) (id int, err error) {
+ r0, _, e1 := Syscall(SYS_SHMGET, uintptr(key), uintptr(size), uintptr(flag))
+ id = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
index e37096e4d..ff90c81e7 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
@@ -46,37 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe(p *[2]_C_int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -181,17 +150,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Ioperm(from int, num int, on int) (err error) {
_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
if e1 != 0 {
@@ -566,14 +524,3 @@ func utimes(path string, times *[2]Timeval) (err error) {
}
return
}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
index 9919d8486..fa7d3dbe4 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -191,17 +170,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func inotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Ioperm(from int, num int, on int) (err error) {
_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
if e1 != 0 {
@@ -711,27 +679,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe(p *[2]_C_int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(cmdline)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
index 076754d48..654f91530 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
@@ -46,16 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe(p *[2]_C_int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
fd = int(r0)
@@ -235,27 +225,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -340,17 +309,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Lchown(path string, uid int, gid int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -681,17 +639,6 @@ func setrlimit(resource int, rlim *rlimit32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {
_, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
index 4703cf3c3..6d1552885 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -544,17 +523,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Ioperm(from int, num int, on int) (err error) {
_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
if e1 != 0 {
@@ -706,18 +674,6 @@ func Pause() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (p1 int, p2 int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- p1 = int(r0)
- p2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
xaddr = uintptr(r0)
@@ -746,14 +702,3 @@ func setrlimit(resource int, rlim *rlimit32) (err error) {
}
return
}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
index a134f9a4d..1e20d72df 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -717,14 +696,3 @@ func stat(path string, st *stat_t) (err error) {
}
return
}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
index b1fff2d94..82b5e2d9e 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -717,14 +696,3 @@ func stat(path string, st *stat_t) (err error) {
}
return
}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
index d13d6da01..a0440c1d4 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -544,17 +523,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Ioperm(from int, num int, on int) (err error) {
_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
if e1 != 0 {
@@ -706,18 +674,6 @@ func Pause() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (p1 int, p2 int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- p1 = int(r0)
- p2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
xaddr = uintptr(r0)
@@ -746,14 +702,3 @@ func setrlimit(resource int, rlim *rlimit32) (err error) {
}
return
}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
index 927cf1a00..5864b9ca6 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -161,17 +140,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Ioperm(from int, num int, on int) (err error) {
_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
if e1 != 0 {
@@ -717,27 +685,6 @@ func setrlimit(resource int, rlim *rlimit32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe(p *[2]_C_int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
index da8ec0396..beeb49e34 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -191,17 +170,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Ioperm(from int, num int, on int) (err error) {
_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
if e1 != 0 {
@@ -763,27 +731,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe(p *[2]_C_int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
index 083f493bb..53139b82c 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -191,17 +170,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Ioperm(from int, num int, on int) (err error) {
_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
if e1 != 0 {
@@ -763,27 +731,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe(p *[2]_C_int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
index bb347407d..202add37d 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
@@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
@@ -191,17 +170,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Lchown(path string, uid int, gid int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -553,17 +521,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(cmdline)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
index 8edc517e1..2ab268c34 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
@@ -73,16 +73,6 @@ func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fchown(fd int, uid int, gid int) (err error) {
_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
if e1 != 0 {
@@ -180,17 +170,6 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
- fd = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Lchown(path string, uid int, gid int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -718,24 +697,3 @@ func utimes(path string, times *[2]Timeval) (err error) {
}
return
}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func pipe(p *[2]_C_int) (err error) {
- _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
index 4726ab30a..51d0c0742 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
@@ -351,18 +351,6 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (fd1 int, fd2 int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- fd1 = int(r0)
- fd2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func pipe2(p *[2]_C_int, flags int) (err error) {
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
index fe71456db..df2efb6db 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
@@ -351,18 +351,6 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (fd1 int, fd2 int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- fd1 = int(r0)
- fd2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func pipe2(p *[2]_C_int, flags int) (err error) {
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
index 0b5b2f014..c8536c2c9 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
@@ -351,18 +351,6 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (fd1 int, fd2 int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- fd1 = int(r0)
- fd2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func pipe2(p *[2]_C_int, flags int) (err error) {
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go
index bfca28648..8b981bfc2 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go
@@ -351,18 +351,6 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (fd1 int, fd2 int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- fd1 = int(r0)
- fd2 = int(r1)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func pipe2(p *[2]_C_int, flags int) (err error) {
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
index eb3afe678..31847d230 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
@@ -439,7 +439,10 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_MEMFD_SECRET = 447
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
index 8e7e3aedc..3503cbbde 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
@@ -361,7 +361,10 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_MEMFD_SECRET = 447
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
index 0e6ebfef0..5ecd24bf6 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
@@ -7,6 +7,7 @@
package unix
const (
+ SYS_SYSCALL_MASK = 0
SYS_RESTART_SYSCALL = 0
SYS_EXIT = 1
SYS_FORK = 2
@@ -403,7 +404,9 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
index cd2a3ef41..7e5c94cc7 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
@@ -306,7 +306,10 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_MEMFD_SECRET = 447
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
index 773640b83..e1e2a2bf5 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
@@ -424,7 +424,9 @@ const (
SYS_PROCESS_MADVISE = 4440
SYS_EPOLL_PWAIT2 = 4441
SYS_MOUNT_SETATTR = 4442
+ SYS_QUOTACTL_FD = 4443
SYS_LANDLOCK_CREATE_RULESET = 4444
SYS_LANDLOCK_ADD_RULE = 4445
SYS_LANDLOCK_RESTRICT_SELF = 4446
+ SYS_PROCESS_MRELEASE = 4448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
index 86a41e568..7651915a3 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
@@ -354,7 +354,9 @@ const (
SYS_PROCESS_MADVISE = 5440
SYS_EPOLL_PWAIT2 = 5441
SYS_MOUNT_SETATTR = 5442
+ SYS_QUOTACTL_FD = 5443
SYS_LANDLOCK_CREATE_RULESET = 5444
SYS_LANDLOCK_ADD_RULE = 5445
SYS_LANDLOCK_RESTRICT_SELF = 5446
+ SYS_PROCESS_MRELEASE = 5448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
index 77f5728da..a26a2c050 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
@@ -354,7 +354,9 @@ const (
SYS_PROCESS_MADVISE = 5440
SYS_EPOLL_PWAIT2 = 5441
SYS_MOUNT_SETATTR = 5442
+ SYS_QUOTACTL_FD = 5443
SYS_LANDLOCK_CREATE_RULESET = 5444
SYS_LANDLOCK_ADD_RULE = 5445
SYS_LANDLOCK_RESTRICT_SELF = 5446
+ SYS_PROCESS_MRELEASE = 5448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
index dcd926513..fda9a6a99 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
@@ -424,7 +424,9 @@ const (
SYS_PROCESS_MADVISE = 4440
SYS_EPOLL_PWAIT2 = 4441
SYS_MOUNT_SETATTR = 4442
+ SYS_QUOTACTL_FD = 4443
SYS_LANDLOCK_CREATE_RULESET = 4444
SYS_LANDLOCK_ADD_RULE = 4445
SYS_LANDLOCK_RESTRICT_SELF = 4446
+ SYS_PROCESS_MRELEASE = 4448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
index d5ee2c935..e8496150d 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
@@ -431,7 +431,9 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
index fec32207c..5ee0678a3 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
@@ -403,7 +403,9 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
index 53a89b206..29c0f9a39 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
@@ -403,7 +403,9 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
index 0db9fbba5..5c9a9a3b6 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
@@ -305,7 +305,9 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
index 378e6ec8b..913f50f98 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
@@ -368,7 +368,9 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
index 58e72b0cb..0de03a722 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
@@ -382,7 +382,9 @@ const (
SYS_PROCESS_MADVISE = 440
SYS_EPOLL_PWAIT2 = 441
SYS_MOUNT_SETATTR = 442
+ SYS_QUOTACTL_FD = 443
SYS_LANDLOCK_CREATE_RULESET = 444
SYS_LANDLOCK_ADD_RULE = 445
SYS_LANDLOCK_RESTRICT_SELF = 446
+ SYS_PROCESS_MRELEASE = 448
)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
index 4c8dc0ba2..885842c0e 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
@@ -209,6 +209,92 @@ type RawSockaddrCtl struct {
Sc_reserved [5]uint32
}
+type RawSockaddrVM struct {
+ Len uint8
+ Family uint8
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+}
+
+type XVSockPCB struct {
+ Xv_len uint32
+ Xv_vsockpp uint64
+ Xvp_local_cid uint32
+ Xvp_local_port uint32
+ Xvp_remote_cid uint32
+ Xvp_remote_port uint32
+ Xvp_rxcnt uint32
+ Xvp_txcnt uint32
+ Xvp_peer_rxhiwat uint32
+ Xvp_peer_rxcnt uint32
+ Xvp_last_pid int32
+ Xvp_gencnt uint64
+ Xv_socket XSocket
+ _ [4]byte
+}
+
+type XSocket struct {
+ Xso_len uint32
+ Xso_so uint32
+ So_type int16
+ So_options int16
+ So_linger int16
+ So_state int16
+ So_pcb uint32
+ Xso_protocol int32
+ Xso_family int32
+ So_qlen int16
+ So_incqlen int16
+ So_qlimit int16
+ So_timeo int16
+ So_error uint16
+ So_pgid int32
+ So_oobmark uint32
+ So_rcv XSockbuf
+ So_snd XSockbuf
+ So_uid uint32
+}
+
+type XSocket64 struct {
+ Xso_len uint32
+ _ [8]byte
+ So_type int16
+ So_options int16
+ So_linger int16
+ So_state int16
+ _ [8]byte
+ Xso_protocol int32
+ Xso_family int32
+ So_qlen int16
+ So_incqlen int16
+ So_qlimit int16
+ So_timeo int16
+ So_error uint16
+ So_pgid int32
+ So_oobmark uint32
+ So_rcv XSockbuf
+ So_snd XSockbuf
+ So_uid uint32
+}
+
+type XSockbuf struct {
+ Cc uint32
+ Hiwat uint32
+ Mbcnt uint32
+ Mbmax uint32
+ Lowat int32
+ Flags int16
+ Timeo int16
+}
+
+type XVSockPgen struct {
+ Len uint32
+ Count uint64
+ Gen uint64
+ Sogen uint64
+}
+
type _Socklen uint32
type Xucred struct {
@@ -287,6 +373,11 @@ const (
SizeofSockaddrUnix = 0x6a
SizeofSockaddrDatalink = 0x14
SizeofSockaddrCtl = 0x20
+ SizeofSockaddrVM = 0xc
+ SizeofXvsockpcb = 0xa8
+ SizeofXSocket = 0x64
+ SizeofXSockbuf = 0x18
+ SizeofXVSockPgen = 0x20
SizeofXucred = 0x4c
SizeofLinger = 0x8
SizeofIovec = 0x10
@@ -550,13 +641,13 @@ type Eproc struct {
Tdev int32
Tpgid int32
Tsess uintptr
- Wmesg [8]int8
+ Wmesg [8]byte
Xsize int32
Xrssize int16
Xccount int16
Xswrss int16
Flag int32
- Login [12]int8
+ Login [12]byte
Spare [4]int32
_ [4]byte
}
@@ -597,7 +688,7 @@ type ExternProc struct {
P_priority uint8
P_usrpri uint8
P_nice int8
- P_comm [17]int8
+ P_comm [17]byte
P_pgrp uintptr
P_addr uintptr
P_xstat uint16
@@ -639,3 +730,39 @@ type Ucred struct {
Ngroups int16
Groups [16]uint32
}
+
+type SysvIpcPerm struct {
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint16
+ _ uint16
+ _ int32
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Lpid int32
+ Cpid int32
+ Nattch uint16
+ _ [34]byte
+}
+
+const (
+ IPC_CREAT = 0x200
+ IPC_EXCL = 0x400
+ IPC_NOWAIT = 0x800
+ IPC_PRIVATE = 0x0
+)
+
+const (
+ IPC_RMID = 0x0
+ IPC_SET = 0x1
+ IPC_STAT = 0x2
+)
+
+const (
+ SHM_RDONLY = 0x1000
+ SHM_RND = 0x2000
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
index 96f0e6ae2..b23c02337 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
@@ -209,6 +209,92 @@ type RawSockaddrCtl struct {
Sc_reserved [5]uint32
}
+type RawSockaddrVM struct {
+ Len uint8
+ Family uint8
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+}
+
+type XVSockPCB struct {
+ Xv_len uint32
+ Xv_vsockpp uint64
+ Xvp_local_cid uint32
+ Xvp_local_port uint32
+ Xvp_remote_cid uint32
+ Xvp_remote_port uint32
+ Xvp_rxcnt uint32
+ Xvp_txcnt uint32
+ Xvp_peer_rxhiwat uint32
+ Xvp_peer_rxcnt uint32
+ Xvp_last_pid int32
+ Xvp_gencnt uint64
+ Xv_socket XSocket
+ _ [4]byte
+}
+
+type XSocket struct {
+ Xso_len uint32
+ Xso_so uint32
+ So_type int16
+ So_options int16
+ So_linger int16
+ So_state int16
+ So_pcb uint32
+ Xso_protocol int32
+ Xso_family int32
+ So_qlen int16
+ So_incqlen int16
+ So_qlimit int16
+ So_timeo int16
+ So_error uint16
+ So_pgid int32
+ So_oobmark uint32
+ So_rcv XSockbuf
+ So_snd XSockbuf
+ So_uid uint32
+}
+
+type XSocket64 struct {
+ Xso_len uint32
+ _ [8]byte
+ So_type int16
+ So_options int16
+ So_linger int16
+ So_state int16
+ _ [8]byte
+ Xso_protocol int32
+ Xso_family int32
+ So_qlen int16
+ So_incqlen int16
+ So_qlimit int16
+ So_timeo int16
+ So_error uint16
+ So_pgid int32
+ So_oobmark uint32
+ So_rcv XSockbuf
+ So_snd XSockbuf
+ So_uid uint32
+}
+
+type XSockbuf struct {
+ Cc uint32
+ Hiwat uint32
+ Mbcnt uint32
+ Mbmax uint32
+ Lowat int32
+ Flags int16
+ Timeo int16
+}
+
+type XVSockPgen struct {
+ Len uint32
+ Count uint64
+ Gen uint64
+ Sogen uint64
+}
+
type _Socklen uint32
type Xucred struct {
@@ -287,6 +373,11 @@ const (
SizeofSockaddrUnix = 0x6a
SizeofSockaddrDatalink = 0x14
SizeofSockaddrCtl = 0x20
+ SizeofSockaddrVM = 0xc
+ SizeofXvsockpcb = 0xa8
+ SizeofXSocket = 0x64
+ SizeofXSockbuf = 0x18
+ SizeofXVSockPgen = 0x20
SizeofXucred = 0x4c
SizeofLinger = 0x8
SizeofIovec = 0x10
@@ -550,13 +641,13 @@ type Eproc struct {
Tdev int32
Tpgid int32
Tsess uintptr
- Wmesg [8]int8
+ Wmesg [8]byte
Xsize int32
Xrssize int16
Xccount int16
Xswrss int16
Flag int32
- Login [12]int8
+ Login [12]byte
Spare [4]int32
_ [4]byte
}
@@ -597,7 +688,7 @@ type ExternProc struct {
P_priority uint8
P_usrpri uint8
P_nice int8
- P_comm [17]int8
+ P_comm [17]byte
P_pgrp uintptr
P_addr uintptr
P_xstat uint16
@@ -639,3 +730,39 @@ type Ucred struct {
Ngroups int16
Groups [16]uint32
}
+
+type SysvIpcPerm struct {
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint16
+ _ uint16
+ _ int32
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Lpid int32
+ Cpid int32
+ Nattch uint16
+ _ [34]byte
+}
+
+const (
+ IPC_CREAT = 0x200
+ IPC_EXCL = 0x400
+ IPC_NOWAIT = 0x800
+ IPC_PRIVATE = 0x0
+)
+
+const (
+ IPC_RMID = 0x0
+ IPC_SET = 0x1
+ IPC_STAT = 0x2
+)
+
+const (
+ SHM_RDONLY = 0x1000
+ SHM_RND = 0x2000
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
index 1f99c024a..4eec078e5 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
@@ -31,6 +31,8 @@ type Timeval struct {
Usec int32
}
+type Time_t int32
+
type Rusage struct {
Utime Timeval
Stime Timeval
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
index ddf0305a5..7622904a5 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
@@ -31,6 +31,8 @@ type Timeval struct {
Usec int64
}
+type Time_t int64
+
type Rusage struct {
Utime Timeval
Stime Timeval
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
index dce0a5c80..19223ce8e 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
@@ -33,6 +33,8 @@ type Timeval struct {
_ [4]byte
}
+type Time_t int32
+
type Rusage struct {
Utime Timeval
Stime Timeval
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
index e23244702..8e3e33f67 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
@@ -31,6 +31,8 @@ type Timeval struct {
Usec int64
}
+type Time_t int64
+
type Rusage struct {
Utime Timeval
Stime Timeval
diff --git a/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go
index 236f37ef6..4c485261d 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go
@@ -13,6 +13,8 @@ const (
I_STR = 0x5308
I_POP = 0x5303
I_PUSH = 0x5302
+ I_LINK = 0x530c
+ I_UNLINK = 0x530d
I_PLINK = 0x5316
I_PUNLINK = 0x5317
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go
index 878141d6d..f6f0d79c4 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go
@@ -1,4 +1,4 @@
-// Code generated by mkmerge.go; DO NOT EDIT.
+// Code generated by mkmerge; DO NOT EDIT.
//go:build linux
// +build linux
@@ -743,6 +743,8 @@ const (
AT_STATX_FORCE_SYNC = 0x2000
AT_STATX_DONT_SYNC = 0x4000
+ AT_RECURSIVE = 0x8000
+
AT_SYMLINK_FOLLOW = 0x400
AT_SYMLINK_NOFOLLOW = 0x100
@@ -865,6 +867,7 @@ const (
CTRL_CMD_NEWMCAST_GRP = 0x7
CTRL_CMD_DELMCAST_GRP = 0x8
CTRL_CMD_GETMCAST_GRP = 0x9
+ CTRL_CMD_GETPOLICY = 0xa
CTRL_ATTR_UNSPEC = 0x0
CTRL_ATTR_FAMILY_ID = 0x1
CTRL_ATTR_FAMILY_NAME = 0x2
@@ -873,12 +876,19 @@ const (
CTRL_ATTR_MAXATTR = 0x5
CTRL_ATTR_OPS = 0x6
CTRL_ATTR_MCAST_GROUPS = 0x7
+ CTRL_ATTR_POLICY = 0x8
+ CTRL_ATTR_OP_POLICY = 0x9
+ CTRL_ATTR_OP = 0xa
CTRL_ATTR_OP_UNSPEC = 0x0
CTRL_ATTR_OP_ID = 0x1
CTRL_ATTR_OP_FLAGS = 0x2
CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
CTRL_ATTR_MCAST_GRP_NAME = 0x1
CTRL_ATTR_MCAST_GRP_ID = 0x2
+ CTRL_ATTR_POLICY_UNSPEC = 0x0
+ CTRL_ATTR_POLICY_DO = 0x1
+ CTRL_ATTR_POLICY_DUMP = 0x2
+ CTRL_ATTR_POLICY_DUMP_MAX = 0x2
)
const (
@@ -2356,8 +2366,8 @@ const (
SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
- SOF_TIMESTAMPING_LAST = 0x4000
- SOF_TIMESTAMPING_MASK = 0x7fff
+ SOF_TIMESTAMPING_LAST = 0x8000
+ SOF_TIMESTAMPING_MASK = 0xffff
SCM_TSTAMP_SND = 0x0
SCM_TSTAMP_SCHED = 0x1
@@ -2933,7 +2943,7 @@ const (
DEVLINK_CMD_TRAP_POLICER_NEW = 0x47
DEVLINK_CMD_TRAP_POLICER_DEL = 0x48
DEVLINK_CMD_HEALTH_REPORTER_TEST = 0x49
- DEVLINK_CMD_MAX = 0x49
+ DEVLINK_CMD_MAX = 0x4d
DEVLINK_PORT_TYPE_NOTSET = 0x0
DEVLINK_PORT_TYPE_AUTO = 0x1
DEVLINK_PORT_TYPE_ETH = 0x2
@@ -3156,7 +3166,7 @@ const (
DEVLINK_ATTR_RELOAD_ACTION_INFO = 0xa2
DEVLINK_ATTR_RELOAD_ACTION_STATS = 0xa3
DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 0xa4
- DEVLINK_ATTR_MAX = 0xa4
+ DEVLINK_ATTR_MAX = 0xa9
DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0
DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1
DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0
@@ -3264,7 +3274,8 @@ const (
LWTUNNEL_ENCAP_BPF = 0x6
LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7
LWTUNNEL_ENCAP_RPL = 0x8
- LWTUNNEL_ENCAP_MAX = 0x8
+ LWTUNNEL_ENCAP_IOAM6 = 0x9
+ LWTUNNEL_ENCAP_MAX = 0x9
MPLS_IPTUNNEL_UNSPEC = 0x0
MPLS_IPTUNNEL_DST = 0x1
@@ -3452,7 +3463,7 @@ const (
ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a
ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b
ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c
- ETHTOOL_MSG_USER_MAX = 0x20
+ ETHTOOL_MSG_USER_MAX = 0x21
ETHTOOL_MSG_KERNEL_NONE = 0x0
ETHTOOL_MSG_STRSET_GET_REPLY = 0x1
ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2
@@ -3483,7 +3494,7 @@ const (
ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b
ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c
ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d
- ETHTOOL_MSG_KERNEL_MAX = 0x21
+ ETHTOOL_MSG_KERNEL_MAX = 0x22
ETHTOOL_A_HEADER_UNSPEC = 0x0
ETHTOOL_A_HEADER_DEV_INDEX = 0x1
ETHTOOL_A_HEADER_DEV_NAME = 0x2
@@ -3617,7 +3628,9 @@ const (
ETHTOOL_A_COALESCE_TX_USECS_HIGH = 0x15
ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 0x16
ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17
- ETHTOOL_A_COALESCE_MAX = 0x17
+ ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18
+ ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19
+ ETHTOOL_A_COALESCE_MAX = 0x19
ETHTOOL_A_PAUSE_UNSPEC = 0x0
ETHTOOL_A_PAUSE_HEADER = 0x1
ETHTOOL_A_PAUSE_AUTONEG = 0x2
@@ -3923,3 +3936,110 @@ const (
NFC_SDP_ATTR_URI = 0x1
NFC_SDP_ATTR_SAP = 0x2
)
+
+type LandlockRulesetAttr struct {
+ Access_fs uint64
+}
+
+type LandlockPathBeneathAttr struct {
+ Allowed_access uint64
+ Parent_fd int32
+}
+
+const (
+ LANDLOCK_RULE_PATH_BENEATH = 0x1
+)
+
+const (
+ IPC_CREAT = 0x200
+ IPC_EXCL = 0x400
+ IPC_NOWAIT = 0x800
+ IPC_PRIVATE = 0x0
+
+ ipc_64 = 0x100
+)
+
+const (
+ IPC_RMID = 0x0
+ IPC_SET = 0x1
+ IPC_STAT = 0x2
+)
+
+const (
+ SHM_RDONLY = 0x1000
+ SHM_RND = 0x2000
+)
+
+type MountAttr struct {
+ Attr_set uint64
+ Attr_clr uint64
+ Propagation uint64
+ Userns_fd uint64
+}
+
+const (
+ WG_CMD_GET_DEVICE = 0x0
+ WG_CMD_SET_DEVICE = 0x1
+ WGDEVICE_F_REPLACE_PEERS = 0x1
+ WGDEVICE_A_UNSPEC = 0x0
+ WGDEVICE_A_IFINDEX = 0x1
+ WGDEVICE_A_IFNAME = 0x2
+ WGDEVICE_A_PRIVATE_KEY = 0x3
+ WGDEVICE_A_PUBLIC_KEY = 0x4
+ WGDEVICE_A_FLAGS = 0x5
+ WGDEVICE_A_LISTEN_PORT = 0x6
+ WGDEVICE_A_FWMARK = 0x7
+ WGDEVICE_A_PEERS = 0x8
+ WGPEER_F_REMOVE_ME = 0x1
+ WGPEER_F_REPLACE_ALLOWEDIPS = 0x2
+ WGPEER_F_UPDATE_ONLY = 0x4
+ WGPEER_A_UNSPEC = 0x0
+ WGPEER_A_PUBLIC_KEY = 0x1
+ WGPEER_A_PRESHARED_KEY = 0x2
+ WGPEER_A_FLAGS = 0x3
+ WGPEER_A_ENDPOINT = 0x4
+ WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 0x5
+ WGPEER_A_LAST_HANDSHAKE_TIME = 0x6
+ WGPEER_A_RX_BYTES = 0x7
+ WGPEER_A_TX_BYTES = 0x8
+ WGPEER_A_ALLOWEDIPS = 0x9
+ WGPEER_A_PROTOCOL_VERSION = 0xa
+ WGALLOWEDIP_A_UNSPEC = 0x0
+ WGALLOWEDIP_A_FAMILY = 0x1
+ WGALLOWEDIP_A_IPADDR = 0x2
+ WGALLOWEDIP_A_CIDR_MASK = 0x3
+)
+
+const (
+ NL_ATTR_TYPE_INVALID = 0x0
+ NL_ATTR_TYPE_FLAG = 0x1
+ NL_ATTR_TYPE_U8 = 0x2
+ NL_ATTR_TYPE_U16 = 0x3
+ NL_ATTR_TYPE_U32 = 0x4
+ NL_ATTR_TYPE_U64 = 0x5
+ NL_ATTR_TYPE_S8 = 0x6
+ NL_ATTR_TYPE_S16 = 0x7
+ NL_ATTR_TYPE_S32 = 0x8
+ NL_ATTR_TYPE_S64 = 0x9
+ NL_ATTR_TYPE_BINARY = 0xa
+ NL_ATTR_TYPE_STRING = 0xb
+ NL_ATTR_TYPE_NUL_STRING = 0xc
+ NL_ATTR_TYPE_NESTED = 0xd
+ NL_ATTR_TYPE_NESTED_ARRAY = 0xe
+ NL_ATTR_TYPE_BITFIELD32 = 0xf
+
+ NL_POLICY_TYPE_ATTR_UNSPEC = 0x0
+ NL_POLICY_TYPE_ATTR_TYPE = 0x1
+ NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 0x2
+ NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 0x3
+ NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 0x4
+ NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 0x5
+ NL_POLICY_TYPE_ATTR_MIN_LENGTH = 0x6
+ NL_POLICY_TYPE_ATTR_MAX_LENGTH = 0x7
+ NL_POLICY_TYPE_ATTR_POLICY_IDX = 0x8
+ NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 0x9
+ NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 0xa
+ NL_POLICY_TYPE_ATTR_PAD = 0xb
+ NL_POLICY_TYPE_ATTR_MASK = 0xc
+ NL_POLICY_TYPE_ATTR_MAX = 0xc
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
index 72f2e96f3..bea254945 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build 386 && linux
@@ -635,3 +635,36 @@ const (
PPS_GETCAP = 0x800470a3
PPS_FETCH = 0xc00470a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint16
+ _ [2]uint8
+ Seq uint16
+ _ uint16
+ _ uint32
+ _ uint32
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint32
+ Atime uint32
+ Atime_high uint32
+ Dtime uint32
+ Dtime_high uint32
+ Ctime uint32
+ Ctime_high uint32
+ Cpid int32
+ Lpid int32
+ Nattch uint32
+ _ uint32
+ _ uint32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
index d5f018d13..b8c8f2894 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build amd64 && linux
@@ -653,3 +653,33 @@ const (
PPS_GETCAP = 0x800870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ [0]uint8
+ Seq uint16
+ _ uint16
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
index 675446d93..4db443016 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build arm && linux
@@ -630,3 +630,36 @@ const (
PPS_GETCAP = 0x800470a3
PPS_FETCH = 0xc00470a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint16
+ _ [2]uint8
+ Seq uint16
+ _ uint16
+ _ uint32
+ _ uint32
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint32
+ Atime uint32
+ Atime_high uint32
+ Dtime uint32
+ Dtime_high uint32
+ Ctime uint32
+ Ctime_high uint32
+ Cpid int32
+ Lpid int32
+ Nattch uint32
+ _ uint32
+ _ uint32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
index 711d0711c..3ebcad8a8 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build arm64 && linux
@@ -632,3 +632,33 @@ const (
PPS_GETCAP = 0x800870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ [0]uint8
+ Seq uint16
+ _ uint16
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
index c1131c741..3eb33e48a 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build mips && linux
@@ -636,3 +636,35 @@ const (
PPS_GETCAP = 0x400470a3
PPS_FETCH = 0xc00470a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x80
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ [0]uint8
+ Seq uint16
+ _ uint16
+ _ uint32
+ _ uint32
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint32
+ Atime uint32
+ Dtime uint32
+ Ctime uint32
+ Cpid int32
+ Lpid int32
+ Nattch uint32
+ Atime_high uint16
+ Dtime_high uint16
+ Ctime_high uint16
+ _ uint16
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
index 91d5574ff..79a944672 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build mips64 && linux
@@ -635,3 +635,33 @@ const (
PPS_GETCAP = 0x400870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x80
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ [0]uint8
+ Seq uint16
+ _ uint16
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
index 5d721497b..8f4b107ca 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build mips64le && linux
@@ -635,3 +635,33 @@ const (
PPS_GETCAP = 0x400870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x80
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ [0]uint8
+ Seq uint16
+ _ uint16
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
index a5addd06a..e4eb21798 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build mipsle && linux
@@ -636,3 +636,35 @@ const (
PPS_GETCAP = 0x400470a3
PPS_FETCH = 0xc00470a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x80
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ [0]uint8
+ Seq uint16
+ _ uint16
+ _ uint32
+ _ uint32
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint32
+ Atime uint32
+ Dtime uint32
+ Ctime uint32
+ Cpid int32
+ Lpid int32
+ Nattch uint32
+ Atime_high uint16
+ Dtime_high uint16
+ Ctime_high uint16
+ _ uint16
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go
index bb6b03dfc..d5b21f0f7 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build ppc && linux
@@ -642,3 +642,37 @@ const (
PPS_GETCAP = 0x400470a3
PPS_FETCH = 0xc00470a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ Seq uint32
+ _ uint32
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Atime_high uint32
+ Atime uint32
+ Dtime_high uint32
+ Dtime uint32
+ Ctime_high uint32
+ Ctime uint32
+ _ uint32
+ Segsz uint32
+ Cpid int32
+ Lpid int32
+ Nattch uint32
+ _ uint32
+ _ uint32
+ _ [4]byte
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
index 7637243b7..5188d142b 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build ppc64 && linux
@@ -642,3 +642,32 @@ const (
PPS_GETCAP = 0x400870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ Seq uint32
+ _ uint32
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Segsz uint64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
index a1a28e525..de4dd4c73 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build ppc64le && linux
@@ -642,3 +642,32 @@ const (
PPS_GETCAP = 0x400870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ Seq uint32
+ _ uint32
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Segsz uint64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
index e0a8a1362..dccbf9b06 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build riscv64 && linux
@@ -660,3 +660,33 @@ const (
PPS_GETCAP = 0x800870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ [0]uint8
+ Seq uint16
+ _ uint16
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
index 21d6e56c7..635880610 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build s390x && linux
@@ -656,3 +656,32 @@ const (
PPS_GETCAP = 0x800870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x800
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ uint16
+ Seq uint16
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Segsz uint64
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
index 0531e98f6..765edc13f 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
@@ -1,4 +1,4 @@
-// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
//go:build sparc64 && linux
@@ -637,3 +637,32 @@ const (
PPS_GETCAP = 0x400870a3
PPS_FETCH = 0xc00870a4
)
+
+const (
+ PIDFD_NONBLOCK = 0x4000
+)
+
+type SysvIpcPerm struct {
+ Key int32
+ Uid uint32
+ Gid uint32
+ Cuid uint32
+ Cgid uint32
+ Mode uint32
+ _ uint16
+ Seq uint16
+ _ uint64
+ _ uint64
+}
+type SysvShmDesc struct {
+ Perm SysvIpcPerm
+ Atime int64
+ Dtime int64
+ Ctime int64
+ Segsz uint64
+ Cpid int32
+ Lpid int32
+ Nattch uint64
+ _ uint64
+ _ uint64
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
index 2a8b1e6f7..baf5fe650 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
@@ -564,12 +564,11 @@ type Uvmexp struct {
Kmapent int32
}
-const SizeofClockinfo = 0x14
+const SizeofClockinfo = 0x10
type Clockinfo struct {
- Hz int32
- Tick int32
- Tickadj int32
- Stathz int32
- Profhz int32
+ Hz int32
+ Tick int32
+ Stathz int32
+ Profhz int32
}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
index b1759cf70..e21ae8ecf 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
@@ -564,12 +564,11 @@ type Uvmexp struct {
Kmapent int32
}
-const SizeofClockinfo = 0x14
+const SizeofClockinfo = 0x10
type Clockinfo struct {
- Hz int32
- Tick int32
- Tickadj int32
- Stathz int32
- Profhz int32
+ Hz int32
+ Tick int32
+ Stathz int32
+ Profhz int32
}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
index e807de206..f190651cd 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
@@ -565,12 +565,11 @@ type Uvmexp struct {
Kmapent int32
}
-const SizeofClockinfo = 0x14
+const SizeofClockinfo = 0x10
type Clockinfo struct {
- Hz int32
- Tick int32
- Tickadj int32
- Stathz int32
- Profhz int32
+ Hz int32
+ Tick int32
+ Stathz int32
+ Profhz int32
}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go
index ff3aecaee..84747c582 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go
@@ -558,12 +558,11 @@ type Uvmexp struct {
Kmapent int32
}
-const SizeofClockinfo = 0x14
+const SizeofClockinfo = 0x10
type Clockinfo struct {
- Hz int32
- Tick int32
- Tickadj int32
- Stathz int32
- Profhz int32
+ Hz int32
+ Tick int32
+ Stathz int32
+ Profhz int32
}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go
index 9ecda6917..ac5c8b637 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go
@@ -558,12 +558,11 @@ type Uvmexp struct {
Kmapent int32
}
-const SizeofClockinfo = 0x14
+const SizeofClockinfo = 0x10
type Clockinfo struct {
- Hz int32
- Tick int32
- Tickadj int32
- Stathz int32
- Profhz int32
+ Hz int32
+ Tick int32
+ Stathz int32
+ Profhz int32
}
diff --git a/vendor/golang.org/x/sys/windows/aliases.go b/vendor/golang.org/x/sys/windows/aliases.go
index af3af60db..a20ebea63 100644
--- a/vendor/golang.org/x/sys/windows/aliases.go
+++ b/vendor/golang.org/x/sys/windows/aliases.go
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build windows
-// +build go1.9
+//go:build windows && go1.9
+// +build windows,go1.9
package windows
diff --git a/vendor/golang.org/x/sys/windows/eventlog.go b/vendor/golang.org/x/sys/windows/eventlog.go
index 40af946e1..2cd60645e 100644
--- a/vendor/golang.org/x/sys/windows/eventlog.go
+++ b/vendor/golang.org/x/sys/windows/eventlog.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build windows
// +build windows
package windows
diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go
index 7a11e83b7..855698bb2 100644
--- a/vendor/golang.org/x/sys/windows/exec_windows.go
+++ b/vendor/golang.org/x/sys/windows/exec_windows.go
@@ -9,8 +9,6 @@ package windows
import (
errorspkg "errors"
"unsafe"
-
- "golang.org/x/sys/internal/unsafeheader"
)
// EscapeArg rewrites command line argument s as prescribed
@@ -147,8 +145,12 @@ func NewProcThreadAttributeList(maxAttrCount uint32) (*ProcThreadAttributeListCo
}
return nil, err
}
+ alloc, err := LocalAlloc(LMEM_FIXED, uint32(size))
+ if err != nil {
+ return nil, err
+ }
// size is guaranteed to be ≥1 by InitializeProcThreadAttributeList.
- al := &ProcThreadAttributeListContainer{data: (*ProcThreadAttributeList)(unsafe.Pointer(&make([]byte, size)[0]))}
+ al := &ProcThreadAttributeListContainer{data: (*ProcThreadAttributeList)(unsafe.Pointer(alloc))}
err = initializeProcThreadAttributeList(al.data, maxAttrCount, 0, &size)
if err != nil {
return nil, err
@@ -157,36 +159,17 @@ func NewProcThreadAttributeList(maxAttrCount uint32) (*ProcThreadAttributeListCo
}
// Update modifies the ProcThreadAttributeList using UpdateProcThreadAttribute.
-// Note that the value passed to this function will be copied into memory
-// allocated by LocalAlloc, the contents of which should not contain any
-// Go-managed pointers, even if the passed value itself is a Go-managed
-// pointer.
func (al *ProcThreadAttributeListContainer) Update(attribute uintptr, value unsafe.Pointer, size uintptr) error {
- alloc, err := LocalAlloc(LMEM_FIXED, uint32(size))
- if err != nil {
- return err
- }
- var src, dst []byte
- hdr := (*unsafeheader.Slice)(unsafe.Pointer(&src))
- hdr.Data = value
- hdr.Cap = int(size)
- hdr.Len = int(size)
- hdr = (*unsafeheader.Slice)(unsafe.Pointer(&dst))
- hdr.Data = unsafe.Pointer(alloc)
- hdr.Cap = int(size)
- hdr.Len = int(size)
- copy(dst, src)
- al.heapAllocations = append(al.heapAllocations, alloc)
- return updateProcThreadAttribute(al.data, 0, attribute, unsafe.Pointer(alloc), size, nil, nil)
+ al.pointers = append(al.pointers, value)
+ return updateProcThreadAttribute(al.data, 0, attribute, value, size, nil, nil)
}
// Delete frees ProcThreadAttributeList's resources.
func (al *ProcThreadAttributeListContainer) Delete() {
deleteProcThreadAttributeList(al.data)
- for i := range al.heapAllocations {
- LocalFree(Handle(al.heapAllocations[i]))
- }
- al.heapAllocations = nil
+ LocalFree(Handle(unsafe.Pointer(al.data)))
+ al.data = nil
+ al.pointers = nil
}
// List returns the actual ProcThreadAttributeList to be passed to StartupInfoEx.
diff --git a/vendor/golang.org/x/sys/windows/memory_windows.go b/vendor/golang.org/x/sys/windows/memory_windows.go
index 1adb60739..6dc0920a8 100644
--- a/vendor/golang.org/x/sys/windows/memory_windows.go
+++ b/vendor/golang.org/x/sys/windows/memory_windows.go
@@ -35,3 +35,14 @@ const (
QUOTA_LIMITS_HARDWS_MAX_DISABLE = 0x00000008
QUOTA_LIMITS_HARDWS_MAX_ENABLE = 0x00000004
)
+
+type MemoryBasicInformation struct {
+ BaseAddress uintptr
+ AllocationBase uintptr
+ AllocationProtect uint32
+ PartitionId uint16
+ RegionSize uintptr
+ State uint32
+ Protect uint32
+ Type uint32
+}
diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go
index 328e3b2ac..8563f79c5 100644
--- a/vendor/golang.org/x/sys/windows/mksyscall.go
+++ b/vendor/golang.org/x/sys/windows/mksyscall.go
@@ -2,8 +2,9 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build generate
// +build generate
package windows
-//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go
+//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go setupapi_windows.go
diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go
index a74e3e24b..9196b089c 100644
--- a/vendor/golang.org/x/sys/windows/race.go
+++ b/vendor/golang.org/x/sys/windows/race.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build windows && race
// +build windows,race
package windows
diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go
index e44a3cbf6..7bae4817a 100644
--- a/vendor/golang.org/x/sys/windows/race0.go
+++ b/vendor/golang.org/x/sys/windows/race0.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build windows && !race
// +build windows,!race
package windows
diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go
index b269850d0..f8deca839 100644
--- a/vendor/golang.org/x/sys/windows/service.go
+++ b/vendor/golang.org/x/sys/windows/service.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build windows
// +build windows
package windows
@@ -16,8 +17,6 @@ const (
SC_MANAGER_ALL_ACCESS = 0xf003f
)
-//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW
-
const (
SERVICE_KERNEL_DRIVER = 1
SERVICE_FILE_SYSTEM_DRIVER = 2
@@ -132,6 +131,14 @@ const (
SC_EVENT_DATABASE_CHANGE = 0
SC_EVENT_PROPERTY_CHANGE = 1
SC_EVENT_STATUS_CHANGE = 2
+
+ SERVICE_START_REASON_DEMAND = 0x00000001
+ SERVICE_START_REASON_AUTO = 0x00000002
+ SERVICE_START_REASON_TRIGGER = 0x00000004
+ SERVICE_START_REASON_RESTART_ON_FAILURE = 0x00000008
+ SERVICE_START_REASON_DELAYEDAUTO = 0x00000010
+
+ SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1
)
type SERVICE_STATUS struct {
@@ -216,6 +223,7 @@ type QUERY_SERVICE_LOCK_STATUS struct {
LockDuration uint32
}
+//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW
//sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle
//sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW
//sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW
@@ -235,3 +243,5 @@ type QUERY_SERVICE_LOCK_STATUS struct {
//sys NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW
//sys SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications?
//sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications?
+//sys RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW
+//sys QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation?
diff --git a/vendor/golang.org/x/sys/windows/setupapi_windows.go b/vendor/golang.org/x/sys/windows/setupapi_windows.go
new file mode 100644
index 000000000..14027da3f
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/setupapi_windows.go
@@ -0,0 +1,1425 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package windows
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "runtime"
+ "strings"
+ "syscall"
+ "unsafe"
+)
+
+// This file contains functions that wrap SetupAPI.dll and CfgMgr32.dll,
+// core system functions for managing hardware devices, drivers, and the PnP tree.
+// Information about these APIs can be found at:
+// https://docs.microsoft.com/en-us/windows-hardware/drivers/install/setupapi
+// https://docs.microsoft.com/en-us/windows/win32/devinst/cfgmgr32-
+
+const (
+ ERROR_EXPECTED_SECTION_NAME Errno = 0x20000000 | 0xC0000000 | 0
+ ERROR_BAD_SECTION_NAME_LINE Errno = 0x20000000 | 0xC0000000 | 1
+ ERROR_SECTION_NAME_TOO_LONG Errno = 0x20000000 | 0xC0000000 | 2
+ ERROR_GENERAL_SYNTAX Errno = 0x20000000 | 0xC0000000 | 3
+ ERROR_WRONG_INF_STYLE Errno = 0x20000000 | 0xC0000000 | 0x100
+ ERROR_SECTION_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x101
+ ERROR_LINE_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x102
+ ERROR_NO_BACKUP Errno = 0x20000000 | 0xC0000000 | 0x103
+ ERROR_NO_ASSOCIATED_CLASS Errno = 0x20000000 | 0xC0000000 | 0x200
+ ERROR_CLASS_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x201
+ ERROR_DUPLICATE_FOUND Errno = 0x20000000 | 0xC0000000 | 0x202
+ ERROR_NO_DRIVER_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x203
+ ERROR_KEY_DOES_NOT_EXIST Errno = 0x20000000 | 0xC0000000 | 0x204
+ ERROR_INVALID_DEVINST_NAME Errno = 0x20000000 | 0xC0000000 | 0x205
+ ERROR_INVALID_CLASS Errno = 0x20000000 | 0xC0000000 | 0x206
+ ERROR_DEVINST_ALREADY_EXISTS Errno = 0x20000000 | 0xC0000000 | 0x207
+ ERROR_DEVINFO_NOT_REGISTERED Errno = 0x20000000 | 0xC0000000 | 0x208
+ ERROR_INVALID_REG_PROPERTY Errno = 0x20000000 | 0xC0000000 | 0x209
+ ERROR_NO_INF Errno = 0x20000000 | 0xC0000000 | 0x20A
+ ERROR_NO_SUCH_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x20B
+ ERROR_CANT_LOAD_CLASS_ICON Errno = 0x20000000 | 0xC0000000 | 0x20C
+ ERROR_INVALID_CLASS_INSTALLER Errno = 0x20000000 | 0xC0000000 | 0x20D
+ ERROR_DI_DO_DEFAULT Errno = 0x20000000 | 0xC0000000 | 0x20E
+ ERROR_DI_NOFILECOPY Errno = 0x20000000 | 0xC0000000 | 0x20F
+ ERROR_INVALID_HWPROFILE Errno = 0x20000000 | 0xC0000000 | 0x210
+ ERROR_NO_DEVICE_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x211
+ ERROR_DEVINFO_LIST_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x212
+ ERROR_DEVINFO_DATA_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x213
+ ERROR_DI_BAD_PATH Errno = 0x20000000 | 0xC0000000 | 0x214
+ ERROR_NO_CLASSINSTALL_PARAMS Errno = 0x20000000 | 0xC0000000 | 0x215
+ ERROR_FILEQUEUE_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x216
+ ERROR_BAD_SERVICE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x217
+ ERROR_NO_CLASS_DRIVER_LIST Errno = 0x20000000 | 0xC0000000 | 0x218
+ ERROR_NO_ASSOCIATED_SERVICE Errno = 0x20000000 | 0xC0000000 | 0x219
+ ERROR_NO_DEFAULT_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x21A
+ ERROR_DEVICE_INTERFACE_ACTIVE Errno = 0x20000000 | 0xC0000000 | 0x21B
+ ERROR_DEVICE_INTERFACE_REMOVED Errno = 0x20000000 | 0xC0000000 | 0x21C
+ ERROR_BAD_INTERFACE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x21D
+ ERROR_NO_SUCH_INTERFACE_CLASS Errno = 0x20000000 | 0xC0000000 | 0x21E
+ ERROR_INVALID_REFERENCE_STRING Errno = 0x20000000 | 0xC0000000 | 0x21F
+ ERROR_INVALID_MACHINENAME Errno = 0x20000000 | 0xC0000000 | 0x220
+ ERROR_REMOTE_COMM_FAILURE Errno = 0x20000000 | 0xC0000000 | 0x221
+ ERROR_MACHINE_UNAVAILABLE Errno = 0x20000000 | 0xC0000000 | 0x222
+ ERROR_NO_CONFIGMGR_SERVICES Errno = 0x20000000 | 0xC0000000 | 0x223
+ ERROR_INVALID_PROPPAGE_PROVIDER Errno = 0x20000000 | 0xC0000000 | 0x224
+ ERROR_NO_SUCH_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x225
+ ERROR_DI_POSTPROCESSING_REQUIRED Errno = 0x20000000 | 0xC0000000 | 0x226
+ ERROR_INVALID_COINSTALLER Errno = 0x20000000 | 0xC0000000 | 0x227
+ ERROR_NO_COMPAT_DRIVERS Errno = 0x20000000 | 0xC0000000 | 0x228
+ ERROR_NO_DEVICE_ICON Errno = 0x20000000 | 0xC0000000 | 0x229
+ ERROR_INVALID_INF_LOGCONFIG Errno = 0x20000000 | 0xC0000000 | 0x22A
+ ERROR_DI_DONT_INSTALL Errno = 0x20000000 | 0xC0000000 | 0x22B
+ ERROR_INVALID_FILTER_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22C
+ ERROR_NON_WINDOWS_NT_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22D
+ ERROR_NON_WINDOWS_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22E
+ ERROR_NO_CATALOG_FOR_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x22F
+ ERROR_DEVINSTALL_QUEUE_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x230
+ ERROR_NOT_DISABLEABLE Errno = 0x20000000 | 0xC0000000 | 0x231
+ ERROR_CANT_REMOVE_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x232
+ ERROR_INVALID_TARGET Errno = 0x20000000 | 0xC0000000 | 0x233
+ ERROR_DRIVER_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x234
+ ERROR_IN_WOW64 Errno = 0x20000000 | 0xC0000000 | 0x235
+ ERROR_SET_SYSTEM_RESTORE_POINT Errno = 0x20000000 | 0xC0000000 | 0x236
+ ERROR_SCE_DISABLED Errno = 0x20000000 | 0xC0000000 | 0x238
+ ERROR_UNKNOWN_EXCEPTION Errno = 0x20000000 | 0xC0000000 | 0x239
+ ERROR_PNP_REGISTRY_ERROR Errno = 0x20000000 | 0xC0000000 | 0x23A
+ ERROR_REMOTE_REQUEST_UNSUPPORTED Errno = 0x20000000 | 0xC0000000 | 0x23B
+ ERROR_NOT_AN_INSTALLED_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x23C
+ ERROR_INF_IN_USE_BY_DEVICES Errno = 0x20000000 | 0xC0000000 | 0x23D
+ ERROR_DI_FUNCTION_OBSOLETE Errno = 0x20000000 | 0xC0000000 | 0x23E
+ ERROR_NO_AUTHENTICODE_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x23F
+ ERROR_AUTHENTICODE_DISALLOWED Errno = 0x20000000 | 0xC0000000 | 0x240
+ ERROR_AUTHENTICODE_TRUSTED_PUBLISHER Errno = 0x20000000 | 0xC0000000 | 0x241
+ ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED Errno = 0x20000000 | 0xC0000000 | 0x242
+ ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED Errno = 0x20000000 | 0xC0000000 | 0x243
+ ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x244
+ ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE Errno = 0x20000000 | 0xC0000000 | 0x245
+ ERROR_DEVICE_INSTALLER_NOT_READY Errno = 0x20000000 | 0xC0000000 | 0x246
+ ERROR_DRIVER_STORE_ADD_FAILED Errno = 0x20000000 | 0xC0000000 | 0x247
+ ERROR_DEVICE_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x248
+ ERROR_DRIVER_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x249
+ ERROR_WRONG_INF_TYPE Errno = 0x20000000 | 0xC0000000 | 0x24A
+ ERROR_FILE_HASH_NOT_IN_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x24B
+ ERROR_DRIVER_STORE_DELETE_FAILED Errno = 0x20000000 | 0xC0000000 | 0x24C
+ ERROR_UNRECOVERABLE_STACK_OVERFLOW Errno = 0x20000000 | 0xC0000000 | 0x300
+ EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW
+ ERROR_NO_DEFAULT_INTERFACE_DEVICE Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE
+ ERROR_INTERFACE_DEVICE_ACTIVE Errno = ERROR_DEVICE_INTERFACE_ACTIVE
+ ERROR_INTERFACE_DEVICE_REMOVED Errno = ERROR_DEVICE_INTERFACE_REMOVED
+ ERROR_NO_SUCH_INTERFACE_DEVICE Errno = ERROR_NO_SUCH_DEVICE_INTERFACE
+)
+
+const (
+ MAX_DEVICE_ID_LEN = 200
+ MAX_DEVNODE_ID_LEN = MAX_DEVICE_ID_LEN
+ MAX_GUID_STRING_LEN = 39 // 38 chars + terminator null
+ MAX_CLASS_NAME_LEN = 32
+ MAX_PROFILE_LEN = 80
+ MAX_CONFIG_VALUE = 9999
+ MAX_INSTANCE_VALUE = 9999
+ CONFIGMG_VERSION = 0x0400
+)
+
+// Maximum string length constants
+const (
+ LINE_LEN = 256 // Windows 9x-compatible maximum for displayable strings coming from a device INF.
+ MAX_INF_STRING_LENGTH = 4096 // Actual maximum size of an INF string (including string substitutions).
+ MAX_INF_SECTION_NAME_LENGTH = 255 // For Windows 9x compatibility, INF section names should be constrained to 32 characters.
+ MAX_TITLE_LEN = 60
+ MAX_INSTRUCTION_LEN = 256
+ MAX_LABEL_LEN = 30
+ MAX_SERVICE_NAME_LEN = 256
+ MAX_SUBTITLE_LEN = 256
+)
+
+const (
+ // SP_MAX_MACHINENAME_LENGTH defines maximum length of a machine name in the format expected by ConfigMgr32 CM_Connect_Machine (i.e., "\\\\MachineName\0").
+ SP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3
+)
+
+// HSPFILEQ is type for setup file queue
+type HSPFILEQ uintptr
+
+// DevInfo holds reference to device information set
+type DevInfo Handle
+
+// DEVINST is a handle usually recognized by cfgmgr32 APIs
+type DEVINST uint32
+
+// DevInfoData is a device information structure (references a device instance that is a member of a device information set)
+type DevInfoData struct {
+ size uint32
+ ClassGUID GUID
+ DevInst DEVINST
+ _ uintptr
+}
+
+// DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supersedes the functionality of SetupDiGetDeviceInfoListClass).
+type DevInfoListDetailData struct {
+ size uint32 // Use unsafeSizeOf method
+ ClassGUID GUID
+ RemoteMachineHandle Handle
+ remoteMachineName [SP_MAX_MACHINENAME_LENGTH]uint16
+}
+
+func (*DevInfoListDetailData) unsafeSizeOf() uint32 {
+ if unsafe.Sizeof(uintptr(0)) == 4 {
+ // Windows declares this with pshpack1.h
+ return uint32(unsafe.Offsetof(DevInfoListDetailData{}.remoteMachineName) + unsafe.Sizeof(DevInfoListDetailData{}.remoteMachineName))
+ }
+ return uint32(unsafe.Sizeof(DevInfoListDetailData{}))
+}
+
+func (data *DevInfoListDetailData) RemoteMachineName() string {
+ return UTF16ToString(data.remoteMachineName[:])
+}
+
+func (data *DevInfoListDetailData) SetRemoteMachineName(remoteMachineName string) error {
+ str, err := UTF16FromString(remoteMachineName)
+ if err != nil {
+ return err
+ }
+ copy(data.remoteMachineName[:], str)
+ return nil
+}
+
+// DI_FUNCTION is function type for device installer
+type DI_FUNCTION uint32
+
+const (
+ DIF_SELECTDEVICE DI_FUNCTION = 0x00000001
+ DIF_INSTALLDEVICE DI_FUNCTION = 0x00000002
+ DIF_ASSIGNRESOURCES DI_FUNCTION = 0x00000003
+ DIF_PROPERTIES DI_FUNCTION = 0x00000004
+ DIF_REMOVE DI_FUNCTION = 0x00000005
+ DIF_FIRSTTIMESETUP DI_FUNCTION = 0x00000006
+ DIF_FOUNDDEVICE DI_FUNCTION = 0x00000007
+ DIF_SELECTCLASSDRIVERS DI_FUNCTION = 0x00000008
+ DIF_VALIDATECLASSDRIVERS DI_FUNCTION = 0x00000009
+ DIF_INSTALLCLASSDRIVERS DI_FUNCTION = 0x0000000A
+ DIF_CALCDISKSPACE DI_FUNCTION = 0x0000000B
+ DIF_DESTROYPRIVATEDATA DI_FUNCTION = 0x0000000C
+ DIF_VALIDATEDRIVER DI_FUNCTION = 0x0000000D
+ DIF_DETECT DI_FUNCTION = 0x0000000F
+ DIF_INSTALLWIZARD DI_FUNCTION = 0x00000010
+ DIF_DESTROYWIZARDDATA DI_FUNCTION = 0x00000011
+ DIF_PROPERTYCHANGE DI_FUNCTION = 0x00000012
+ DIF_ENABLECLASS DI_FUNCTION = 0x00000013
+ DIF_DETECTVERIFY DI_FUNCTION = 0x00000014
+ DIF_INSTALLDEVICEFILES DI_FUNCTION = 0x00000015
+ DIF_UNREMOVE DI_FUNCTION = 0x00000016
+ DIF_SELECTBESTCOMPATDRV DI_FUNCTION = 0x00000017
+ DIF_ALLOW_INSTALL DI_FUNCTION = 0x00000018
+ DIF_REGISTERDEVICE DI_FUNCTION = 0x00000019
+ DIF_NEWDEVICEWIZARD_PRESELECT DI_FUNCTION = 0x0000001A
+ DIF_NEWDEVICEWIZARD_SELECT DI_FUNCTION = 0x0000001B
+ DIF_NEWDEVICEWIZARD_PREANALYZE DI_FUNCTION = 0x0000001C
+ DIF_NEWDEVICEWIZARD_POSTANALYZE DI_FUNCTION = 0x0000001D
+ DIF_NEWDEVICEWIZARD_FINISHINSTALL DI_FUNCTION = 0x0000001E
+ DIF_INSTALLINTERFACES DI_FUNCTION = 0x00000020
+ DIF_DETECTCANCEL DI_FUNCTION = 0x00000021
+ DIF_REGISTER_COINSTALLERS DI_FUNCTION = 0x00000022
+ DIF_ADDPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000023
+ DIF_ADDPROPERTYPAGE_BASIC DI_FUNCTION = 0x00000024
+ DIF_TROUBLESHOOTER DI_FUNCTION = 0x00000026
+ DIF_POWERMESSAGEWAKE DI_FUNCTION = 0x00000027
+ DIF_ADDREMOTEPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000028
+ DIF_UPDATEDRIVER_UI DI_FUNCTION = 0x00000029
+ DIF_FINISHINSTALL_ACTION DI_FUNCTION = 0x0000002A
+)
+
+// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set)
+type DevInstallParams struct {
+ size uint32
+ Flags DI_FLAGS
+ FlagsEx DI_FLAGSEX
+ hwndParent uintptr
+ InstallMsgHandler uintptr
+ InstallMsgHandlerContext uintptr
+ FileQueue HSPFILEQ
+ _ uintptr
+ _ uint32
+ driverPath [MAX_PATH]uint16
+}
+
+func (params *DevInstallParams) DriverPath() string {
+ return UTF16ToString(params.driverPath[:])
+}
+
+func (params *DevInstallParams) SetDriverPath(driverPath string) error {
+ str, err := UTF16FromString(driverPath)
+ if err != nil {
+ return err
+ }
+ copy(params.driverPath[:], str)
+ return nil
+}
+
+// DI_FLAGS is SP_DEVINSTALL_PARAMS.Flags values
+type DI_FLAGS uint32
+
+const (
+ // Flags for choosing a device
+ DI_SHOWOEM DI_FLAGS = 0x00000001 // support Other... button
+ DI_SHOWCOMPAT DI_FLAGS = 0x00000002 // show compatibility list
+ DI_SHOWCLASS DI_FLAGS = 0x00000004 // show class list
+ DI_SHOWALL DI_FLAGS = 0x00000007 // both class & compat list shown
+ DI_NOVCP DI_FLAGS = 0x00000008 // don't create a new copy queue--use caller-supplied FileQueue
+ DI_DIDCOMPAT DI_FLAGS = 0x00000010 // Searched for compatible devices
+ DI_DIDCLASS DI_FLAGS = 0x00000020 // Searched for class devices
+ DI_AUTOASSIGNRES DI_FLAGS = 0x00000040 // No UI for resources if possible
+
+ // Flags returned by DiInstallDevice to indicate need to reboot/restart
+ DI_NEEDRESTART DI_FLAGS = 0x00000080 // Reboot required to take effect
+ DI_NEEDREBOOT DI_FLAGS = 0x00000100 // ""
+
+ // Flags for device installation
+ DI_NOBROWSE DI_FLAGS = 0x00000200 // no Browse... in InsertDisk
+
+ // Flags set by DiBuildDriverInfoList
+ DI_MULTMFGS DI_FLAGS = 0x00000400 // Set if multiple manufacturers in class driver list
+
+ // Flag indicates that device is disabled
+ DI_DISABLED DI_FLAGS = 0x00000800 // Set if device disabled
+
+ // Flags for Device/Class Properties
+ DI_GENERALPAGE_ADDED DI_FLAGS = 0x00001000
+ DI_RESOURCEPAGE_ADDED DI_FLAGS = 0x00002000
+
+ // Flag to indicate the setting properties for this Device (or class) caused a change so the Dev Mgr UI probably needs to be updated.
+ DI_PROPERTIES_CHANGE DI_FLAGS = 0x00004000
+
+ // Flag to indicate that the sorting from the INF file should be used.
+ DI_INF_IS_SORTED DI_FLAGS = 0x00008000
+
+ // Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched.
+ DI_ENUMSINGLEINF DI_FLAGS = 0x00010000
+
+ // Flag that prevents ConfigMgr from removing/re-enumerating devices during device
+ // registration, installation, and deletion.
+ DI_DONOTCALLCONFIGMG DI_FLAGS = 0x00020000
+
+ // The following flag can be used to install a device disabled
+ DI_INSTALLDISABLED DI_FLAGS = 0x00040000
+
+ // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver
+ // list from its existing class driver list, instead of the normal INF search.
+ DI_COMPAT_FROM_CLASS DI_FLAGS = 0x00080000
+
+ // This flag is set if the Class Install params should be used.
+ DI_CLASSINSTALLPARAMS DI_FLAGS = 0x00100000
+
+ // This flag is set if the caller of DiCallClassInstaller does NOT want the internal default action performed if the Class installer returns ERROR_DI_DO_DEFAULT.
+ DI_NODI_DEFAULTACTION DI_FLAGS = 0x00200000
+
+ // Flags for device installation
+ DI_QUIETINSTALL DI_FLAGS = 0x00800000 // don't confuse the user with questions or excess info
+ DI_NOFILECOPY DI_FLAGS = 0x01000000 // No file Copy necessary
+ DI_FORCECOPY DI_FLAGS = 0x02000000 // Force files to be copied from install path
+ DI_DRIVERPAGE_ADDED DI_FLAGS = 0x04000000 // Prop provider added Driver page.
+ DI_USECI_SELECTSTRINGS DI_FLAGS = 0x08000000 // Use Class Installer Provided strings in the Select Device Dlg
+ DI_OVERRIDE_INFFLAGS DI_FLAGS = 0x10000000 // Override INF flags
+ DI_PROPS_NOCHANGEUSAGE DI_FLAGS = 0x20000000 // No Enable/Disable in General Props
+
+ DI_NOSELECTICONS DI_FLAGS = 0x40000000 // No small icons in select device dialogs
+
+ DI_NOWRITE_IDS DI_FLAGS = 0x80000000 // Don't write HW & Compat IDs on install
+)
+
+// DI_FLAGSEX is SP_DEVINSTALL_PARAMS.FlagsEx values
+type DI_FLAGSEX uint32
+
+const (
+ DI_FLAGSEX_CI_FAILED DI_FLAGSEX = 0x00000004 // Failed to Load/Call class installer
+ DI_FLAGSEX_FINISHINSTALL_ACTION DI_FLAGSEX = 0x00000008 // Class/co-installer wants to get a DIF_FINISH_INSTALL action in client context.
+ DI_FLAGSEX_DIDINFOLIST DI_FLAGSEX = 0x00000010 // Did the Class Info List
+ DI_FLAGSEX_DIDCOMPATINFO DI_FLAGSEX = 0x00000020 // Did the Compat Info List
+ DI_FLAGSEX_FILTERCLASSES DI_FLAGSEX = 0x00000040
+ DI_FLAGSEX_SETFAILEDINSTALL DI_FLAGSEX = 0x00000080
+ DI_FLAGSEX_DEVICECHANGE DI_FLAGSEX = 0x00000100
+ DI_FLAGSEX_ALWAYSWRITEIDS DI_FLAGSEX = 0x00000200
+ DI_FLAGSEX_PROPCHANGE_PENDING DI_FLAGSEX = 0x00000400 // One or more device property sheets have had changes made to them, and need to have a DIF_PROPERTYCHANGE occur.
+ DI_FLAGSEX_ALLOWEXCLUDEDDRVS DI_FLAGSEX = 0x00000800
+ DI_FLAGSEX_NOUIONQUERYREMOVE DI_FLAGSEX = 0x00001000
+ DI_FLAGSEX_USECLASSFORCOMPAT DI_FLAGSEX = 0x00002000 // Use the device's class when building compat drv list. (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)
+ DI_FLAGSEX_NO_DRVREG_MODIFY DI_FLAGSEX = 0x00008000 // Don't run AddReg and DelReg for device's software (driver) key.
+ DI_FLAGSEX_IN_SYSTEM_SETUP DI_FLAGSEX = 0x00010000 // Installation is occurring during initial system setup.
+ DI_FLAGSEX_INET_DRIVER DI_FLAGSEX = 0x00020000 // Driver came from Windows Update
+ DI_FLAGSEX_APPENDDRIVERLIST DI_FLAGSEX = 0x00040000 // Cause SetupDiBuildDriverInfoList to append a new driver list to an existing list.
+ DI_FLAGSEX_PREINSTALLBACKUP DI_FLAGSEX = 0x00080000 // not used
+ DI_FLAGSEX_BACKUPONREPLACE DI_FLAGSEX = 0x00100000 // not used
+ DI_FLAGSEX_DRIVERLIST_FROM_URL DI_FLAGSEX = 0x00200000 // build driver list from INF(s) retrieved from URL specified in SP_DEVINSTALL_PARAMS.DriverPath (empty string means Windows Update website)
+ DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS DI_FLAGSEX = 0x00800000 // Don't include old Internet drivers when building a driver list. Ignored on Windows Vista and later.
+ DI_FLAGSEX_POWERPAGE_ADDED DI_FLAGSEX = 0x01000000 // class installer added their own power page
+ DI_FLAGSEX_FILTERSIMILARDRIVERS DI_FLAGSEX = 0x02000000 // only include similar drivers in class list
+ DI_FLAGSEX_INSTALLEDDRIVER DI_FLAGSEX = 0x04000000 // only add the installed driver to the class or compat driver list. Used in calls to SetupDiBuildDriverInfoList
+ DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE DI_FLAGSEX = 0x08000000 // Don't remove identical driver nodes from the class list
+ DI_FLAGSEX_ALTPLATFORM_DRVSEARCH DI_FLAGSEX = 0x10000000 // Build driver list based on alternate platform information specified in associated file queue
+ DI_FLAGSEX_RESTART_DEVICE_ONLY DI_FLAGSEX = 0x20000000 // only restart the device drivers are being installed on as opposed to restarting all devices using those drivers.
+ DI_FLAGSEX_RECURSIVESEARCH DI_FLAGSEX = 0x40000000 // Tell SetupDiBuildDriverInfoList to do a recursive search
+ DI_FLAGSEX_SEARCH_PUBLISHED_INFS DI_FLAGSEX = 0x80000000 // Tell SetupDiBuildDriverInfoList to do a "published INF" search
+)
+
+// ClassInstallHeader is the first member of any class install parameters structure. It contains the device installation request code that defines the format of the rest of the install parameters structure.
+type ClassInstallHeader struct {
+ size uint32
+ InstallFunction DI_FUNCTION
+}
+
+func MakeClassInstallHeader(installFunction DI_FUNCTION) *ClassInstallHeader {
+ hdr := &ClassInstallHeader{InstallFunction: installFunction}
+ hdr.size = uint32(unsafe.Sizeof(*hdr))
+ return hdr
+}
+
+// DICS_STATE specifies values indicating a change in a device's state
+type DICS_STATE uint32
+
+const (
+ DICS_ENABLE DICS_STATE = 0x00000001 // The device is being enabled.
+ DICS_DISABLE DICS_STATE = 0x00000002 // The device is being disabled.
+ DICS_PROPCHANGE DICS_STATE = 0x00000003 // The properties of the device have changed.
+ DICS_START DICS_STATE = 0x00000004 // The device is being started (if the request is for the currently active hardware profile).
+ DICS_STOP DICS_STATE = 0x00000005 // The device is being stopped. The driver stack will be unloaded and the CSCONFIGFLAG_DO_NOT_START flag will be set for the device.
+)
+
+// DICS_FLAG specifies the scope of a device property change
+type DICS_FLAG uint32
+
+const (
+ DICS_FLAG_GLOBAL DICS_FLAG = 0x00000001 // make change in all hardware profiles
+ DICS_FLAG_CONFIGSPECIFIC DICS_FLAG = 0x00000002 // make change in specified profile only
+ DICS_FLAG_CONFIGGENERAL DICS_FLAG = 0x00000004 // 1 or more hardware profile-specific changes to follow (obsolete)
+)
+
+// PropChangeParams is a structure corresponding to a DIF_PROPERTYCHANGE install function.
+type PropChangeParams struct {
+ ClassInstallHeader ClassInstallHeader
+ StateChange DICS_STATE
+ Scope DICS_FLAG
+ HwProfile uint32
+}
+
+// DI_REMOVEDEVICE specifies the scope of the device removal
+type DI_REMOVEDEVICE uint32
+
+const (
+ DI_REMOVEDEVICE_GLOBAL DI_REMOVEDEVICE = 0x00000001 // Make this change in all hardware profiles. Remove information about the device from the registry.
+ DI_REMOVEDEVICE_CONFIGSPECIFIC DI_REMOVEDEVICE = 0x00000002 // Make this change to only the hardware profile specified by HwProfile. this flag only applies to root-enumerated devices. When Windows removes the device from the last hardware profile in which it was configured, Windows performs a global removal.
+)
+
+// RemoveDeviceParams is a structure corresponding to a DIF_REMOVE install function.
+type RemoveDeviceParams struct {
+ ClassInstallHeader ClassInstallHeader
+ Scope DI_REMOVEDEVICE
+ HwProfile uint32
+}
+
+// DrvInfoData is driver information structure (member of a driver info list that may be associated with a particular device instance, or (globally) with a device information set)
+type DrvInfoData struct {
+ size uint32
+ DriverType uint32
+ _ uintptr
+ description [LINE_LEN]uint16
+ mfgName [LINE_LEN]uint16
+ providerName [LINE_LEN]uint16
+ DriverDate Filetime
+ DriverVersion uint64
+}
+
+func (data *DrvInfoData) Description() string {
+ return UTF16ToString(data.description[:])
+}
+
+func (data *DrvInfoData) SetDescription(description string) error {
+ str, err := UTF16FromString(description)
+ if err != nil {
+ return err
+ }
+ copy(data.description[:], str)
+ return nil
+}
+
+func (data *DrvInfoData) MfgName() string {
+ return UTF16ToString(data.mfgName[:])
+}
+
+func (data *DrvInfoData) SetMfgName(mfgName string) error {
+ str, err := UTF16FromString(mfgName)
+ if err != nil {
+ return err
+ }
+ copy(data.mfgName[:], str)
+ return nil
+}
+
+func (data *DrvInfoData) ProviderName() string {
+ return UTF16ToString(data.providerName[:])
+}
+
+func (data *DrvInfoData) SetProviderName(providerName string) error {
+ str, err := UTF16FromString(providerName)
+ if err != nil {
+ return err
+ }
+ copy(data.providerName[:], str)
+ return nil
+}
+
+// IsNewer method returns true if DrvInfoData date and version is newer than supplied parameters.
+func (data *DrvInfoData) IsNewer(driverDate Filetime, driverVersion uint64) bool {
+ if data.DriverDate.HighDateTime > driverDate.HighDateTime {
+ return true
+ }
+ if data.DriverDate.HighDateTime < driverDate.HighDateTime {
+ return false
+ }
+
+ if data.DriverDate.LowDateTime > driverDate.LowDateTime {
+ return true
+ }
+ if data.DriverDate.LowDateTime < driverDate.LowDateTime {
+ return false
+ }
+
+ if data.DriverVersion > driverVersion {
+ return true
+ }
+ if data.DriverVersion < driverVersion {
+ return false
+ }
+
+ return false
+}
+
+// DrvInfoDetailData is driver information details structure (provides detailed information about a particular driver information structure)
+type DrvInfoDetailData struct {
+ size uint32 // Use unsafeSizeOf method
+ InfDate Filetime
+ compatIDsOffset uint32
+ compatIDsLength uint32
+ _ uintptr
+ sectionName [LINE_LEN]uint16
+ infFileName [MAX_PATH]uint16
+ drvDescription [LINE_LEN]uint16
+ hardwareID [1]uint16
+}
+
+func (*DrvInfoDetailData) unsafeSizeOf() uint32 {
+ if unsafe.Sizeof(uintptr(0)) == 4 {
+ // Windows declares this with pshpack1.h
+ return uint32(unsafe.Offsetof(DrvInfoDetailData{}.hardwareID) + unsafe.Sizeof(DrvInfoDetailData{}.hardwareID))
+ }
+ return uint32(unsafe.Sizeof(DrvInfoDetailData{}))
+}
+
+func (data *DrvInfoDetailData) SectionName() string {
+ return UTF16ToString(data.sectionName[:])
+}
+
+func (data *DrvInfoDetailData) InfFileName() string {
+ return UTF16ToString(data.infFileName[:])
+}
+
+func (data *DrvInfoDetailData) DrvDescription() string {
+ return UTF16ToString(data.drvDescription[:])
+}
+
+func (data *DrvInfoDetailData) HardwareID() string {
+ if data.compatIDsOffset > 1 {
+ bufW := data.getBuf()
+ return UTF16ToString(bufW[:wcslen(bufW)])
+ }
+
+ return ""
+}
+
+func (data *DrvInfoDetailData) CompatIDs() []string {
+ a := make([]string, 0)
+
+ if data.compatIDsLength > 0 {
+ bufW := data.getBuf()
+ bufW = bufW[data.compatIDsOffset : data.compatIDsOffset+data.compatIDsLength]
+ for i := 0; i < len(bufW); {
+ j := i + wcslen(bufW[i:])
+ if i < j {
+ a = append(a, UTF16ToString(bufW[i:j]))
+ }
+ i = j + 1
+ }
+ }
+
+ return a
+}
+
+func (data *DrvInfoDetailData) getBuf() []uint16 {
+ len := (data.size - uint32(unsafe.Offsetof(data.hardwareID))) / 2
+ sl := struct {
+ addr *uint16
+ len int
+ cap int
+ }{&data.hardwareID[0], int(len), int(len)}
+ return *(*[]uint16)(unsafe.Pointer(&sl))
+}
+
+// IsCompatible method tests if given hardware ID matches the driver or is listed on the compatible ID list.
+func (data *DrvInfoDetailData) IsCompatible(hwid string) bool {
+ hwidLC := strings.ToLower(hwid)
+ if strings.ToLower(data.HardwareID()) == hwidLC {
+ return true
+ }
+ a := data.CompatIDs()
+ for i := range a {
+ if strings.ToLower(a[i]) == hwidLC {
+ return true
+ }
+ }
+
+ return false
+}
+
+// DICD flags control SetupDiCreateDeviceInfo
+type DICD uint32
+
+const (
+ DICD_GENERATE_ID DICD = 0x00000001
+ DICD_INHERIT_CLASSDRVS DICD = 0x00000002
+)
+
+// SUOI flags control SetupUninstallOEMInf
+type SUOI uint32
+
+const (
+ SUOI_FORCEDELETE SUOI = 0x0001
+)
+
+// SPDIT flags to distinguish between class drivers and
+// device drivers. (Passed in 'DriverType' parameter of
+// driver information list APIs)
+type SPDIT uint32
+
+const (
+ SPDIT_NODRIVER SPDIT = 0x00000000
+ SPDIT_CLASSDRIVER SPDIT = 0x00000001
+ SPDIT_COMPATDRIVER SPDIT = 0x00000002
+)
+
+// DIGCF flags control what is included in the device information set built by SetupDiGetClassDevs
+type DIGCF uint32
+
+const (
+ DIGCF_DEFAULT DIGCF = 0x00000001 // only valid with DIGCF_DEVICEINTERFACE
+ DIGCF_PRESENT DIGCF = 0x00000002
+ DIGCF_ALLCLASSES DIGCF = 0x00000004
+ DIGCF_PROFILE DIGCF = 0x00000008
+ DIGCF_DEVICEINTERFACE DIGCF = 0x00000010
+)
+
+// DIREG specifies values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey.
+type DIREG uint32
+
+const (
+ DIREG_DEV DIREG = 0x00000001 // Open/Create/Delete device key
+ DIREG_DRV DIREG = 0x00000002 // Open/Create/Delete driver key
+ DIREG_BOTH DIREG = 0x00000004 // Delete both driver and Device key
+)
+
+// SPDRP specifies device registry property codes
+// (Codes marked as read-only (R) may only be used for
+// SetupDiGetDeviceRegistryProperty)
+//
+// These values should cover the same set of registry properties
+// as defined by the CM_DRP codes in cfgmgr32.h.
+//
+// Note that SPDRP codes are zero based while CM_DRP codes are one based!
+type SPDRP uint32
+
+const (
+ SPDRP_DEVICEDESC SPDRP = 0x00000000 // DeviceDesc (R/W)
+ SPDRP_HARDWAREID SPDRP = 0x00000001 // HardwareID (R/W)
+ SPDRP_COMPATIBLEIDS SPDRP = 0x00000002 // CompatibleIDs (R/W)
+ SPDRP_SERVICE SPDRP = 0x00000004 // Service (R/W)
+ SPDRP_CLASS SPDRP = 0x00000007 // Class (R--tied to ClassGUID)
+ SPDRP_CLASSGUID SPDRP = 0x00000008 // ClassGUID (R/W)
+ SPDRP_DRIVER SPDRP = 0x00000009 // Driver (R/W)
+ SPDRP_CONFIGFLAGS SPDRP = 0x0000000A // ConfigFlags (R/W)
+ SPDRP_MFG SPDRP = 0x0000000B // Mfg (R/W)
+ SPDRP_FRIENDLYNAME SPDRP = 0x0000000C // FriendlyName (R/W)
+ SPDRP_LOCATION_INFORMATION SPDRP = 0x0000000D // LocationInformation (R/W)
+ SPDRP_PHYSICAL_DEVICE_OBJECT_NAME SPDRP = 0x0000000E // PhysicalDeviceObjectName (R)
+ SPDRP_CAPABILITIES SPDRP = 0x0000000F // Capabilities (R)
+ SPDRP_UI_NUMBER SPDRP = 0x00000010 // UiNumber (R)
+ SPDRP_UPPERFILTERS SPDRP = 0x00000011 // UpperFilters (R/W)
+ SPDRP_LOWERFILTERS SPDRP = 0x00000012 // LowerFilters (R/W)
+ SPDRP_BUSTYPEGUID SPDRP = 0x00000013 // BusTypeGUID (R)
+ SPDRP_LEGACYBUSTYPE SPDRP = 0x00000014 // LegacyBusType (R)
+ SPDRP_BUSNUMBER SPDRP = 0x00000015 // BusNumber (R)
+ SPDRP_ENUMERATOR_NAME SPDRP = 0x00000016 // Enumerator Name (R)
+ SPDRP_SECURITY SPDRP = 0x00000017 // Security (R/W, binary form)
+ SPDRP_SECURITY_SDS SPDRP = 0x00000018 // Security (W, SDS form)
+ SPDRP_DEVTYPE SPDRP = 0x00000019 // Device Type (R/W)
+ SPDRP_EXCLUSIVE SPDRP = 0x0000001A // Device is exclusive-access (R/W)
+ SPDRP_CHARACTERISTICS SPDRP = 0x0000001B // Device Characteristics (R/W)
+ SPDRP_ADDRESS SPDRP = 0x0000001C // Device Address (R)
+ SPDRP_UI_NUMBER_DESC_FORMAT SPDRP = 0x0000001D // UiNumberDescFormat (R/W)
+ SPDRP_DEVICE_POWER_DATA SPDRP = 0x0000001E // Device Power Data (R)
+ SPDRP_REMOVAL_POLICY SPDRP = 0x0000001F // Removal Policy (R)
+ SPDRP_REMOVAL_POLICY_HW_DEFAULT SPDRP = 0x00000020 // Hardware Removal Policy (R)
+ SPDRP_REMOVAL_POLICY_OVERRIDE SPDRP = 0x00000021 // Removal Policy Override (RW)
+ SPDRP_INSTALL_STATE SPDRP = 0x00000022 // Device Install State (R)
+ SPDRP_LOCATION_PATHS SPDRP = 0x00000023 // Device Location Paths (R)
+ SPDRP_BASE_CONTAINERID SPDRP = 0x00000024 // Base ContainerID (R)
+
+ SPDRP_MAXIMUM_PROPERTY SPDRP = 0x00000025 // Upper bound on ordinals
+)
+
+// DEVPROPTYPE represents the property-data-type identifier that specifies the
+// data type of a device property value in the unified device property model.
+type DEVPROPTYPE uint32
+
+const (
+ DEVPROP_TYPEMOD_ARRAY DEVPROPTYPE = 0x00001000
+ DEVPROP_TYPEMOD_LIST DEVPROPTYPE = 0x00002000
+
+ DEVPROP_TYPE_EMPTY DEVPROPTYPE = 0x00000000
+ DEVPROP_TYPE_NULL DEVPROPTYPE = 0x00000001
+ DEVPROP_TYPE_SBYTE DEVPROPTYPE = 0x00000002
+ DEVPROP_TYPE_BYTE DEVPROPTYPE = 0x00000003
+ DEVPROP_TYPE_INT16 DEVPROPTYPE = 0x00000004
+ DEVPROP_TYPE_UINT16 DEVPROPTYPE = 0x00000005
+ DEVPROP_TYPE_INT32 DEVPROPTYPE = 0x00000006
+ DEVPROP_TYPE_UINT32 DEVPROPTYPE = 0x00000007
+ DEVPROP_TYPE_INT64 DEVPROPTYPE = 0x00000008
+ DEVPROP_TYPE_UINT64 DEVPROPTYPE = 0x00000009
+ DEVPROP_TYPE_FLOAT DEVPROPTYPE = 0x0000000A
+ DEVPROP_TYPE_DOUBLE DEVPROPTYPE = 0x0000000B
+ DEVPROP_TYPE_DECIMAL DEVPROPTYPE = 0x0000000C
+ DEVPROP_TYPE_GUID DEVPROPTYPE = 0x0000000D
+ DEVPROP_TYPE_CURRENCY DEVPROPTYPE = 0x0000000E
+ DEVPROP_TYPE_DATE DEVPROPTYPE = 0x0000000F
+ DEVPROP_TYPE_FILETIME DEVPROPTYPE = 0x00000010
+ DEVPROP_TYPE_BOOLEAN DEVPROPTYPE = 0x00000011
+ DEVPROP_TYPE_STRING DEVPROPTYPE = 0x00000012
+ DEVPROP_TYPE_STRING_LIST DEVPROPTYPE = DEVPROP_TYPE_STRING | DEVPROP_TYPEMOD_LIST
+ DEVPROP_TYPE_SECURITY_DESCRIPTOR DEVPROPTYPE = 0x00000013
+ DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING DEVPROPTYPE = 0x00000014
+ DEVPROP_TYPE_DEVPROPKEY DEVPROPTYPE = 0x00000015
+ DEVPROP_TYPE_DEVPROPTYPE DEVPROPTYPE = 0x00000016
+ DEVPROP_TYPE_BINARY DEVPROPTYPE = DEVPROP_TYPE_BYTE | DEVPROP_TYPEMOD_ARRAY
+ DEVPROP_TYPE_ERROR DEVPROPTYPE = 0x00000017
+ DEVPROP_TYPE_NTSTATUS DEVPROPTYPE = 0x00000018
+ DEVPROP_TYPE_STRING_INDIRECT DEVPROPTYPE = 0x00000019
+
+ MAX_DEVPROP_TYPE DEVPROPTYPE = 0x00000019
+ MAX_DEVPROP_TYPEMOD DEVPROPTYPE = 0x00002000
+
+ DEVPROP_MASK_TYPE DEVPROPTYPE = 0x00000FFF
+ DEVPROP_MASK_TYPEMOD DEVPROPTYPE = 0x0000F000
+)
+
+// DEVPROPGUID specifies a property category.
+type DEVPROPGUID GUID
+
+// DEVPROPID uniquely identifies the property within the property category.
+type DEVPROPID uint32
+
+const DEVPROPID_FIRST_USABLE DEVPROPID = 2
+
+// DEVPROPKEY represents a device property key for a device property in the
+// unified device property model.
+type DEVPROPKEY struct {
+ FmtID DEVPROPGUID
+ PID DEVPROPID
+}
+
+// CONFIGRET is a return value or error code from cfgmgr32 APIs
+type CONFIGRET uint32
+
+func (ret CONFIGRET) Error() string {
+ if win32Error, ok := ret.Unwrap().(Errno); ok {
+ return fmt.Sprintf("%s (CfgMgr error: 0x%08x)", win32Error.Error(), uint32(ret))
+ }
+ return fmt.Sprintf("CfgMgr error: 0x%08x", uint32(ret))
+}
+
+func (ret CONFIGRET) Win32Error(defaultError Errno) Errno {
+ return cm_MapCrToWin32Err(ret, defaultError)
+}
+
+func (ret CONFIGRET) Unwrap() error {
+ const noMatch = Errno(^uintptr(0))
+ win32Error := ret.Win32Error(noMatch)
+ if win32Error == noMatch {
+ return nil
+ }
+ return win32Error
+}
+
+const (
+ CR_SUCCESS CONFIGRET = 0x00000000
+ CR_DEFAULT CONFIGRET = 0x00000001
+ CR_OUT_OF_MEMORY CONFIGRET = 0x00000002
+ CR_INVALID_POINTER CONFIGRET = 0x00000003
+ CR_INVALID_FLAG CONFIGRET = 0x00000004
+ CR_INVALID_DEVNODE CONFIGRET = 0x00000005
+ CR_INVALID_DEVINST = CR_INVALID_DEVNODE
+ CR_INVALID_RES_DES CONFIGRET = 0x00000006
+ CR_INVALID_LOG_CONF CONFIGRET = 0x00000007
+ CR_INVALID_ARBITRATOR CONFIGRET = 0x00000008
+ CR_INVALID_NODELIST CONFIGRET = 0x00000009
+ CR_DEVNODE_HAS_REQS CONFIGRET = 0x0000000A
+ CR_DEVINST_HAS_REQS = CR_DEVNODE_HAS_REQS
+ CR_INVALID_RESOURCEID CONFIGRET = 0x0000000B
+ CR_DLVXD_NOT_FOUND CONFIGRET = 0x0000000C
+ CR_NO_SUCH_DEVNODE CONFIGRET = 0x0000000D
+ CR_NO_SUCH_DEVINST = CR_NO_SUCH_DEVNODE
+ CR_NO_MORE_LOG_CONF CONFIGRET = 0x0000000E
+ CR_NO_MORE_RES_DES CONFIGRET = 0x0000000F
+ CR_ALREADY_SUCH_DEVNODE CONFIGRET = 0x00000010
+ CR_ALREADY_SUCH_DEVINST = CR_ALREADY_SUCH_DEVNODE
+ CR_INVALID_RANGE_LIST CONFIGRET = 0x00000011
+ CR_INVALID_RANGE CONFIGRET = 0x00000012
+ CR_FAILURE CONFIGRET = 0x00000013
+ CR_NO_SUCH_LOGICAL_DEV CONFIGRET = 0x00000014
+ CR_CREATE_BLOCKED CONFIGRET = 0x00000015
+ CR_NOT_SYSTEM_VM CONFIGRET = 0x00000016
+ CR_REMOVE_VETOED CONFIGRET = 0x00000017
+ CR_APM_VETOED CONFIGRET = 0x00000018
+ CR_INVALID_LOAD_TYPE CONFIGRET = 0x00000019
+ CR_BUFFER_SMALL CONFIGRET = 0x0000001A
+ CR_NO_ARBITRATOR CONFIGRET = 0x0000001B
+ CR_NO_REGISTRY_HANDLE CONFIGRET = 0x0000001C
+ CR_REGISTRY_ERROR CONFIGRET = 0x0000001D
+ CR_INVALID_DEVICE_ID CONFIGRET = 0x0000001E
+ CR_INVALID_DATA CONFIGRET = 0x0000001F
+ CR_INVALID_API CONFIGRET = 0x00000020
+ CR_DEVLOADER_NOT_READY CONFIGRET = 0x00000021
+ CR_NEED_RESTART CONFIGRET = 0x00000022
+ CR_NO_MORE_HW_PROFILES CONFIGRET = 0x00000023
+ CR_DEVICE_NOT_THERE CONFIGRET = 0x00000024
+ CR_NO_SUCH_VALUE CONFIGRET = 0x00000025
+ CR_WRONG_TYPE CONFIGRET = 0x00000026
+ CR_INVALID_PRIORITY CONFIGRET = 0x00000027
+ CR_NOT_DISABLEABLE CONFIGRET = 0x00000028
+ CR_FREE_RESOURCES CONFIGRET = 0x00000029
+ CR_QUERY_VETOED CONFIGRET = 0x0000002A
+ CR_CANT_SHARE_IRQ CONFIGRET = 0x0000002B
+ CR_NO_DEPENDENT CONFIGRET = 0x0000002C
+ CR_SAME_RESOURCES CONFIGRET = 0x0000002D
+ CR_NO_SUCH_REGISTRY_KEY CONFIGRET = 0x0000002E
+ CR_INVALID_MACHINENAME CONFIGRET = 0x0000002F
+ CR_REMOTE_COMM_FAILURE CONFIGRET = 0x00000030
+ CR_MACHINE_UNAVAILABLE CONFIGRET = 0x00000031
+ CR_NO_CM_SERVICES CONFIGRET = 0x00000032
+ CR_ACCESS_DENIED CONFIGRET = 0x00000033
+ CR_CALL_NOT_IMPLEMENTED CONFIGRET = 0x00000034
+ CR_INVALID_PROPERTY CONFIGRET = 0x00000035
+ CR_DEVICE_INTERFACE_ACTIVE CONFIGRET = 0x00000036
+ CR_NO_SUCH_DEVICE_INTERFACE CONFIGRET = 0x00000037
+ CR_INVALID_REFERENCE_STRING CONFIGRET = 0x00000038
+ CR_INVALID_CONFLICT_LIST CONFIGRET = 0x00000039
+ CR_INVALID_INDEX CONFIGRET = 0x0000003A
+ CR_INVALID_STRUCTURE_SIZE CONFIGRET = 0x0000003B
+ NUM_CR_RESULTS CONFIGRET = 0x0000003C
+)
+
+const (
+ CM_GET_DEVICE_INTERFACE_LIST_PRESENT = 0 // only currently 'live' device interfaces
+ CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES = 1 // all registered device interfaces, live or not
+)
+
+const (
+ DN_ROOT_ENUMERATED = 0x00000001 // Was enumerated by ROOT
+ DN_DRIVER_LOADED = 0x00000002 // Has Register_Device_Driver
+ DN_ENUM_LOADED = 0x00000004 // Has Register_Enumerator
+ DN_STARTED = 0x00000008 // Is currently configured
+ DN_MANUAL = 0x00000010 // Manually installed
+ DN_NEED_TO_ENUM = 0x00000020 // May need reenumeration
+ DN_NOT_FIRST_TIME = 0x00000040 // Has received a config
+ DN_HARDWARE_ENUM = 0x00000080 // Enum generates hardware ID
+ DN_LIAR = 0x00000100 // Lied about can reconfig once
+ DN_HAS_MARK = 0x00000200 // Not CM_Create_DevInst lately
+ DN_HAS_PROBLEM = 0x00000400 // Need device installer
+ DN_FILTERED = 0x00000800 // Is filtered
+ DN_MOVED = 0x00001000 // Has been moved
+ DN_DISABLEABLE = 0x00002000 // Can be disabled
+ DN_REMOVABLE = 0x00004000 // Can be removed
+ DN_PRIVATE_PROBLEM = 0x00008000 // Has a private problem
+ DN_MF_PARENT = 0x00010000 // Multi function parent
+ DN_MF_CHILD = 0x00020000 // Multi function child
+ DN_WILL_BE_REMOVED = 0x00040000 // DevInst is being removed
+ DN_NOT_FIRST_TIMEE = 0x00080000 // Has received a config enumerate
+ DN_STOP_FREE_RES = 0x00100000 // When child is stopped, free resources
+ DN_REBAL_CANDIDATE = 0x00200000 // Don't skip during rebalance
+ DN_BAD_PARTIAL = 0x00400000 // This devnode's log_confs do not have same resources
+ DN_NT_ENUMERATOR = 0x00800000 // This devnode's is an NT enumerator
+ DN_NT_DRIVER = 0x01000000 // This devnode's is an NT driver
+ DN_NEEDS_LOCKING = 0x02000000 // Devnode need lock resume processing
+ DN_ARM_WAKEUP = 0x04000000 // Devnode can be the wakeup device
+ DN_APM_ENUMERATOR = 0x08000000 // APM aware enumerator
+ DN_APM_DRIVER = 0x10000000 // APM aware driver
+ DN_SILENT_INSTALL = 0x20000000 // Silent install
+ DN_NO_SHOW_IN_DM = 0x40000000 // No show in device manager
+ DN_BOOT_LOG_PROB = 0x80000000 // Had a problem during preassignment of boot log conf
+ DN_NEED_RESTART = DN_LIAR // System needs to be restarted for this Devnode to work properly
+ DN_DRIVER_BLOCKED = DN_NOT_FIRST_TIME // One or more drivers are blocked from loading for this Devnode
+ DN_LEGACY_DRIVER = DN_MOVED // This device is using a legacy driver
+ DN_CHILD_WITH_INVALID_ID = DN_HAS_MARK // One or more children have invalid IDs
+ DN_DEVICE_DISCONNECTED = DN_NEEDS_LOCKING // The function driver for a device reported that the device is not connected. Typically this means a wireless device is out of range.
+ DN_QUERY_REMOVE_PENDING = DN_MF_PARENT // Device is part of a set of related devices collectively pending query-removal
+ DN_QUERY_REMOVE_ACTIVE = DN_MF_CHILD // Device is actively engaged in a query-remove IRP
+ DN_CHANGEABLE_FLAGS = DN_NOT_FIRST_TIME | DN_HARDWARE_ENUM | DN_HAS_MARK | DN_DISABLEABLE | DN_REMOVABLE | DN_MF_CHILD | DN_MF_PARENT | DN_NOT_FIRST_TIMEE | DN_STOP_FREE_RES | DN_REBAL_CANDIDATE | DN_NT_ENUMERATOR | DN_NT_DRIVER | DN_SILENT_INSTALL | DN_NO_SHOW_IN_DM
+)
+
+//sys setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiCreateDeviceInfoListExW
+
+// SetupDiCreateDeviceInfoListEx function creates an empty device information set on a remote or a local computer and optionally associates the set with a device setup class.
+func SetupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName string) (deviceInfoSet DevInfo, err error) {
+ var machineNameUTF16 *uint16
+ if machineName != "" {
+ machineNameUTF16, err = UTF16PtrFromString(machineName)
+ if err != nil {
+ return
+ }
+ }
+ return setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0)
+}
+
+//sys setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW
+
+// SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.
+func SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) {
+ data := &DevInfoListDetailData{}
+ data.size = data.unsafeSizeOf()
+
+ return data, setupDiGetDeviceInfoListDetail(deviceInfoSet, data)
+}
+
+// DeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.
+func (deviceInfoSet DevInfo) DeviceInfoListDetail() (*DevInfoListDetailData, error) {
+ return SetupDiGetDeviceInfoListDetail(deviceInfoSet)
+}
+
+//sys setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCreateDeviceInfoW
+
+// SetupDiCreateDeviceInfo function creates a new device information element and adds it as a new member to the specified device information set.
+func SetupDiCreateDeviceInfo(deviceInfoSet DevInfo, deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (deviceInfoData *DevInfoData, err error) {
+ deviceNameUTF16, err := UTF16PtrFromString(deviceName)
+ if err != nil {
+ return
+ }
+
+ var deviceDescriptionUTF16 *uint16
+ if deviceDescription != "" {
+ deviceDescriptionUTF16, err = UTF16PtrFromString(deviceDescription)
+ if err != nil {
+ return
+ }
+ }
+
+ data := &DevInfoData{}
+ data.size = uint32(unsafe.Sizeof(*data))
+
+ return data, setupDiCreateDeviceInfo(deviceInfoSet, deviceNameUTF16, classGUID, deviceDescriptionUTF16, hwndParent, creationFlags, data)
+}
+
+// CreateDeviceInfo method creates a new device information element and adds it as a new member to the specified device information set.
+func (deviceInfoSet DevInfo) CreateDeviceInfo(deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (*DevInfoData, error) {
+ return SetupDiCreateDeviceInfo(deviceInfoSet, deviceName, classGUID, deviceDescription, hwndParent, creationFlags)
+}
+
+//sys setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiEnumDeviceInfo
+
+// SetupDiEnumDeviceInfo function returns a DevInfoData structure that specifies a device information element in a device information set.
+func SetupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex int) (*DevInfoData, error) {
+ data := &DevInfoData{}
+ data.size = uint32(unsafe.Sizeof(*data))
+
+ return data, setupDiEnumDeviceInfo(deviceInfoSet, uint32(memberIndex), data)
+}
+
+// EnumDeviceInfo method returns a DevInfoData structure that specifies a device information element in a device information set.
+func (deviceInfoSet DevInfo) EnumDeviceInfo(memberIndex int) (*DevInfoData, error) {
+ return SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex)
+}
+
+// SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory.
+//sys SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiDestroyDeviceInfoList
+
+// Close method deletes a device information set and frees all associated memory.
+func (deviceInfoSet DevInfo) Close() error {
+ return SetupDiDestroyDeviceInfoList(deviceInfoSet)
+}
+
+//sys SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiBuildDriverInfoList
+
+// BuildDriverInfoList method builds a list of drivers that is associated with a specific device or with the global class driver list for a device information set.
+func (deviceInfoSet DevInfo) BuildDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error {
+ return SetupDiBuildDriverInfoList(deviceInfoSet, deviceInfoData, driverType)
+}
+
+//sys SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiCancelDriverInfoSearch
+
+// CancelDriverInfoSearch method cancels a driver list search that is currently in progress in a different thread.
+func (deviceInfoSet DevInfo) CancelDriverInfoSearch() error {
+ return SetupDiCancelDriverInfoSearch(deviceInfoSet)
+}
+
+//sys setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiEnumDriverInfoW
+
+// SetupDiEnumDriverInfo function enumerates the members of a driver list.
+func SetupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) {
+ data := &DrvInfoData{}
+ data.size = uint32(unsafe.Sizeof(*data))
+
+ return data, setupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, uint32(memberIndex), data)
+}
+
+// EnumDriverInfo method enumerates the members of a driver list.
+func (deviceInfoSet DevInfo) EnumDriverInfo(deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) {
+ return SetupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, memberIndex)
+}
+
+//sys setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiGetSelectedDriverW
+
+// SetupDiGetSelectedDriver function retrieves the selected driver for a device information set or a particular device information element.
+func SetupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DrvInfoData, error) {
+ data := &DrvInfoData{}
+ data.size = uint32(unsafe.Sizeof(*data))
+
+ return data, setupDiGetSelectedDriver(deviceInfoSet, deviceInfoData, data)
+}
+
+// SelectedDriver method retrieves the selected driver for a device information set or a particular device information element.
+func (deviceInfoSet DevInfo) SelectedDriver(deviceInfoData *DevInfoData) (*DrvInfoData, error) {
+ return SetupDiGetSelectedDriver(deviceInfoSet, deviceInfoData)
+}
+
+//sys SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiSetSelectedDriverW
+
+// SetSelectedDriver method sets, or resets, the selected driver for a device information element or the selected class driver for a device information set.
+func (deviceInfoSet DevInfo) SetSelectedDriver(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) error {
+ return SetupDiSetSelectedDriver(deviceInfoSet, deviceInfoData, driverInfoData)
+}
+
+//sys setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDriverInfoDetailW
+
+// SetupDiGetDriverInfoDetail function retrieves driver information detail for a device information set or a particular device information element in the device information set.
+func SetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) {
+ reqSize := uint32(2048)
+ for {
+ buf := make([]byte, reqSize)
+ data := (*DrvInfoDetailData)(unsafe.Pointer(&buf[0]))
+ data.size = data.unsafeSizeOf()
+ err := setupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData, data, uint32(len(buf)), &reqSize)
+ if err == ERROR_INSUFFICIENT_BUFFER {
+ continue
+ }
+ if err != nil {
+ return nil, err
+ }
+ data.size = reqSize
+ return data, nil
+ }
+}
+
+// DriverInfoDetail method retrieves driver information detail for a device information set or a particular device information element in the device information set.
+func (deviceInfoSet DevInfo) DriverInfoDetail(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) {
+ return SetupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData)
+}
+
+//sys SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiDestroyDriverInfoList
+
+// DestroyDriverInfoList method deletes a driver list.
+func (deviceInfoSet DevInfo) DestroyDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error {
+ return SetupDiDestroyDriverInfoList(deviceInfoSet, deviceInfoData, driverType)
+}
+
+//sys setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiGetClassDevsExW
+
+// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer.
+func SetupDiGetClassDevsEx(classGUID *GUID, enumerator string, hwndParent uintptr, flags DIGCF, deviceInfoSet DevInfo, machineName string) (handle DevInfo, err error) {
+ var enumeratorUTF16 *uint16
+ if enumerator != "" {
+ enumeratorUTF16, err = UTF16PtrFromString(enumerator)
+ if err != nil {
+ return
+ }
+ }
+ var machineNameUTF16 *uint16
+ if machineName != "" {
+ machineNameUTF16, err = UTF16PtrFromString(machineName)
+ if err != nil {
+ return
+ }
+ }
+ return setupDiGetClassDevsEx(classGUID, enumeratorUTF16, hwndParent, flags, deviceInfoSet, machineNameUTF16, 0)
+}
+
+// SetupDiCallClassInstaller function calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code).
+//sys SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCallClassInstaller
+
+// CallClassInstaller member calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code).
+func (deviceInfoSet DevInfo) CallClassInstaller(installFunction DI_FUNCTION, deviceInfoData *DevInfoData) error {
+ return SetupDiCallClassInstaller(installFunction, deviceInfoSet, deviceInfoData)
+}
+
+// SetupDiOpenDevRegKey function opens a registry key for device-specific configuration information.
+//sys SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) [failretval==InvalidHandle] = setupapi.SetupDiOpenDevRegKey
+
+// OpenDevRegKey method opens a registry key for device-specific configuration information.
+func (deviceInfoSet DevInfo) OpenDevRegKey(DeviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (Handle, error) {
+ return SetupDiOpenDevRegKey(deviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired)
+}
+
+//sys setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) = setupapi.SetupDiGetDevicePropertyW
+
+// SetupDiGetDeviceProperty function retrieves a specified device instance property.
+func SetupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY) (value interface{}, err error) {
+ reqSize := uint32(256)
+ for {
+ var dataType DEVPROPTYPE
+ buf := make([]byte, reqSize)
+ err = setupDiGetDeviceProperty(deviceInfoSet, deviceInfoData, propertyKey, &dataType, &buf[0], uint32(len(buf)), &reqSize, 0)
+ if err == ERROR_INSUFFICIENT_BUFFER {
+ continue
+ }
+ if err != nil {
+ return
+ }
+ switch dataType {
+ case DEVPROP_TYPE_STRING:
+ ret := UTF16ToString(bufToUTF16(buf))
+ runtime.KeepAlive(buf)
+ return ret, nil
+ }
+ return nil, errors.New("unimplemented property type")
+ }
+}
+
+//sys setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceRegistryPropertyW
+
+// SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property.
+func SetupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP) (value interface{}, err error) {
+ reqSize := uint32(256)
+ for {
+ var dataType uint32
+ buf := make([]byte, reqSize)
+ err = setupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &dataType, &buf[0], uint32(len(buf)), &reqSize)
+ if err == ERROR_INSUFFICIENT_BUFFER {
+ continue
+ }
+ if err != nil {
+ return
+ }
+ return getRegistryValue(buf[:reqSize], dataType)
+ }
+}
+
+func getRegistryValue(buf []byte, dataType uint32) (interface{}, error) {
+ switch dataType {
+ case REG_SZ:
+ ret := UTF16ToString(bufToUTF16(buf))
+ runtime.KeepAlive(buf)
+ return ret, nil
+ case REG_EXPAND_SZ:
+ value := UTF16ToString(bufToUTF16(buf))
+ if value == "" {
+ return "", nil
+ }
+ p, err := syscall.UTF16PtrFromString(value)
+ if err != nil {
+ return "", err
+ }
+ ret := make([]uint16, 100)
+ for {
+ n, err := ExpandEnvironmentStrings(p, &ret[0], uint32(len(ret)))
+ if err != nil {
+ return "", err
+ }
+ if n <= uint32(len(ret)) {
+ return UTF16ToString(ret[:n]), nil
+ }
+ ret = make([]uint16, n)
+ }
+ case REG_BINARY:
+ return buf, nil
+ case REG_DWORD_LITTLE_ENDIAN:
+ return binary.LittleEndian.Uint32(buf), nil
+ case REG_DWORD_BIG_ENDIAN:
+ return binary.BigEndian.Uint32(buf), nil
+ case REG_MULTI_SZ:
+ bufW := bufToUTF16(buf)
+ a := []string{}
+ for i := 0; i < len(bufW); {
+ j := i + wcslen(bufW[i:])
+ if i < j {
+ a = append(a, UTF16ToString(bufW[i:j]))
+ }
+ i = j + 1
+ }
+ runtime.KeepAlive(buf)
+ return a, nil
+ case REG_QWORD_LITTLE_ENDIAN:
+ return binary.LittleEndian.Uint64(buf), nil
+ default:
+ return nil, fmt.Errorf("Unsupported registry value type: %v", dataType)
+ }
+}
+
+// bufToUTF16 function reinterprets []byte buffer as []uint16
+func bufToUTF16(buf []byte) []uint16 {
+ sl := struct {
+ addr *uint16
+ len int
+ cap int
+ }{(*uint16)(unsafe.Pointer(&buf[0])), len(buf) / 2, cap(buf) / 2}
+ return *(*[]uint16)(unsafe.Pointer(&sl))
+}
+
+// utf16ToBuf function reinterprets []uint16 as []byte
+func utf16ToBuf(buf []uint16) []byte {
+ sl := struct {
+ addr *byte
+ len int
+ cap int
+ }{(*byte)(unsafe.Pointer(&buf[0])), len(buf) * 2, cap(buf) * 2}
+ return *(*[]byte)(unsafe.Pointer(&sl))
+}
+
+func wcslen(str []uint16) int {
+ for i := 0; i < len(str); i++ {
+ if str[i] == 0 {
+ return i
+ }
+ }
+ return len(str)
+}
+
+// DeviceRegistryProperty method retrieves a specified Plug and Play device property.
+func (deviceInfoSet DevInfo) DeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP) (interface{}, error) {
+ return SetupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property)
+}
+
+//sys setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) = setupapi.SetupDiSetDeviceRegistryPropertyW
+
+// SetupDiSetDeviceRegistryProperty function sets a Plug and Play device property for a device.
+func SetupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error {
+ return setupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &propertyBuffers[0], uint32(len(propertyBuffers)))
+}
+
+// SetDeviceRegistryProperty function sets a Plug and Play device property for a device.
+func (deviceInfoSet DevInfo) SetDeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error {
+ return SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, propertyBuffers)
+}
+
+// SetDeviceRegistryPropertyString method sets a Plug and Play device property string for a device.
+func (deviceInfoSet DevInfo) SetDeviceRegistryPropertyString(deviceInfoData *DevInfoData, property SPDRP, str string) error {
+ str16, err := UTF16FromString(str)
+ if err != nil {
+ return err
+ }
+ err = SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, utf16ToBuf(append(str16, 0)))
+ runtime.KeepAlive(str16)
+ return err
+}
+
+//sys setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiGetDeviceInstallParamsW
+
+// SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element.
+func SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DevInstallParams, error) {
+ params := &DevInstallParams{}
+ params.size = uint32(unsafe.Sizeof(*params))
+
+ return params, setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, params)
+}
+
+// DeviceInstallParams method retrieves device installation parameters for a device information set or a particular device information element.
+func (deviceInfoSet DevInfo) DeviceInstallParams(deviceInfoData *DevInfoData) (*DevInstallParams, error) {
+ return SetupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData)
+}
+
+//sys setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceInstanceIdW
+
+// SetupDiGetDeviceInstanceId function retrieves the instance ID of the device.
+func SetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (string, error) {
+ reqSize := uint32(1024)
+ for {
+ buf := make([]uint16, reqSize)
+ err := setupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData, &buf[0], uint32(len(buf)), &reqSize)
+ if err == ERROR_INSUFFICIENT_BUFFER {
+ continue
+ }
+ if err != nil {
+ return "", err
+ }
+ return UTF16ToString(buf), nil
+ }
+}
+
+// DeviceInstanceID method retrieves the instance ID of the device.
+func (deviceInfoSet DevInfo) DeviceInstanceID(deviceInfoData *DevInfoData) (string, error) {
+ return SetupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData)
+}
+
+// SetupDiGetClassInstallParams function retrieves class installation parameters for a device information set or a particular device information element.
+//sys SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW
+
+// ClassInstallParams method retrieves class installation parameters for a device information set or a particular device information element.
+func (deviceInfoSet DevInfo) ClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) error {
+ return SetupDiGetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize, requiredSize)
+}
+
+//sys SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiSetDeviceInstallParamsW
+
+// SetDeviceInstallParams member sets device installation parameters for a device information set or a particular device information element.
+func (deviceInfoSet DevInfo) SetDeviceInstallParams(deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) error {
+ return SetupDiSetDeviceInstallParams(deviceInfoSet, deviceInfoData, deviceInstallParams)
+}
+
+// SetupDiSetClassInstallParams function sets or clears class install parameters for a device information set or a particular device information element.
+//sys SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) = setupapi.SetupDiSetClassInstallParamsW
+
+// SetClassInstallParams method sets or clears class install parameters for a device information set or a particular device information element.
+func (deviceInfoSet DevInfo) SetClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) error {
+ return SetupDiSetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize)
+}
+
+//sys setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassNameFromGuidExW
+
+// SetupDiClassNameFromGuidEx function retrieves the class name associated with a class GUID. The class can be installed on a local or remote computer.
+func SetupDiClassNameFromGuidEx(classGUID *GUID, machineName string) (className string, err error) {
+ var classNameUTF16 [MAX_CLASS_NAME_LEN]uint16
+
+ var machineNameUTF16 *uint16
+ if machineName != "" {
+ machineNameUTF16, err = UTF16PtrFromString(machineName)
+ if err != nil {
+ return
+ }
+ }
+
+ err = setupDiClassNameFromGuidEx(classGUID, &classNameUTF16[0], MAX_CLASS_NAME_LEN, nil, machineNameUTF16, 0)
+ if err != nil {
+ return
+ }
+
+ className = UTF16ToString(classNameUTF16[:])
+ return
+}
+
+//sys setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassGuidsFromNameExW
+
+// SetupDiClassGuidsFromNameEx function retrieves the GUIDs associated with the specified class name. This resulting list contains the classes currently installed on a local or remote computer.
+func SetupDiClassGuidsFromNameEx(className string, machineName string) ([]GUID, error) {
+ classNameUTF16, err := UTF16PtrFromString(className)
+ if err != nil {
+ return nil, err
+ }
+
+ var machineNameUTF16 *uint16
+ if machineName != "" {
+ machineNameUTF16, err = UTF16PtrFromString(machineName)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ reqSize := uint32(4)
+ for {
+ buf := make([]GUID, reqSize)
+ err = setupDiClassGuidsFromNameEx(classNameUTF16, &buf[0], uint32(len(buf)), &reqSize, machineNameUTF16, 0)
+ if err == ERROR_INSUFFICIENT_BUFFER {
+ continue
+ }
+ if err != nil {
+ return nil, err
+ }
+ return buf[:reqSize], nil
+ }
+}
+
+//sys setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiGetSelectedDevice
+
+// SetupDiGetSelectedDevice function retrieves the selected device information element in a device information set.
+func SetupDiGetSelectedDevice(deviceInfoSet DevInfo) (*DevInfoData, error) {
+ data := &DevInfoData{}
+ data.size = uint32(unsafe.Sizeof(*data))
+
+ return data, setupDiGetSelectedDevice(deviceInfoSet, data)
+}
+
+// SelectedDevice method retrieves the selected device information element in a device information set.
+func (deviceInfoSet DevInfo) SelectedDevice() (*DevInfoData, error) {
+ return SetupDiGetSelectedDevice(deviceInfoSet)
+}
+
+// SetupDiSetSelectedDevice function sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard.
+//sys SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiSetSelectedDevice
+
+// SetSelectedDevice method sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard.
+func (deviceInfoSet DevInfo) SetSelectedDevice(deviceInfoData *DevInfoData) error {
+ return SetupDiSetSelectedDevice(deviceInfoSet, deviceInfoData)
+}
+
+//sys setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) = setupapi.SetupUninstallOEMInfW
+
+// SetupUninstallOEMInf uninstalls the specified driver.
+func SetupUninstallOEMInf(infFileName string, flags SUOI) error {
+ infFileName16, err := UTF16PtrFromString(infFileName)
+ if err != nil {
+ return err
+ }
+ return setupUninstallOEMInf(infFileName16, flags, 0)
+}
+
+//sys cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) = CfgMgr32.CM_MapCrToWin32Err
+
+//sys cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_List_SizeW
+//sys cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_ListW
+
+func CM_Get_Device_Interface_List(deviceID string, interfaceClass *GUID, flags uint32) ([]string, error) {
+ deviceID16, err := UTF16PtrFromString(deviceID)
+ if err != nil {
+ return nil, err
+ }
+ var buf []uint16
+ var buflen uint32
+ for {
+ if ret := cm_Get_Device_Interface_List_Size(&buflen, interfaceClass, deviceID16, flags); ret != CR_SUCCESS {
+ return nil, ret
+ }
+ buf = make([]uint16, buflen)
+ if ret := cm_Get_Device_Interface_List(interfaceClass, deviceID16, &buf[0], buflen, flags); ret == CR_SUCCESS {
+ break
+ } else if ret != CR_BUFFER_SMALL {
+ return nil, ret
+ }
+ }
+ var interfaces []string
+ for i := 0; i < len(buf); {
+ j := i + wcslen(buf[i:])
+ if i < j {
+ interfaces = append(interfaces, UTF16ToString(buf[i:j]))
+ }
+ i = j + 1
+ }
+ if interfaces == nil {
+ return nil, ERROR_NO_SUCH_DEVICE_INTERFACE
+ }
+ return interfaces, nil
+}
+
+//sys cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_DevNode_Status
+
+func CM_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) error {
+ ret := cm_Get_DevNode_Status(status, problemNumber, devInst, flags)
+ if ret == CR_SUCCESS {
+ return nil
+ }
+ return ret
+}
diff --git a/vendor/golang.org/x/sys/windows/setupapierrors_windows.go b/vendor/golang.org/x/sys/windows/setupapierrors_windows.go
deleted file mode 100644
index 1681810e0..000000000
--- a/vendor/golang.org/x/sys/windows/setupapierrors_windows.go
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package windows
-
-import "syscall"
-
-const (
- ERROR_EXPECTED_SECTION_NAME syscall.Errno = 0x20000000 | 0xC0000000 | 0
- ERROR_BAD_SECTION_NAME_LINE syscall.Errno = 0x20000000 | 0xC0000000 | 1
- ERROR_SECTION_NAME_TOO_LONG syscall.Errno = 0x20000000 | 0xC0000000 | 2
- ERROR_GENERAL_SYNTAX syscall.Errno = 0x20000000 | 0xC0000000 | 3
- ERROR_WRONG_INF_STYLE syscall.Errno = 0x20000000 | 0xC0000000 | 0x100
- ERROR_SECTION_NOT_FOUND syscall.Errno = 0x20000000 | 0xC0000000 | 0x101
- ERROR_LINE_NOT_FOUND syscall.Errno = 0x20000000 | 0xC0000000 | 0x102
- ERROR_NO_BACKUP syscall.Errno = 0x20000000 | 0xC0000000 | 0x103
- ERROR_NO_ASSOCIATED_CLASS syscall.Errno = 0x20000000 | 0xC0000000 | 0x200
- ERROR_CLASS_MISMATCH syscall.Errno = 0x20000000 | 0xC0000000 | 0x201
- ERROR_DUPLICATE_FOUND syscall.Errno = 0x20000000 | 0xC0000000 | 0x202
- ERROR_NO_DRIVER_SELECTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x203
- ERROR_KEY_DOES_NOT_EXIST syscall.Errno = 0x20000000 | 0xC0000000 | 0x204
- ERROR_INVALID_DEVINST_NAME syscall.Errno = 0x20000000 | 0xC0000000 | 0x205
- ERROR_INVALID_CLASS syscall.Errno = 0x20000000 | 0xC0000000 | 0x206
- ERROR_DEVINST_ALREADY_EXISTS syscall.Errno = 0x20000000 | 0xC0000000 | 0x207
- ERROR_DEVINFO_NOT_REGISTERED syscall.Errno = 0x20000000 | 0xC0000000 | 0x208
- ERROR_INVALID_REG_PROPERTY syscall.Errno = 0x20000000 | 0xC0000000 | 0x209
- ERROR_NO_INF syscall.Errno = 0x20000000 | 0xC0000000 | 0x20A
- ERROR_NO_SUCH_DEVINST syscall.Errno = 0x20000000 | 0xC0000000 | 0x20B
- ERROR_CANT_LOAD_CLASS_ICON syscall.Errno = 0x20000000 | 0xC0000000 | 0x20C
- ERROR_INVALID_CLASS_INSTALLER syscall.Errno = 0x20000000 | 0xC0000000 | 0x20D
- ERROR_DI_DO_DEFAULT syscall.Errno = 0x20000000 | 0xC0000000 | 0x20E
- ERROR_DI_NOFILECOPY syscall.Errno = 0x20000000 | 0xC0000000 | 0x20F
- ERROR_INVALID_HWPROFILE syscall.Errno = 0x20000000 | 0xC0000000 | 0x210
- ERROR_NO_DEVICE_SELECTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x211
- ERROR_DEVINFO_LIST_LOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x212
- ERROR_DEVINFO_DATA_LOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x213
- ERROR_DI_BAD_PATH syscall.Errno = 0x20000000 | 0xC0000000 | 0x214
- ERROR_NO_CLASSINSTALL_PARAMS syscall.Errno = 0x20000000 | 0xC0000000 | 0x215
- ERROR_FILEQUEUE_LOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x216
- ERROR_BAD_SERVICE_INSTALLSECT syscall.Errno = 0x20000000 | 0xC0000000 | 0x217
- ERROR_NO_CLASS_DRIVER_LIST syscall.Errno = 0x20000000 | 0xC0000000 | 0x218
- ERROR_NO_ASSOCIATED_SERVICE syscall.Errno = 0x20000000 | 0xC0000000 | 0x219
- ERROR_NO_DEFAULT_DEVICE_INTERFACE syscall.Errno = 0x20000000 | 0xC0000000 | 0x21A
- ERROR_DEVICE_INTERFACE_ACTIVE syscall.Errno = 0x20000000 | 0xC0000000 | 0x21B
- ERROR_DEVICE_INTERFACE_REMOVED syscall.Errno = 0x20000000 | 0xC0000000 | 0x21C
- ERROR_BAD_INTERFACE_INSTALLSECT syscall.Errno = 0x20000000 | 0xC0000000 | 0x21D
- ERROR_NO_SUCH_INTERFACE_CLASS syscall.Errno = 0x20000000 | 0xC0000000 | 0x21E
- ERROR_INVALID_REFERENCE_STRING syscall.Errno = 0x20000000 | 0xC0000000 | 0x21F
- ERROR_INVALID_MACHINENAME syscall.Errno = 0x20000000 | 0xC0000000 | 0x220
- ERROR_REMOTE_COMM_FAILURE syscall.Errno = 0x20000000 | 0xC0000000 | 0x221
- ERROR_MACHINE_UNAVAILABLE syscall.Errno = 0x20000000 | 0xC0000000 | 0x222
- ERROR_NO_CONFIGMGR_SERVICES syscall.Errno = 0x20000000 | 0xC0000000 | 0x223
- ERROR_INVALID_PROPPAGE_PROVIDER syscall.Errno = 0x20000000 | 0xC0000000 | 0x224
- ERROR_NO_SUCH_DEVICE_INTERFACE syscall.Errno = 0x20000000 | 0xC0000000 | 0x225
- ERROR_DI_POSTPROCESSING_REQUIRED syscall.Errno = 0x20000000 | 0xC0000000 | 0x226
- ERROR_INVALID_COINSTALLER syscall.Errno = 0x20000000 | 0xC0000000 | 0x227
- ERROR_NO_COMPAT_DRIVERS syscall.Errno = 0x20000000 | 0xC0000000 | 0x228
- ERROR_NO_DEVICE_ICON syscall.Errno = 0x20000000 | 0xC0000000 | 0x229
- ERROR_INVALID_INF_LOGCONFIG syscall.Errno = 0x20000000 | 0xC0000000 | 0x22A
- ERROR_DI_DONT_INSTALL syscall.Errno = 0x20000000 | 0xC0000000 | 0x22B
- ERROR_INVALID_FILTER_DRIVER syscall.Errno = 0x20000000 | 0xC0000000 | 0x22C
- ERROR_NON_WINDOWS_NT_DRIVER syscall.Errno = 0x20000000 | 0xC0000000 | 0x22D
- ERROR_NON_WINDOWS_DRIVER syscall.Errno = 0x20000000 | 0xC0000000 | 0x22E
- ERROR_NO_CATALOG_FOR_OEM_INF syscall.Errno = 0x20000000 | 0xC0000000 | 0x22F
- ERROR_DEVINSTALL_QUEUE_NONNATIVE syscall.Errno = 0x20000000 | 0xC0000000 | 0x230
- ERROR_NOT_DISABLEABLE syscall.Errno = 0x20000000 | 0xC0000000 | 0x231
- ERROR_CANT_REMOVE_DEVINST syscall.Errno = 0x20000000 | 0xC0000000 | 0x232
- ERROR_INVALID_TARGET syscall.Errno = 0x20000000 | 0xC0000000 | 0x233
- ERROR_DRIVER_NONNATIVE syscall.Errno = 0x20000000 | 0xC0000000 | 0x234
- ERROR_IN_WOW64 syscall.Errno = 0x20000000 | 0xC0000000 | 0x235
- ERROR_SET_SYSTEM_RESTORE_POINT syscall.Errno = 0x20000000 | 0xC0000000 | 0x236
- ERROR_SCE_DISABLED syscall.Errno = 0x20000000 | 0xC0000000 | 0x238
- ERROR_UNKNOWN_EXCEPTION syscall.Errno = 0x20000000 | 0xC0000000 | 0x239
- ERROR_PNP_REGISTRY_ERROR syscall.Errno = 0x20000000 | 0xC0000000 | 0x23A
- ERROR_REMOTE_REQUEST_UNSUPPORTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x23B
- ERROR_NOT_AN_INSTALLED_OEM_INF syscall.Errno = 0x20000000 | 0xC0000000 | 0x23C
- ERROR_INF_IN_USE_BY_DEVICES syscall.Errno = 0x20000000 | 0xC0000000 | 0x23D
- ERROR_DI_FUNCTION_OBSOLETE syscall.Errno = 0x20000000 | 0xC0000000 | 0x23E
- ERROR_NO_AUTHENTICODE_CATALOG syscall.Errno = 0x20000000 | 0xC0000000 | 0x23F
- ERROR_AUTHENTICODE_DISALLOWED syscall.Errno = 0x20000000 | 0xC0000000 | 0x240
- ERROR_AUTHENTICODE_TRUSTED_PUBLISHER syscall.Errno = 0x20000000 | 0xC0000000 | 0x241
- ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED syscall.Errno = 0x20000000 | 0xC0000000 | 0x242
- ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x243
- ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH syscall.Errno = 0x20000000 | 0xC0000000 | 0x244
- ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE syscall.Errno = 0x20000000 | 0xC0000000 | 0x245
- ERROR_DEVICE_INSTALLER_NOT_READY syscall.Errno = 0x20000000 | 0xC0000000 | 0x246
- ERROR_DRIVER_STORE_ADD_FAILED syscall.Errno = 0x20000000 | 0xC0000000 | 0x247
- ERROR_DEVICE_INSTALL_BLOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x248
- ERROR_DRIVER_INSTALL_BLOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x249
- ERROR_WRONG_INF_TYPE syscall.Errno = 0x20000000 | 0xC0000000 | 0x24A
- ERROR_FILE_HASH_NOT_IN_CATALOG syscall.Errno = 0x20000000 | 0xC0000000 | 0x24B
- ERROR_DRIVER_STORE_DELETE_FAILED syscall.Errno = 0x20000000 | 0xC0000000 | 0x24C
- ERROR_UNRECOVERABLE_STACK_OVERFLOW syscall.Errno = 0x20000000 | 0xC0000000 | 0x300
- EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW syscall.Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW
- ERROR_NO_DEFAULT_INTERFACE_DEVICE syscall.Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE
- ERROR_INTERFACE_DEVICE_ACTIVE syscall.Errno = ERROR_DEVICE_INTERFACE_ACTIVE
- ERROR_INTERFACE_DEVICE_REMOVED syscall.Errno = ERROR_DEVICE_INTERFACE_REMOVED
- ERROR_NO_SUCH_INTERFACE_DEVICE syscall.Errno = ERROR_NO_SUCH_DEVICE_INTERFACE
-)
diff --git a/vendor/golang.org/x/sys/windows/str.go b/vendor/golang.org/x/sys/windows/str.go
index 917cc2aae..4fc01434e 100644
--- a/vendor/golang.org/x/sys/windows/str.go
+++ b/vendor/golang.org/x/sys/windows/str.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build windows
// +build windows
package windows
diff --git a/vendor/golang.org/x/sys/windows/svc/security.go b/vendor/golang.org/x/sys/windows/svc/security.go
new file mode 100644
index 000000000..1c51006ea
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/security.go
@@ -0,0 +1,101 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build windows
+// +build windows
+
+package svc
+
+import (
+ "strings"
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+func allocSid(subAuth0 uint32) (*windows.SID, error) {
+ var sid *windows.SID
+ err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY,
+ 1, subAuth0, 0, 0, 0, 0, 0, 0, 0, &sid)
+ if err != nil {
+ return nil, err
+ }
+ return sid, nil
+}
+
+// IsAnInteractiveSession determines if calling process is running interactively.
+// It queries the process token for membership in the Interactive group.
+// http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s
+//
+// Deprecated: Use IsWindowsService instead.
+func IsAnInteractiveSession() (bool, error) {
+ interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID)
+ if err != nil {
+ return false, err
+ }
+ defer windows.FreeSid(interSid)
+
+ serviceSid, err := allocSid(windows.SECURITY_SERVICE_RID)
+ if err != nil {
+ return false, err
+ }
+ defer windows.FreeSid(serviceSid)
+
+ t, err := windows.OpenCurrentProcessToken()
+ if err != nil {
+ return false, err
+ }
+ defer t.Close()
+
+ gs, err := t.GetTokenGroups()
+ if err != nil {
+ return false, err
+ }
+
+ for _, g := range gs.AllGroups() {
+ if windows.EqualSid(g.Sid, interSid) {
+ return true, nil
+ }
+ if windows.EqualSid(g.Sid, serviceSid) {
+ return false, nil
+ }
+ }
+ return false, nil
+}
+
+// IsWindowsService reports whether the process is currently executing
+// as a Windows service.
+func IsWindowsService() (bool, error) {
+ // The below technique looks a bit hairy, but it's actually
+ // exactly what the .NET framework does for the similarly named function:
+ // https://github.com/dotnet/extensions/blob/f4066026ca06984b07e90e61a6390ac38152ba93/src/Hosting/WindowsServices/src/WindowsServiceHelpers.cs#L26-L31
+ // Specifically, it looks up whether the parent process has session ID zero
+ // and is called "services".
+
+ var currentProcess windows.PROCESS_BASIC_INFORMATION
+ infoSize := uint32(unsafe.Sizeof(currentProcess))
+ err := windows.NtQueryInformationProcess(windows.CurrentProcess(), windows.ProcessBasicInformation, unsafe.Pointer(¤tProcess), infoSize, &infoSize)
+ if err != nil {
+ return false, err
+ }
+ var parentProcess *windows.SYSTEM_PROCESS_INFORMATION
+ for infoSize = uint32((unsafe.Sizeof(*parentProcess) + unsafe.Sizeof(uintptr(0))) * 1024); ; {
+ parentProcess = (*windows.SYSTEM_PROCESS_INFORMATION)(unsafe.Pointer(&make([]byte, infoSize)[0]))
+ err = windows.NtQuerySystemInformation(windows.SystemProcessInformation, unsafe.Pointer(parentProcess), infoSize, &infoSize)
+ if err == nil {
+ break
+ } else if err != windows.STATUS_INFO_LENGTH_MISMATCH {
+ return false, err
+ }
+ }
+ for ; ; parentProcess = (*windows.SYSTEM_PROCESS_INFORMATION)(unsafe.Pointer(uintptr(unsafe.Pointer(parentProcess)) + uintptr(parentProcess.NextEntryOffset))) {
+ if parentProcess.UniqueProcessID == currentProcess.InheritedFromUniqueProcessId {
+ return parentProcess.SessionID == 0 && strings.EqualFold("services.exe", parentProcess.ImageName.String()), nil
+ }
+ if parentProcess.NextEntryOffset == 0 {
+ break
+ }
+ }
+ return false, nil
+}
diff --git a/vendor/golang.org/x/sys/windows/svc/service.go b/vendor/golang.org/x/sys/windows/svc/service.go
new file mode 100644
index 000000000..5b05c3e33
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/service.go
@@ -0,0 +1,314 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build windows
+// +build windows
+
+// Package svc provides everything required to build Windows service.
+//
+package svc
+
+import (
+ "errors"
+ "sync"
+ "unsafe"
+
+ "golang.org/x/sys/internal/unsafeheader"
+ "golang.org/x/sys/windows"
+)
+
+// State describes service execution state (Stopped, Running and so on).
+type State uint32
+
+const (
+ Stopped = State(windows.SERVICE_STOPPED)
+ StartPending = State(windows.SERVICE_START_PENDING)
+ StopPending = State(windows.SERVICE_STOP_PENDING)
+ Running = State(windows.SERVICE_RUNNING)
+ ContinuePending = State(windows.SERVICE_CONTINUE_PENDING)
+ PausePending = State(windows.SERVICE_PAUSE_PENDING)
+ Paused = State(windows.SERVICE_PAUSED)
+)
+
+// Cmd represents service state change request. It is sent to a service
+// by the service manager, and should be actioned upon by the service.
+type Cmd uint32
+
+const (
+ Stop = Cmd(windows.SERVICE_CONTROL_STOP)
+ Pause = Cmd(windows.SERVICE_CONTROL_PAUSE)
+ Continue = Cmd(windows.SERVICE_CONTROL_CONTINUE)
+ Interrogate = Cmd(windows.SERVICE_CONTROL_INTERROGATE)
+ Shutdown = Cmd(windows.SERVICE_CONTROL_SHUTDOWN)
+ ParamChange = Cmd(windows.SERVICE_CONTROL_PARAMCHANGE)
+ NetBindAdd = Cmd(windows.SERVICE_CONTROL_NETBINDADD)
+ NetBindRemove = Cmd(windows.SERVICE_CONTROL_NETBINDREMOVE)
+ NetBindEnable = Cmd(windows.SERVICE_CONTROL_NETBINDENABLE)
+ NetBindDisable = Cmd(windows.SERVICE_CONTROL_NETBINDDISABLE)
+ DeviceEvent = Cmd(windows.SERVICE_CONTROL_DEVICEEVENT)
+ HardwareProfileChange = Cmd(windows.SERVICE_CONTROL_HARDWAREPROFILECHANGE)
+ PowerEvent = Cmd(windows.SERVICE_CONTROL_POWEREVENT)
+ SessionChange = Cmd(windows.SERVICE_CONTROL_SESSIONCHANGE)
+ PreShutdown = Cmd(windows.SERVICE_CONTROL_PRESHUTDOWN)
+)
+
+// Accepted is used to describe commands accepted by the service.
+// Note that Interrogate is always accepted.
+type Accepted uint32
+
+const (
+ AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP)
+ AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN)
+ AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE)
+ AcceptParamChange = Accepted(windows.SERVICE_ACCEPT_PARAMCHANGE)
+ AcceptNetBindChange = Accepted(windows.SERVICE_ACCEPT_NETBINDCHANGE)
+ AcceptHardwareProfileChange = Accepted(windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE)
+ AcceptPowerEvent = Accepted(windows.SERVICE_ACCEPT_POWEREVENT)
+ AcceptSessionChange = Accepted(windows.SERVICE_ACCEPT_SESSIONCHANGE)
+ AcceptPreShutdown = Accepted(windows.SERVICE_ACCEPT_PRESHUTDOWN)
+)
+
+// Status combines State and Accepted commands to fully describe running service.
+type Status struct {
+ State State
+ Accepts Accepted
+ CheckPoint uint32 // used to report progress during a lengthy operation
+ WaitHint uint32 // estimated time required for a pending operation, in milliseconds
+ ProcessId uint32 // if the service is running, the process identifier of it, and otherwise zero
+ Win32ExitCode uint32 // set if the service has exited with a win32 exit code
+ ServiceSpecificExitCode uint32 // set if the service has exited with a service-specific exit code
+}
+
+// StartReason is the reason that the service was started.
+type StartReason uint32
+
+const (
+ StartReasonDemand = StartReason(windows.SERVICE_START_REASON_DEMAND)
+ StartReasonAuto = StartReason(windows.SERVICE_START_REASON_AUTO)
+ StartReasonTrigger = StartReason(windows.SERVICE_START_REASON_TRIGGER)
+ StartReasonRestartOnFailure = StartReason(windows.SERVICE_START_REASON_RESTART_ON_FAILURE)
+ StartReasonDelayedAuto = StartReason(windows.SERVICE_START_REASON_DELAYEDAUTO)
+)
+
+// ChangeRequest is sent to the service Handler to request service status change.
+type ChangeRequest struct {
+ Cmd Cmd
+ EventType uint32
+ EventData uintptr
+ CurrentStatus Status
+ Context uintptr
+}
+
+// Handler is the interface that must be implemented to build Windows service.
+type Handler interface {
+ // Execute will be called by the package code at the start of
+ // the service, and the service will exit once Execute completes.
+ // Inside Execute you must read service change requests from r and
+ // act accordingly. You must keep service control manager up to date
+ // about state of your service by writing into s as required.
+ // args contains service name followed by argument strings passed
+ // to the service.
+ // You can provide service exit code in exitCode return parameter,
+ // with 0 being "no error". You can also indicate if exit code,
+ // if any, is service specific or not by using svcSpecificEC
+ // parameter.
+ Execute(args []string, r <-chan ChangeRequest, s chan<- Status) (svcSpecificEC bool, exitCode uint32)
+}
+
+type ctlEvent struct {
+ cmd Cmd
+ eventType uint32
+ eventData uintptr
+ context uintptr
+ errno uint32
+}
+
+// service provides access to windows service api.
+type service struct {
+ name string
+ h windows.Handle
+ c chan ctlEvent
+ handler Handler
+}
+
+type exitCode struct {
+ isSvcSpecific bool
+ errno uint32
+}
+
+func (s *service) updateStatus(status *Status, ec *exitCode) error {
+ if s.h == 0 {
+ return errors.New("updateStatus with no service status handle")
+ }
+ var t windows.SERVICE_STATUS
+ t.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS
+ t.CurrentState = uint32(status.State)
+ if status.Accepts&AcceptStop != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_STOP
+ }
+ if status.Accepts&AcceptShutdown != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_SHUTDOWN
+ }
+ if status.Accepts&AcceptPauseAndContinue != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_PAUSE_CONTINUE
+ }
+ if status.Accepts&AcceptParamChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_PARAMCHANGE
+ }
+ if status.Accepts&AcceptNetBindChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_NETBINDCHANGE
+ }
+ if status.Accepts&AcceptHardwareProfileChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE
+ }
+ if status.Accepts&AcceptPowerEvent != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_POWEREVENT
+ }
+ if status.Accepts&AcceptSessionChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_SESSIONCHANGE
+ }
+ if status.Accepts&AcceptPreShutdown != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_PRESHUTDOWN
+ }
+ if ec.errno == 0 {
+ t.Win32ExitCode = windows.NO_ERROR
+ t.ServiceSpecificExitCode = windows.NO_ERROR
+ } else if ec.isSvcSpecific {
+ t.Win32ExitCode = uint32(windows.ERROR_SERVICE_SPECIFIC_ERROR)
+ t.ServiceSpecificExitCode = ec.errno
+ } else {
+ t.Win32ExitCode = ec.errno
+ t.ServiceSpecificExitCode = windows.NO_ERROR
+ }
+ t.CheckPoint = status.CheckPoint
+ t.WaitHint = status.WaitHint
+ return windows.SetServiceStatus(s.h, &t)
+}
+
+var (
+ initCallbacks sync.Once
+ ctlHandlerCallback uintptr
+ serviceMainCallback uintptr
+)
+
+func ctlHandler(ctl, evtype, evdata, context uintptr) uintptr {
+ s := (*service)(unsafe.Pointer(context))
+ e := ctlEvent{cmd: Cmd(ctl), eventType: uint32(evtype), eventData: evdata, context: 123456} // Set context to 123456 to test issue #25660.
+ s.c <- e
+ return 0
+}
+
+var theService service // This is, unfortunately, a global, which means only one service per process.
+
+// serviceMain is the entry point called by the service manager, registered earlier by
+// the call to StartServiceCtrlDispatcher.
+func serviceMain(argc uint32, argv **uint16) uintptr {
+ handle, err := windows.RegisterServiceCtrlHandlerEx(windows.StringToUTF16Ptr(theService.name), ctlHandlerCallback, uintptr(unsafe.Pointer(&theService)))
+ if sysErr, ok := err.(windows.Errno); ok {
+ return uintptr(sysErr)
+ } else if err != nil {
+ return uintptr(windows.ERROR_UNKNOWN_EXCEPTION)
+ }
+ theService.h = handle
+ defer func() {
+ theService.h = 0
+ }()
+ var args16 []*uint16
+ hdr := (*unsafeheader.Slice)(unsafe.Pointer(&args16))
+ hdr.Data = unsafe.Pointer(argv)
+ hdr.Len = int(argc)
+ hdr.Cap = int(argc)
+
+ args := make([]string, len(args16))
+ for i, a := range args16 {
+ args[i] = windows.UTF16PtrToString(a)
+ }
+
+ cmdsToHandler := make(chan ChangeRequest)
+ changesFromHandler := make(chan Status)
+ exitFromHandler := make(chan exitCode)
+
+ go func() {
+ ss, errno := theService.handler.Execute(args, cmdsToHandler, changesFromHandler)
+ exitFromHandler <- exitCode{ss, errno}
+ }()
+
+ ec := exitCode{isSvcSpecific: true, errno: 0}
+ outcr := ChangeRequest{
+ CurrentStatus: Status{State: Stopped},
+ }
+ var outch chan ChangeRequest
+ inch := theService.c
+loop:
+ for {
+ select {
+ case r := <-inch:
+ if r.errno != 0 {
+ ec.errno = r.errno
+ break loop
+ }
+ inch = nil
+ outch = cmdsToHandler
+ outcr.Cmd = r.cmd
+ outcr.EventType = r.eventType
+ outcr.EventData = r.eventData
+ outcr.Context = r.context
+ case outch <- outcr:
+ inch = theService.c
+ outch = nil
+ case c := <-changesFromHandler:
+ err := theService.updateStatus(&c, &ec)
+ if err != nil {
+ ec.errno = uint32(windows.ERROR_EXCEPTION_IN_SERVICE)
+ if err2, ok := err.(windows.Errno); ok {
+ ec.errno = uint32(err2)
+ }
+ break loop
+ }
+ outcr.CurrentStatus = c
+ case ec = <-exitFromHandler:
+ break loop
+ }
+ }
+
+ theService.updateStatus(&Status{State: Stopped}, &ec)
+
+ return windows.NO_ERROR
+}
+
+// Run executes service name by calling appropriate handler function.
+func Run(name string, handler Handler) error {
+ initCallbacks.Do(func() {
+ ctlHandlerCallback = windows.NewCallback(ctlHandler)
+ serviceMainCallback = windows.NewCallback(serviceMain)
+ })
+ theService.name = name
+ theService.handler = handler
+ theService.c = make(chan ctlEvent)
+ t := []windows.SERVICE_TABLE_ENTRY{
+ {ServiceName: windows.StringToUTF16Ptr(theService.name), ServiceProc: serviceMainCallback},
+ {ServiceName: nil, ServiceProc: 0},
+ }
+ return windows.StartServiceCtrlDispatcher(&t[0])
+}
+
+// StatusHandle returns service status handle. It is safe to call this function
+// from inside the Handler.Execute because then it is guaranteed to be set.
+func StatusHandle() windows.Handle {
+ return theService.h
+}
+
+// DynamicStartReason returns the reason why the service was started. It is safe
+// to call this function from inside the Handler.Execute because then it is
+// guaranteed to be set.
+func DynamicStartReason() (StartReason, error) {
+ var allocReason *uint32
+ err := windows.QueryServiceDynamicInformation(theService.h, windows.SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON, unsafe.Pointer(&allocReason))
+ if err != nil {
+ return 0, err
+ }
+ reason := StartReason(*allocReason)
+ windows.LocalFree(windows.Handle(unsafe.Pointer(allocReason)))
+ return reason, nil
+}
diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go
index 6122f557a..72074d582 100644
--- a/vendor/golang.org/x/sys/windows/syscall.go
+++ b/vendor/golang.org/x/sys/windows/syscall.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build windows
// +build windows
// Package windows contains an interface to the low-level operating system
diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go
index 1215b2ae2..200b62a00 100644
--- a/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -248,6 +248,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW
//sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW
//sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW
+//sys ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW
//sys CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock
//sys DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock
//sys getTickCount64() (ms uint64) = kernel32.GetTickCount64
@@ -274,6 +275,11 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc
//sys VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree
//sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect
+//sys VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx
+//sys VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery
+//sys VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx
+//sys ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory
+//sys WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory
//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile
//sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW
//sys FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW
@@ -317,6 +323,8 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW
//sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW
//sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot
+//sys Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW
+//sys Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32NextW
//sys Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW
//sys Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW
//sys Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error)
@@ -396,8 +404,18 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys LoadResource(module Handle, resInfo Handle) (resData Handle, err error) = kernel32.LoadResource
//sys LockResource(resData Handle) (addr uintptr, err error) = kernel32.LockResource
+// Version APIs
+//sys GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) = version.GetFileVersionInfoSizeW
+//sys GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) = version.GetFileVersionInfoW
+//sys VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW
+
// Process Status API (PSAPI)
//sys EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses
+//sys EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules
+//sys EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx
+//sys GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation
+//sys GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) = psapi.GetModuleFileNameExW
+//sys GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) = psapi.GetModuleBaseNameW
// NT Native APIs
//sys rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb
@@ -408,11 +426,16 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys RtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString
//sys NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile
//sys NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile
+//sys NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile
//sys RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus
//sys RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus
//sys RtlDefaultNpAcl(acl **ACL) (ntstatus error) = ntdll.RtlDefaultNpAcl
//sys NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQueryInformationProcess
//sys NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess
+//sys NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation
+//sys NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation
+//sys RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable
+//sys RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable
// syscall interface implementation for other packages
@@ -873,9 +896,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil
}
@@ -895,9 +916,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) {
p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
- for i := 0; i < len(sa.Addr); i++ {
- sa.raw.Addr[i] = sa.Addr[i]
- }
+ sa.raw.Addr = sa.Addr
return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil
}
@@ -970,9 +989,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) {
sa := new(SockaddrInet4)
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
case AF_INET6:
@@ -981,9 +998,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) {
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
- for i := 0; i < len(sa.Addr); i++ {
- sa.Addr[i] = pp.Addr[i]
- }
+ sa.Addr = pp.Addr
return sa, nil
}
return nil, syscall.EAFNOSUPPORT
diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go
index 17f03312d..bb31abda4 100644
--- a/vendor/golang.org/x/sys/windows/types_windows.go
+++ b/vendor/golang.org/x/sys/windows/types_windows.go
@@ -66,9 +66,21 @@ var signals = [...]string{
}
const (
- FILE_LIST_DIRECTORY = 0x00000001
- FILE_APPEND_DATA = 0x00000004
+ FILE_READ_DATA = 0x00000001
+ FILE_READ_ATTRIBUTES = 0x00000080
+ FILE_READ_EA = 0x00000008
+ FILE_WRITE_DATA = 0x00000002
FILE_WRITE_ATTRIBUTES = 0x00000100
+ FILE_WRITE_EA = 0x00000010
+ FILE_APPEND_DATA = 0x00000004
+ FILE_EXECUTE = 0x00000020
+
+ FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE
+ FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE
+ FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE
+
+ FILE_LIST_DIRECTORY = 0x00000001
+ FILE_TRAVERSE = 0x00000020
FILE_SHARE_READ = 0x00000001
FILE_SHARE_WRITE = 0x00000002
@@ -144,6 +156,8 @@ const (
MAX_PATH = 260
MAX_LONG_PATH = 32768
+ MAX_MODULE_NAME32 = 255
+
MAX_COMPUTERNAME_LENGTH = 15
TIME_ZONE_ID_UNKNOWN = 0
@@ -242,6 +256,14 @@ const (
TH32CS_INHERIT = 0x80000000
)
+const (
+ // flags for EnumProcessModulesEx
+ LIST_MODULES_32BIT = 0x01
+ LIST_MODULES_64BIT = 0x02
+ LIST_MODULES_ALL = 0x03
+ LIST_MODULES_DEFAULT = 0x00
+)
+
const (
// filters for ReadDirectoryChangesW and FindFirstChangeNotificationW
FILE_NOTIFY_CHANGE_FILE_NAME = 0x001
@@ -916,8 +938,8 @@ type StartupInfoEx struct {
type ProcThreadAttributeList struct{}
type ProcThreadAttributeListContainer struct {
- data *ProcThreadAttributeList
- heapAllocations []uintptr
+ data *ProcThreadAttributeList
+ pointers []unsafe.Pointer
}
type ProcessInformation struct {
@@ -950,6 +972,21 @@ type ThreadEntry32 struct {
Flags uint32
}
+type ModuleEntry32 struct {
+ Size uint32
+ ModuleID uint32
+ ProcessID uint32
+ GlblcntUsage uint32
+ ProccntUsage uint32
+ ModBaseAddr uintptr
+ ModBaseSize uint32
+ ModuleHandle Handle
+ Module [MAX_MODULE_NAME32 + 1]uint16
+ ExePath [MAX_PATH]uint16
+}
+
+const SizeofModuleEntry32 = unsafe.Sizeof(ModuleEntry32{})
+
type Systemtime struct {
Year uint16
Month uint16
@@ -1781,7 +1818,53 @@ type reparseDataBuffer struct {
}
const (
- FSCTL_GET_REPARSE_POINT = 0x900A8
+ FSCTL_CREATE_OR_GET_OBJECT_ID = 0x0900C0
+ FSCTL_DELETE_OBJECT_ID = 0x0900A0
+ FSCTL_DELETE_REPARSE_POINT = 0x0900AC
+ FSCTL_DUPLICATE_EXTENTS_TO_FILE = 0x098344
+ FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX = 0x0983E8
+ FSCTL_FILESYSTEM_GET_STATISTICS = 0x090060
+ FSCTL_FILE_LEVEL_TRIM = 0x098208
+ FSCTL_FIND_FILES_BY_SID = 0x09008F
+ FSCTL_GET_COMPRESSION = 0x09003C
+ FSCTL_GET_INTEGRITY_INFORMATION = 0x09027C
+ FSCTL_GET_NTFS_VOLUME_DATA = 0x090064
+ FSCTL_GET_REFS_VOLUME_DATA = 0x0902D8
+ FSCTL_GET_OBJECT_ID = 0x09009C
+ FSCTL_GET_REPARSE_POINT = 0x0900A8
+ FSCTL_GET_RETRIEVAL_POINTER_COUNT = 0x09042B
+ FSCTL_GET_RETRIEVAL_POINTERS = 0x090073
+ FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT = 0x0903D3
+ FSCTL_IS_PATHNAME_VALID = 0x09002C
+ FSCTL_LMR_SET_LINK_TRACKING_INFORMATION = 0x1400EC
+ FSCTL_MARK_HANDLE = 0x0900FC
+ FSCTL_OFFLOAD_READ = 0x094264
+ FSCTL_OFFLOAD_WRITE = 0x098268
+ FSCTL_PIPE_PEEK = 0x11400C
+ FSCTL_PIPE_TRANSCEIVE = 0x11C017
+ FSCTL_PIPE_WAIT = 0x110018
+ FSCTL_QUERY_ALLOCATED_RANGES = 0x0940CF
+ FSCTL_QUERY_FAT_BPB = 0x090058
+ FSCTL_QUERY_FILE_REGIONS = 0x090284
+ FSCTL_QUERY_ON_DISK_VOLUME_INFO = 0x09013C
+ FSCTL_QUERY_SPARING_INFO = 0x090138
+ FSCTL_READ_FILE_USN_DATA = 0x0900EB
+ FSCTL_RECALL_FILE = 0x090117
+ FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT = 0x090440
+ FSCTL_SET_COMPRESSION = 0x09C040
+ FSCTL_SET_DEFECT_MANAGEMENT = 0x098134
+ FSCTL_SET_ENCRYPTION = 0x0900D7
+ FSCTL_SET_INTEGRITY_INFORMATION = 0x09C280
+ FSCTL_SET_INTEGRITY_INFORMATION_EX = 0x090380
+ FSCTL_SET_OBJECT_ID = 0x090098
+ FSCTL_SET_OBJECT_ID_EXTENDED = 0x0900BC
+ FSCTL_SET_REPARSE_POINT = 0x0900A4
+ FSCTL_SET_SPARSE = 0x0900C4
+ FSCTL_SET_ZERO_DATA = 0x0980C8
+ FSCTL_SET_ZERO_ON_DEALLOCATION = 0x090194
+ FSCTL_SIS_COPYFILE = 0x090100
+ FSCTL_WRITE_USN_CLOSE_RECORD = 0x0900EF
+
MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003
IO_REPARSE_TAG_SYMLINK = 0xA000000C
@@ -2300,6 +2383,12 @@ type LIST_ENTRY struct {
Blink *LIST_ENTRY
}
+type RUNTIME_FUNCTION struct {
+ BeginAddress uint32
+ EndAddress uint32
+ UnwindData uint32
+}
+
type LDR_DATA_TABLE_ENTRY struct {
reserved1 [2]uintptr
InMemoryOrderLinks LIST_ENTRY
@@ -2490,6 +2579,60 @@ const (
FILE_PIPE_SERVER_END = 0x00000001
)
+const (
+ // FileInformationClass for NtSetInformationFile
+ FileBasicInformation = 4
+ FileRenameInformation = 10
+ FileDispositionInformation = 13
+ FilePositionInformation = 14
+ FileEndOfFileInformation = 20
+ FileValidDataLengthInformation = 39
+ FileShortNameInformation = 40
+ FileIoPriorityHintInformation = 43
+ FileReplaceCompletionInformation = 61
+ FileDispositionInformationEx = 64
+ FileCaseSensitiveInformation = 71
+ FileLinkInformation = 72
+ FileCaseSensitiveInformationForceAccessCheck = 75
+ FileKnownFolderInformation = 76
+
+ // Flags for FILE_RENAME_INFORMATION
+ FILE_RENAME_REPLACE_IF_EXISTS = 0x00000001
+ FILE_RENAME_POSIX_SEMANTICS = 0x00000002
+ FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE = 0x00000004
+ FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008
+ FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE = 0x00000010
+ FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE = 0x00000020
+ FILE_RENAME_PRESERVE_AVAILABLE_SPACE = 0x00000030
+ FILE_RENAME_IGNORE_READONLY_ATTRIBUTE = 0x00000040
+ FILE_RENAME_FORCE_RESIZE_TARGET_SR = 0x00000080
+ FILE_RENAME_FORCE_RESIZE_SOURCE_SR = 0x00000100
+ FILE_RENAME_FORCE_RESIZE_SR = 0x00000180
+
+ // Flags for FILE_DISPOSITION_INFORMATION_EX
+ FILE_DISPOSITION_DO_NOT_DELETE = 0x00000000
+ FILE_DISPOSITION_DELETE = 0x00000001
+ FILE_DISPOSITION_POSIX_SEMANTICS = 0x00000002
+ FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004
+ FILE_DISPOSITION_ON_CLOSE = 0x00000008
+ FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010
+
+ // Flags for FILE_CASE_SENSITIVE_INFORMATION
+ FILE_CS_FLAG_CASE_SENSITIVE_DIR = 0x00000001
+
+ // Flags for FILE_LINK_INFORMATION
+ FILE_LINK_REPLACE_IF_EXISTS = 0x00000001
+ FILE_LINK_POSIX_SEMANTICS = 0x00000002
+ FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008
+ FILE_LINK_NO_INCREASE_AVAILABLE_SPACE = 0x00000010
+ FILE_LINK_NO_DECREASE_AVAILABLE_SPACE = 0x00000020
+ FILE_LINK_PRESERVE_AVAILABLE_SPACE = 0x00000030
+ FILE_LINK_IGNORE_READONLY_ATTRIBUTE = 0x00000040
+ FILE_LINK_FORCE_RESIZE_TARGET_SR = 0x00000080
+ FILE_LINK_FORCE_RESIZE_SOURCE_SR = 0x00000100
+ FILE_LINK_FORCE_RESIZE_SR = 0x00000180
+)
+
// ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess.
const (
ProcessBasicInformation = iota
@@ -2606,6 +2749,240 @@ type PROCESS_BASIC_INFORMATION struct {
InheritedFromUniqueProcessId uintptr
}
+type SYSTEM_PROCESS_INFORMATION struct {
+ NextEntryOffset uint32
+ NumberOfThreads uint32
+ WorkingSetPrivateSize int64
+ HardFaultCount uint32
+ NumberOfThreadsHighWatermark uint32
+ CycleTime uint64
+ CreateTime int64
+ UserTime int64
+ KernelTime int64
+ ImageName NTUnicodeString
+ BasePriority int32
+ UniqueProcessID uintptr
+ InheritedFromUniqueProcessID uintptr
+ HandleCount uint32
+ SessionID uint32
+ UniqueProcessKey *uint32
+ PeakVirtualSize uintptr
+ VirtualSize uintptr
+ PageFaultCount uint32
+ PeakWorkingSetSize uintptr
+ WorkingSetSize uintptr
+ QuotaPeakPagedPoolUsage uintptr
+ QuotaPagedPoolUsage uintptr
+ QuotaPeakNonPagedPoolUsage uintptr
+ QuotaNonPagedPoolUsage uintptr
+ PagefileUsage uintptr
+ PeakPagefileUsage uintptr
+ PrivatePageCount uintptr
+ ReadOperationCount int64
+ WriteOperationCount int64
+ OtherOperationCount int64
+ ReadTransferCount int64
+ WriteTransferCount int64
+ OtherTransferCount int64
+}
+
+// SystemInformationClasses for NtQuerySystemInformation and NtSetSystemInformation
+const (
+ SystemBasicInformation = iota
+ SystemProcessorInformation
+ SystemPerformanceInformation
+ SystemTimeOfDayInformation
+ SystemPathInformation
+ SystemProcessInformation
+ SystemCallCountInformation
+ SystemDeviceInformation
+ SystemProcessorPerformanceInformation
+ SystemFlagsInformation
+ SystemCallTimeInformation
+ SystemModuleInformation
+ SystemLocksInformation
+ SystemStackTraceInformation
+ SystemPagedPoolInformation
+ SystemNonPagedPoolInformation
+ SystemHandleInformation
+ SystemObjectInformation
+ SystemPageFileInformation
+ SystemVdmInstemulInformation
+ SystemVdmBopInformation
+ SystemFileCacheInformation
+ SystemPoolTagInformation
+ SystemInterruptInformation
+ SystemDpcBehaviorInformation
+ SystemFullMemoryInformation
+ SystemLoadGdiDriverInformation
+ SystemUnloadGdiDriverInformation
+ SystemTimeAdjustmentInformation
+ SystemSummaryMemoryInformation
+ SystemMirrorMemoryInformation
+ SystemPerformanceTraceInformation
+ systemObsolete0
+ SystemExceptionInformation
+ SystemCrashDumpStateInformation
+ SystemKernelDebuggerInformation
+ SystemContextSwitchInformation
+ SystemRegistryQuotaInformation
+ SystemExtendServiceTableInformation
+ SystemPrioritySeperation
+ SystemVerifierAddDriverInformation
+ SystemVerifierRemoveDriverInformation
+ SystemProcessorIdleInformation
+ SystemLegacyDriverInformation
+ SystemCurrentTimeZoneInformation
+ SystemLookasideInformation
+ SystemTimeSlipNotification
+ SystemSessionCreate
+ SystemSessionDetach
+ SystemSessionInformation
+ SystemRangeStartInformation
+ SystemVerifierInformation
+ SystemVerifierThunkExtend
+ SystemSessionProcessInformation
+ SystemLoadGdiDriverInSystemSpace
+ SystemNumaProcessorMap
+ SystemPrefetcherInformation
+ SystemExtendedProcessInformation
+ SystemRecommendedSharedDataAlignment
+ SystemComPlusPackage
+ SystemNumaAvailableMemory
+ SystemProcessorPowerInformation
+ SystemEmulationBasicInformation
+ SystemEmulationProcessorInformation
+ SystemExtendedHandleInformation
+ SystemLostDelayedWriteInformation
+ SystemBigPoolInformation
+ SystemSessionPoolTagInformation
+ SystemSessionMappedViewInformation
+ SystemHotpatchInformation
+ SystemObjectSecurityMode
+ SystemWatchdogTimerHandler
+ SystemWatchdogTimerInformation
+ SystemLogicalProcessorInformation
+ SystemWow64SharedInformationObsolete
+ SystemRegisterFirmwareTableInformationHandler
+ SystemFirmwareTableInformation
+ SystemModuleInformationEx
+ SystemVerifierTriageInformation
+ SystemSuperfetchInformation
+ SystemMemoryListInformation
+ SystemFileCacheInformationEx
+ SystemThreadPriorityClientIdInformation
+ SystemProcessorIdleCycleTimeInformation
+ SystemVerifierCancellationInformation
+ SystemProcessorPowerInformationEx
+ SystemRefTraceInformation
+ SystemSpecialPoolInformation
+ SystemProcessIdInformation
+ SystemErrorPortInformation
+ SystemBootEnvironmentInformation
+ SystemHypervisorInformation
+ SystemVerifierInformationEx
+ SystemTimeZoneInformation
+ SystemImageFileExecutionOptionsInformation
+ SystemCoverageInformation
+ SystemPrefetchPatchInformation
+ SystemVerifierFaultsInformation
+ SystemSystemPartitionInformation
+ SystemSystemDiskInformation
+ SystemProcessorPerformanceDistribution
+ SystemNumaProximityNodeInformation
+ SystemDynamicTimeZoneInformation
+ SystemCodeIntegrityInformation
+ SystemProcessorMicrocodeUpdateInformation
+ SystemProcessorBrandString
+ SystemVirtualAddressInformation
+ SystemLogicalProcessorAndGroupInformation
+ SystemProcessorCycleTimeInformation
+ SystemStoreInformation
+ SystemRegistryAppendString
+ SystemAitSamplingValue
+ SystemVhdBootInformation
+ SystemCpuQuotaInformation
+ SystemNativeBasicInformation
+ systemSpare1
+ SystemLowPriorityIoInformation
+ SystemTpmBootEntropyInformation
+ SystemVerifierCountersInformation
+ SystemPagedPoolInformationEx
+ SystemSystemPtesInformationEx
+ SystemNodeDistanceInformation
+ SystemAcpiAuditInformation
+ SystemBasicPerformanceInformation
+ SystemQueryPerformanceCounterInformation
+ SystemSessionBigPoolInformation
+ SystemBootGraphicsInformation
+ SystemScrubPhysicalMemoryInformation
+ SystemBadPageInformation
+ SystemProcessorProfileControlArea
+ SystemCombinePhysicalMemoryInformation
+ SystemEntropyInterruptTimingCallback
+ SystemConsoleInformation
+ SystemPlatformBinaryInformation
+ SystemThrottleNotificationInformation
+ SystemHypervisorProcessorCountInformation
+ SystemDeviceDataInformation
+ SystemDeviceDataEnumerationInformation
+ SystemMemoryTopologyInformation
+ SystemMemoryChannelInformation
+ SystemBootLogoInformation
+ SystemProcessorPerformanceInformationEx
+ systemSpare0
+ SystemSecureBootPolicyInformation
+ SystemPageFileInformationEx
+ SystemSecureBootInformation
+ SystemEntropyInterruptTimingRawInformation
+ SystemPortableWorkspaceEfiLauncherInformation
+ SystemFullProcessInformation
+ SystemKernelDebuggerInformationEx
+ SystemBootMetadataInformation
+ SystemSoftRebootInformation
+ SystemElamCertificateInformation
+ SystemOfflineDumpConfigInformation
+ SystemProcessorFeaturesInformation
+ SystemRegistryReconciliationInformation
+ SystemEdidInformation
+ SystemManufacturingInformation
+ SystemEnergyEstimationConfigInformation
+ SystemHypervisorDetailInformation
+ SystemProcessorCycleStatsInformation
+ SystemVmGenerationCountInformation
+ SystemTrustedPlatformModuleInformation
+ SystemKernelDebuggerFlags
+ SystemCodeIntegrityPolicyInformation
+ SystemIsolatedUserModeInformation
+ SystemHardwareSecurityTestInterfaceResultsInformation
+ SystemSingleModuleInformation
+ SystemAllowedCpuSetsInformation
+ SystemDmaProtectionInformation
+ SystemInterruptCpuSetsInformation
+ SystemSecureBootPolicyFullInformation
+ SystemCodeIntegrityPolicyFullInformation
+ SystemAffinitizedInterruptProcessorInformation
+ SystemRootSiloInformation
+)
+
+type RTL_PROCESS_MODULE_INFORMATION struct {
+ Section Handle
+ MappedBase uintptr
+ ImageBase uintptr
+ ImageSize uint32
+ Flags uint32
+ LoadOrderIndex uint16
+ InitOrderIndex uint16
+ LoadCount uint16
+ OffsetToFileName uint16
+ FullPathName [256]byte
+}
+
+type RTL_PROCESS_MODULES struct {
+ NumberOfModules uint32
+ Modules [1]RTL_PROCESS_MODULE_INFORMATION
+}
+
// Constants for LocalAlloc flags.
const (
LMEM_FIXED = 0x0
@@ -2700,6 +3077,22 @@ var (
RT_MANIFEST ResourceID = 24
)
+type VS_FIXEDFILEINFO struct {
+ Signature uint32
+ StrucVersion uint32
+ FileVersionMS uint32
+ FileVersionLS uint32
+ ProductVersionMS uint32
+ ProductVersionLS uint32
+ FileFlagsMask uint32
+ FileFlags uint32
+ FileOS uint32
+ FileType uint32
+ FileSubtype uint32
+ FileDateMS uint32
+ FileDateLS uint32
+}
+
type COAUTHIDENTITY struct {
User *uint16
UserLength uint32
@@ -2773,3 +3166,9 @@ const (
// Flag for QueryFullProcessImageName.
const PROCESS_NAME_NATIVE = 1
+
+type ModuleInfo struct {
+ BaseOfDll uintptr
+ SizeOfImage uint32
+ EntryPoint uintptr
+}
diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
index 2083ec376..1055d47ed 100644
--- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
@@ -36,6 +36,7 @@ func errnoErr(e syscall.Errno) error {
}
var (
+ modCfgMgr32 = NewLazySystemDLL("CfgMgr32.dll")
modadvapi32 = NewLazySystemDLL("advapi32.dll")
modcrypt32 = NewLazySystemDLL("crypt32.dll")
moddnsapi = NewLazySystemDLL("dnsapi.dll")
@@ -48,13 +49,19 @@ var (
modpsapi = NewLazySystemDLL("psapi.dll")
modsechost = NewLazySystemDLL("sechost.dll")
modsecur32 = NewLazySystemDLL("secur32.dll")
+ modsetupapi = NewLazySystemDLL("setupapi.dll")
modshell32 = NewLazySystemDLL("shell32.dll")
moduser32 = NewLazySystemDLL("user32.dll")
moduserenv = NewLazySystemDLL("userenv.dll")
+ modversion = NewLazySystemDLL("version.dll")
modwintrust = NewLazySystemDLL("wintrust.dll")
modws2_32 = NewLazySystemDLL("ws2_32.dll")
modwtsapi32 = NewLazySystemDLL("wtsapi32.dll")
+ procCM_Get_DevNode_Status = modCfgMgr32.NewProc("CM_Get_DevNode_Status")
+ procCM_Get_Device_Interface_ListW = modCfgMgr32.NewProc("CM_Get_Device_Interface_ListW")
+ procCM_Get_Device_Interface_List_SizeW = modCfgMgr32.NewProc("CM_Get_Device_Interface_List_SizeW")
+ procCM_MapCrToWin32Err = modCfgMgr32.NewProc("CM_MapCrToWin32Err")
procAdjustTokenGroups = modadvapi32.NewProc("AdjustTokenGroups")
procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges")
procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid")
@@ -114,6 +121,7 @@ var (
procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken")
procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W")
procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW")
+ procQueryServiceDynamicInformation = modadvapi32.NewProc("QueryServiceDynamicInformation")
procQueryServiceLockStatusW = modadvapi32.NewProc("QueryServiceLockStatusW")
procQueryServiceStatus = modadvapi32.NewProc("QueryServiceStatus")
procQueryServiceStatusEx = modadvapi32.NewProc("QueryServiceStatusEx")
@@ -124,6 +132,7 @@ var (
procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW")
procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW")
procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW")
+ procRegisterServiceCtrlHandlerExW = modadvapi32.NewProc("RegisterServiceCtrlHandlerExW")
procReportEventW = modadvapi32.NewProc("ReportEventW")
procRevertToSelf = modadvapi32.NewProc("RevertToSelf")
procSetEntriesInAclW = modadvapi32.NewProc("SetEntriesInAclW")
@@ -196,6 +205,7 @@ var (
procDeviceIoControl = modkernel32.NewProc("DeviceIoControl")
procDuplicateHandle = modkernel32.NewProc("DuplicateHandle")
procExitProcess = modkernel32.NewProc("ExitProcess")
+ procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW")
procFindClose = modkernel32.NewProc("FindClose")
procFindCloseChangeNotification = modkernel32.NewProc("FindCloseChangeNotification")
procFindFirstChangeNotificationW = modkernel32.NewProc("FindFirstChangeNotificationW")
@@ -285,6 +295,8 @@ var (
procLockFileEx = modkernel32.NewProc("LockFileEx")
procLockResource = modkernel32.NewProc("LockResource")
procMapViewOfFile = modkernel32.NewProc("MapViewOfFile")
+ procModule32FirstW = modkernel32.NewProc("Module32FirstW")
+ procModule32NextW = modkernel32.NewProc("Module32NextW")
procMoveFileExW = modkernel32.NewProc("MoveFileExW")
procMoveFileW = modkernel32.NewProc("MoveFileW")
procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar")
@@ -303,6 +315,7 @@ var (
procReadConsoleW = modkernel32.NewProc("ReadConsoleW")
procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW")
procReadFile = modkernel32.NewProc("ReadFile")
+ procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory")
procReleaseMutex = modkernel32.NewProc("ReleaseMutex")
procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW")
procResetEvent = modkernel32.NewProc("ResetEvent")
@@ -345,12 +358,16 @@ var (
procVirtualFree = modkernel32.NewProc("VirtualFree")
procVirtualLock = modkernel32.NewProc("VirtualLock")
procVirtualProtect = modkernel32.NewProc("VirtualProtect")
+ procVirtualProtectEx = modkernel32.NewProc("VirtualProtectEx")
+ procVirtualQuery = modkernel32.NewProc("VirtualQuery")
+ procVirtualQueryEx = modkernel32.NewProc("VirtualQueryEx")
procVirtualUnlock = modkernel32.NewProc("VirtualUnlock")
procWTSGetActiveConsoleSessionId = modkernel32.NewProc("WTSGetActiveConsoleSessionId")
procWaitForMultipleObjects = modkernel32.NewProc("WaitForMultipleObjects")
procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject")
procWriteConsoleW = modkernel32.NewProc("WriteConsoleW")
procWriteFile = modkernel32.NewProc("WriteFile")
+ procWriteProcessMemory = modkernel32.NewProc("WriteProcessMemory")
procAcceptEx = modmswsock.NewProc("AcceptEx")
procGetAcceptExSockaddrs = modmswsock.NewProc("GetAcceptExSockaddrs")
procTransmitFile = modmswsock.NewProc("TransmitFile")
@@ -360,8 +377,13 @@ var (
procNtCreateFile = modntdll.NewProc("NtCreateFile")
procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile")
procNtQueryInformationProcess = modntdll.NewProc("NtQueryInformationProcess")
+ procNtQuerySystemInformation = modntdll.NewProc("NtQuerySystemInformation")
+ procNtSetInformationFile = modntdll.NewProc("NtSetInformationFile")
procNtSetInformationProcess = modntdll.NewProc("NtSetInformationProcess")
+ procNtSetSystemInformation = modntdll.NewProc("NtSetSystemInformation")
+ procRtlAddFunctionTable = modntdll.NewProc("RtlAddFunctionTable")
procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl")
+ procRtlDeleteFunctionTable = modntdll.NewProc("RtlDeleteFunctionTable")
procRtlDosPathNameToNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToNtPathName_U_WithStatus")
procRtlDosPathNameToRelativeNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToRelativeNtPathName_U_WithStatus")
procRtlGetCurrentPeb = modntdll.NewProc("RtlGetCurrentPeb")
@@ -377,11 +399,44 @@ var (
procCoTaskMemFree = modole32.NewProc("CoTaskMemFree")
procCoUninitialize = modole32.NewProc("CoUninitialize")
procStringFromGUID2 = modole32.NewProc("StringFromGUID2")
+ procEnumProcessModules = modpsapi.NewProc("EnumProcessModules")
+ procEnumProcessModulesEx = modpsapi.NewProc("EnumProcessModulesEx")
procEnumProcesses = modpsapi.NewProc("EnumProcesses")
+ procGetModuleBaseNameW = modpsapi.NewProc("GetModuleBaseNameW")
+ procGetModuleFileNameExW = modpsapi.NewProc("GetModuleFileNameExW")
+ procGetModuleInformation = modpsapi.NewProc("GetModuleInformation")
procSubscribeServiceChangeNotifications = modsechost.NewProc("SubscribeServiceChangeNotifications")
procUnsubscribeServiceChangeNotifications = modsechost.NewProc("UnsubscribeServiceChangeNotifications")
procGetUserNameExW = modsecur32.NewProc("GetUserNameExW")
procTranslateNameW = modsecur32.NewProc("TranslateNameW")
+ procSetupDiBuildDriverInfoList = modsetupapi.NewProc("SetupDiBuildDriverInfoList")
+ procSetupDiCallClassInstaller = modsetupapi.NewProc("SetupDiCallClassInstaller")
+ procSetupDiCancelDriverInfoSearch = modsetupapi.NewProc("SetupDiCancelDriverInfoSearch")
+ procSetupDiClassGuidsFromNameExW = modsetupapi.NewProc("SetupDiClassGuidsFromNameExW")
+ procSetupDiClassNameFromGuidExW = modsetupapi.NewProc("SetupDiClassNameFromGuidExW")
+ procSetupDiCreateDeviceInfoListExW = modsetupapi.NewProc("SetupDiCreateDeviceInfoListExW")
+ procSetupDiCreateDeviceInfoW = modsetupapi.NewProc("SetupDiCreateDeviceInfoW")
+ procSetupDiDestroyDeviceInfoList = modsetupapi.NewProc("SetupDiDestroyDeviceInfoList")
+ procSetupDiDestroyDriverInfoList = modsetupapi.NewProc("SetupDiDestroyDriverInfoList")
+ procSetupDiEnumDeviceInfo = modsetupapi.NewProc("SetupDiEnumDeviceInfo")
+ procSetupDiEnumDriverInfoW = modsetupapi.NewProc("SetupDiEnumDriverInfoW")
+ procSetupDiGetClassDevsExW = modsetupapi.NewProc("SetupDiGetClassDevsExW")
+ procSetupDiGetClassInstallParamsW = modsetupapi.NewProc("SetupDiGetClassInstallParamsW")
+ procSetupDiGetDeviceInfoListDetailW = modsetupapi.NewProc("SetupDiGetDeviceInfoListDetailW")
+ procSetupDiGetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW")
+ procSetupDiGetDeviceInstanceIdW = modsetupapi.NewProc("SetupDiGetDeviceInstanceIdW")
+ procSetupDiGetDevicePropertyW = modsetupapi.NewProc("SetupDiGetDevicePropertyW")
+ procSetupDiGetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiGetDeviceRegistryPropertyW")
+ procSetupDiGetDriverInfoDetailW = modsetupapi.NewProc("SetupDiGetDriverInfoDetailW")
+ procSetupDiGetSelectedDevice = modsetupapi.NewProc("SetupDiGetSelectedDevice")
+ procSetupDiGetSelectedDriverW = modsetupapi.NewProc("SetupDiGetSelectedDriverW")
+ procSetupDiOpenDevRegKey = modsetupapi.NewProc("SetupDiOpenDevRegKey")
+ procSetupDiSetClassInstallParamsW = modsetupapi.NewProc("SetupDiSetClassInstallParamsW")
+ procSetupDiSetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiSetDeviceInstallParamsW")
+ procSetupDiSetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiSetDeviceRegistryPropertyW")
+ procSetupDiSetSelectedDevice = modsetupapi.NewProc("SetupDiSetSelectedDevice")
+ procSetupDiSetSelectedDriverW = modsetupapi.NewProc("SetupDiSetSelectedDriverW")
+ procSetupUninstallOEMInfW = modsetupapi.NewProc("SetupUninstallOEMInfW")
procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW")
procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath")
procShellExecuteW = modshell32.NewProc("ShellExecuteW")
@@ -392,6 +447,9 @@ var (
procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock")
procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock")
procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW")
+ procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW")
+ procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW")
+ procVerQueryValueW = modversion.NewProc("VerQueryValueW")
procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx")
procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW")
procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW")
@@ -426,6 +484,30 @@ var (
procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken")
)
+func cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) {
+ r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_Status.Addr(), 4, uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags), 0, 0)
+ ret = CONFIGRET(r0)
+ return
+}
+
+func cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) {
+ r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_ListW.Addr(), 5, uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags), 0)
+ ret = CONFIGRET(r0)
+ return
+}
+
+func cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) {
+ r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_List_SizeW.Addr(), 4, uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags), 0, 0)
+ ret = CONFIGRET(r0)
+ return
+}
+
+func cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) {
+ r0, _, _ := syscall.Syscall(procCM_MapCrToWin32Err.Addr(), 2, uintptr(configRet), uintptr(defaultWin32Error), 0)
+ ret = Errno(r0)
+ return
+}
+
func AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) {
var _p0 uint32
if resetToDefault {
@@ -956,6 +1038,18 @@ func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, buf
return
}
+func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) {
+ err = procQueryServiceDynamicInformation.Find()
+ if err != nil {
+ return
+ }
+ r1, _, e1 := syscall.Syscall(procQueryServiceDynamicInformation.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) {
r1, _, e1 := syscall.Syscall6(procQueryServiceLockStatusW.Addr(), 4, uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0)
if r1 == 0 {
@@ -1045,6 +1139,15 @@ func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Hand
return
}
+func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) {
+ r0, _, e1 := syscall.Syscall(procRegisterServiceCtrlHandlerExW.Addr(), 3, uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context))
+ handle = Handle(r0)
+ if handle == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) {
r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData)))
if r1 == 0 {
@@ -1674,6 +1777,15 @@ func ExitProcess(exitcode uint32) {
return
}
+func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) {
+ r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size))
+ n = uint32(r0)
+ if n == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func FindClose(handle Handle) (err error) {
r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0)
if r1 == 0 {
@@ -2457,6 +2569,22 @@ func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow ui
return
}
+func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) {
+ r1, _, e1 := syscall.Syscall(procModule32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) {
+ r1, _, e1 := syscall.Syscall(procModule32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) {
r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags))
if r1 == 0 {
@@ -2631,6 +2759,14 @@ func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (
return
}
+func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) {
+ r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func ReleaseMutex(mutex Handle) (err error) {
r1, _, e1 := syscall.Syscall(procReleaseMutex.Addr(), 1, uintptr(mutex), 0, 0)
if r1 == 0 {
@@ -2985,6 +3121,30 @@ func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect
return
}
+func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procVirtualProtectEx.Addr(), 5, uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) {
+ r1, _, e1 := syscall.Syscall(procVirtualQuery.Addr(), 3, uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) {
+ r1, _, e1 := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func VirtualUnlock(addr uintptr, length uintptr) (err error) {
r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0)
if r1 == 0 {
@@ -3041,6 +3201,14 @@ func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped)
return
}
+func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) {
+ r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) {
r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0)
if r1 == 0 {
@@ -3110,6 +3278,22 @@ func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe
return
}
+func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) {
+ r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)), 0, 0)
+ if r0 != 0 {
+ ntstatus = NTStatus(r0)
+ }
+ return
+}
+
+func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) {
+ r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class), 0)
+ if r0 != 0 {
+ ntstatus = NTStatus(r0)
+ }
+ return
+}
+
func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) {
r0, _, _ := syscall.Syscall6(procNtSetInformationProcess.Addr(), 4, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), 0, 0)
if r0 != 0 {
@@ -3118,6 +3302,20 @@ func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.P
return
}
+func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) {
+ r0, _, _ := syscall.Syscall(procNtSetSystemInformation.Addr(), 3, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen))
+ if r0 != 0 {
+ ntstatus = NTStatus(r0)
+ }
+ return
+}
+
+func RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) {
+ r0, _, _ := syscall.Syscall(procRtlAddFunctionTable.Addr(), 3, uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress))
+ ret = r0 != 0
+ return
+}
+
func RtlDefaultNpAcl(acl **ACL) (ntstatus error) {
r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(acl)), 0, 0)
if r0 != 0 {
@@ -3126,6 +3324,12 @@ func RtlDefaultNpAcl(acl **ACL) (ntstatus error) {
return
}
+func RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) {
+ r0, _, _ := syscall.Syscall(procRtlDeleteFunctionTable.Addr(), 1, uintptr(unsafe.Pointer(functionTable)), 0, 0)
+ ret = r0 != 0
+ return
+}
+
func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) {
r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0)
if r0 != 0 {
@@ -3225,6 +3429,22 @@ func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) {
return
}
+func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procEnumProcessModules.Addr(), 4, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procEnumProcessModulesEx.Addr(), 5, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) {
var _p0 *uint32
if len(processIds) > 0 {
@@ -3237,6 +3457,30 @@ func EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) {
return
}
+func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procGetModuleBaseNameW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procGetModuleFileNameExW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procGetModuleInformation.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) {
ret = procSubscribeServiceChangeNotifications.Find()
if ret != nil {
@@ -3274,6 +3518,233 @@ func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint
return
}
+func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiBuildDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiCallClassInstaller.Addr(), 3, uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiCancelDriverInfoSearch.Addr(), 1, uintptr(deviceInfoSet), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiClassGuidsFromNameExW.Addr(), 6, uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiClassNameFromGuidExW.Addr(), 6, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) {
+ r0, _, e1 := syscall.Syscall6(procSetupDiCreateDeviceInfoListExW.Addr(), 4, uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0)
+ handle = DevInfo(r0)
+ if handle == DevInfo(InvalidHandle) {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall9(procSetupDiCreateDeviceInfoW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiDestroyDeviceInfoList.Addr(), 1, uintptr(deviceInfoSet), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiDestroyDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiEnumDeviceInfo.Addr(), 3, uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiEnumDriverInfoW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) {
+ r0, _, e1 := syscall.Syscall9(procSetupDiGetClassDevsExW.Addr(), 7, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0)
+ handle = DevInfo(r0)
+ if handle == DevInfo(InvalidHandle) {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiGetDeviceInstanceIdW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) {
+ r1, _, e1 := syscall.Syscall9(procSetupDiGetDevicePropertyW.Addr(), 8, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall9(procSetupDiGetDeviceRegistryPropertyW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiGetDriverInfoDetailW.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) {
+ r0, _, e1 := syscall.Syscall6(procSetupDiOpenDevRegKey.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired))
+ key = Handle(r0)
+ if key == InvalidHandle {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procSetupDiSetDeviceRegistryPropertyW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetupUninstallOEMInfW.Addr(), 3, uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) {
r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0)
argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0))
@@ -3359,6 +3830,58 @@ func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) {
return
}
+func GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(filename)
+ if err != nil {
+ return
+ }
+ return _GetFileVersionInfoSize(_p0, zeroHandle)
+}
+
+func _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) {
+ r0, _, e1 := syscall.Syscall(procGetFileVersionInfoSizeW.Addr(), 2, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)), 0)
+ bufSize = uint32(r0)
+ if bufSize == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(filename)
+ if err != nil {
+ return
+ }
+ return _GetFileVersionInfo(_p0, handle, bufSize, buffer)
+}
+
+func _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) {
+ r1, _, e1 := syscall.Syscall6(procGetFileVersionInfoW.Addr(), 4, uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(subBlock)
+ if err != nil {
+ return
+ }
+ return _VerQueryValue(block, _p0, pointerToBufferPointer, bufSize)
+}
+
+func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procVerQueryValueW.Addr(), 4, uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) {
r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data)))
if r0 != 0 {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 3b3004669..6469c1ef4 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -50,6 +50,12 @@ github.com/antchfx/htmlquery
# github.com/antchfx/xpath v1.2.0
## explicit; go 1.14
github.com/antchfx/xpath
+# github.com/apenwarr/fixconsole v0.0.0-20191012055117-5a9f6489cc29
+## explicit; go 1.12
+github.com/apenwarr/fixconsole
+# github.com/apenwarr/w32 v0.0.0-20190407065021-aa00fece76ab
+## explicit
+github.com/apenwarr/w32
# github.com/chromedp/cdproto v0.0.0-20210622022015-fe1827b46b84
## explicit; go 1.14
github.com/chromedp/cdproto
@@ -130,6 +136,16 @@ github.com/fvbommel/sortorder
## explicit
github.com/go-chi/chi
github.com/go-chi/chi/middleware
+# github.com/go-chi/chi/v5 v5.0.0
+## explicit; go 1.16
+github.com/go-chi/chi/v5
+github.com/go-chi/chi/v5/middleware
+# github.com/go-chi/httplog v0.2.1
+## explicit; go 1.14
+github.com/go-chi/httplog
+# github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4
+## explicit
+github.com/go-toast/toast
# github.com/gobwas/httphead v0.1.0
## explicit; go 1.15
github.com/gobwas/httphead
@@ -212,6 +228,12 @@ github.com/josharian/intern
# github.com/json-iterator/go v1.1.11
## explicit; go 1.12
github.com/json-iterator/go
+# github.com/kermieisinthehouse/gosx-notifier v0.1.1
+## explicit
+github.com/kermieisinthehouse/gosx-notifier
+# github.com/kermieisinthehouse/systray v1.2.3
+## explicit; go 1.17
+github.com/kermieisinthehouse/systray
# github.com/lucasb-eyer/go-colorful v1.2.0
## explicit; go 1.12
github.com/lucasb-eyer/go-colorful
@@ -249,6 +271,9 @@ github.com/natefinch/pie
# github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
## explicit
github.com/nfnt/resize
+# github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d
+## explicit
+github.com/nu7hatch/gouuid
# github.com/pelletier/go-toml v1.9.4
## explicit; go 1.12
github.com/pelletier/go-toml
@@ -276,7 +301,7 @@ github.com/robertkrimen/otto/token
# github.com/rs/cors v1.6.0
## explicit
github.com/rs/cors
-# github.com/rs/zerolog v1.18.0
+# github.com/rs/zerolog v1.18.1-0.20200514152719-663cbb4c8469
## explicit
github.com/rs/zerolog
github.com/rs/zerolog/internal/cbor
@@ -399,7 +424,7 @@ golang.org/x/net/internal/iana
golang.org/x/net/internal/socket
golang.org/x/net/ipv4
golang.org/x/net/publicsuffix
-# golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf
+# golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e
## explicit; go 1.17
golang.org/x/sys/cpu
golang.org/x/sys/execabs
@@ -407,6 +432,7 @@ golang.org/x/sys/internal/unsafeheader
golang.org/x/sys/plan9
golang.org/x/sys/unix
golang.org/x/sys/windows
+golang.org/x/sys/windows/svc
# golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b
## explicit; go 1.17
golang.org/x/term