├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── build ├── build-darwin.sh ├── build-linux.sh ├── build-windows.sh ├── darwin │ └── Info.plist ├── flags.sh ├── linux │ └── Dockerfile └── windows │ └── ExampleTrayGUI.exe.manifest ├── config └── config.go ├── go.mod ├── go.sum ├── icon ├── icon.icns ├── icon.png ├── icon_512.png ├── iconunix.go ├── iconwin.go ├── iconwin.ico ├── make_icon.bat └── make_icon.sh ├── main.go ├── tray └── tray.go └── views ├── view-google.go ├── view-index.go ├── views.go └── www └── index.html /.gitignore: -------------------------------------------------------------------------------- 1 | # golang 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | *.test 8 | *.out 9 | 10 | # misc 11 | .DS_Store 12 | 13 | # env 14 | *.env* 15 | *.secrets* 16 | 17 | # build 18 | bin/ 19 | *.syso 20 | *.deb 21 | *.zip 22 | *.dmg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Owen Moore 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ifneq (,$(wildcard ./.env)) 2 | include .env 3 | export 4 | endif 5 | 6 | ROOT=$(shell pwd) 7 | 8 | run: 9 | go run main.go 10 | 11 | build: build-darwin build-windows build-linux 12 | 13 | build-darwin: 14 | source .env && cd build; sh build-darwin.sh 15 | 16 | build-windows: 17 | source .env && cd build; sh build-windows.sh 18 | 19 | build-linux: docker-build-linux docker-clean 20 | 21 | docker-build-linux: 22 | docker build -t example-tray-gui -f build/linux/Dockerfile . 23 | docker run -v $(ROOT)/bin:/example-tray-gui/bin -t example-tray-gui bash -c 'export VERSION=${VERSION} && export NAME=${NAME} && export NAME_LOWER=${NAME_LOWER} && cd build; bash build-linux.sh' 24 | 25 | docker-clean: 26 | docker rm $(shell docker ps --all -q) 27 | docker rmi $(shell docker images | grep example-tray-gui | tr -s ' ' | cut -d ' ' -f 3) 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ExampleTrayGUI 2 | An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functional build process. This repository is intended as a quick reference to help others start similar projects using the referenced libraries and will not be actively maintained. 3 | 4 | ## Requirements 5 | 6 | The build process requires a `.env` at the root of your repo file, defining the following: 7 | 8 | ``` 9 | VERSION=1.0.0 10 | NAME=ExampleTrayGUI 11 | NAME_LOWER=example-tray-gui 12 | ``` 13 | 14 | Additionally, you'll need to install the following to build for all platforms: 15 | 16 | ``` 17 | go get github.com/akavel/rsrc 18 | npm install --global create-dmg 19 | brew install graphicsmagick imagemagick 20 | ``` 21 | 22 | https://www.docker.com/get-started 23 | 24 | Once Docker is installed, go to `Preferences > Resources > File Sharing` and add your `bin` directory in your repository to the list of locations so that build outputs can be shared from the images. -------------------------------------------------------------------------------- /build/build-darwin.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | source flags.sh 3 | 4 | APP="${NAME}.app" 5 | BUILD_DIR="../bin/${VERSION}/" 6 | 7 | rm -rf ${BUILD_DIR}/"$APP"/ 8 | mkdir -p ${BUILD_DIR}/"$APP"/Contents/{MacOS,Resources} 9 | 10 | GOOS=darwin GOARCH=amd64 go build -o ${BUILD_DIR}/"$APP"/Contents/MacOS/${NAME} -ldflags="${LDFLAGS}" ../main.go 11 | 12 | cp ./darwin/Info.plist ${BUILD_DIR}/"${APP}"/Contents/Info.plist 13 | cp ../icon/icon.icns ${BUILD_DIR}/"${APP}"/Contents/Resources/icon.icns 14 | 15 | cd ${BUILD_DIR} 16 | 17 | rm *.dmg 18 | create-dmg --dmg-title="${NAME}" --overwrite "${APP}" 19 | mv *.dmg ${NAME}_${VERSION}_mac_amd64.dmg 20 | rm -rf "${APP}" -------------------------------------------------------------------------------- /build/build-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source flags.sh 3 | 4 | APP=${NAME_LOWER} 5 | APPDIR=../bin/${VERSION}/${APP} 6 | 7 | mkdir -p $APPDIR/usr/bin 8 | mkdir -p $APPDIR/usr/share/applications 9 | mkdir -p $APPDIR/usr/share/icons/hicolor/1024x1024/apps 10 | mkdir -p $APPDIR/usr/share/icons/hicolor/256x256/apps 11 | mkdir -p $APPDIR/DEBIAN 12 | 13 | CC="gcc" CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o $APPDIR/usr/bin/$APP -ldflags="${LDFLAGS}" ../main.go 14 | 15 | cp ../icon/icon.png $APPDIR/usr/share/icons/hicolor/1024x1024/apps/${APP}.png 16 | cp ../icon/icon.png $APPDIR/usr/share/icons/hicolor/256x256/apps/${APP}.png 17 | 18 | cat > $APPDIR/usr/share/applications/${APP}.desktop << EOF 19 | [Desktop Entry] 20 | Version=${VERSION} 21 | Type=Application 22 | Name=$APP 23 | Exec=$APP 24 | Icon=$APP 25 | Terminal=false 26 | StartupWMClass=ExampleTrayGUI 27 | EOF 28 | 29 | cat > $APPDIR/DEBIAN/control << EOF 30 | Package: ${APP} 31 | Version: ${VERSION} 32 | Section: base 33 | Priority: optional 34 | Architecture: amd64 35 | Maintainer: Grant Moore 36 | Description: Example Tray GUI Application 37 | EOF 38 | 39 | dpkg-deb --build $APPDIR 40 | mv ${APPDIR}.deb ../bin/${VERSION}/${NAME}_${VERSION}_linux_amd64.deb 41 | rm -rf ${APPDIR} -------------------------------------------------------------------------------- /build/build-windows.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | source flags.sh 3 | 4 | APP="${NAME}.exe" 5 | LDFLAGS="${LDFLAGS} -H windowsgui" 6 | BUILD_DIR="../bin/${VERSION}/" 7 | 8 | rm -rf ${BUILD_DIR}/"${APP}" 9 | 10 | rsrc -arch amd64 -ico ../icon/iconwin.ico -manifest "./windows/ExampleTrayGUI.exe.manifest" -o ../ExampleTrayGUI.syso 11 | 12 | GOOS=windows GOARCH=amd64 go build -o ${BUILD_DIR}/"${APP}" -ldflags="${LDFLAGS}" ../main.go 13 | 14 | ditto -c -k --sequesterRsrc ${BUILD_DIR}/"${APP}" ${BUILD_DIR}/${NAME}_${VERSION}_windows_amd64.zip 15 | 16 | rm -rf ${BUILD_DIR}/"${APP}" 17 | rm -rf ../ExampleTrayGUI.syso 18 | -------------------------------------------------------------------------------- /build/darwin/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleExecutable 6 | ExampleTrayGUI 7 | CFBundleIconFile 8 | icon.icns 9 | CFBundleIdentifier 10 | com.Example.TrayGUI 11 | NSHighResolutionCapable 12 | True 13 | LSUIElement 14 | 1 15 | CFBundleDisplayName 16 | Example TrayGUI 17 | 18 | -------------------------------------------------------------------------------- /build/flags.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | PKGCONFIG="github.com/ctrlshiftmake/example-tray-gui/config" 3 | 4 | LD_FLAG_MESSAGE="-X '${PKGCONFIG}.ApplicationVersion=${VERSION}'" 5 | 6 | LDFLAGS="${LD_FLAG_MESSAGE}" -------------------------------------------------------------------------------- /build/linux/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu 2 | 3 | ENV GO111MODULE=on \ 4 | CGO_ENABLED=1 \ 5 | GOOS=linux \ 6 | GOARCH=amd64 7 | 8 | ARG DEBIAN_FRONTEND=noninteractive 9 | 10 | RUN apt-get update && apt-get install -y sudo wget 11 | 12 | RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo 13 | 14 | RUN wget -c https://dl.google.com/go/go1.16.4.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local 15 | ENV PATH="/usr/local/go/bin:${PATH}" 16 | 17 | RUN apt-get install -y wget gcc libgtk-3-dev libappindicator3-dev make 18 | 19 | WORKDIR /example-tray-gui 20 | COPY ../go.mod . 21 | COPY ../go.sum . 22 | RUN go mod download 23 | 24 | COPY ../ . -------------------------------------------------------------------------------- /build/windows/ExampleTrayGUI.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | ExampleTrayGUI 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /config/config.go: -------------------------------------------------------------------------------- 1 | package config 2 | 3 | var ( 4 | ApplicationVersion string = "development" 5 | ) 6 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/ctrlshiftmake/example-tray-gui 2 | 3 | go 1.16 4 | 5 | require ( 6 | github.com/getlantern/systray v1.1.0 7 | github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 8 | github.com/zserge/lorca v0.1.10 9 | ) 10 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= 2 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 3 | github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= 4 | github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= 5 | github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 h1:6uJ+sZ/e03gkbqZ0kUG6mfKoqDb4XMAzMIwlajq19So= 6 | github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A= 7 | github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 h1:guBYzEaLz0Vfc/jv0czrr2z7qyzTOGC9hiQ0VC+hKjk= 8 | github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7/go.mod h1:zx/1xUUeYPy3Pcmet8OSXLbF47l+3y6hIPpyLWoR9oc= 9 | github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 h1:micT5vkcr9tOVk1FiH8SWKID8ultN44Z+yzd2y/Vyb0= 10 | github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o= 11 | github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0FDNrgJqGRo8PCMFOBFL9py72DRs7bmc= 12 | github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= 13 | github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA= 14 | github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= 15 | github.com/getlantern/systray v1.1.0 h1:U0wCEqseLi2ok1fE6b88gJklzriavPJixZysZPkZd/Y= 16 | github.com/getlantern/systray v1.1.0/go.mod h1:AecygODWIsBquJCJFop8MEQcJbWFfw/1yWbVabNgpCM= 17 | github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= 18 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= 19 | github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= 20 | github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= 21 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 22 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 23 | github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA= 24 | github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= 25 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 26 | github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= 27 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 28 | github.com/zserge/lorca v0.1.10 h1:f/xBJ3D3ipcVRCcvN8XqZnpoKcOXV8I4vwqlFyw7ruc= 29 | github.com/zserge/lorca v0.1.10/go.mod h1:bVmnIbIRlOcoV285KIRSe4bUABKi7R7384Ycuum6e4A= 30 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 31 | golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 h1:MsuvTghUPjX762sGLnGsxC3HM0B5r83wEtYcYR8/vRs= 32 | golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 33 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 34 | golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9 h1:YTzHMGlqJu67/uEo1lBv0n3wBXhXNeUbB1XfN2vmTm0= 35 | golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 36 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 37 | -------------------------------------------------------------------------------- /icon/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owmo-dev/example-go-tray-gui/443b73bb08a129fdbd2dc3da22c14ba64491a9d7/icon/icon.icns -------------------------------------------------------------------------------- /icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owmo-dev/example-go-tray-gui/443b73bb08a129fdbd2dc3da22c14ba64491a9d7/icon/icon.png -------------------------------------------------------------------------------- /icon/icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owmo-dev/example-go-tray-gui/443b73bb08a129fdbd2dc3da22c14ba64491a9d7/icon/icon_512.png -------------------------------------------------------------------------------- /icon/iconunix.go: -------------------------------------------------------------------------------- 1 | //+build linux darwin 2 | 3 | // File generated by 2goarray v0.1.0 (http://github.com/cratonica/2goarray) 4 | 5 | package icon 6 | 7 | var Data []byte = []byte{ 8 | 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 9 | 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 10 | 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 11 | 0x01, 0x73, 0x52, 0x47, 0x42, 0x01, 0xd9, 0xc9, 0x2c, 0x7f, 0x00, 0x00, 12 | 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 13 | 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x0a, 0x03, 0x49, 14 | 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x5a, 0x69, 0x54, 0x94, 0xd7, 0x19, 15 | 0x4e, 0x9b, 0x1f, 0xed, 0x9f, 0x9e, 0x6a, 0xdc, 0xd9, 0x17, 0x07, 0x90, 16 | 0x4d, 0x50, 0x70, 0x5f, 0x90, 0x88, 0x6b, 0xd0, 0x2a, 0x4d, 0x8c, 0x12, 17 | 0x8b, 0x24, 0x8d, 0xb1, 0x46, 0x9b, 0xb6, 0x46, 0x3c, 0x5a, 0xc5, 0x68, 18 | 0x45, 0x54, 0x2c, 0x28, 0x41, 0x63, 0x14, 0x71, 0xe5, 0x18, 0xb5, 0x9a, 19 | 0x50, 0x95, 0x88, 0x02, 0x2e, 0x2c, 0x5a, 0xab, 0x12, 0x94, 0x55, 0x98, 20 | 0x45, 0x19, 0x06, 0xd4, 0x9c, 0x9e, 0xfe, 0x68, 0x4f, 0x6d, 0x4f, 0xcf, 21 | 0x79, 0xfa, 0xbe, 0xef, 0xcc, 0x50, 0x3a, 0x82, 0xc5, 0x99, 0x6f, 0xf8, 22 | 0xd4, 0x78, 0xcf, 0x79, 0x0e, 0xcb, 0xcc, 0xf7, 0x7d, 0xf7, 0x79, 0xee, 23 | 0xbb, 0x3c, 0xf7, 0xce, 0xbc, 0xf2, 0xca, 0xcb, 0xf1, 0x72, 0xa8, 0x32, 24 | 0x7c, 0x02, 0x86, 0xfc, 0x80, 0xe0, 0x49, 0xf0, 0x26, 0xfc, 0x58, 0xed, 25 | 0xf9, 0x74, 0xeb, 0x20, 0xc2, 0x7e, 0x84, 0x2f, 0x08, 0xb0, 0xe0, 0x2a, 26 | 0xe1, 0x1d, 0xb5, 0xe7, 0xe5, 0xf4, 0x41, 0x24, 0xbf, 0x47, 0xc8, 0x6d, 27 | 0x47, 0xdc, 0x16, 0x7a, 0x82, 0x87, 0xda, 0xf3, 0x54, 0x7c, 0x10, 0xa9, 28 | 0x1f, 0x12, 0x3e, 0x7e, 0x02, 0x71, 0x5b, 0xec, 0x23, 0x04, 0xa8, 0x3d, 29 | 0x6f, 0x45, 0x06, 0x11, 0x59, 0xf6, 0x14, 0xc4, 0x6d, 0x71, 0x8c, 0x6b, 30 | 0x85, 0xda, 0x1c, 0xec, 0x1a, 0x34, 0xf1, 0x81, 0x84, 0xa3, 0x0e, 0x90, 31 | 0xb7, 0xe2, 0x1a, 0x21, 0x4a, 0x6d, 0x3e, 0x5d, 0x1e, 0x34, 0xd9, 0x1e, 32 | 0x84, 0xe3, 0x0a, 0x10, 0xb7, 0xc5, 0x0d, 0xc2, 0x60, 0xb5, 0xf9, 0x75, 33 | 0x3a, 0x2c, 0x05, 0x8e, 0xc3, 0xfd, 0xdf, 0x4e, 0x20, 0xdf, 0x1e, 0x47, 34 | 0x08, 0x3d, 0xd5, 0xe6, 0xdb, 0x36, 0x2c, 0xc4, 0xd7, 0x10, 0xee, 0x3a, 35 | 0x99, 0x78, 0x7b, 0x3c, 0x22, 0x1c, 0x20, 0xf4, 0x51, 0x9b, 0x7c, 0x3f, 36 | 0x82, 0xb6, 0x1b, 0x89, 0xdb, 0xe2, 0xef, 0x84, 0x99, 0x6a, 0x91, 0xdf, 37 | 0xa2, 0x22, 0x71, 0x5b, 0x94, 0x10, 0x5c, 0xbb, 0x8b, 0xf8, 0xaf, 0x9f, 38 | 0x01, 0xc2, 0x9d, 0x61, 0xaf, 0x33, 0x89, 0x47, 0x11, 0xfe, 0xa1, 0xe4, 39 | 0x84, 0x3d, 0x35, 0x83, 0xe1, 0x31, 0x30, 0xd4, 0x19, 0x42, 0x2c, 0x26, 40 | 0xbc, 0xaa, 0x14, 0xf1, 0xf1, 0x84, 0xbf, 0x28, 0x39, 0x41, 0x2f, 0xbf, 41 | 0x30, 0xf4, 0xf7, 0x18, 0x84, 0xa8, 0x98, 0x19, 0x88, 0x9b, 0xb3, 0x00, 42 | 0xfd, 0x3d, 0x03, 0x9c, 0x25, 0xc4, 0x22, 0x47, 0xc9, 0xaf, 0x54, 0x9e, 43 | 0x78, 0x00, 0xc2, 0x87, 0x47, 0x61, 0xd3, 0x96, 0x0c, 0xb4, 0xb6, 0x98, 44 | 0xf0, 0xe0, 0xc1, 0x7d, 0x1c, 0xfb, 0xc3, 0x49, 0x4c, 0x9a, 0x16, 0x27, 45 | 0x42, 0x70, 0x54, 0x28, 0x2c, 0xc2, 0x79, 0x7b, 0xc9, 0x87, 0x29, 0x19, 46 | 0xea, 0xfd, 0x3d, 0x07, 0x21, 0x74, 0xe8, 0x58, 0x6c, 0xdc, 0x9c, 0x8e, 47 | 0xda, 0xda, 0x5a, 0x34, 0x1b, 0x8d, 0x68, 0x6c, 0x6c, 0x44, 0x43, 0x43, 48 | 0x83, 0xfc, 0x6e, 0xb8, 0x6b, 0xc0, 0xbe, 0x83, 0xb9, 0x18, 0x13, 0x3d, 49 | 0x4d, 0xa2, 0xc3, 0x9d, 0x22, 0xc2, 0xdb, 0x5f, 0x31, 0x11, 0xd6, 0xda, 50 | 0x23, 0x40, 0xa9, 0x12, 0xc4, 0x07, 0x78, 0x06, 0x0a, 0xa9, 0x35, 0x9f, 51 | 0xa4, 0xe0, 0xf6, 0xed, 0x2a, 0x3c, 0xa4, 0x15, 0xaf, 0xae, 0xa9, 0x41, 52 | 0x76, 0xce, 0x01, 0x94, 0x95, 0x97, 0xa3, 0xaa, 0xba, 0x1a, 0x3b, 0x77, 53 | 0xed, 0x41, 0xf9, 0x95, 0xab, 0x78, 0xf8, 0xf0, 0x01, 0x74, 0x7a, 0x1d, 54 | 0x76, 0xed, 0xde, 0x8b, 0x99, 0x71, 0xf3, 0xe0, 0xea, 0x13, 0x2c, 0x42, 55 | 0x28, 0x21, 0x82, 0x3d, 0x02, 0xfc, 0xd3, 0xde, 0x87, 0x79, 0xfb, 0x87, 56 | 0xc3, 0xc5, 0x2b, 0x08, 0xc3, 0x46, 0xc7, 0x60, 0x5b, 0xd6, 0x67, 0xa8, 57 | 0xaf, 0xab, 0x97, 0x70, 0x6f, 0xb8, 0x73, 0x07, 0x19, 0xdb, 0x77, 0x4a, 58 | 0x0a, 0xf4, 0x75, 0x0f, 0xc0, 0xb9, 0x73, 0x45, 0xa8, 0xa9, 0xa9, 0x46, 59 | 0x68, 0xc4, 0x38, 0xf8, 0x0c, 0x1a, 0x8a, 0x65, 0x2b, 0x56, 0xe3, 0x66, 60 | 0x45, 0x05, 0xee, 0xb7, 0xb6, 0xc0, 0xa0, 0x37, 0xe0, 0xe8, 0xf1, 0x13, 61 | 0x98, 0x1a, 0xfb, 0xa6, 0xdc, 0xcb, 0x53, 0x13, 0xd6, 0xed, 0x02, 0x3c, 62 | 0xb2, 0xe7, 0x41, 0xae, 0xde, 0xc1, 0x12, 0xee, 0x69, 0x5b, 0xb7, 0x0b, 63 | 0x39, 0x53, 0x73, 0x33, 0x5a, 0x88, 0x7c, 0xf1, 0x85, 0x4b, 0x88, 0x1c, 64 | 0x3d, 0x51, 0xc2, 0x9b, 0x23, 0xc3, 0xdd, 0x37, 0x14, 0x85, 0x85, 0x17, 65 | 0x50, 0x53, 0x5b, 0x43, 0x42, 0x4d, 0xa4, 0x22, 0x48, 0xd1, 0xe2, 0x15, 66 | 0x08, 0xbf, 0xe0, 0x61, 0x14, 0x11, 0xd9, 0x92, 0x12, 0x7c, 0xad, 0x56, 67 | 0xa7, 0xc5, 0xc9, 0x2f, 0xff, 0x88, 0xa0, 0xf0, 0xd1, 0x72, 0x2d, 0x8b, 68 | 0xdb, 0x5d, 0x02, 0x74, 0xb9, 0xe5, 0xf1, 0xa4, 0xdc, 0x28, 0x5c, 0x7b, 69 | 0xbb, 0x68, 0xf0, 0x8b, 0xa5, 0xcb, 0x50, 0x5b, 0x57, 0x87, 0x16, 0x93, 70 | 0x49, 0x56, 0xb2, 0xa0, 0xa0, 0x10, 0x93, 0xa7, 0xff, 0x54, 0x56, 0xdc, 71 | 0x5a, 0xe0, 0x38, 0xb7, 0x6d, 0x05, 0xe0, 0x02, 0xc9, 0xaf, 0x79, 0xf9, 72 | 0x85, 0xd3, 0x7b, 0xfd, 0x11, 0x36, 0x6c, 0x3c, 0xf6, 0xee, 0x3f, 0x04, 73 | 0x13, 0xdd, 0x87, 0x85, 0x68, 0x6e, 0x36, 0x22, 0x75, 0x4b, 0x3a, 0x3c, 74 | 0x7c, 0xcd, 0x69, 0x65, 0x7d, 0xbf, 0xea, 0x02, 0xb8, 0x7a, 0x07, 0xc1, 75 | 0x9b, 0x26, 0xbd, 0xe0, 0xfd, 0x0f, 0x29, 0xc7, 0x6f, 0xe3, 0xc1, 0xfd, 76 | 0x56, 0xc9, 0xf3, 0x53, 0x67, 0xbe, 0xc6, 0x8c, 0xd9, 0xf1, 0xe8, 0xe3, 77 | 0xea, 0xf7, 0x58, 0x8b, 0x7b, 0x92, 0x00, 0x56, 0xf0, 0xdf, 0x7d, 0xdd, 78 | 0xfc, 0x24, 0x8d, 0x38, 0x22, 0x9a, 0x8d, 0xcd, 0x24, 0x68, 0x2b, 0x9a, 79 | 0xee, 0xdd, 0x43, 0xf2, 0xba, 0x14, 0x84, 0x93, 0x40, 0xfd, 0x48, 0xd4, 80 | 0xae, 0x46, 0x84, 0x53, 0x04, 0x70, 0xf3, 0x0d, 0xc1, 0xe2, 0x5f, 0x2e, 81 | 0x93, 0x6a, 0xce, 0xab, 0xfd, 0xed, 0xb7, 0x0f, 0x71, 0xf2, 0xab, 0x3c, 82 | 0x8c, 0x18, 0x13, 0x23, 0xd1, 0xd0, 0x59, 0x6f, 0xe7, 0xeb, 0x7a, 0x0f, 83 | 0xd0, 0x50, 0x0d, 0x28, 0x94, 0x82, 0x18, 0x1c, 0x3e, 0x86, 0x56, 0xb5, 84 | 0xe3, 0xf0, 0xe6, 0xa8, 0x61, 0xa2, 0x3e, 0x83, 0x86, 0x60, 0xdb, 0xa7, 85 | 0x3b, 0xd1, 0x4a, 0x22, 0xb4, 0xd2, 0xb3, 0x9a, 0x4d, 0xcd, 0x48, 0xcf, 86 | 0xc8, 0x82, 0x77, 0x40, 0x78, 0x97, 0x44, 0x50, 0x5c, 0x00, 0x7e, 0xa8, 87 | 0x6f, 0xc0, 0x50, 0xa9, 0xde, 0x7a, 0x9d, 0x0e, 0xf9, 0x67, 0x0b, 0x30, 88 | 0xee, 0xf5, 0x37, 0x84, 0x78, 0x67, 0xbd, 0x9c, 0x57, 0xb5, 0x17, 0xbd, 89 | 0x3e, 0x77, 0xfe, 0xfb, 0x38, 0x79, 0x32, 0x0f, 0x06, 0x83, 0x5e, 0x50, 90 | 0x52, 0x5a, 0x86, 0x15, 0xab, 0xd6, 0xa2, 0x1f, 0xe5, 0x78, 0x67, 0xa2, 91 | 0x71, 0x6a, 0xf4, 0x23, 0x0f, 0xe1, 0x1f, 0x32, 0x0c, 0x9f, 0xef, 0xc9, 92 | 0x11, 0xe1, 0xf4, 0x3a, 0x3d, 0x3d, 0x73, 0x7a, 0x97, 0xbc, 0x83, 0x53, 93 | 0x04, 0xe0, 0x55, 0xb9, 0x74, 0xb9, 0x14, 0x37, 0x6e, 0xde, 0x44, 0xcc, 94 | 0xd4, 0xd9, 0x92, 0x0e, 0x1d, 0xbd, 0x57, 0x7c, 0x00, 0x91, 0x1b, 0x1c, 95 | 0x31, 0x16, 0x79, 0x79, 0xa7, 0xc5, 0xfc, 0x70, 0x4e, 0x57, 0x53, 0x0b, 96 | 0xbc, 0x7e, 0xe3, 0xa6, 0xf8, 0x00, 0x2e, 0x94, 0xb7, 0x6e, 0xdd, 0x42, 97 | 0xf4, 0x94, 0x99, 0xe8, 0x4f, 0x2b, 0xee, 0x4e, 0x51, 0xd2, 0xd1, 0xca, 98 | 0xb2, 0x88, 0x3d, 0xfa, 0x7a, 0xe3, 0xd4, 0xe9, 0x7c, 0x34, 0x6a, 0x1b, 99 | 0x31, 0x7a, 0xc2, 0x54, 0xf5, 0x05, 0xa8, 0xa8, 0xf8, 0x06, 0xb1, 0xb3, 100 | 0xe6, 0x3e, 0xb6, 0x7a, 0xbc, 0x6a, 0xdc, 0xc2, 0x26, 0x4c, 0x8a, 0xc5, 101 | 0xef, 0x36, 0xa6, 0x51, 0xbe, 0xd7, 0x4a, 0xaa, 0x30, 0xd1, 0x3d, 0x7b, 102 | 0xf7, 0x63, 0x74, 0xd4, 0x54, 0x84, 0x90, 0x39, 0x5a, 0xb7, 0x61, 0x33, 103 | 0x4a, 0x4b, 0xcb, 0x45, 0x04, 0x83, 0xc1, 0x80, 0x9c, 0xfd, 0x87, 0x11, 104 | 0x37, 0x77, 0x01, 0xdc, 0x7d, 0x42, 0xe0, 0xd1, 0x01, 0x39, 0x2e, 0x82, 105 | 0xf9, 0xf9, 0x05, 0xcf, 0xb6, 0x00, 0xfc, 0x7a, 0x50, 0xd8, 0x48, 0xec, 106 | 0xf8, 0x3c, 0x9b, 0xfa, 0x7f, 0x03, 0x8c, 0x4d, 0x4d, 0xa8, 0x24, 0xe2, 107 | 0xa9, 0x64, 0x81, 0xb9, 0xef, 0xbb, 0xf9, 0x04, 0x09, 0x39, 0x5e, 0x51, 108 | 0x16, 0xc9, 0x97, 0x7c, 0xc0, 0x92, 0x8f, 0x96, 0xe3, 0x0a, 0xa5, 0x54, 109 | 0x53, 0xd3, 0x3d, 0xdc, 0xa5, 0x36, 0xf8, 0x65, 0xde, 0x29, 0x8c, 0x8d, 110 | 0x7e, 0x3c, 0xc4, 0x9f, 0x0b, 0x01, 0xb8, 0xca, 0xc7, 0x27, 0x2c, 0xc4, 111 | 0x7d, 0xea, 0x0a, 0x6c, 0x77, 0x79, 0x65, 0x53, 0x37, 0xff, 0x9e, 0x7a, 112 | 0x7d, 0x90, 0x78, 0x05, 0x5b, 0x9b, 0xeb, 0x49, 0x42, 0xbc, 0x36, 0x60, 113 | 0x20, 0xde, 0xf8, 0xc9, 0x5c, 0x4a, 0x8d, 0x1a, 0xb3, 0x45, 0xa6, 0x34, 114 | 0xd9, 0x9e, 0xb5, 0x4b, 0xfc, 0xc1, 0x73, 0x28, 0x40, 0x08, 0xde, 0x49, 115 | 0x5c, 0x04, 0xa3, 0xb1, 0x49, 0x0a, 0x1d, 0xaf, 0xaa, 0x91, 0x72, 0xfd, 116 | 0xea, 0xd5, 0x6b, 0x18, 0x3f, 0x31, 0x96, 0x0a, 0x9a, 0xbf, 0xbc, 0xdf, 117 | 0xba, 0x33, 0xe4, 0x28, 0xe0, 0xbd, 0x80, 0x5e, 0xaf, 0x97, 0xd5, 0x67, 118 | 0xb0, 0x68, 0x99, 0x2c, 0x80, 0xe7, 0xf3, 0x2a, 0xc0, 0x82, 0x45, 0xe2, 119 | 0x0b, 0xd2, 0x33, 0x77, 0x20, 0xf1, 0xe7, 0x1f, 0xa2, 0xae, 0xbe, 0x5e, 120 | 0x0c, 0x12, 0xb7, 0xb1, 0x33, 0x5f, 0x17, 0x20, 0x7a, 0xd2, 0x4c, 0x71, 121 | 0x7e, 0xbc, 0xca, 0x77, 0xc8, 0x26, 0xb7, 0x50, 0x6b, 0xe3, 0x02, 0xb9, 122 | 0x3b, 0x7b, 0x3f, 0x56, 0x27, 0x6f, 0x90, 0x9a, 0xf0, 0xdc, 0x0b, 0xc0, 123 | 0x1b, 0x9c, 0x94, 0x4d, 0x5b, 0xd1, 0x8b, 0xc2, 0xbb, 0x9f, 0x9b, 0x3f, 124 | 0x3e, 0x5e, 0xb1, 0x06, 0x3a, 0x6a, 0x9b, 0x5c, 0x0c, 0x8d, 0x46, 0xb3, 125 | 0xc3, 0x6b, 0x6d, 0x69, 0x11, 0xf3, 0x94, 0x73, 0xf0, 0x30, 0xc2, 0x22, 126 | 0xc7, 0xa1, 0x67, 0x7f, 0x5f, 0xba, 0xdf, 0x3c, 0xb9, 0xf6, 0x85, 0x10, 127 | 0x60, 0x23, 0xe5, 0x3e, 0x87, 0x38, 0xe7, 0x3d, 0xff, 0xe4, 0x5d, 0x5e, 128 | 0xc2, 0x7b, 0x8b, 0x65, 0x77, 0xd8, 0xd8, 0xa8, 0x45, 0xca, 0xc6, 0xad, 129 | 0x44, 0x7c, 0x3c, 0x39, 0x3f, 0x7f, 0x49, 0x09, 0xbe, 0xcf, 0xac, 0x37, 130 | 0xe7, 0xbf, 0x78, 0x02, 0x58, 0x5f, 0xf3, 0xe2, 0xdd, 0xa2, 0x67, 0x10, 131 | 0x0a, 0x8b, 0x8a, 0x71, 0xbb, 0xaa, 0x4a, 0xce, 0x09, 0xda, 0x6f, 0x7b, 132 | 0x5f, 0x08, 0x01, 0xb8, 0xd2, 0xb3, 0xe3, 0x63, 0x12, 0x1b, 0x52, 0xd3, 133 | 0xc4, 0xc5, 0xfd, 0xf7, 0x5a, 0x22, 0xa9, 0x09, 0x45, 0x51, 0xd1, 0x05, 134 | 0x31, 0x43, 0x91, 0xa3, 0x5e, 0xff, 0x9f, 0xbd, 0x80, 0x1b, 0xf5, 0x7f, 135 | 0xde, 0x47, 0xf0, 0xb5, 0xe9, 0xdb, 0xb2, 0xc4, 0x5d, 0xb6, 0x37, 0x45, 136 | 0xcf, 0xb4, 0x00, 0xd6, 0xaa, 0xce, 0x96, 0x75, 0x3d, 0x19, 0x1c, 0x13, 137 | 0x15, 0xb6, 0x9c, 0x7d, 0x87, 0xcc, 0x9b, 0x17, 0x12, 0x81, 0x5f, 0x6f, 138 | 0xdb, 0x0c, 0x15, 0x5f, 0x10, 0x4b, 0x1b, 0x39, 0x6a, 0xa2, 0xe5, 0xff, 139 | 0x66, 0xe3, 0xa4, 0x09, 0x8a, 0xc4, 0x6f, 0x96, 0xaf, 0x92, 0xfa, 0x70, 140 | 0xf1, 0x72, 0x09, 0xde, 0x8e, 0x7f, 0xb7, 0x4d, 0x54, 0x7e, 0xcf, 0x33, 141 | 0x27, 0x00, 0x1f, 0x62, 0x4c, 0x9b, 0x31, 0x47, 0x0a, 0xdd, 0x90, 0x11, 142 | 0x51, 0xd8, 0x94, 0x96, 0x21, 0xf6, 0xd8, 0x44, 0x04, 0xb8, 0xfd, 0x35, 143 | 0x35, 0x19, 0x51, 0x47, 0x5b, 0xe4, 0xcd, 0x69, 0xdb, 0xc8, 0x0e, 0x8f, 144 | 0x13, 0x21, 0x5c, 0xbc, 0x03, 0x71, 0xbe, 0x90, 0x0f, 0x44, 0x6a, 0x10, 145 | 0x31, 0x32, 0x5a, 0xce, 0x10, 0x7c, 0x03, 0x87, 0x62, 0xe9, 0xaf, 0x92, 146 | 0x70, 0xed, 0xda, 0x75, 0xdc, 0xa3, 0xeb, 0x0c, 0xd4, 0x12, 0x79, 0xf7, 147 | 0xc7, 0x05, 0xb3, 0xa4, 0xa4, 0x14, 0x89, 0x0b, 0x97, 0xc0, 0x4b, 0x63, 148 | 0xf6, 0x0b, 0x67, 0xce, 0x9c, 0x7d, 0x56, 0x04, 0x28, 0x91, 0x08, 0x98, 149 | 0x4f, 0x3d, 0x3f, 0x2d, 0x3d, 0x93, 0x56, 0xb4, 0x56, 0xda, 0x9c, 0x4e, 150 | 0xab, 0xc5, 0xa1, 0xdc, 0x23, 0x88, 0x9b, 0xf3, 0x33, 0xec, 0xdd, 0x77, 151 | 0x40, 0xcc, 0x0d, 0xff, 0xbf, 0x8a, 0x0a, 0xdf, 0xda, 0xf5, 0xa9, 0x18, 152 | 0x39, 0x76, 0x12, 0xce, 0x16, 0x9c, 0x47, 0x15, 0xfd, 0x7f, 0xd2, 0xb4, 153 | 0xd9, 0x78, 0x77, 0xe1, 0x52, 0x94, 0x97, 0x5f, 0x91, 0xd6, 0xa7, 0x27, 154 | 0xdf, 0x70, 0x9a, 0xb6, 0xd3, 0x5c, 0x07, 0xe2, 0x13, 0x3e, 0xa0, 0x96, 155 | 0x79, 0x56, 0x84, 0xe0, 0x68, 0x2a, 0xbe, 0x78, 0x99, 0xee, 0x99, 0x40, 156 | 0xe2, 0x15, 0xa3, 0xa1, 0xb1, 0x41, 0x7d, 0x01, 0x2e, 0xd2, 0x84, 0x78, 157 | 0x3b, 0x7c, 0xe7, 0x4e, 0xbd, 0xd8, 0x5d, 0xce, 0xdb, 0x2f, 0x8e, 0x9d, 158 | 0xc0, 0x70, 0x22, 0xc8, 0x76, 0x97, 0xf3, 0x99, 0xab, 0x3e, 0xdb, 0x5f, 159 | 0xdb, 0x8d, 0x10, 0x9f, 0x07, 0xd6, 0x93, 0x37, 0xf8, 0xa6, 0xf2, 0x96, 160 | 0x18, 0xa6, 0xb6, 0x0d, 0xd1, 0xe4, 0x99, 0x72, 0x04, 0xc6, 0xd7, 0xf2, 161 | 0x41, 0x8b, 0x2b, 0xdd, 0x27, 0x36, 0x6e, 0x2e, 0x3d, 0xa3, 0x41, 0x0e, 162 | 0x47, 0xd8, 0x24, 0x69, 0x69, 0xf5, 0xf9, 0x5a, 0x55, 0x05, 0xe0, 0x90, 163 | 0x2d, 0x2b, 0x2b, 0xa7, 0xbe, 0xae, 0xa5, 0x09, 0x69, 0x65, 0x55, 0x26, 164 | 0xd0, 0xe4, 0x5f, 0xa3, 0x3e, 0x6e, 0x3b, 0x29, 0xeb, 0x56, 0x78, 0xce, 165 | 0xfc, 0xf7, 0x68, 0x07, 0x78, 0x43, 0x56, 0x53, 0xaf, 0xd7, 0xc9, 0x75, 166 | 0xfc, 0xbb, 0x8e, 0xc2, 0x7d, 0xf9, 0xaa, 0xe4, 0xb6, 0x2d, 0x71, 0xfb, 167 | 0xa2, 0xc7, 0x35, 0x83, 0x85, 0xe8, 0xe5, 0x32, 0x10, 0xc9, 0xeb, 0x52, 168 | 0x45, 0x00, 0xb6, 0xca, 0x5a, 0x6a, 0xa1, 0x63, 0xd5, 0xda, 0x0e, 0x9b, 169 | 0xab, 0x75, 0xb0, 0x84, 0xb3, 0xd1, 0x92, 0xeb, 0xbc, 0x3f, 0xcf, 0xc8, 170 | 0xdc, 0x09, 0x4d, 0x70, 0x84, 0x1c, 0x62, 0x74, 0x34, 0x31, 0x6e, 0x8f, 171 | 0xbd, 0x5d, 0x35, 0xb2, 0x7d, 0xce, 0x3f, 0x7b, 0x0e, 0x37, 0x68, 0x3b, 172 | 0xcc, 0x9e, 0x80, 0xef, 0x65, 0xf6, 0x0a, 0xe1, 0x36, 0xc2, 0x71, 0x61, 173 | 0x0c, 0x94, 0xcf, 0x13, 0x92, 0x56, 0x26, 0xa3, 0xae, 0xb6, 0x8e, 0x04, 174 | 0xb8, 0x2b, 0xe9, 0x74, 0x28, 0xf7, 0x28, 0x34, 0x81, 0x91, 0xea, 0x1c, 175 | 0x88, 0x58, 0xc1, 0xc5, 0x2b, 0x24, 0x62, 0x0c, 0x56, 0xae, 0x5e, 0x27, 176 | 0x2b, 0xc3, 0x9b, 0x1f, 0x53, 0xb3, 0x09, 0xbb, 0x69, 0xbb, 0x3b, 0x72, 177 | 0xfc, 0x14, 0x39, 0x12, 0xeb, 0xe8, 0x44, 0x97, 0x0f, 0x41, 0x59, 0xa4, 178 | 0x3e, 0x6e, 0x7e, 0x72, 0x42, 0x64, 0x4b, 0x82, 0xff, 0xe6, 0x7b, 0x6b, 179 | 0xc8, 0x2a, 0x27, 0xaf, 0xdb, 0x28, 0x56, 0x99, 0xef, 0xcd, 0xd6, 0xfa, 180 | 0xb3, 0x5d, 0xd9, 0x98, 0x38, 0x65, 0x96, 0x18, 0x27, 0x55, 0x8f, 0xc4, 181 | 0xda, 0x87, 0x37, 0xaf, 0x12, 0xaf, 0xe2, 0xfa, 0x94, 0x2d, 0x14, 0x0d, 182 | 0x4d, 0xe6, 0xd3, 0x60, 0xf2, 0xfd, 0x07, 0x0f, 0x1f, 0xc1, 0xd0, 0x11, 183 | 0xd1, 0x6d, 0x2e, 0xef, 0xff, 0xdd, 0xcb, 0xdc, 0x0a, 0xcd, 0xc6, 0x67, 184 | 0x43, 0xea, 0x56, 0xdc, 0x35, 0x98, 0x4f, 0x87, 0xd9, 0x2a, 0xef, 0xa7, 185 | 0xcd, 0x12, 0x9f, 0x1f, 0xf0, 0xa1, 0x29, 0x0b, 0xd8, 0xd5, 0xf9, 0x39, 186 | 0x5d, 0x00, 0xdb, 0x55, 0x0b, 0x08, 0x19, 0x8e, 0xa3, 0x54, 0x08, 0xb9, 187 | 0x4d, 0xf1, 0xe4, 0xb9, 0x82, 0x67, 0xef, 0x3b, 0x88, 0x80, 0xd0, 0x11, 188 | 0x96, 0x13, 0xdd, 0xc7, 0x57, 0xcd, 0x7a, 0xb2, 0xec, 0xe9, 0x37, 0x58, 189 | 0x3e, 0x1f, 0xe0, 0x22, 0xc9, 0x02, 0x72, 0xb8, 0x97, 0x94, 0x94, 0x21, 190 | 0x66, 0xfa, 0x6c, 0x49, 0x9d, 0xa7, 0x3d, 0x0d, 0x76, 0x44, 0x80, 0x7f, 191 | 0xd9, 0xf3, 0x20, 0x6b, 0x44, 0xb8, 0xd2, 0x2a, 0xc6, 0x50, 0x7b, 0xcb, 192 | 0x3d, 0x72, 0x54, 0x6a, 0x03, 0xf7, 0xf2, 0xca, 0xca, 0x4a, 0x24, 0xfd, 193 | 0xf6, 0x13, 0xf8, 0x53, 0x58, 0xf3, 0xf1, 0x19, 0xa7, 0x86, 0xe4, 0xb8, 194 | 0x77, 0x90, 0x38, 0xc3, 0xf9, 0x89, 0x1f, 0xe0, 0xe2, 0xa5, 0xcb, 0x72, 195 | 0xf0, 0x69, 0x24, 0xef, 0x50, 0x70, 0xbe, 0x10, 0xf3, 0x12, 0x16, 0x8a, 196 | 0x28, 0x6c, 0x9c, 0xec, 0x9d, 0x8f, 0xbd, 0x02, 0x54, 0x3a, 0xf2, 0x40, 197 | 0x73, 0x9e, 0x87, 0xc2, 0x8d, 0xdc, 0xdb, 0xf4, 0x59, 0x6f, 0x23, 0x6b, 198 | 0xe7, 0x6e, 0xa9, 0xda, 0xdc, 0x26, 0xaf, 0xfd, 0xf9, 0x3a, 0x79, 0x86, 199 | 0x4f, 0x31, 0x64, 0x58, 0x94, 0xe4, 0xf8, 0xb2, 0xa4, 0xd5, 0x28, 0x38, 200 | 0x57, 0x24, 0x39, 0xce, 0xc7, 0xdf, 0xc7, 0x4f, 0x7c, 0x45, 0xbe, 0x60, 201 | 0x89, 0x1c, 0xb7, 0x73, 0x54, 0xd8, 0xfb, 0x61, 0x88, 0xa3, 0x02, 0x8c, 202 | 0x73, 0xf4, 0xa1, 0x12, 0xda, 0x16, 0x21, 0xb8, 0xe0, 0x8d, 0xa2, 0xa2, 203 | 0x98, 0x4d, 0xa6, 0x88, 0x8d, 0x4e, 0x8b, 0xa9, 0x45, 0x0c, 0x14, 0x9b, 204 | 0x1f, 0xf6, 0x05, 0xdc, 0x0a, 0x4f, 0x9d, 0xc9, 0x47, 0xec, 0xec, 0x79, 205 | 0xd2, 0x0d, 0x94, 0x22, 0x6e, 0xc1, 0x8e, 0xa7, 0x16, 0xc0, 0x22, 0xc2, 206 | 0x2e, 0x85, 0x26, 0x20, 0x90, 0x33, 0x7e, 0xea, 0xf3, 0x6c, 0x74, 0x72, 207 | 0x8f, 0x1c, 0xa7, 0x8a, 0x7e, 0x5f, 0x52, 0xa3, 0x8c, 0x44, 0xe0, 0xf0, 208 | 0xe7, 0xb4, 0x70, 0x34, 0xd4, 0x3b, 0x40, 0x8d, 0x5d, 0xe4, 0xdb, 0x89, 209 | 0x90, 0xa0, 0xf0, 0x84, 0xcc, 0x2d, 0x90, 0xfa, 0xfa, 0x5b, 0xf3, 0x12, 210 | 0xb1, 0xe4, 0xa3, 0x24, 0x59, 0x6d, 0xf3, 0x8a, 0x2b, 0xfb, 0x1c, 0xc2, 211 | 0x16, 0x87, 0xc8, 0xdb, 0x08, 0x91, 0xa8, 0xb4, 0x10, 0x7c, 0x06, 0xc0, 212 | 0x76, 0x57, 0xc1, 0x50, 0xb7, 0x62, 0x2b, 0xa1, 0xaf, 0x62, 0xe4, 0x6d, 213 | 0x84, 0xc8, 0x54, 0x5a, 0x08, 0x05, 0x51, 0x44, 0xe8, 0xe1, 0x14, 0xe2, 214 | 0x36, 0x22, 0xf4, 0xf2, 0x31, 0x7f, 0x91, 0x59, 0x6d, 0xc2, 0x56, 0xf0, 215 | 0x97, 0x34, 0x47, 0x38, 0x9d, 0x78, 0x07, 0x42, 0x8c, 0x21, 0xfc, 0x55, 216 | 0x65, 0xf2, 0x49, 0xdd, 0x4e, 0xdc, 0x46, 0x04, 0xfe, 0x72, 0x34, 0x77, 217 | 0x8b, 0xbf, 0xa9, 0x10, 0xee, 0x7e, 0xaa, 0x92, 0x6f, 0x3f, 0x68, 0x32, 218 | 0x3f, 0x22, 0xe4, 0x74, 0x03, 0xf1, 0xcb, 0x04, 0x8d, 0xda, 0x7c, 0x3b, 219 | 0x1d, 0x34, 0x39, 0x7f, 0x42, 0xb9, 0x13, 0x88, 0x37, 0x11, 0x26, 0xab, 220 | 0xcd, 0xaf, 0xcb, 0x83, 0x8b, 0x92, 0x8f, 0xf9, 0x3b, 0xbc, 0x8e, 0x12, 221 | 0xd7, 0x11, 0xe2, 0xd5, 0xe6, 0x63, 0xd7, 0xa0, 0x89, 0x7f, 0x9f, 0x90, 222 | 0xe5, 0x00, 0xf9, 0x3f, 0x11, 0x5c, 0xd4, 0xe6, 0xe1, 0xf0, 0x20, 0x12, 223 | 0xae, 0x4f, 0x29, 0x44, 0x05, 0x21, 0x5a, 0xed, 0x79, 0x2b, 0x3e, 0x88, 224 | 0x54, 0x5f, 0x42, 0xcd, 0x13, 0x88, 0x3f, 0x7a, 0x21, 0x89, 0xdb, 0x0e, 225 | 0x22, 0x39, 0xcb, 0x12, 0xde, 0x56, 0xe2, 0x2d, 0x84, 0x64, 0xb5, 0xe7, 226 | 0xd5, 0xad, 0x83, 0x08, 0xf7, 0x24, 0xf8, 0x5a, 0x30, 0x40, 0xed, 0xf9, 227 | 0xbc, 0x1c, 0xdf, 0xd5, 0xf1, 0x1f, 0x52, 0x49, 0x76, 0x26, 0xc5, 0xf0, 228 | 0xec, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 229 | 0x60, 0x82, 230 | } 231 | 232 | -------------------------------------------------------------------------------- /icon/iconwin.go: -------------------------------------------------------------------------------- 1 | //+build windows 2 | 3 | // File generated by 2goarray v0.1.0 (http://github.com/cratonica/2goarray) 4 | 5 | package icon 6 | 7 | var Data []byte = []byte{ 8 | 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 9 | 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 10 | 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 11 | 0x01, 0x73, 0x52, 0x47, 0x42, 0x01, 0xd9, 0xc9, 0x2c, 0x7f, 0x00, 0x00, 12 | 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 13 | 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x0a, 0x03, 0x49, 14 | 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x5a, 0x69, 0x54, 0x94, 0xd7, 0x19, 15 | 0x4e, 0x9b, 0x1f, 0xed, 0x9f, 0x9e, 0x6a, 0xdc, 0xd9, 0x17, 0x07, 0x90, 16 | 0x4d, 0x50, 0x70, 0x5f, 0x90, 0x88, 0x6b, 0xd0, 0x2a, 0x4d, 0x8c, 0x12, 17 | 0x8b, 0x24, 0x8d, 0xb1, 0x46, 0x9b, 0xb6, 0x46, 0x3c, 0x5a, 0xc5, 0x68, 18 | 0x45, 0x54, 0x2c, 0x28, 0x41, 0x63, 0x14, 0x71, 0xe5, 0x18, 0xb5, 0x9a, 19 | 0x50, 0x95, 0x88, 0x02, 0x2e, 0x2c, 0x5a, 0xab, 0x12, 0x94, 0x55, 0x98, 20 | 0x45, 0x19, 0x06, 0xd4, 0x9c, 0x9e, 0xfe, 0x68, 0x4f, 0x6d, 0x4f, 0xcf, 21 | 0x79, 0xfa, 0xbe, 0xef, 0xcc, 0x50, 0x3a, 0x82, 0xc5, 0x99, 0x6f, 0xf8, 22 | 0xd4, 0x78, 0xcf, 0x79, 0x0e, 0xcb, 0xcc, 0xf7, 0x7d, 0xf7, 0x79, 0xee, 23 | 0xbb, 0x3c, 0xf7, 0xce, 0xbc, 0xf2, 0xca, 0xcb, 0xf1, 0x72, 0xa8, 0x32, 24 | 0x7c, 0x02, 0x86, 0xfc, 0x80, 0xe0, 0x49, 0xf0, 0x26, 0xfc, 0x58, 0xed, 25 | 0xf9, 0x74, 0xeb, 0x20, 0xc2, 0x7e, 0x84, 0x2f, 0x08, 0xb0, 0xe0, 0x2a, 26 | 0xe1, 0x1d, 0xb5, 0xe7, 0xe5, 0xf4, 0x41, 0x24, 0xbf, 0x47, 0xc8, 0x6d, 27 | 0x47, 0xdc, 0x16, 0x7a, 0x82, 0x87, 0xda, 0xf3, 0x54, 0x7c, 0x10, 0xa9, 28 | 0x1f, 0x12, 0x3e, 0x7e, 0x02, 0x71, 0x5b, 0xec, 0x23, 0x04, 0xa8, 0x3d, 29 | 0x6f, 0x45, 0x06, 0x11, 0x59, 0xf6, 0x14, 0xc4, 0x6d, 0x71, 0x8c, 0x6b, 30 | 0x85, 0xda, 0x1c, 0xec, 0x1a, 0x34, 0xf1, 0x81, 0x84, 0xa3, 0x0e, 0x90, 31 | 0xb7, 0xe2, 0x1a, 0x21, 0x4a, 0x6d, 0x3e, 0x5d, 0x1e, 0x34, 0xd9, 0x1e, 32 | 0x84, 0xe3, 0x0a, 0x10, 0xb7, 0xc5, 0x0d, 0xc2, 0x60, 0xb5, 0xf9, 0x75, 33 | 0x3a, 0x2c, 0x05, 0x8e, 0xc3, 0xfd, 0xdf, 0x4e, 0x20, 0xdf, 0x1e, 0x47, 34 | 0x08, 0x3d, 0xd5, 0xe6, 0xdb, 0x36, 0x2c, 0xc4, 0xd7, 0x10, 0xee, 0x3a, 35 | 0x99, 0x78, 0x7b, 0x3c, 0x22, 0x1c, 0x20, 0xf4, 0x51, 0x9b, 0x7c, 0x3f, 36 | 0x82, 0xb6, 0x1b, 0x89, 0xdb, 0xe2, 0xef, 0x84, 0x99, 0x6a, 0x91, 0xdf, 37 | 0xa2, 0x22, 0x71, 0x5b, 0x94, 0x10, 0x5c, 0xbb, 0x8b, 0xf8, 0xaf, 0x9f, 38 | 0x01, 0xc2, 0x9d, 0x61, 0xaf, 0x33, 0x89, 0x47, 0x11, 0xfe, 0xa1, 0xe4, 39 | 0x84, 0x3d, 0x35, 0x83, 0xe1, 0x31, 0x30, 0xd4, 0x19, 0x42, 0x2c, 0x26, 40 | 0xbc, 0xaa, 0x14, 0xf1, 0xf1, 0x84, 0xbf, 0x28, 0x39, 0x41, 0x2f, 0xbf, 41 | 0x30, 0xf4, 0xf7, 0x18, 0x84, 0xa8, 0x98, 0x19, 0x88, 0x9b, 0xb3, 0x00, 42 | 0xfd, 0x3d, 0x03, 0x9c, 0x25, 0xc4, 0x22, 0x47, 0xc9, 0xaf, 0x54, 0x9e, 43 | 0x78, 0x00, 0xc2, 0x87, 0x47, 0x61, 0xd3, 0x96, 0x0c, 0xb4, 0xb6, 0x98, 44 | 0xf0, 0xe0, 0xc1, 0x7d, 0x1c, 0xfb, 0xc3, 0x49, 0x4c, 0x9a, 0x16, 0x27, 45 | 0x42, 0x70, 0x54, 0x28, 0x2c, 0xc2, 0x79, 0x7b, 0xc9, 0x87, 0x29, 0x19, 46 | 0xea, 0xfd, 0x3d, 0x07, 0x21, 0x74, 0xe8, 0x58, 0x6c, 0xdc, 0x9c, 0x8e, 47 | 0xda, 0xda, 0x5a, 0x34, 0x1b, 0x8d, 0x68, 0x6c, 0x6c, 0x44, 0x43, 0x43, 48 | 0x83, 0xfc, 0x6e, 0xb8, 0x6b, 0xc0, 0xbe, 0x83, 0xb9, 0x18, 0x13, 0x3d, 49 | 0x4d, 0xa2, 0xc3, 0x9d, 0x22, 0xc2, 0xdb, 0x5f, 0x31, 0x11, 0xd6, 0xda, 50 | 0x23, 0x40, 0xa9, 0x12, 0xc4, 0x07, 0x78, 0x06, 0x0a, 0xa9, 0x35, 0x9f, 51 | 0xa4, 0xe0, 0xf6, 0xed, 0x2a, 0x3c, 0xa4, 0x15, 0xaf, 0xae, 0xa9, 0x41, 52 | 0x76, 0xce, 0x01, 0x94, 0x95, 0x97, 0xa3, 0xaa, 0xba, 0x1a, 0x3b, 0x77, 53 | 0xed, 0x41, 0xf9, 0x95, 0xab, 0x78, 0xf8, 0xf0, 0x01, 0x74, 0x7a, 0x1d, 54 | 0x76, 0xed, 0xde, 0x8b, 0x99, 0x71, 0xf3, 0xe0, 0xea, 0x13, 0x2c, 0x42, 55 | 0x28, 0x21, 0x82, 0x3d, 0x02, 0xfc, 0xd3, 0xde, 0x87, 0x79, 0xfb, 0x87, 56 | 0xc3, 0xc5, 0x2b, 0x08, 0xc3, 0x46, 0xc7, 0x60, 0x5b, 0xd6, 0x67, 0xa8, 57 | 0xaf, 0xab, 0x97, 0x70, 0x6f, 0xb8, 0x73, 0x07, 0x19, 0xdb, 0x77, 0x4a, 58 | 0x0a, 0xf4, 0x75, 0x0f, 0xc0, 0xb9, 0x73, 0x45, 0xa8, 0xa9, 0xa9, 0x46, 59 | 0x68, 0xc4, 0x38, 0xf8, 0x0c, 0x1a, 0x8a, 0x65, 0x2b, 0x56, 0xe3, 0x66, 60 | 0x45, 0x05, 0xee, 0xb7, 0xb6, 0xc0, 0xa0, 0x37, 0xe0, 0xe8, 0xf1, 0x13, 61 | 0x98, 0x1a, 0xfb, 0xa6, 0xdc, 0xcb, 0x53, 0x13, 0xd6, 0xed, 0x02, 0x3c, 62 | 0xb2, 0xe7, 0x41, 0xae, 0xde, 0xc1, 0x12, 0xee, 0x69, 0x5b, 0xb7, 0x0b, 63 | 0x39, 0x53, 0x73, 0x33, 0x5a, 0x88, 0x7c, 0xf1, 0x85, 0x4b, 0x88, 0x1c, 64 | 0x3d, 0x51, 0xc2, 0x9b, 0x23, 0xc3, 0xdd, 0x37, 0x14, 0x85, 0x85, 0x17, 65 | 0x50, 0x53, 0x5b, 0x43, 0x42, 0x4d, 0xa4, 0x22, 0x48, 0xd1, 0xe2, 0x15, 66 | 0x08, 0xbf, 0xe0, 0x61, 0x14, 0x11, 0xd9, 0x92, 0x12, 0x7c, 0xad, 0x56, 67 | 0xa7, 0xc5, 0xc9, 0x2f, 0xff, 0x88, 0xa0, 0xf0, 0xd1, 0x72, 0x2d, 0x8b, 68 | 0xdb, 0x5d, 0x02, 0x74, 0xb9, 0xe5, 0xf1, 0xa4, 0xdc, 0x28, 0x5c, 0x7b, 69 | 0xbb, 0x68, 0xf0, 0x8b, 0xa5, 0xcb, 0x50, 0x5b, 0x57, 0x87, 0x16, 0x93, 70 | 0x49, 0x56, 0xb2, 0xa0, 0xa0, 0x10, 0x93, 0xa7, 0xff, 0x54, 0x56, 0xdc, 71 | 0x5a, 0xe0, 0x38, 0xb7, 0x6d, 0x05, 0xe0, 0x02, 0xc9, 0xaf, 0x79, 0xf9, 72 | 0x85, 0xd3, 0x7b, 0xfd, 0x11, 0x36, 0x6c, 0x3c, 0xf6, 0xee, 0x3f, 0x04, 73 | 0x13, 0xdd, 0x87, 0x85, 0x68, 0x6e, 0x36, 0x22, 0x75, 0x4b, 0x3a, 0x3c, 74 | 0x7c, 0xcd, 0x69, 0x65, 0x7d, 0xbf, 0xea, 0x02, 0xb8, 0x7a, 0x07, 0xc1, 75 | 0x9b, 0x26, 0xbd, 0xe0, 0xfd, 0x0f, 0x29, 0xc7, 0x6f, 0xe3, 0xc1, 0xfd, 76 | 0x56, 0xc9, 0xf3, 0x53, 0x67, 0xbe, 0xc6, 0x8c, 0xd9, 0xf1, 0xe8, 0xe3, 77 | 0xea, 0xf7, 0x58, 0x8b, 0x7b, 0x92, 0x00, 0x56, 0xf0, 0xdf, 0x7d, 0xdd, 78 | 0xfc, 0x24, 0x8d, 0x38, 0x22, 0x9a, 0x8d, 0xcd, 0x24, 0x68, 0x2b, 0x9a, 79 | 0xee, 0xdd, 0x43, 0xf2, 0xba, 0x14, 0x84, 0x93, 0x40, 0xfd, 0x48, 0xd4, 80 | 0xae, 0x46, 0x84, 0x53, 0x04, 0x70, 0xf3, 0x0d, 0xc1, 0xe2, 0x5f, 0x2e, 81 | 0x93, 0x6a, 0xce, 0xab, 0xfd, 0xed, 0xb7, 0x0f, 0x71, 0xf2, 0xab, 0x3c, 82 | 0x8c, 0x18, 0x13, 0x23, 0xd1, 0xd0, 0x59, 0x6f, 0xe7, 0xeb, 0x7a, 0x0f, 83 | 0xd0, 0x50, 0x0d, 0x28, 0x94, 0x82, 0x18, 0x1c, 0x3e, 0x86, 0x56, 0xb5, 84 | 0xe3, 0xf0, 0xe6, 0xa8, 0x61, 0xa2, 0x3e, 0x83, 0x86, 0x60, 0xdb, 0xa7, 85 | 0x3b, 0xd1, 0x4a, 0x22, 0xb4, 0xd2, 0xb3, 0x9a, 0x4d, 0xcd, 0x48, 0xcf, 86 | 0xc8, 0x82, 0x77, 0x40, 0x78, 0x97, 0x44, 0x50, 0x5c, 0x00, 0x7e, 0xa8, 87 | 0x6f, 0xc0, 0x50, 0xa9, 0xde, 0x7a, 0x9d, 0x0e, 0xf9, 0x67, 0x0b, 0x30, 88 | 0xee, 0xf5, 0x37, 0x84, 0x78, 0x67, 0xbd, 0x9c, 0x57, 0xb5, 0x17, 0xbd, 89 | 0x3e, 0x77, 0xfe, 0xfb, 0x38, 0x79, 0x32, 0x0f, 0x06, 0x83, 0x5e, 0x50, 90 | 0x52, 0x5a, 0x86, 0x15, 0xab, 0xd6, 0xa2, 0x1f, 0xe5, 0x78, 0x67, 0xa2, 91 | 0x71, 0x6a, 0xf4, 0x23, 0x0f, 0xe1, 0x1f, 0x32, 0x0c, 0x9f, 0xef, 0xc9, 92 | 0x11, 0xe1, 0xf4, 0x3a, 0x3d, 0x3d, 0x73, 0x7a, 0x97, 0xbc, 0x83, 0x53, 93 | 0x04, 0xe0, 0x55, 0xb9, 0x74, 0xb9, 0x14, 0x37, 0x6e, 0xde, 0x44, 0xcc, 94 | 0xd4, 0xd9, 0x92, 0x0e, 0x1d, 0xbd, 0x57, 0x7c, 0x00, 0x91, 0x1b, 0x1c, 95 | 0x31, 0x16, 0x79, 0x79, 0xa7, 0xc5, 0xfc, 0x70, 0x4e, 0x57, 0x53, 0x0b, 96 | 0xbc, 0x7e, 0xe3, 0xa6, 0xf8, 0x00, 0x2e, 0x94, 0xb7, 0x6e, 0xdd, 0x42, 97 | 0xf4, 0x94, 0x99, 0xe8, 0x4f, 0x2b, 0xee, 0x4e, 0x51, 0xd2, 0xd1, 0xca, 98 | 0xb2, 0x88, 0x3d, 0xfa, 0x7a, 0xe3, 0xd4, 0xe9, 0x7c, 0x34, 0x6a, 0x1b, 99 | 0x31, 0x7a, 0xc2, 0x54, 0xf5, 0x05, 0xa8, 0xa8, 0xf8, 0x06, 0xb1, 0xb3, 100 | 0xe6, 0x3e, 0xb6, 0x7a, 0xbc, 0x6a, 0xdc, 0xc2, 0x26, 0x4c, 0x8a, 0xc5, 101 | 0xef, 0x36, 0xa6, 0x51, 0xbe, 0xd7, 0x4a, 0xaa, 0x30, 0xd1, 0x3d, 0x7b, 102 | 0xf7, 0x63, 0x74, 0xd4, 0x54, 0x84, 0x90, 0x39, 0x5a, 0xb7, 0x61, 0x33, 103 | 0x4a, 0x4b, 0xcb, 0x45, 0x04, 0x83, 0xc1, 0x80, 0x9c, 0xfd, 0x87, 0x11, 104 | 0x37, 0x77, 0x01, 0xdc, 0x7d, 0x42, 0xe0, 0xd1, 0x01, 0x39, 0x2e, 0x82, 105 | 0xf9, 0xf9, 0x05, 0xcf, 0xb6, 0x00, 0xfc, 0x7a, 0x50, 0xd8, 0x48, 0xec, 106 | 0xf8, 0x3c, 0x9b, 0xfa, 0x7f, 0x03, 0x8c, 0x4d, 0x4d, 0xa8, 0x24, 0xe2, 107 | 0xa9, 0x64, 0x81, 0xb9, 0xef, 0xbb, 0xf9, 0x04, 0x09, 0x39, 0x5e, 0x51, 108 | 0x16, 0xc9, 0x97, 0x7c, 0xc0, 0x92, 0x8f, 0x96, 0xe3, 0x0a, 0xa5, 0x54, 109 | 0x53, 0xd3, 0x3d, 0xdc, 0xa5, 0x36, 0xf8, 0x65, 0xde, 0x29, 0x8c, 0x8d, 110 | 0x7e, 0x3c, 0xc4, 0x9f, 0x0b, 0x01, 0xb8, 0xca, 0xc7, 0x27, 0x2c, 0xc4, 111 | 0x7d, 0xea, 0x0a, 0x6c, 0x77, 0x79, 0x65, 0x53, 0x37, 0xff, 0x9e, 0x7a, 112 | 0x7d, 0x90, 0x78, 0x05, 0x5b, 0x9b, 0xeb, 0x49, 0x42, 0xbc, 0x36, 0x60, 113 | 0x20, 0xde, 0xf8, 0xc9, 0x5c, 0x4a, 0x8d, 0x1a, 0xb3, 0x45, 0xa6, 0x34, 114 | 0xd9, 0x9e, 0xb5, 0x4b, 0xfc, 0xc1, 0x73, 0x28, 0x40, 0x08, 0xde, 0x49, 115 | 0x5c, 0x04, 0xa3, 0xb1, 0x49, 0x0a, 0x1d, 0xaf, 0xaa, 0x91, 0x72, 0xfd, 116 | 0xea, 0xd5, 0x6b, 0x18, 0x3f, 0x31, 0x96, 0x0a, 0x9a, 0xbf, 0xbc, 0xdf, 117 | 0xba, 0x33, 0xe4, 0x28, 0xe0, 0xbd, 0x80, 0x5e, 0xaf, 0x97, 0xd5, 0x67, 118 | 0xb0, 0x68, 0x99, 0x2c, 0x80, 0xe7, 0xf3, 0x2a, 0xc0, 0x82, 0x45, 0xe2, 119 | 0x0b, 0xd2, 0x33, 0x77, 0x20, 0xf1, 0xe7, 0x1f, 0xa2, 0xae, 0xbe, 0x5e, 120 | 0x0c, 0x12, 0xb7, 0xb1, 0x33, 0x5f, 0x17, 0x20, 0x7a, 0xd2, 0x4c, 0x71, 121 | 0x7e, 0xbc, 0xca, 0x77, 0xc8, 0x26, 0xb7, 0x50, 0x6b, 0xe3, 0x02, 0xb9, 122 | 0x3b, 0x7b, 0x3f, 0x56, 0x27, 0x6f, 0x90, 0x9a, 0xf0, 0xdc, 0x0b, 0xc0, 123 | 0x1b, 0x9c, 0x94, 0x4d, 0x5b, 0xd1, 0x8b, 0xc2, 0xbb, 0x9f, 0x9b, 0x3f, 124 | 0x3e, 0x5e, 0xb1, 0x06, 0x3a, 0x6a, 0x9b, 0x5c, 0x0c, 0x8d, 0x46, 0xb3, 125 | 0xc3, 0x6b, 0x6d, 0x69, 0x11, 0xf3, 0x94, 0x73, 0xf0, 0x30, 0xc2, 0x22, 126 | 0xc7, 0xa1, 0x67, 0x7f, 0x5f, 0xba, 0xdf, 0x3c, 0xb9, 0xf6, 0x85, 0x10, 127 | 0x60, 0x23, 0xe5, 0x3e, 0x87, 0x38, 0xe7, 0x3d, 0xff, 0xe4, 0x5d, 0x5e, 128 | 0xc2, 0x7b, 0x8b, 0x65, 0x77, 0xd8, 0xd8, 0xa8, 0x45, 0xca, 0xc6, 0xad, 129 | 0x44, 0x7c, 0x3c, 0x39, 0x3f, 0x7f, 0x49, 0x09, 0xbe, 0xcf, 0xac, 0x37, 130 | 0xe7, 0xbf, 0x78, 0x02, 0x58, 0x5f, 0xf3, 0xe2, 0xdd, 0xa2, 0x67, 0x10, 131 | 0x0a, 0x8b, 0x8a, 0x71, 0xbb, 0xaa, 0x4a, 0xce, 0x09, 0xda, 0x6f, 0x7b, 132 | 0x5f, 0x08, 0x01, 0xb8, 0xd2, 0xb3, 0xe3, 0x63, 0x12, 0x1b, 0x52, 0xd3, 133 | 0xc4, 0xc5, 0xfd, 0xf7, 0x5a, 0x22, 0xa9, 0x09, 0x45, 0x51, 0xd1, 0x05, 134 | 0x31, 0x43, 0x91, 0xa3, 0x5e, 0xff, 0x9f, 0xbd, 0x80, 0x1b, 0xf5, 0x7f, 135 | 0xde, 0x47, 0xf0, 0xb5, 0xe9, 0xdb, 0xb2, 0xc4, 0x5d, 0xb6, 0x37, 0x45, 136 | 0xcf, 0xb4, 0x00, 0xd6, 0xaa, 0xce, 0x96, 0x75, 0x3d, 0x19, 0x1c, 0x13, 137 | 0x15, 0xb6, 0x9c, 0x7d, 0x87, 0xcc, 0x9b, 0x17, 0x12, 0x81, 0x5f, 0x6f, 138 | 0xdb, 0x0c, 0x15, 0x5f, 0x10, 0x4b, 0x1b, 0x39, 0x6a, 0xa2, 0xe5, 0xff, 139 | 0x66, 0xe3, 0xa4, 0x09, 0x8a, 0xc4, 0x6f, 0x96, 0xaf, 0x92, 0xfa, 0x70, 140 | 0xf1, 0x72, 0x09, 0xde, 0x8e, 0x7f, 0xb7, 0x4d, 0x54, 0x7e, 0xcf, 0x33, 141 | 0x27, 0x00, 0x1f, 0x62, 0x4c, 0x9b, 0x31, 0x47, 0x0a, 0xdd, 0x90, 0x11, 142 | 0x51, 0xd8, 0x94, 0x96, 0x21, 0xf6, 0xd8, 0x44, 0x04, 0xb8, 0xfd, 0x35, 143 | 0x35, 0x19, 0x51, 0x47, 0x5b, 0xe4, 0xcd, 0x69, 0xdb, 0xc8, 0x0e, 0x8f, 144 | 0x13, 0x21, 0x5c, 0xbc, 0x03, 0x71, 0xbe, 0x90, 0x0f, 0x44, 0x6a, 0x10, 145 | 0x31, 0x32, 0x5a, 0xce, 0x10, 0x7c, 0x03, 0x87, 0x62, 0xe9, 0xaf, 0x92, 146 | 0x70, 0xed, 0xda, 0x75, 0xdc, 0xa3, 0xeb, 0x0c, 0xd4, 0x12, 0x79, 0xf7, 147 | 0xc7, 0x05, 0xb3, 0xa4, 0xa4, 0x14, 0x89, 0x0b, 0x97, 0xc0, 0x4b, 0x63, 148 | 0xf6, 0x0b, 0x67, 0xce, 0x9c, 0x7d, 0x56, 0x04, 0x28, 0x91, 0x08, 0x98, 149 | 0x4f, 0x3d, 0x3f, 0x2d, 0x3d, 0x93, 0x56, 0xb4, 0x56, 0xda, 0x9c, 0x4e, 150 | 0xab, 0xc5, 0xa1, 0xdc, 0x23, 0x88, 0x9b, 0xf3, 0x33, 0xec, 0xdd, 0x77, 151 | 0x40, 0xcc, 0x0d, 0xff, 0xbf, 0x8a, 0x0a, 0xdf, 0xda, 0xf5, 0xa9, 0x18, 152 | 0x39, 0x76, 0x12, 0xce, 0x16, 0x9c, 0x47, 0x15, 0xfd, 0x7f, 0xd2, 0xb4, 153 | 0xd9, 0x78, 0x77, 0xe1, 0x52, 0x94, 0x97, 0x5f, 0x91, 0xd6, 0xa7, 0x27, 154 | 0xdf, 0x70, 0x9a, 0xb6, 0xd3, 0x5c, 0x07, 0xe2, 0x13, 0x3e, 0xa0, 0x96, 155 | 0x79, 0x56, 0x84, 0xe0, 0x68, 0x2a, 0xbe, 0x78, 0x99, 0xee, 0x99, 0x40, 156 | 0xe2, 0x15, 0xa3, 0xa1, 0xb1, 0x41, 0x7d, 0x01, 0x2e, 0xd2, 0x84, 0x78, 157 | 0x3b, 0x7c, 0xe7, 0x4e, 0xbd, 0xd8, 0x5d, 0xce, 0xdb, 0x2f, 0x8e, 0x9d, 158 | 0xc0, 0x70, 0x22, 0xc8, 0x76, 0x97, 0xf3, 0x99, 0xab, 0x3e, 0xdb, 0x5f, 159 | 0xdb, 0x8d, 0x10, 0x9f, 0x07, 0xd6, 0x93, 0x37, 0xf8, 0xa6, 0xf2, 0x96, 160 | 0x18, 0xa6, 0xb6, 0x0d, 0xd1, 0xe4, 0x99, 0x72, 0x04, 0xc6, 0xd7, 0xf2, 161 | 0x41, 0x8b, 0x2b, 0xdd, 0x27, 0x36, 0x6e, 0x2e, 0x3d, 0xa3, 0x41, 0x0e, 162 | 0x47, 0xd8, 0x24, 0x69, 0x69, 0xf5, 0xf9, 0x5a, 0x55, 0x05, 0xe0, 0x90, 163 | 0x2d, 0x2b, 0x2b, 0xa7, 0xbe, 0xae, 0xa5, 0x09, 0x69, 0x65, 0x55, 0x26, 164 | 0xd0, 0xe4, 0x5f, 0xa3, 0x3e, 0x6e, 0x3b, 0x29, 0xeb, 0x56, 0x78, 0xce, 165 | 0xfc, 0xf7, 0x68, 0x07, 0x78, 0x43, 0x56, 0x53, 0xaf, 0xd7, 0xc9, 0x75, 166 | 0xfc, 0xbb, 0x8e, 0xc2, 0x7d, 0xf9, 0xaa, 0xe4, 0xb6, 0x2d, 0x71, 0xfb, 167 | 0xa2, 0xc7, 0x35, 0x83, 0x85, 0xe8, 0xe5, 0x32, 0x10, 0xc9, 0xeb, 0x52, 168 | 0x45, 0x00, 0xb6, 0xca, 0x5a, 0x6a, 0xa1, 0x63, 0xd5, 0xda, 0x0e, 0x9b, 169 | 0xab, 0x75, 0xb0, 0x84, 0xb3, 0xd1, 0x92, 0xeb, 0xbc, 0x3f, 0xcf, 0xc8, 170 | 0xdc, 0x09, 0x4d, 0x70, 0x84, 0x1c, 0x62, 0x74, 0x34, 0x31, 0x6e, 0x8f, 171 | 0xbd, 0x5d, 0x35, 0xb2, 0x7d, 0xce, 0x3f, 0x7b, 0x0e, 0x37, 0x68, 0x3b, 172 | 0xcc, 0x9e, 0x80, 0xef, 0x65, 0xf6, 0x0a, 0xe1, 0x36, 0xc2, 0x71, 0x61, 173 | 0x0c, 0x94, 0xcf, 0x13, 0x92, 0x56, 0x26, 0xa3, 0xae, 0xb6, 0x8e, 0x04, 174 | 0xb8, 0x2b, 0xe9, 0x74, 0x28, 0xf7, 0x28, 0x34, 0x81, 0x91, 0xea, 0x1c, 175 | 0x88, 0x58, 0xc1, 0xc5, 0x2b, 0x24, 0x62, 0x0c, 0x56, 0xae, 0x5e, 0x27, 176 | 0x2b, 0xc3, 0x9b, 0x1f, 0x53, 0xb3, 0x09, 0xbb, 0x69, 0xbb, 0x3b, 0x72, 177 | 0xfc, 0x14, 0x39, 0x12, 0xeb, 0xe8, 0x44, 0x97, 0x0f, 0x41, 0x59, 0xa4, 178 | 0x3e, 0x6e, 0x7e, 0x72, 0x42, 0x64, 0x4b, 0x82, 0xff, 0xe6, 0x7b, 0x6b, 179 | 0xc8, 0x2a, 0x27, 0xaf, 0xdb, 0x28, 0x56, 0x99, 0xef, 0xcd, 0xd6, 0xfa, 180 | 0xb3, 0x5d, 0xd9, 0x98, 0x38, 0x65, 0x96, 0x18, 0x27, 0x55, 0x8f, 0xc4, 181 | 0xda, 0x87, 0x37, 0xaf, 0x12, 0xaf, 0xe2, 0xfa, 0x94, 0x2d, 0x14, 0x0d, 182 | 0x4d, 0xe6, 0xd3, 0x60, 0xf2, 0xfd, 0x07, 0x0f, 0x1f, 0xc1, 0xd0, 0x11, 183 | 0xd1, 0x6d, 0x2e, 0xef, 0xff, 0xdd, 0xcb, 0xdc, 0x0a, 0xcd, 0xc6, 0x67, 184 | 0x43, 0xea, 0x56, 0xdc, 0x35, 0x98, 0x4f, 0x87, 0xd9, 0x2a, 0xef, 0xa7, 185 | 0xcd, 0x12, 0x9f, 0x1f, 0xf0, 0xa1, 0x29, 0x0b, 0xd8, 0xd5, 0xf9, 0x39, 186 | 0x5d, 0x00, 0xdb, 0x55, 0x0b, 0x08, 0x19, 0x8e, 0xa3, 0x54, 0x08, 0xb9, 187 | 0x4d, 0xf1, 0xe4, 0xb9, 0x82, 0x67, 0xef, 0x3b, 0x88, 0x80, 0xd0, 0x11, 188 | 0x96, 0x13, 0xdd, 0xc7, 0x57, 0xcd, 0x7a, 0xb2, 0xec, 0xe9, 0x37, 0x58, 189 | 0x3e, 0x1f, 0xe0, 0x22, 0xc9, 0x02, 0x72, 0xb8, 0x97, 0x94, 0x94, 0x21, 190 | 0x66, 0xfa, 0x6c, 0x49, 0x9d, 0xa7, 0x3d, 0x0d, 0x76, 0x44, 0x80, 0x7f, 191 | 0xd9, 0xf3, 0x20, 0x6b, 0x44, 0xb8, 0xd2, 0x2a, 0xc6, 0x50, 0x7b, 0xcb, 192 | 0x3d, 0x72, 0x54, 0x6a, 0x03, 0xf7, 0xf2, 0xca, 0xca, 0x4a, 0x24, 0xfd, 193 | 0xf6, 0x13, 0xf8, 0x53, 0x58, 0xf3, 0xf1, 0x19, 0xa7, 0x86, 0xe4, 0xb8, 194 | 0x77, 0x90, 0x38, 0xc3, 0xf9, 0x89, 0x1f, 0xe0, 0xe2, 0xa5, 0xcb, 0x72, 195 | 0xf0, 0x69, 0x24, 0xef, 0x50, 0x70, 0xbe, 0x10, 0xf3, 0x12, 0x16, 0x8a, 196 | 0x28, 0x6c, 0x9c, 0xec, 0x9d, 0x8f, 0xbd, 0x02, 0x54, 0x3a, 0xf2, 0x40, 197 | 0x73, 0x9e, 0x87, 0xc2, 0x8d, 0xdc, 0xdb, 0xf4, 0x59, 0x6f, 0x23, 0x6b, 198 | 0xe7, 0x6e, 0xa9, 0xda, 0xdc, 0x26, 0xaf, 0xfd, 0xf9, 0x3a, 0x79, 0x86, 199 | 0x4f, 0x31, 0x64, 0x58, 0x94, 0xe4, 0xf8, 0xb2, 0xa4, 0xd5, 0x28, 0x38, 200 | 0x57, 0x24, 0x39, 0xce, 0xc7, 0xdf, 0xc7, 0x4f, 0x7c, 0x45, 0xbe, 0x60, 201 | 0x89, 0x1c, 0xb7, 0x73, 0x54, 0xd8, 0xfb, 0x61, 0x88, 0xa3, 0x02, 0x8c, 202 | 0x73, 0xf4, 0xa1, 0x12, 0xda, 0x16, 0x21, 0xb8, 0xe0, 0x8d, 0xa2, 0xa2, 203 | 0x98, 0x4d, 0xa6, 0x88, 0x8d, 0x4e, 0x8b, 0xa9, 0x45, 0x0c, 0x14, 0x9b, 204 | 0x1f, 0xf6, 0x05, 0xdc, 0x0a, 0x4f, 0x9d, 0xc9, 0x47, 0xec, 0xec, 0x79, 205 | 0xd2, 0x0d, 0x94, 0x22, 0x6e, 0xc1, 0x8e, 0xa7, 0x16, 0xc0, 0x22, 0xc2, 206 | 0x2e, 0x85, 0x26, 0x20, 0x90, 0x33, 0x7e, 0xea, 0xf3, 0x6c, 0x74, 0x72, 207 | 0x8f, 0x1c, 0xa7, 0x8a, 0x7e, 0x5f, 0x52, 0xa3, 0x8c, 0x44, 0xe0, 0xf0, 208 | 0xe7, 0xb4, 0x70, 0x34, 0xd4, 0x3b, 0x40, 0x8d, 0x5d, 0xe4, 0xdb, 0x89, 209 | 0x90, 0xa0, 0xf0, 0x84, 0xcc, 0x2d, 0x90, 0xfa, 0xfa, 0x5b, 0xf3, 0x12, 210 | 0xb1, 0xe4, 0xa3, 0x24, 0x59, 0x6d, 0xf3, 0x8a, 0x2b, 0xfb, 0x1c, 0xc2, 211 | 0x16, 0x87, 0xc8, 0xdb, 0x08, 0x91, 0xa8, 0xb4, 0x10, 0x7c, 0x06, 0xc0, 212 | 0x76, 0x57, 0xc1, 0x50, 0xb7, 0x62, 0x2b, 0xa1, 0xaf, 0x62, 0xe4, 0x6d, 213 | 0x84, 0xc8, 0x54, 0x5a, 0x08, 0x05, 0x51, 0x44, 0xe8, 0xe1, 0x14, 0xe2, 214 | 0x36, 0x22, 0xf4, 0xf2, 0x31, 0x7f, 0x91, 0x59, 0x6d, 0xc2, 0x56, 0xf0, 215 | 0x97, 0x34, 0x47, 0x38, 0x9d, 0x78, 0x07, 0x42, 0x8c, 0x21, 0xfc, 0x55, 216 | 0x65, 0xf2, 0x49, 0xdd, 0x4e, 0xdc, 0x46, 0x04, 0xfe, 0x72, 0x34, 0x77, 217 | 0x8b, 0xbf, 0xa9, 0x10, 0xee, 0x7e, 0xaa, 0x92, 0x6f, 0x3f, 0x68, 0x32, 218 | 0x3f, 0x22, 0xe4, 0x74, 0x03, 0xf1, 0xcb, 0x04, 0x8d, 0xda, 0x7c, 0x3b, 219 | 0x1d, 0x34, 0x39, 0x7f, 0x42, 0xb9, 0x13, 0x88, 0x37, 0x11, 0x26, 0xab, 220 | 0xcd, 0xaf, 0xcb, 0x83, 0x8b, 0x92, 0x8f, 0xf9, 0x3b, 0xbc, 0x8e, 0x12, 221 | 0xd7, 0x11, 0xe2, 0xd5, 0xe6, 0x63, 0xd7, 0xa0, 0x89, 0x7f, 0x9f, 0x90, 222 | 0xe5, 0x00, 0xf9, 0x3f, 0x11, 0x5c, 0xd4, 0xe6, 0xe1, 0xf0, 0x20, 0x12, 223 | 0xae, 0x4f, 0x29, 0x44, 0x05, 0x21, 0x5a, 0xed, 0x79, 0x2b, 0x3e, 0x88, 224 | 0x54, 0x5f, 0x42, 0xcd, 0x13, 0x88, 0x3f, 0x7a, 0x21, 0x89, 0xdb, 0x0e, 225 | 0x22, 0x39, 0xcb, 0x12, 0xde, 0x56, 0xe2, 0x2d, 0x84, 0x64, 0xb5, 0xe7, 226 | 0xd5, 0xad, 0x83, 0x08, 0xf7, 0x24, 0xf8, 0x5a, 0x30, 0x40, 0xed, 0xf9, 227 | 0xbc, 0x1c, 0xdf, 0xd5, 0xf1, 0x1f, 0x52, 0x49, 0x76, 0x26, 0xc5, 0xf0, 228 | 0xec, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 229 | 0x60, 0x82, 230 | } 231 | 232 | -------------------------------------------------------------------------------- /icon/iconwin.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owmo-dev/example-go-tray-gui/443b73bb08a129fdbd2dc3da22c14ba64491a9d7/icon/iconwin.ico -------------------------------------------------------------------------------- /icon/make_icon.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | IF "%GOPATH%"=="" GOTO NOGO 4 | IF NOT EXIST %GOPATH%\bin\2goarray.exe GOTO INSTALL 5 | :POSTINSTALL 6 | IF "%1"=="" GOTO NOICO 7 | IF NOT EXIST %1 GOTO BADFILE 8 | ECHO Creating iconwin.go 9 | ECHO //+build windows > iconwin.go 10 | ECHO. >> iconwin.go 11 | TYPE %1 | %GOPATH%\bin\2goarray Data icon >> iconwin.go 12 | GOTO DONE 13 | 14 | :CREATEFAIL 15 | ECHO Unable to create output file 16 | GOTO DONE 17 | 18 | :INSTALL 19 | ECHO Installing 2goarray... 20 | go get github.com/cratonica/2goarray 21 | IF ERRORLEVEL 1 GOTO GETFAIL 22 | GOTO POSTINSTALL 23 | 24 | :GETFAIL 25 | ECHO Failure running go get github.com/cratonica/2goarray. Ensure that go and git are in PATH 26 | GOTO DONE 27 | 28 | :NOGO 29 | ECHO GOPATH environment variable not set 30 | GOTO DONE 31 | 32 | :NOICO 33 | ECHO Please specify a .ico file 34 | GOTO DONE 35 | 36 | :BADFILE 37 | ECHO %1 is not a valid file 38 | GOTO DONE 39 | 40 | :DONE 41 | 42 | -------------------------------------------------------------------------------- /icon/make_icon.sh: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | if [ -z "$GOPATH" ]; then 4 | echo GOPATH environment variable not set 5 | exit 6 | fi 7 | 8 | if [ ! -e "$GOPATH/bin/2goarray" ]; then 9 | echo "Installing 2goarray..." 10 | go get github.com/cratonica/2goarray 11 | if [ $? -ne 0 ]; then 12 | echo Failure executing go get github.com/cratonica/2goarray 13 | exit 14 | fi 15 | fi 16 | 17 | if [ -z "$1" ]; then 18 | echo Please specify a PNG file 19 | exit 20 | fi 21 | 22 | if [ ! -f "$1" ]; then 23 | echo $1 is not a valid file 24 | exit 25 | fi 26 | 27 | OUTPUT=iconunix.go 28 | echo Generating $OUTPUT 29 | echo "//+build linux darwin" > $OUTPUT 30 | echo >> $OUTPUT 31 | cat "$1" | $GOPATH/bin/2goarray Data icon >> $OUTPUT 32 | if [ $? -ne 0 ]; then 33 | echo Failure generating $OUTPUT 34 | exit 35 | fi 36 | echo Finished 37 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "github.com/ctrlshiftmake/example-tray-gui/tray" 5 | "github.com/ctrlshiftmake/example-tray-gui/views" 6 | "github.com/getlantern/systray" 7 | ) 8 | 9 | func main() { 10 | views := views.Get() 11 | defer views.WaitGroup.Wait() 12 | systray.Run(tray.OnReady, tray.OnQuit) 13 | } 14 | -------------------------------------------------------------------------------- /tray/tray.go: -------------------------------------------------------------------------------- 1 | package tray 2 | 3 | import ( 4 | "fmt" 5 | 6 | "os" 7 | "os/signal" 8 | "syscall" 9 | 10 | "github.com/ctrlshiftmake/example-tray-gui/icon" 11 | "github.com/ctrlshiftmake/example-tray-gui/views" 12 | "github.com/getlantern/systray" 13 | "github.com/skratchdot/open-golang/open" 14 | ) 15 | 16 | func OnReady() { 17 | systray.SetIcon(icon.Data) 18 | 19 | mHelloWorld := systray.AddMenuItem("Hello, World!", "Opens a simple HTML Hello, World") 20 | systray.AddSeparator() 21 | mGoogleBrowser := systray.AddMenuItem("Google in Browser", "Opens Google in a normal browser") 22 | mGoogleEmbed := systray.AddMenuItem("Google in Window", "Opens Google in a custom window") 23 | systray.AddSeparator() 24 | mQuit := systray.AddMenuItem("Quit", "Quit example tray application") 25 | 26 | sigc := make(chan os.Signal, 1) 27 | signal.Notify(sigc, syscall.SIGTERM, syscall.SIGINT) 28 | 29 | for { 30 | select { 31 | 32 | case <-mHelloWorld.ClickedCh: 33 | err := views.Get().OpenIndex() 34 | if err != nil { 35 | fmt.Println(err) 36 | } 37 | case <-mGoogleBrowser.ClickedCh: 38 | err := open.Run("https://www.google.com") 39 | if err != nil { 40 | fmt.Println(err) 41 | } 42 | case <-mGoogleEmbed.ClickedCh: 43 | err := views.Get().OpenGoogle() 44 | if err != nil { 45 | fmt.Println(err) 46 | } 47 | case <-mQuit.ClickedCh: 48 | systray.Quit() 49 | case <-sigc: 50 | systray.Quit() 51 | } 52 | } 53 | } 54 | 55 | func OnQuit() { 56 | close(views.Get().Shutdown) 57 | } 58 | -------------------------------------------------------------------------------- /views/view-google.go: -------------------------------------------------------------------------------- 1 | package views 2 | 3 | import ( 4 | "log" 5 | "sync" 6 | 7 | "github.com/zserge/lorca" 8 | ) 9 | 10 | func (v *Views) OpenGoogle() error { 11 | view, err := v.getView("Google") 12 | if err != nil { 13 | return err 14 | } 15 | 16 | v.WaitGroup.Add(1) 17 | go func(wg *sync.WaitGroup) { 18 | defer wg.Done() 19 | 20 | ui, err := lorca.New(view.url, "", view.width, view.height) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | defer ui.Close() 25 | 26 | view.isOpen = true 27 | 28 | select { 29 | case <-ui.Done(): 30 | case <-v.Shutdown: 31 | } 32 | 33 | view.isOpen = false 34 | 35 | }(v.WaitGroup) 36 | 37 | return nil 38 | } 39 | -------------------------------------------------------------------------------- /views/view-index.go: -------------------------------------------------------------------------------- 1 | package views 2 | 3 | import ( 4 | "log" 5 | "sync" 6 | 7 | "github.com/ctrlshiftmake/example-tray-gui/config" 8 | "github.com/zserge/lorca" 9 | ) 10 | 11 | type info struct { 12 | sync.Mutex 13 | } 14 | 15 | func (i *info) appVersion() string { 16 | i.Lock() 17 | defer i.Unlock() 18 | return config.ApplicationVersion 19 | } 20 | 21 | func (v *Views) OpenIndex() error { 22 | view, err := v.getView("Hello") 23 | if err != nil { 24 | return err 25 | } 26 | 27 | v.WaitGroup.Add(1) 28 | go func(wg *sync.WaitGroup) { 29 | defer wg.Done() 30 | 31 | ui, err := lorca.New("", "", view.width, view.height) 32 | if err != nil { 33 | log.Fatal(err) 34 | } 35 | defer ui.Close() 36 | 37 | i := info{} 38 | 39 | err = ui.Bind("appVersion", i.appVersion) 40 | if err != nil { 41 | log.Fatal(err) 42 | } 43 | 44 | err = ui.Load(view.url) 45 | if err != nil { 46 | log.Fatal(err) 47 | } 48 | 49 | view.isOpen = true 50 | 51 | select { 52 | case <-ui.Done(): 53 | case <-v.Shutdown: 54 | } 55 | 56 | view.isOpen = false 57 | 58 | }(v.WaitGroup) 59 | 60 | return nil 61 | } 62 | -------------------------------------------------------------------------------- /views/views.go: -------------------------------------------------------------------------------- 1 | package views 2 | 3 | import ( 4 | "embed" 5 | "fmt" 6 | "log" 7 | "net" 8 | "net/http" 9 | "sync" 10 | ) 11 | 12 | const PORT = 8080 13 | const HOST = "localhost" 14 | 15 | var once sync.Once 16 | 17 | //go:embed www 18 | var fs embed.FS 19 | 20 | type Views struct { 21 | list map[string]*View 22 | WaitGroup *sync.WaitGroup 23 | Shutdown chan bool 24 | } 25 | 26 | type View struct { 27 | url string 28 | width int 29 | height int 30 | isOpen bool 31 | } 32 | 33 | var views *Views 34 | 35 | func Get() *Views { 36 | once.Do(func() { 37 | l := make(map[string]*View) 38 | 39 | l["Hello"] = &View{ 40 | url: fmt.Sprintf("http://%s/www/index.html", fmt.Sprintf("%s:%d", HOST, PORT)), 41 | width: 600, 42 | height: 280, 43 | } 44 | 45 | l["Google"] = &View{ 46 | url: "https://www.google.com/", 47 | width: 960, 48 | height: 800, 49 | } 50 | 51 | views = &Views{ 52 | list: l, 53 | WaitGroup: &sync.WaitGroup{}, 54 | Shutdown: make(chan bool), 55 | } 56 | 57 | views.WaitGroup.Add(1) 58 | go func(*Views) { 59 | defer views.WaitGroup.Done() 60 | ln, err := net.Listen("tcp", fmt.Sprintf("%s:%d", HOST, PORT)) 61 | if err != nil { 62 | log.Fatal(err) 63 | } 64 | defer ln.Close() 65 | 66 | go func() { 67 | _ = http.Serve(ln, http.FileServer(http.FS(fs))) 68 | }() 69 | <-views.Shutdown 70 | }(views) 71 | }) 72 | return views 73 | } 74 | 75 | func (v *Views) getView(name string) (*View, error) { 76 | view, ok := v.list[name] 77 | if !ok { 78 | return nil, fmt.Errorf("View '%s' not found", name) 79 | } 80 | if view.isOpen { 81 | return nil, fmt.Errorf("View is already open") 82 | } 83 | return view, nil 84 | } 85 | -------------------------------------------------------------------------------- /views/www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Hello, World! 5 | 6 | 7 |

Hello, World!

8 |
The application version is:
9 | 17 | 18 | 19 | --------------------------------------------------------------------------------